Skip to content

Commit a80039e

Browse files
committed
add models tests
1 parent 627fc8e commit a80039e

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

test/models.test.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { models } from '../data/models.js';
2+
import { expect, test } from 'vitest';
3+
4+
test('only known types are present in models', () => {
5+
const known_types = new Set(['bus', 'tram', 'trolleybus']);
6+
for (const type in models) {
7+
expect(known_types.has(type)).toBe(true);
8+
}
9+
});
10+
11+
test('models have correct structure', () => {
12+
for (const type in models) {
13+
for (const model of models[type]) {
14+
expect(model).toHaveProperty('id');
15+
expect(typeof model.id).toBe('string');
16+
17+
expect(model).toHaveProperty('name');
18+
expect(typeof model.name).toBe('string');
19+
20+
if(type === 'tram') {
21+
expect(model).toHaveProperty('gauge');
22+
expect(typeof model.gauge).toBe('number');
23+
}
24+
else {
25+
expect(model).not.toHaveProperty('gauge');
26+
}
27+
28+
expect(model).toHaveProperty('inv_number_ranges');
29+
expect(Array.isArray(model.inv_number_ranges)).toBe(true);
30+
for (const range of model.inv_number_ranges) {
31+
if (Array.isArray(range)) {
32+
expect(range.length).toBe(2);
33+
expect(typeof range[0]).toBe('number');
34+
expect(typeof range[1]).toBe('number');
35+
expect(range[0]).toBeLessThanOrEqual(range[1]);
36+
}
37+
else {
38+
expect(typeof range).toBe('number');
39+
}
40+
}
41+
}
42+
}
43+
});
44+
45+
test('only allowed extras are present in models', () => {
46+
const allowed_extras = new Set(['ac', 'low_floor', 'double_decker']);
47+
for (const type in models) {
48+
for (const model of models[type]) {
49+
if (!model.extras) continue;
50+
for (const extra of model.extras) {
51+
expect(allowed_extras.has(extra)).toBe(true);
52+
}
53+
}
54+
}
55+
});

0 commit comments

Comments
 (0)