Files
TREK/server/tests/helpers/accommodations-service.ts
T
Maurice 724c88c201 style: format server and shared with prettier
A mechanical prettier --write over server/src, server/tests, server/scripts
and shared/src with the workspaces' .prettierrc; nothing but layout and
import order changes, and every file keeps the same set of imports. shared
is formatted throughout and its format baseline is empty. The server
baseline keeps the 35 files that Prettier would grow past their lint:size
limit (they need a split first, which is not a formatting change), and the
generated entity files stay as their generator writes them.
2026-10-10 21:23:37 +02:00

125 lines
5.1 KiB
TypeScript

import { TrekPhotos } from '../../src/db/entities/TrekPhotos.entity';
import { TripPhotos } from '../../src/db/entities/TripPhotos.entity';
import { AccommodationsService } from '../../src/nest/accommodations/accommodations.service';
import { AssignmentsService } from '../../src/nest/assignments/assignments.service';
import { JourneyDomainService } from '../../src/nest/journey/journey-domain.service';
import { PermissionsService } from '../../src/nest/permissions/permissions.service';
import { TrekPhotoRegistrationService } from '../../src/nest/photos/trek-photo-registration.service';
import { QueryHelpersService } from '../../src/nest/query-helpers/query-helpers.service';
import { RealtimeService } from '../../src/nest/realtime/realtime.service';
import { TripAccessService } from '../../src/nest/trip-membership/trip-access.service';
import { createTestBudgetItemsRepo } from './files-repos';
import {
createTestJourneysRepo,
createTestJourneyContributorsRepo,
createTestJourneyTripsRepo,
createTestJourneyEntriesRepo,
createTestJourneyPhotosRepo,
createTestJourneyEntryPhotosRepo,
} from './journey-repos';
import {
createTestUnitOfWork,
createTestAppSettingsRepo,
createTestTagsRepo,
createTestPlaceRatingsRepo,
createTestAssignmentParticipantsRepo,
createTestDayAssignmentsRepo,
createTestDaysRepo,
createTestPlacesRepo,
createTestTripMembersRepo,
createTestRoadtripViasRepo,
createTestDayAccommodationsRepo,
createTestReservationsRepo,
sharedTestOrm,
createTestTripsRepo,
} from './test-uow';
import { createTestToursRepo } from './tours-repos';
import type { Database } from 'better-sqlite3';
/**
* AccommodationsService over a test connection.
*
* Booking a night also writes the day stop that puts it on the route, through a
* real AssignmentsService rather than a stub: the stop is a row these cases read
* back, and it has to come out of the same connection. Five collaborators deep is
* why this is a helper and not five copies across the suites.
*
* Plan 4 Task 4: `DatabaseService` is gone — both this function and
* `accommodationsOver` below take the raw better-sqlite3 handle directly now
* (it was always the only thing either read off a `DatabaseService`
* instance). Kept as two functions for caller-shape continuity, though they
* are now identical.
*/
export async function makeAccommodationsService(
conn: Database,
realtime: RealtimeService = new RealtimeService(),
): Promise<AccommodationsService> {
return accommodationsOver(conn, realtime);
}
/**
* The same, for a suite that already holds the raw connection.
*
* ReservationsService takes one now, because a hotel booking owes the day plan
* the same stop a night entered under Days does, and every suite that builds
* that service by hand needs one to hand it.
*/
export async function accommodationsOver(
conn: Database,
realtime: RealtimeService = new RealtimeService(),
): Promise<AccommodationsService> {
const permissions = new PermissionsService(await createTestAppSettingsRepo(conn), await createTestUnitOfWork(conn));
const t = await sharedTestOrm(conn);
const assignments = new AssignmentsService(
new TripAccessService(await createTestTripsRepo(conn)),
permissions,
realtime,
new QueryHelpersService(
await createTestTagsRepo(conn),
await createTestPlaceRatingsRepo(conn),
await createTestAssignmentParticipantsRepo(conn),
),
new JourneyDomainService(
realtime,
new TrekPhotoRegistrationService(t.repo(TrekPhotos), t.repo(TripPhotos), await createTestJourneyPhotosRepo(conn)),
await createTestUnitOfWork(conn),
await createTestJourneysRepo(conn),
await createTestJourneyContributorsRepo(conn),
await createTestJourneyTripsRepo(conn),
await createTestJourneyEntriesRepo(conn),
await createTestTripsRepo(conn),
// Plan 3g Task 2 constructor-ripple: JourneyPhotosRepository/JourneyEntryPhotosRepository/PlacesRepository.
await createTestJourneyPhotosRepo(conn),
await createTestJourneyEntryPhotosRepo(conn),
await createTestPlacesRepo(conn),
),
await createTestUnitOfWork(conn),
await createTestDayAssignmentsRepo(conn),
await createTestAssignmentParticipantsRepo(conn),
await createTestDaysRepo(conn),
await createTestPlacesRepo(conn),
await createTestTripMembersRepo(conn),
await createTestRoadtripViasRepo(conn),
await createTestToursRepo(conn),
);
return new AccommodationsService(
permissions,
realtime,
assignments,
await createTestUnitOfWork(conn),
// Plan 4 Task 2 — AccommodationsService's own canAccessTrip delegate is now
// TripsRepository.findAccessible. Plan 4 Task 3 — stampLodging's
// getPlaceWithTags is PlacesRepository.findWithTagsAndRatings directly
// (`placesRepo` below, already injected).
new TripAccessService(await createTestTripsRepo(conn)),
await createTestDayAccommodationsRepo(conn),
await createTestDayAssignmentsRepo(conn),
await createTestPlacesRepo(conn),
await createTestDaysRepo(conn),
await createTestRoadtripViasRepo(conn),
await createTestReservationsRepo(conn),
await createTestBudgetItemsRepo(conn),
);
}