ci: use self-hosted runner, add filter/date/client tests
This commit is contained in:
60
lib/api/__tests__/client.test.ts
Normal file
60
lib/api/__tests__/client.test.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
|
||||
vi.mock('@ciphera-net/ui', () => ({
|
||||
authMessageFromStatus: (status: number) => `Error ${status}`,
|
||||
AUTH_ERROR_MESSAGES: { NETWORK: 'Network error, please try again.' },
|
||||
}))
|
||||
|
||||
const { getLoginUrl, getSignupUrl, ApiError } = await import('../client')
|
||||
|
||||
describe('getLoginUrl', () => {
|
||||
it('builds login URL with default redirect', () => {
|
||||
const url = getLoginUrl()
|
||||
expect(url).toContain('/login')
|
||||
expect(url).toContain('client_id=pulse-app')
|
||||
expect(url).toContain('response_type=code')
|
||||
expect(url).toContain(encodeURIComponent('/auth/callback'))
|
||||
})
|
||||
|
||||
it('builds login URL with custom redirect', () => {
|
||||
const url = getLoginUrl('/custom/path')
|
||||
expect(url).toContain(encodeURIComponent('/custom/path'))
|
||||
})
|
||||
})
|
||||
|
||||
describe('getSignupUrl', () => {
|
||||
it('builds signup URL with default redirect', () => {
|
||||
const url = getSignupUrl()
|
||||
expect(url).toContain('/signup')
|
||||
expect(url).toContain('client_id=pulse-app')
|
||||
expect(url).toContain('response_type=code')
|
||||
})
|
||||
|
||||
it('builds signup URL with custom redirect', () => {
|
||||
const url = getSignupUrl('/onboarding')
|
||||
expect(url).toContain(encodeURIComponent('/onboarding'))
|
||||
})
|
||||
})
|
||||
|
||||
describe('ApiError', () => {
|
||||
it('creates error with message and status', () => {
|
||||
const err = new ApiError('Not found', 404)
|
||||
expect(err.message).toBe('Not found')
|
||||
expect(err.status).toBe(404)
|
||||
expect(err.data).toBeUndefined()
|
||||
expect(err).toBeInstanceOf(Error)
|
||||
})
|
||||
|
||||
it('creates error with data payload', () => {
|
||||
const data = { retryAfter: 30 }
|
||||
const err = new ApiError('Rate limited', 429, data)
|
||||
expect(err.status).toBe(429)
|
||||
expect(err.data).toEqual({ retryAfter: 30 })
|
||||
})
|
||||
|
||||
it('is catchable as a standard Error', () => {
|
||||
const fn = () => { throw new ApiError('fail', 500) }
|
||||
expect(fn).toThrow(Error)
|
||||
expect(fn).toThrow('fail')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user