import { test, expect } from 'vitest' import { Invoice, InvoiceState, Payment, PaymentState, } from '../src/components/CAdminTable/examples/helpers/dbPaymentsAndInvoices' import { a, sortRows } from '../src/components/CAdminTable/sort' import { SortState } from '../src/components/CAdminTable/tableInfo' test('a', () => { const 結果 = a() const 期待値 = 1 expect(結果).toEqual(期待値) }) test('sortRows — empty', () => { const sortState = [] const rows = [] const 結果 = sortRows(sortState, rows) const 期待値 = [] expect(結果).toEqual(期待値) }) test('sortRows — simple', () => { const sortState: SortState = [{ id: 'name', direction: 'asc' }] const rows = [{ name: 'c' }, { name: 'a' }, { name: 'b' }] const 結果 = sortRows(sortState, rows) const 期待値 = [{ name: 'a' }, { name: 'b' }, { name: 'c' }] expect(結果).toEqual(期待値) }) test('sortRows — nested', () => { const sortState: SortState = [{ id: 'name.family', direction: 'asc' }] const rows = [ { name: { family: 'toyota' } }, { name: { family: 'suzuki' } }, { name: { family: 'honda' } }, ] const 結果 = sortRows(sortState, rows) const 期待値 = [ { name: { family: 'honda' } }, { name: { family: 'suzuki' } }, { name: { family: 'toyota' } }, ] expect(結果).toEqual(期待値) }) test('sortRows — simple id', () => { const sortState: SortState = [{ id: 'id', direction: 'asc' }] const rows = [ { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-2' }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE' }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-1' }, ] const 結果 = sortRows(sortState, rows) const 期待値 = [ { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE' }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-1' }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-2' }, ] expect(結果).toEqual(期待値) }) test('sortRows — simple id & parseValue', () => { const sortState: SortState = [ { id: 'id', direction: 'asc', parseValue: (id: string) => { return id.split('-').slice(1).join('-') }, }, ] const rows = [ { id: '211220009000000-wNmcU4C1UOUjzyI7gSjE-2' }, { id: '211220000100000-wNmcU4C1UOUjzyI7gSjE' }, { id: '211220000040000-wNmcU4C1UOUjzyI7gSjE-1' }, ] const 結果 = sortRows(sortState, rows) const 期待値 = [ { id: '211220000100000-wNmcU4C1UOUjzyI7gSjE' }, { id: '211220000040000-wNmcU4C1UOUjzyI7gSjE-1' }, { id: '211220009000000-wNmcU4C1UOUjzyI7gSjE-2' }, ] expect(結果).toEqual(期待値) }) test('sortRows — simple & 2 values', () => { const sortState: SortState = [ { id: 'name', direction: 'asc' }, { id: 'x', direction: 'desc' }, ] const rows = [ { name: 'a', x: 5 }, { name: 'b', x: 10 }, { name: 'a', x: 10 }, { name: 'a', x: 1 }, { name: 'b', x: 5 }, { name: 'b', x: 1 }, ] const 結果 = sortRows(sortState, rows) const 期待値 = [ { name: 'a', x: 10 }, { name: 'a', x: 5 }, { name: 'a', x: 1 }, { name: 'b', x: 10 }, { name: 'b', x: 5 }, { name: 'b', x: 1 }, ] expect(結果).toEqual(期待値) }) test('sortRows — complex', () => { const sortState: SortState = [ { id: '_date', direction: 'desc', parseValue: (_date: undefined, context) => { const { paymentDate, invoiceDate } = context.formData return paymentDate || invoiceDate }, }, { id: 'state', direction: 'asc', parseValue: (state: PaymentState | InvoiceState) => { if (state === 'default' || state === 'request') return 1 return 2 }, }, { id: 'id', direction: 'desc', parseValue: (id: string) => { return id.split('-').slice(1).join('-') }, }, ] const rows: (Payment | Invoice)[] = [ { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p3', paymentDate: '2021/12/19', state: 'default', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p4', paymentDate: '2021/12/20', state: 'default', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p5', paymentDate: '2021/12/20', state: 'request', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-2', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p6', paymentDate: '2021/12/20', state: 'default', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p1', paymentDate: '2021/12/01', state: 'request', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p2', paymentDate: '2021/12/01', state: 'default', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p8', paymentDate: '2021/12/25', state: 'request', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p9', paymentDate: '2021/12/31', state: 'request', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p10', paymentDate: '2021/12/31', state: 'request', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p7', paymentDate: '2021/12/25', state: 'request', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i6', invoiceDate: '2021/12/20', state: 'beforeBilled', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i7', invoiceDate: '2021/12/20', state: 'billed', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-2', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i8', invoiceDate: '2021/12/20', state: 'billingDemanded', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-3', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i9', invoiceDate: '2021/12/20', state: 'completion', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-4', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i10', invoiceDate: '2021/12/20', state: 'partialDeposit', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i1', invoiceDate: '2021/12/01', state: 'beforeBilled', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i2', invoiceDate: '2021/12/01', state: 'billed', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE-2', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i3', invoiceDate: '2021/12/01', state: 'billingDemanded', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE-3', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i4', invoiceDate: '2021/12/01', state: 'completion', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE-4', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i5', invoiceDate: '2021/12/01', state: 'partialDeposit', }, { id: '211225000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i11', invoiceDate: '2021/12/25', state: 'beforeBilled', }, { id: '211225000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i12', invoiceDate: '2021/12/25', state: 'billed', }, { id: '211225000000000-wNmcU4C1UOUjzyI7gSjE-2', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i13', invoiceDate: '2021/12/25', state: 'billingDemanded', }, { id: '211225000000000-wNmcU4C1UOUjzyI7gSjE-3', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i14', invoiceDate: '2021/12/25', state: 'completion', }, { id: '211225000000000-wNmcU4C1UOUjzyI7gSjE-4', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i15', invoiceDate: '2021/12/25', state: 'partialDeposit', }, ] const 結果 = sortRows(sortState, rows) const 期待値: (Payment | Invoice)[] = [ { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p10', paymentDate: '2021/12/31', state: 'request', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p9', paymentDate: '2021/12/31', state: 'request', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p8', paymentDate: '2021/12/25', state: 'request', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p7', paymentDate: '2021/12/25', state: 'request', }, { id: '211225000000000-wNmcU4C1UOUjzyI7gSjE-4', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i15', invoiceDate: '2021/12/25', state: 'partialDeposit', }, { id: '211225000000000-wNmcU4C1UOUjzyI7gSjE-3', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i14', invoiceDate: '2021/12/25', state: 'completion', }, { id: '211225000000000-wNmcU4C1UOUjzyI7gSjE-2', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i13', invoiceDate: '2021/12/25', state: 'billingDemanded', }, { id: '211225000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i12', invoiceDate: '2021/12/25', state: 'billed', }, { id: '211225000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i11', invoiceDate: '2021/12/25', state: 'beforeBilled', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-2', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p6', paymentDate: '2021/12/20', state: 'default', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p5', paymentDate: '2021/12/20', state: 'request', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p4', paymentDate: '2021/12/20', state: 'default', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-4', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i10', invoiceDate: '2021/12/20', state: 'partialDeposit', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-3', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i9', invoiceDate: '2021/12/20', state: 'completion', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-2', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i8', invoiceDate: '2021/12/20', state: 'billingDemanded', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i7', invoiceDate: '2021/12/20', state: 'billed', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i6', invoiceDate: '2021/12/20', state: 'beforeBilled', }, { id: '211220000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p3', paymentDate: '2021/12/19', state: 'default', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p2', paymentDate: '2021/12/01', state: 'default', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'p1', paymentDate: '2021/12/01', state: 'request', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE-4', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i5', invoiceDate: '2021/12/01', state: 'partialDeposit', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE-3', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i4', invoiceDate: '2021/12/01', state: 'completion', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE-2', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i3', invoiceDate: '2021/12/01', state: 'billingDemanded', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE-1', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i2', invoiceDate: '2021/12/01', state: 'billed', }, { id: '211201000000000-wNmcU4C1UOUjzyI7gSjE', companyId: 'wNmcU4C1UOUjzyI7gSjE', name: 'i1', invoiceDate: '2021/12/01', state: 'beforeBilled', }, ] expect(結果).toEqual(期待値) })