mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-09-01 02:38:56 +00:00
100 lines
2.5 KiB
TypeScript
100 lines
2.5 KiB
TypeScript
import { createPinia, setActivePinia } from 'pinia'
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
import { useBillingStore } from '@/stores/billing'
|
|
import type { BillingOverview, InvoiceDetail } from '@/types/billing'
|
|
import { nuiCall } from '@/utils/nui'
|
|
|
|
vi.mock('@/utils/nui', () => ({ nuiCall: vi.fn() }))
|
|
const mockNuiCall = vi.mocked(nuiCall)
|
|
|
|
const overview: BillingOverview = {
|
|
currency: '$',
|
|
openCount: 2,
|
|
openTotal: 2299,
|
|
overdueCount: 1,
|
|
supportsDisputes: true,
|
|
supportsSent: true,
|
|
unreadCount: 2,
|
|
urgentInvoices: [],
|
|
}
|
|
|
|
const detail: InvoiceDetail = {
|
|
amount: 1300,
|
|
canDispute: true,
|
|
canPay: true,
|
|
currency: '$',
|
|
description: 'Treatment',
|
|
direction: 'inbox',
|
|
dueAt: 1_800_000,
|
|
id: 'invoice-id',
|
|
isOverdue: false,
|
|
isUnread: false,
|
|
issuedAt: 1_000_000,
|
|
issuerAccount: 'ambulance',
|
|
issuerLabel: 'Los Santos Medical',
|
|
paidAt: null,
|
|
paymentReference: '',
|
|
status: 'open',
|
|
title: 'Treatment',
|
|
}
|
|
|
|
describe('billing store', () => {
|
|
beforeEach(() => {
|
|
setActivePinia(createPinia())
|
|
mockNuiCall.mockReset()
|
|
})
|
|
|
|
it('loads the billing overview', async () => {
|
|
mockNuiCall.mockResolvedValueOnce({ data: overview, success: true })
|
|
const billing = useBillingStore()
|
|
|
|
expect(await billing.loadOverview()).toBe(true)
|
|
expect(billing.overview).toEqual(overview)
|
|
expect(mockNuiCall).toHaveBeenCalledWith('billing:overview', {
|
|
direction: 'inbox',
|
|
})
|
|
})
|
|
|
|
it('loads and appends paged invoices', async () => {
|
|
mockNuiCall
|
|
.mockResolvedValueOnce({
|
|
data: { hasMore: true, invoices: [detail], nextOffset: 1 },
|
|
success: true,
|
|
})
|
|
.mockResolvedValueOnce({
|
|
data: {
|
|
hasMore: false,
|
|
invoices: [{ ...detail, id: 'second' }],
|
|
nextOffset: 2,
|
|
},
|
|
success: true,
|
|
})
|
|
const billing = useBillingStore()
|
|
|
|
await billing.loadInvoices('inbox', 'open')
|
|
await billing.loadInvoices('inbox', 'open', '', true)
|
|
|
|
expect(billing.invoices.map((invoice) => invoice.id)).toEqual([
|
|
'invoice-id',
|
|
'second',
|
|
])
|
|
})
|
|
|
|
it('never sends an amount when paying', async () => {
|
|
mockNuiCall
|
|
.mockResolvedValueOnce({
|
|
data: { ...detail, status: 'paid' },
|
|
success: true,
|
|
})
|
|
.mockResolvedValueOnce({ data: overview, success: true })
|
|
const billing = useBillingStore()
|
|
|
|
await billing.pay(detail.id)
|
|
|
|
expect(mockNuiCall).toHaveBeenNthCalledWith(1, 'billing:pay', {
|
|
id: detail.id,
|
|
})
|
|
})
|
|
})
|