59 lines
3.6 KiB
TypeScript
59 lines
3.6 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { readFileSync } from 'node:fs'
|
|
import { resolve } from 'node:path'
|
|
import { overseasMasterDataPermissions } from './permissions'
|
|
import { overseasMasterDataRoutes } from './routes'
|
|
|
|
describe('overseas master data routes', () => {
|
|
it('uses the frozen stable paths and list permissions', () => {
|
|
expect(overseasMasterDataRoutes.map((route) => [route.path, route.meta?.permission])).toEqual([
|
|
['overseas-master-data/capacity-offers', overseasMasterDataPermissions.capacityOfferList],
|
|
['overseas-master-data/capacity-offers/:offerNo', overseasMasterDataPermissions.capacityOfferList],
|
|
['overseas-master-data/fleet-quotes', overseasMasterDataPermissions.fleetQuoteList],
|
|
['overseas-master-data/trip-operations', overseasMasterDataPermissions.operationsList],
|
|
['overseas-master-data/owned-business', overseasMasterDataPermissions.ownedBusinessList],
|
|
['overseas-master-data/owned-business/:dispatchNo', overseasMasterDataPermissions.ownedBusinessList],
|
|
['overseas-master-data/trips', overseasMasterDataPermissions.tripList],
|
|
['overseas-master-data/trips/:tripNo', overseasMasterDataPermissions.tripList],
|
|
['overseas-master-data/drivers', overseasMasterDataPermissions.driverList],
|
|
['overseas-master-data/drivers/:driverId', overseasMasterDataPermissions.driverList],
|
|
['overseas-master-data/quotes', overseasMasterDataPermissions.quoteList],
|
|
['overseas-master-data/exchange-rates', overseasMasterDataPermissions.exchangeRateList],
|
|
['overseas-master-data/vehicles', overseasMasterDataPermissions.vehicleList],
|
|
['overseas-master-data/vehicles/:vehicleId', overseasMasterDataPermissions.vehicleList],
|
|
])
|
|
})
|
|
|
|
it('allows dispatch management to read the pool without granting full trip access to sales', () => {
|
|
const pool = overseasMasterDataRoutes.filter(route => route.path.includes('capacity-offers'))
|
|
expect(pool).toHaveLength(2)
|
|
for (const route of pool) {
|
|
expect(route.meta?.permissionAnyOf).toEqual([overseasMasterDataPermissions.capacityOfferManage])
|
|
expect(route.meta?.permission).not.toBe(overseasMasterDataPermissions.tripList)
|
|
}
|
|
})
|
|
|
|
it('uses one list permission for owned-business list and independent detail without granting writes', () => {
|
|
const owned = overseasMasterDataRoutes.filter(route => route.path.includes('/owned-business'))
|
|
expect(owned).toHaveLength(2)
|
|
expect(owned.map(route => route.path)).toContain('overseas-master-data/owned-business/:dispatchNo')
|
|
for (const route of owned) {
|
|
expect(route.meta?.permission).toBe(overseasMasterDataPermissions.ownedBusinessList)
|
|
expect(route.meta?.permissionAnyOf).toBeUndefined()
|
|
expect(route.meta?.permission).not.toBe(overseasMasterDataPermissions.ownedBusinessEdit)
|
|
expect(route.meta?.permission).not.toBe(overseasMasterDataPermissions.ownedBusinessUpload)
|
|
}
|
|
})
|
|
|
|
it('keeps vehicle detail as a route page and does not add a duplicate partner warehouse route', () => {
|
|
expect(overseasMasterDataRoutes.at(-1)?.meta?.showPageHeading).toBe(false)
|
|
expect(overseasMasterDataRoutes.some((route) => route.path.includes('partner-warehouse'))).toBe(false)
|
|
})
|
|
|
|
it('activates the confirmed partner type in the existing warehouse domain without a duplicate route', () => {
|
|
const apiSource = readFileSync(resolve(process.cwd(), 'src/modules/warehouses/api/platformWarehouses.ts'), 'utf8')
|
|
expect(apiSource).toContain("'OVERSEAS_PARTNER'")
|
|
expect(overseasMasterDataRoutes.some((route) => route.path.includes('partner-warehouse'))).toBe(false)
|
|
})
|
|
})
|