Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions __tests__/server/getAvalancheCenterPlatforms.server.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import { http, HttpResponse } from 'msw'
import { setupServer } from 'msw/node'

jest.mock('../../src/payload.config', () => ({}))

jest.mock('payload', () => ({
getPayload: jest.fn(),
}))

import { getAvalancheCenterPlatforms } from '@/services/nac/nac'

const afpCentersResponse = {
centers: [
{
id: 'NWAC',
display_id: 'NWAC',
platforms: {
warnings: true,
forecasts: true,
stations: true,
obs: true,
weather: true,
},
},
{
id: 'SAC',
display_id: 'SAC',
platforms: {
warnings: true,
forecasts: true,
stations: false,
obs: true,
weather: false,
},
},
],
}

const server = setupServer(
http.get('https://forecasts.avalanche.org/', () => HttpResponse.json(afpCentersResponse)),
)

beforeAll(() => server.listen({ onUnhandledRequest: 'error' }))
afterEach(() => server.resetHandlers())
afterAll(() => server.close())

describe('services: getAvalancheCenterPlatforms', () => {
it('returns platforms for a matching center slug', async () => {
const result = await getAvalancheCenterPlatforms('nwac')
expect(result).toEqual({
warnings: true,
forecasts: true,
stations: true,
obs: true,
weather: true,
})
})

it('maps dvac slug to nwac', async () => {
const result = await getAvalancheCenterPlatforms('dvac')
expect(result).toEqual({
warnings: true,
forecasts: true,
stations: true,
obs: true,
weather: true,
})
})

it('uppercases the slug for matching', async () => {
const result = await getAvalancheCenterPlatforms('sac')
expect(result).toEqual({
warnings: true,
forecasts: true,
stations: false,
obs: true,
weather: false,
})
})

it('returns all-false platforms when center is not found', async () => {
const result = await getAvalancheCenterPlatforms('unknown')
expect(result).toEqual({
warnings: false,
forecasts: false,
stations: false,
obs: false,
weather: false,
})
})
})
78 changes: 78 additions & 0 deletions __tests__/server/getNACWidgetsConfig.server.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { getNACWidgetsConfig } from '@/utilities/getNACWidgetsConfig'

const mockConfig: { version: string; baseUrl: string; devMode?: boolean } = {
version: '20251207',
baseUrl: 'https://du6amfiq9m9h7.cloudfront.net/public/v2',
devMode: false,
}

jest.mock('../../src/utilities/getGlobals', () => ({
getCachedGlobal: () => () => Promise.resolve(mockConfig),
}))

describe('utilities: getNACWidgetsConfig', () => {
const originalNodeEnv = process.env.NODE_ENV
const originalVercelEnv = process.env.VERCEL_ENV

afterEach(() => {
Object.defineProperty(process.env, 'NODE_ENV', {
value: originalNodeEnv,
configurable: true,
})
if (originalVercelEnv === undefined) {
delete process.env.VERCEL_ENV
} else {
process.env.VERCEL_ENV = originalVercelEnv
}
mockConfig.devMode = false
})

it('returns version and baseUrl from the global config', async () => {
const result = await getNACWidgetsConfig()
expect(result.version).toBe('20251207')
expect(result.baseUrl).toBe('https://du6amfiq9m9h7.cloudfront.net/public/v2')
})

it('returns devMode from the global config in non-production', async () => {
Object.defineProperty(process.env, 'NODE_ENV', { value: 'development', configurable: true })
mockConfig.devMode = true

const result = await getNACWidgetsConfig()
expect(result.devMode).toBe(true)
})

it('forces devMode to false in production even when global config has it enabled', async () => {
Object.defineProperty(process.env, 'NODE_ENV', { value: 'production', configurable: true })
process.env.VERCEL_ENV = 'production'
mockConfig.devMode = true

const result = await getNACWidgetsConfig()
expect(result.devMode).toBe(false)
})
Comment thread
busbyk marked this conversation as resolved.

it('defaults devMode to false when not set in global config', async () => {
Object.defineProperty(process.env, 'NODE_ENV', { value: 'development', configurable: true })
delete mockConfig.devMode

const result = await getNACWidgetsConfig()
expect(result.devMode).toBe(false)
})

it('throws when version is missing', async () => {
const original = mockConfig.version
mockConfig.version = ''

await expect(getNACWidgetsConfig()).rejects.toThrow('Could not determine NAC widgets version')

mockConfig.version = original
})

it('throws when baseUrl is missing', async () => {
const original = mockConfig.baseUrl
mockConfig.baseUrl = ''

await expect(getNACWidgetsConfig()).rejects.toThrow('Could not determine NAC widgets base url')

mockConfig.baseUrl = original
})
})
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@
"jest": "^30.0.0",
"jest-environment-jsdom": "^30.0.0",
"lint-staged": "^15.5.0",
"msw": "^2.13.4",
"postcss": "^8.4.49",
"prettier": "^3.4.2",
"prettier-plugin-organize-imports": "^4.1.0",
Expand Down
Loading
Loading