fix(tests): use dynamic imports in portal.test.ts to avoid env validation

This commit is contained in:
Matt Ciaccio
2026-04-24 14:48:40 +02:00
parent a14dc8143c
commit 3b0421aa81
2 changed files with 85 additions and 24 deletions

View File

@@ -1,24 +1,41 @@
import { describe, it, expect } from 'vitest';
import {
getPortalUserYachts,
getPortalUserMemberships,
getPortalUserReservations,
} from '@/lib/services/portal.service';
import {
makeClient,
makeCompany,
makeMembership,
makePort,
makeYacht,
makeBerth,
makeReservation,
} from '../../helpers/factories';
import { db } from '@/lib/db';
import { yachts } from '@/lib/db/schema';
import { eq } from 'drizzle-orm';
import { describe, it, expect, beforeAll } from 'vitest';
describe('portal.service — getPortalUserYachts', () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let getPortalUserYachts: (clientId: string, portId: string) => Promise<Array<any>>;
let makeClient: typeof import('../../helpers/factories').makeClient;
let makePort: typeof import('../../helpers/factories').makePort;
let makeYacht: typeof import('../../helpers/factories').makeYacht;
let makeCompany: typeof import('../../helpers/factories').makeCompany;
let makeMembership: typeof import('../../helpers/factories').makeMembership;
let db: typeof import('@/lib/db').db;
let yachts: typeof import('@/lib/db/schema').yachts;
let eq: typeof import('drizzle-orm').eq;
beforeAll(async () => {
const portalMod = await import('@/lib/services/portal.service');
getPortalUserYachts = portalMod.getPortalUserYachts;
const factoriesMod = await import('../../helpers/factories');
makeClient = factoriesMod.makeClient;
makePort = factoriesMod.makePort;
makeYacht = factoriesMod.makeYacht;
makeCompany = factoriesMod.makeCompany;
makeMembership = factoriesMod.makeMembership;
const dbMod = await import('@/lib/db');
db = dbMod.db;
const schemaMod = await import('@/lib/db/schema');
yachts = schemaMod.yachts;
const ormMod = await import('drizzle-orm');
eq = ormMod.eq;
});
it('returns client-owned yachts only when client has no memberships', async () => {
const port = await makePort();
const client = await makeClient({ portId: port.id });
@@ -156,6 +173,27 @@ describe('portal.service — getPortalUserYachts', () => {
});
describe('portal.service — getPortalUserMemberships', () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let getPortalUserMemberships: (clientId: string, portId: string) => Promise<Array<any>>;
let makeClient: typeof import('../../helpers/factories').makeClient;
let makePort: typeof import('../../helpers/factories').makePort;
let makeCompany: typeof import('../../helpers/factories').makeCompany;
let makeMembership: typeof import('../../helpers/factories').makeMembership;
beforeAll(async () => {
const portalMod = await import('@/lib/services/portal.service');
getPortalUserMemberships = portalMod.getPortalUserMemberships;
const factoriesMod = await import('../../helpers/factories');
makeClient = factoriesMod.makeClient;
makePort = factoriesMod.makePort;
makeCompany = factoriesMod.makeCompany;
makeMembership = factoriesMod.makeMembership;
});
it('returns only active memberships', async () => {
const port = await makePort();
const client = await makeClient({ portId: port.id });
@@ -203,6 +241,30 @@ describe('portal.service — getPortalUserMemberships', () => {
});
describe('portal.service — getPortalUserReservations', () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let getPortalUserReservations: (clientId: string, portId: string) => Promise<Array<any>>;
let makeClient: typeof import('../../helpers/factories').makeClient;
let makePort: typeof import('../../helpers/factories').makePort;
let makeYacht: typeof import('../../helpers/factories').makeYacht;
let makeBerth: typeof import('../../helpers/factories').makeBerth;
let makeReservation: typeof import('../../helpers/factories').makeReservation;
beforeAll(async () => {
const portalMod = await import('@/lib/services/portal.service');
getPortalUserReservations = portalMod.getPortalUserReservations;
const factoriesMod = await import('../../helpers/factories');
makeClient = factoriesMod.makeClient;
makePort = factoriesMod.makePort;
makeYacht = factoriesMod.makeYacht;
makeBerth = factoriesMod.makeBerth;
makeReservation = factoriesMod.makeReservation;
});
it('returns active + pending reservations', async () => {
const port = await makePort();
const client = await makeClient({ portId: port.id });

View File

@@ -1,5 +1,7 @@
import { defineConfig } from 'vitest/config';
import path from 'path';
// eslint-disable-next-line @typescript-eslint/no-require-imports
const { loadEnv } = require('vite');
export default defineConfig({
test: {
@@ -12,13 +14,10 @@ export default defineConfig({
provider: 'v8',
reporter: ['text', 'lcov', 'json-summary'],
include: ['src/lib/**'],
exclude: [
'src/lib/db/migrations/**',
'src/lib/db/schema/**',
'src/**/*.d.ts',
],
exclude: ['src/lib/db/migrations/**', 'src/lib/db/schema/**', 'src/**/*.d.ts'],
},
testTimeout: 30_000,
env: loadEnv('test', process.cwd(), ''),
},
resolve: {
alias: { '@': path.resolve(__dirname, './src') },