Skip to content

Commit a8500c5

Browse files
committed
import: handle importing old files with numberOfStops
1 parent 84527fb commit a8500c5

File tree

7 files changed

+927
-23
lines changed

7 files changed

+927
-23
lines changed

src/app/sample-netzgrafik/netzgrafik.default.spec.ts

Lines changed: 106 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import netzgrafikDefaultJson from "./netzgrafik_default.json";
22
import {NetzgrafikDefault} from "./netzgrafik.default";
3+
import {NetzgrafikTestData} from "./test-data/netzgrafik";
34
import {DataService} from "../services/data/data.service";
45
import {LogPublishersService} from "../logger/log.publishers.service";
56
import {LogService} from "../logger/log.service";
@@ -63,21 +64,116 @@ describe("NetzgrafikDefault", () => {
6364
);
6465
});
6566

66-
it("should load and serialize default netzgrafikDto (no trainruns) without changes", () => {
67-
const inputDto = NetzgrafikDefault.getDefaultNetzgrafik();
67+
// TODO: broken until the numberOfStops migration is completely done
68+
// need to be replaced with tests importing a graph without any numberOfStops
69+
describe("normal case", () => {
70+
// needs to be updated to new format (no longer numberOfStops but the complete graph nodes + links)
71+
it("should load and serialize default netzgrafikDto (no trainruns) without changes", () => {
72+
const inputDto = NetzgrafikDefault.getDefaultNetzgrafik();
6873

69-
dataService.loadNetzgrafikDto(inputDto);
74+
dataService.loadNetzgrafikDto(inputDto);
7075

71-
const outputJson = dataService.getNetzgrafikDto();
72-
expect(JSON.stringify(inputDto, null, 2)).toEqual(JSON.stringify(outputJson, null, 2));
76+
const outputJson = dataService.getNetzgrafikDto();
77+
expect(JSON.stringify(inputDto, null, 2)).toEqual(JSON.stringify(outputJson, null, 2));
78+
});
79+
80+
it("should load and serialize demo netzgrafikDto (complete variant) without changes", () => {
81+
const inputDto = NetzgrafikDefault.getNetzgrafikDemoStandaloneGithub();
82+
83+
dataService.loadNetzgrafikDto(inputDto);
84+
85+
const outputJson = dataService.getNetzgrafikDto();
86+
expect(JSON.stringify(inputDto, null, 2)).toEqual(JSON.stringify(outputJson, null, 2));
87+
});
7388
});
7489

75-
it("should load and serialize demo netzgrafikDto (complete variant) without changes", () => {
76-
const inputDto = NetzgrafikDefault.getNetzgrafikDemoStandaloneGithub();
90+
describe("handling old files with numberOfStops", () => {
91+
describe("2 nodes", () => {
92+
// A -> B has 1 stop
93+
it("should replace the numberOfStops: 1 with an equivalent graph portion", () => {
94+
const inputDto = NetzgrafikTestData.getLegacyNtezgrafik2Nodes();
95+
96+
dataService.loadNetzgrafikDto(inputDto);
97+
98+
const outputJson = dataService.getNetzgrafikDto();
99+
100+
// we expect to have a new node between A and B
101+
// the existing trainrunSection A -> B to now be A -> NEW
102+
// and a new trainrunSection NEW -> B
103+
const newNode = outputJson.nodes[2];
104+
expect(newNode.betriebspunktName).toBe("NEW");
105+
expect(newNode.positionX).toBe(1488);
106+
expect(newNode.positionY).toBe(512);
107+
expect(outputJson.trainrunSections[0].sourceNodeId).toBe(11);
108+
expect(outputJson.trainrunSections[0].targetNodeId).toBe(newNode.id);
109+
expect(outputJson.trainrunSections[1].sourceNodeId).toBe(newNode.id);
110+
expect(outputJson.trainrunSections[1].targetNodeId).toBe(12);
111+
expect(outputJson.trainrunSections[0].numberOfStops).toBe(0);
112+
expect(outputJson.trainrunSections[1].numberOfStops).toBe(0);
113+
});
114+
it("should replace the numberOfStops: 3 with an equivalent graph portion", () => {
115+
const inputDto = NetzgrafikTestData.getLegacyNtezgrafik2Nodes();
116+
inputDto.trainrunSections[0].numberOfStops = 3;
117+
118+
dataService.loadNetzgrafikDto(inputDto);
119+
// before
120+
// A ------ B
121+
// after
122+
// A ------ C ------ D ------ E ------ B
123+
const outputJson = dataService.getNetzgrafikDto();
124+
const newNode1 = outputJson.nodes[2];
125+
expect(newNode1.betriebspunktName).toBe("NEW");
126+
expect(newNode1.positionX).toBe(1488);
127+
expect(newNode1.positionY).toBe(512);
128+
const newNode2 = outputJson.nodes[3];
129+
expect(newNode2.betriebspunktName).toBe("NEW");
130+
expect(newNode2.positionX).toBe(1576);
131+
expect(newNode2.positionY).toBe(512);
132+
const newNode3 = outputJson.nodes[4];
133+
expect(newNode3.betriebspunktName).toBe("NEW");
134+
expect(newNode3.positionX).toBe(1620);
135+
expect(newNode3.positionY).toBe(512);
136+
expect(outputJson.trainrunSections[0].sourceNodeId).toBe(11);
137+
expect(outputJson.trainrunSections[0].targetNodeId).toBe(newNode1.id);
138+
expect(outputJson.trainrunSections[1].sourceNodeId).toBe(newNode1.id);
139+
expect(outputJson.trainrunSections[1].targetNodeId).toBe(newNode2.id);
140+
expect(outputJson.trainrunSections[2].sourceNodeId).toBe(newNode2.id);
141+
expect(outputJson.trainrunSections[2].targetNodeId).toBe(newNode3.id);
142+
expect(outputJson.trainrunSections[3].sourceNodeId).toBe(newNode3.id);
143+
expect(outputJson.trainrunSections[3].targetNodeId).toBe(12);
144+
expect(outputJson.trainrunSections[0].numberOfStops).toBe(0);
145+
expect(outputJson.trainrunSections[1].numberOfStops).toBe(0);
146+
expect(outputJson.trainrunSections[2].numberOfStops).toBe(0);
147+
expect(outputJson.trainrunSections[3].numberOfStops).toBe(0);
148+
});
149+
});
150+
describe("3 nodes", () => {
151+
// A -> B -> C
152+
// each trainrunSection with 1 stop
153+
it("should replace the numberOfStops: 1 with an equivalent graph portion for each section", () => {
154+
const inputDto = NetzgrafikTestData.getLegacyNtezgrafik3Nodes();
155+
156+
dataService.loadNetzgrafikDto(inputDto);
77157

78-
dataService.loadNetzgrafikDto(inputDto);
158+
const outputJson = dataService.getNetzgrafikDto();
79159

80-
const outputJson = dataService.getNetzgrafikDto();
81-
expect(JSON.stringify(inputDto, null, 2)).toEqual(JSON.stringify(outputJson, null, 2));
160+
const newNode1 = outputJson.nodes[3];
161+
expect(newNode1.betriebspunktName).toBe("NEW");
162+
expect(newNode1.positionX).toBe(1488);
163+
expect(newNode1.positionY).toBe(512);
164+
const newNode2 = outputJson.nodes[4];
165+
expect(newNode2.betriebspunktName).toBe("NEW");
166+
expect(newNode2.positionX).toBe(1808);
167+
expect(newNode2.positionY).toBe(544);
168+
expect(outputJson.trainrunSections[0].sourceNodeId).toBe(11);
169+
expect(outputJson.trainrunSections[0].targetNodeId).toBe(newNode1.id);
170+
expect(outputJson.trainrunSections[2].sourceNodeId).toBe(newNode1.id);
171+
expect(outputJson.trainrunSections[2].targetNodeId).toBe(12);
172+
expect(outputJson.trainrunSections[1].sourceNodeId).toBe(12);
173+
expect(outputJson.trainrunSections[1].targetNodeId).toBe(newNode2.id);
174+
expect(outputJson.trainrunSections[3].sourceNodeId).toBe(newNode2.id);
175+
expect(outputJson.trainrunSections[3].targetNodeId).toBe(13);
176+
});
177+
});
82178
});
83179
});

0 commit comments

Comments
 (0)