Add orderedStops property to the Route type

This commit is contained in:
2025-09-23 10:15:42 -07:00
parent 529f4e5869
commit e7b5f034f3
3 changed files with 71 additions and 1 deletions

View File

@@ -52,6 +52,7 @@ type Route {
id: ID!
systemId: ID!
orderedStop(forStopId: ID): OrderedStop
orderedStops: [OrderedStop]
shuttles: [Shuttle!]
polylineCoordinates: [Coordinates!]!
color: String!

View File

@@ -43,8 +43,21 @@ export const RouteResolvers: Resolvers<ServerContext> = {
routeId: parent.id,
route: parent,
systemId: system.id,
updatedTimeMs: orderedStop.updatedTime,
updatedTime: orderedStop.updatedTime,
}
},
orderedStops: async (parent, args, contextValue, _info) => {
const system = contextValue.findSystemById(parent.systemId);
if (!system) return null;
const orderedStops = await system.shuttleRepository.getOrderedStopsByRouteId(parent.id);
return orderedStops.map(({ routeId, stopId, position, systemId, updatedTime }) => ({
routeId,
stopId,
position,
systemId,
updatedTime,
}));
}
},
}

View File

@@ -144,4 +144,60 @@ describe("RouteResolvers", () => {
expect(orderedStop).toBeNull();
});
});
describe("orderedStops", () => {
async function getResponseForOrderedStopsQuery() {
const query = `
query GetRouteOrderedStop($systemId: ID!, $routeId: ID!) {
system(id: $systemId) {
route(id: $routeId) {
orderedStops {
stopId
}
}
}
}
`;
return await holder.testServer.executeOperation({
query,
variables: {
systemId: mockSystem.id,
routeId: mockRoute.id,
},
}, {
contextValue: context,
});
}
it("returns ordered stops using provided data", async () => {
let orderedStops = generateMockOrderedStops();
orderedStops = orderedStops.filter((stop) => stop.routeId === orderedStops[0].routeId);
await Promise.all(orderedStops.map(async (stop) => {
await context.systems[0].shuttleRepository.addOrUpdateOrderedStop(stop);
}))
const response = await getResponseForOrderedStopsQuery();
assert(response.body.kind === "single");
expect(response.body.singleResult.errors).toBeUndefined();
const retrievedOrderedStops = (response.body.singleResult.data as any).system.route.orderedStops;
expect(retrievedOrderedStops).toHaveLength(orderedStops.length);
retrievedOrderedStops.map((retrievedStop: any) => {
expect(orderedStops.find((originalStop) => originalStop.stopId === retrievedStop.stopId)).not.toBeUndefined();
});
});
it("returns empty array if there are no ordered stops", async () => {
const response = await getResponseForOrderedStopsQuery();
assert(response.body.kind === "single");
expect(response.body.singleResult.errors).toBeUndefined();
const retrievedOrderedStops = (response.body.singleResult.data as any).system.route.orderedStops;
expect(retrievedOrderedStops).toHaveLength(0);
});
});
});