Skip to content
This repository was archived by the owner on Sep 10, 2025. It is now read-only.

Commit f7ba7d5

Browse files
committed
test(price-table): add tests for price estimates table
1 parent 77f0473 commit f7ba7d5

File tree

3 files changed

+169
-7
lines changed

3 files changed

+169
-7
lines changed

β€Žsrc/services/converters.jsβ€Ž

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,6 @@ const DISTANCE_UNIT_ABBREVIATIONS = Object.freeze({
1212
[DistanceUnit.KILOMETER]: 'km',
1313
});
1414

15-
const DISTANCE_UNIT_MULTIPLIER = Object.freeze({
16-
[DistanceUnit.KILOMETER]: 0.0001,
17-
[DistanceUnit.MILE]: 1,
18-
});
19-
2015
const convertDuration = ({ duration, toUnit }) => ({
2116
length: convert(duration.length)
2217
.from(DURATION_UNIT_ABBREVIATIONS[duration.unit])
@@ -27,7 +22,7 @@ const convertDuration = ({ duration, toUnit }) => ({
2722
const convertDistance = ({ distance, toUnit }) => ({
2823
value: (convert(distance.value)
2924
.from(DISTANCE_UNIT_ABBREVIATIONS[distance.unit])
30-
.to(DISTANCE_UNIT_ABBREVIATIONS[toUnit])) * DISTANCE_UNIT_MULTIPLIER[toUnit],
25+
.to(DISTANCE_UNIT_ABBREVIATIONS[toUnit])),
3126
unit: toUnit,
3227
});
3328

β€Žsrc/services/converters.test.jsβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ describe('converters', () => {
3939
expect(convert).toHaveBeenCalledWith(1);
4040
expect(from).toHaveBeenCalledWith('mi');
4141
expect(to).toHaveBeenCalledWith('km');
42-
expect(value).toEqual(0.12340000000000001);
42+
expect(value).toEqual(1234);
4343
expect(unit).toEqual(DistanceUnit.KILOMETER);
4444
});
4545
});
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
import build from './build';
2+
3+
import TimeUnit from '../../../data/TimeUnit';
4+
import DistanceUnit from '../../../data/DistanceUnit';
5+
6+
jest.unmock('convert-units');
7+
8+
let expected;
9+
let table;
10+
let estimates;
11+
12+
const validateTable = (presentationUnits) => {
13+
console.log('expected table');
14+
console.log(expected);
15+
16+
table = build({ estimates, presentationUnits });
17+
18+
console.log('built table');
19+
console.log(table);
20+
21+
expect(table).toEqual(expected);
22+
};
23+
24+
describe('#build', () => {
25+
// tests use emojis and assumes process.platform = darwin
26+
// apologies in advance if this causes problems
27+
28+
const distance = {
29+
value: 12.34,
30+
unit: DistanceUnit.MILE,
31+
};
32+
const duration = {
33+
length: 5678,
34+
unit: TimeUnit.SECOND,
35+
};
36+
const currencyCode = 'USD';
37+
const start = { name: 'jae' };
38+
const end = { name: 'baebae' };
39+
const firstProduct = {
40+
productName: 'first product',
41+
range: {
42+
low: 10,
43+
high: 20,
44+
currencyCode,
45+
},
46+
distance,
47+
duration,
48+
};
49+
const secondProduct = {
50+
productName: 'second product',
51+
range: {
52+
low: 8,
53+
high: 16,
54+
currencyCode,
55+
},
56+
distance,
57+
duration,
58+
};
59+
const thirdProduct = {
60+
productName: 'third product',
61+
range: {
62+
low: 6,
63+
high: 12,
64+
currencyCode,
65+
},
66+
distance,
67+
duration,
68+
};
69+
const taxiProduct = {
70+
productName: 'TAXI',
71+
range: {
72+
low: 4,
73+
high: 8,
74+
currencyCode,
75+
},
76+
distance,
77+
duration,
78+
};
79+
80+
const defaultEstimates = {
81+
estimates: [
82+
firstProduct,
83+
secondProduct,
84+
thirdProduct,
85+
],
86+
start,
87+
end,
88+
};
89+
90+
it('should build sorted table', () => {
91+
estimates = defaultEstimates;
92+
expected = '\u001b[90mβ”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┬─────────\u001b[39m\u001b[90m┬───────────\u001b[39m\u001b[90m┬────────────────────────\u001b[39m\u001b[90m┬──────────┐\u001b[39m\n\u001b[90mβ”‚\u001b[39m 🚘 \u001b[90mβ”‚\u001b[39m πŸ’Έ \u001b[90mβ”‚\u001b[39m πŸ”ƒ \u001b[90mβ”‚\u001b[39m ⏳ \u001b[90mβ”‚\u001b[39m 😬 Surge😬 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m third product \u001b[90mβ”‚\u001b[39m $6-$12 \u001b[90mβ”‚\u001b[39m 12.34 mi. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 🚫 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m second product \u001b[90mβ”‚\u001b[39m $8-$16 \u001b[90mβ”‚\u001b[39m 12.34 mi. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 🚫 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m first product \u001b[90mβ”‚\u001b[39m $10-$20 \u001b[90mβ”‚\u001b[39m 12.34 mi. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 🚫 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────┴───────────┴────────────────────────┴───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m πŸ“ \u001b[90mβ”‚\u001b[39m jae \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼──────────────────────────────────────────────────────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m πŸ”š \u001b[90mβ”‚\u001b[39m baebae \u001b[90mβ”‚\u001b[39m\n\u001b[90m└────────────────\u001b[39m\u001b[90mβ”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\u001b[39m';
93+
validateTable(DistanceUnit.MILE);
94+
});
95+
96+
it('should build table without TAXI product', () => {
97+
estimates = {
98+
estimates: [
99+
firstProduct,
100+
secondProduct,
101+
thirdProduct,
102+
taxiProduct,
103+
],
104+
start,
105+
end,
106+
};
107+
108+
expected = '\u001b[90mβ”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┬─────────\u001b[39m\u001b[90m┬───────────\u001b[39m\u001b[90m┬────────────────────────\u001b[39m\u001b[90m┬──────────┐\u001b[39m\n\u001b[90mβ”‚\u001b[39m 🚘 \u001b[90mβ”‚\u001b[39m πŸ’Έ \u001b[90mβ”‚\u001b[39m πŸ”ƒ \u001b[90mβ”‚\u001b[39m ⏳ \u001b[90mβ”‚\u001b[39m 😬 Surge😬 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m third product \u001b[90mβ”‚\u001b[39m $6-$12 \u001b[90mβ”‚\u001b[39m 12.34 mi. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 🚫 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m second product \u001b[90mβ”‚\u001b[39m $8-$16 \u001b[90mβ”‚\u001b[39m 12.34 mi. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 🚫 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m first product \u001b[90mβ”‚\u001b[39m $10-$20 \u001b[90mβ”‚\u001b[39m 12.34 mi. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 🚫 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────┴───────────┴────────────────────────┴───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m πŸ“ \u001b[90mβ”‚\u001b[39m jae \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼──────────────────────────────────────────────────────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m πŸ”š \u001b[90mβ”‚\u001b[39m baebae \u001b[90mβ”‚\u001b[39m\n\u001b[90m└────────────────\u001b[39m\u001b[90mβ”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\u001b[39m';
109+
validateTable(DistanceUnit.MILE);
110+
});
111+
112+
it('should build table converting to kilometers', () => {
113+
estimates = defaultEstimates;
114+
expected = '\u001b[90mβ”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┬─────────\u001b[39m\u001b[90m┬───────────\u001b[39m\u001b[90m┬────────────────────────\u001b[39m\u001b[90m┬──────────┐\u001b[39m\n\u001b[90mβ”‚\u001b[39m 🚘 \u001b[90mβ”‚\u001b[39m πŸ’Έ \u001b[90mβ”‚\u001b[39m πŸ”ƒ \u001b[90mβ”‚\u001b[39m ⏳ \u001b[90mβ”‚\u001b[39m 😬 Surge😬 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m third product \u001b[90mβ”‚\u001b[39m $6-$12 \u001b[90mβ”‚\u001b[39m 19.86 km. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 🚫 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m second product \u001b[90mβ”‚\u001b[39m $8-$16 \u001b[90mβ”‚\u001b[39m 19.86 km. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 🚫 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m first product \u001b[90mβ”‚\u001b[39m $10-$20 \u001b[90mβ”‚\u001b[39m 19.86 km. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 🚫 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────┴───────────┴────────────────────────┴───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m πŸ“ \u001b[90mβ”‚\u001b[39m jae \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼──────────────────────────────────────────────────────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m πŸ”š \u001b[90mβ”‚\u001b[39m baebae \u001b[90mβ”‚\u001b[39m\n\u001b[90m└────────────────\u001b[39m\u001b[90mβ”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\u001b[39m';
115+
validateTable(DistanceUnit.KILOMETER);
116+
});
117+
118+
it('should build table with surge multiplier', () => {
119+
// probably a better way to do this but quick and dirty for now
120+
121+
const firstProductWithSurge = {
122+
productName: 'first product with surge',
123+
range: {
124+
low: 10,
125+
high: 20,
126+
currencyCode,
127+
},
128+
distance,
129+
duration,
130+
surgeMultiplier: 1.23,
131+
};
132+
const secondProductWithSurge = {
133+
productName: 'second product with surge',
134+
range: {
135+
low: 8,
136+
high: 16,
137+
currencyCode,
138+
},
139+
distance,
140+
duration,
141+
surgeMultiplier: 2.34,
142+
};
143+
const thirdProductWithSurge = {
144+
productName: 'third product with surge',
145+
range: {
146+
low: 6,
147+
high: 12,
148+
currencyCode,
149+
},
150+
distance,
151+
duration,
152+
surgeMultiplier: 3.45,
153+
};
154+
estimates = {
155+
estimates: [
156+
firstProductWithSurge,
157+
secondProductWithSurge,
158+
thirdProductWithSurge,
159+
],
160+
start,
161+
end,
162+
};
163+
164+
expected = '\u001b[90mβ”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┬─────────\u001b[39m\u001b[90m┬───────────\u001b[39m\u001b[90m┬────────────────────────\u001b[39m\u001b[90m┬──────────┐\u001b[39m\n\u001b[90mβ”‚\u001b[39m 🚘 \u001b[90mβ”‚\u001b[39m πŸ’Έ \u001b[90mβ”‚\u001b[39m πŸ”ƒ \u001b[90mβ”‚\u001b[39m ⏳ \u001b[90mβ”‚\u001b[39m 😬 Surge😬 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m third product with surge \u001b[90mβ”‚\u001b[39m $6-$12 \u001b[90mβ”‚\u001b[39m 19.86 km. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 3.45x 😬 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m second product with surge \u001b[90mβ”‚\u001b[39m $8-$16 \u001b[90mβ”‚\u001b[39m 19.86 km. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 2.34x 😬 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────\u001b[39m\u001b[90m┼───────────\u001b[39m\u001b[90m┼────────────────────────\u001b[39m\u001b[90m┼───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m first product with surge \u001b[90mβ”‚\u001b[39m $10-$20 \u001b[90mβ”‚\u001b[39m 19.86 km. \u001b[90mβ”‚\u001b[39m 1 hrs. 34 min. 38 sec. \u001b[90mβ”‚\u001b[39m 1.23x 😬 \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼─────────┴───────────┴────────────────────────┴───────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m πŸ“ \u001b[90mβ”‚\u001b[39m jae \u001b[90mβ”‚\u001b[39m\n\u001b[90mβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\u001b[39m\u001b[90m┼──────────────────────────────────────────────────────────\u001b[39m\n\u001b[90mβ”‚\u001b[39m πŸ”š \u001b[90mβ”‚\u001b[39m baebae \u001b[90mβ”‚\u001b[39m\n\u001b[90m└───────────────────────────\u001b[39m\u001b[90mβ”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\u001b[39m';
165+
validateTable(DistanceUnit.KILOMETER);
166+
});
167+
});

0 commit comments

Comments
Β (0)