mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-08-29 17:28:56 +00:00
120 lines
3.2 KiB
TypeScript
120 lines
3.2 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
import { createPinia, setActivePinia } from 'pinia'
|
|
|
|
vi.mock('@/utils/nui', () => ({
|
|
nuiCall: vi.fn(),
|
|
}))
|
|
|
|
import { useCrewLinkStore } from '@/stores/crewlink'
|
|
import { nuiCall } from '@/utils/nui'
|
|
|
|
describe('CrewLink store', () => {
|
|
beforeEach(() => {
|
|
setActivePinia(createPinia())
|
|
vi.mocked(nuiCall).mockReset()
|
|
})
|
|
|
|
it('hydrates a profile and active group from bootstrap', async () => {
|
|
vi.mocked(nuiCall).mockResolvedValue({
|
|
success: true,
|
|
data: {
|
|
activeGroup: {
|
|
allowMemberPings: true,
|
|
colour: 'cyan',
|
|
id: 'group-1',
|
|
isOwner: true,
|
|
memberCount: 1,
|
|
members: [],
|
|
name: 'Night Shift',
|
|
overheadAllowed: true,
|
|
pings: [],
|
|
role: 'owner',
|
|
},
|
|
groups: [],
|
|
invitations: [],
|
|
profile: {
|
|
activeGroupId: 'group-1',
|
|
id: 'profile-1',
|
|
mapVisible: true,
|
|
overheadVisible: false,
|
|
username: 'Skyline',
|
|
},
|
|
},
|
|
})
|
|
const store = useCrewLinkStore()
|
|
expect(await store.bootstrap()).toBe(true)
|
|
expect(store.profile?.username).toBe('Skyline')
|
|
expect(store.activeGroup?.name).toBe('Night Shift')
|
|
})
|
|
|
|
it('keeps the server error from a rejected request', async () => {
|
|
vi.mocked(nuiCall).mockResolvedValue({
|
|
success: false,
|
|
error: 'invalid_code',
|
|
})
|
|
const store = useCrewLinkStore()
|
|
const response = await store.joinCode('BADCODE')
|
|
expect(response.success).toBe(false)
|
|
expect(store.error).toBe('invalid_code')
|
|
})
|
|
|
|
it('sends only the password when logging in', async () => {
|
|
vi.mocked(nuiCall).mockResolvedValue({
|
|
success: false,
|
|
error: 'invalid_credentials',
|
|
})
|
|
const store = useCrewLinkStore()
|
|
await store.login('CrewLink123!')
|
|
expect(nuiCall).toHaveBeenCalledWith('crewlink:login', {
|
|
password: 'CrewLink123!',
|
|
})
|
|
})
|
|
|
|
it('sends username, password, and avatar when registering', async () => {
|
|
vi.mocked(nuiCall).mockResolvedValue({ success: true })
|
|
const store = useCrewLinkStore()
|
|
await store.register('Skyline', 'CrewLink123!', 42)
|
|
expect(nuiCall).toHaveBeenCalledWith('crewlink:register', {
|
|
avatarMediaId: 42,
|
|
password: 'CrewLink123!',
|
|
username: 'Skyline',
|
|
})
|
|
})
|
|
|
|
it('applies live members without replacing group metadata', async () => {
|
|
const store = useCrewLinkStore()
|
|
store.activeGroup = {
|
|
allowMemberPings: true,
|
|
colour: 'blue',
|
|
id: 'group-1',
|
|
isOwner: false,
|
|
memberCount: 2,
|
|
members: [],
|
|
name: 'Road Crew',
|
|
overheadAllowed: true,
|
|
pings: [],
|
|
role: 'member',
|
|
}
|
|
vi.mocked(nuiCall).mockResolvedValue({
|
|
success: true,
|
|
data: {
|
|
members: [
|
|
{
|
|
id: 'profile-2',
|
|
joinedAt: 1,
|
|
mapVisible: true,
|
|
online: true,
|
|
overheadVisible: true,
|
|
role: 'member',
|
|
username: 'Nova',
|
|
},
|
|
],
|
|
pings: [],
|
|
},
|
|
})
|
|
expect(await store.refreshLive()).toBe(true)
|
|
expect(store.activeGroup.name).toBe('Road Crew')
|
|
expect(store.activeGroup.members[0].online).toBe(true)
|
|
})
|
|
})
|