|
1 | | -import { calculateNiceTicks, formatDistanceLabel, formatElevationLabel } from '@/pathDetails/elevationWidget/axisUtils' |
| 1 | +import { calculateNiceTicks, formatDistanceLabel, formatElevationLabel, computeDetailYRange, formatDetailTick } from '@/pathDetails/elevationWidget/axisUtils' |
2 | 2 |
|
3 | 3 | describe('axisUtils', () => { |
4 | 4 | describe('calculateNiceTicks', () => { |
@@ -107,4 +107,26 @@ describe('axisUtils', () => { |
107 | 107 | expect(formatElevationLabel(100.7, false)).toBe('101 m') |
108 | 108 | }) |
109 | 109 | }) |
| 110 | + |
| 111 | + describe('computeDetailYRange', () => { |
| 112 | + it('adds 10% padding and clamps non-negative min to 0', () => { |
| 113 | + // curvature-like: 0.5–1.0, range=0.5, pad=0.05 |
| 114 | + expect(computeDetailYRange(0.5, 1.0)).toEqual({ min: expect.closeTo(0.45), max: expect.closeTo(1.05) }) |
| 115 | + // speed-like: non-negative min clamped to 0 |
| 116 | + expect(computeDetailYRange(10, 120).min).toBe(0) |
| 117 | + // negative data: no clamping |
| 118 | + expect(computeDetailYRange(-10, 10).min).toBeCloseTo(-12) |
| 119 | + // equal min/max: uses fallback range |
| 120 | + expect(computeDetailYRange(5, 5).min).toBeLessThan(5) |
| 121 | + }) |
| 122 | + }) |
| 123 | + |
| 124 | + describe('formatDetailTick', () => { |
| 125 | + it('uses enough decimals to keep ticks distinct', () => { |
| 126 | + expect(formatDetailTick(10, [0, 10, 20])).toBe('10') |
| 127 | + expect(formatDetailTick(0.6, [0.4, 0.6, 0.8, 1.0])).toBe('0.6') |
| 128 | + expect(formatDetailTick(1.0, [0.4, 0.6, 0.8, 1.0])).toBe('1.0') |
| 129 | + expect(formatDetailTick(0.01, [0.01, 0.02, 0.03])).toBe('0.01') |
| 130 | + }) |
| 131 | + }) |
110 | 132 | }) |
0 commit comments