mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
471 lines
14 KiB
JavaScript
471 lines
14 KiB
JavaScript
import { mount } from '@vue/test-utils'
|
||
import GddTransactionList from './GddTransactionList'
|
||
|
||
const localVue = global.localVue
|
||
|
||
const scrollToMock = jest.fn()
|
||
|
||
global.scrollTo = scrollToMock
|
||
|
||
describe('GddTransactionList', () => {
|
||
let wrapper
|
||
|
||
const mocks = {
|
||
$n: jest.fn((n) => n),
|
||
$t: jest.fn((t) => t),
|
||
$d: jest.fn((d) => d),
|
||
$i18n: {
|
||
locale: () => 'en',
|
||
},
|
||
}
|
||
|
||
const Wrapper = () => {
|
||
return mount(GddTransactionList, { localVue, mocks })
|
||
}
|
||
|
||
const decayStartBlock = new Date('2021-05-13 17:46:31-0000')
|
||
|
||
describe('mount', () => {
|
||
beforeEach(() => {
|
||
wrapper = Wrapper()
|
||
})
|
||
|
||
it('renders the component', () => {
|
||
expect(wrapper.find('div.gdd-transaction-list').exists()).toBeTruthy()
|
||
})
|
||
|
||
describe('no transactions from server', () => {
|
||
beforeEach(async () => {
|
||
await wrapper.setProps({
|
||
transactions: false,
|
||
})
|
||
})
|
||
it('shows error no transaction list', () => {
|
||
expect(wrapper.find('div.test-no-transactionlist').text()).toContain(
|
||
'error.no-transactionlist',
|
||
)
|
||
})
|
||
})
|
||
describe('0 transactions from server', () => {
|
||
beforeEach(async () => {
|
||
await wrapper.setProps({
|
||
transactions: [],
|
||
count: 0,
|
||
})
|
||
})
|
||
it('Transactions Array is empty, 0 transactions', () => {
|
||
expect(wrapper.find('div.test-empty-transactionlist').exists()).toBe(false)
|
||
})
|
||
})
|
||
|
||
describe('without any properties', () => {
|
||
beforeEach(async () => {
|
||
await wrapper.setProps({
|
||
transactions: [],
|
||
count: -1,
|
||
})
|
||
})
|
||
it('renders text saying that there are error.empty-transactionlist ', () => {
|
||
expect(wrapper.find('div.gdd-transaction-list').text()).toContain(
|
||
'transaction.nullTransactions',
|
||
)
|
||
})
|
||
it('renders text saying that there are no transaction.nullTransactions', () => {
|
||
expect(wrapper.find('div.gdd-transaction-list').text()).toContain(
|
||
'transaction.nullTransactions',
|
||
)
|
||
})
|
||
})
|
||
|
||
describe('timestamp property', () => {
|
||
it('emits update-transactions when timestamp changes', async () => {
|
||
await wrapper.setProps({ timestamp: 0 })
|
||
expect(wrapper.emitted('update-transactions')).toBeTruthy()
|
||
})
|
||
})
|
||
|
||
describe('with transactions', () => {
|
||
beforeEach(async () => {
|
||
await wrapper.setProps({
|
||
transactions: [
|
||
{
|
||
id: -1,
|
||
typeId: 'DECAY',
|
||
amount: '-0.16778637075575395772595',
|
||
balance: '31.59320453982945549519405',
|
||
balanceDate: '2022-03-03T08:54:54',
|
||
memo: '',
|
||
linkedUser: null,
|
||
decay: {
|
||
decay: '-0.16778637075575395772595',
|
||
start: '2022-02-28T13:55:47',
|
||
end: '2022-03-03T08:54:54',
|
||
duration: 241147.02,
|
||
},
|
||
},
|
||
{
|
||
id: 9,
|
||
typeId: 'SEND',
|
||
amount: '1',
|
||
balance: '31.76099091058520945292',
|
||
balanceDate: '2022-02-28T13:55:47',
|
||
memo:
|
||
'Um den Kessel schlingt den Reihn, Werft die Eingeweid‘ hinein. Kröte du, die Nacht und Tag Unterm kalten Steine lag,',
|
||
linkedUser: {
|
||
firstName: 'Bibi',
|
||
lastName: 'Bloxberg',
|
||
},
|
||
decay: {
|
||
decay: '-0.2038314055482643084',
|
||
start: '2022-02-25T07:29:26',
|
||
end: '2022-02-28T13:55:47',
|
||
duration: 282381,
|
||
},
|
||
},
|
||
{
|
||
id: 6,
|
||
typeId: 'RECEIVE',
|
||
amount: '10',
|
||
balance: '10',
|
||
balanceDate: '2022-02-23T10:55:30',
|
||
memo:
|
||
'Monatlanges Gift sog ein, In den Topf zuerst hinein… (William Shakespeare, Die Hexen aus Macbeth)',
|
||
linkedUser: {
|
||
firstName: 'Bibi',
|
||
lastName: 'Bloxberg',
|
||
},
|
||
decay: {
|
||
decay: '0',
|
||
start: null,
|
||
end: null,
|
||
duration: null,
|
||
},
|
||
},
|
||
{
|
||
id: 8,
|
||
typeId: 'CREATION',
|
||
amount: '1000',
|
||
balance: '32.96482231613347376132',
|
||
balanceDate: '2022-02-25T07:29:26',
|
||
memo: 'Jammern hilft nichts, sondern ich kann selber meinen Teil dazu beitragen.',
|
||
linkedUser: {
|
||
firstName: 'Gradido',
|
||
lastName: 'Akademie',
|
||
},
|
||
decay: {
|
||
decay: '-0.03517768386652623868',
|
||
start: '2022-02-23T10:55:30',
|
||
end: '2022-02-25T07:29:26',
|
||
duration: 160436,
|
||
},
|
||
},
|
||
],
|
||
count: 12,
|
||
decayStartBlock,
|
||
})
|
||
})
|
||
|
||
it('renders 4 transactions', () => {
|
||
expect(wrapper.findAll('div.list-group-item')).toHaveLength(4)
|
||
})
|
||
|
||
describe('decay transactions', () => {
|
||
let transaction
|
||
beforeEach(() => {
|
||
transaction = wrapper.findAll('div.list-group-item').at(0)
|
||
})
|
||
|
||
it('has a bi-caret-down-square icon', () => {
|
||
expect(transaction.findAll('svg').at(0).classes()).toEqual([
|
||
'bi-caret-down-square',
|
||
'b-icon',
|
||
'bi',
|
||
'text-muted',
|
||
])
|
||
})
|
||
|
||
it('has a bi-droplet-half icon', () => {
|
||
expect(transaction.findAll('svg').at(1).classes()).toContain('bi-droplet-half')
|
||
})
|
||
|
||
it('has gradido-global-color-gray color', () => {
|
||
expect(transaction.findAll('svg').at(1).classes()).toContain('gradido-global-color-gray')
|
||
})
|
||
|
||
it('shows the amount of transaction', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-amount').at(0).text()).toContain(
|
||
'0.16778637075575395',
|
||
)
|
||
})
|
||
|
||
it('shows the name of the receiver', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-name').at(0).text()).toBe(
|
||
'decay.decay_since_last_transaction',
|
||
)
|
||
})
|
||
})
|
||
|
||
describe('send transactions', () => {
|
||
let transaction
|
||
beforeEach(() => {
|
||
transaction = wrapper.findAll('div.list-group-item').at(1)
|
||
})
|
||
|
||
it('has a bi-caret-down-square icon', () => {
|
||
expect(transaction.findAll('svg').at(0).classes()).toEqual([
|
||
'bi-caret-down-square',
|
||
'b-icon',
|
||
'bi',
|
||
'text-muted',
|
||
])
|
||
})
|
||
|
||
it('has a bi-arrow-left-circle icon', () => {
|
||
expect(transaction.findAll('svg').at(1).classes()).toContain('bi-arrow-left-circle')
|
||
})
|
||
|
||
it('has text-danger color', () => {
|
||
expect(transaction.findAll('svg').at(1).classes()).toContain('text-danger')
|
||
})
|
||
|
||
// operators are renderd by GDD filter
|
||
it.skip('has a minus operator', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-operator').at(0).text()).toContain(
|
||
'-',
|
||
)
|
||
})
|
||
|
||
it('shows the amount of transaction', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-amount').at(0).text()).toContain(
|
||
'1',
|
||
)
|
||
})
|
||
|
||
it('shows the name of the receiver', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-name').at(0).text()).toContain(
|
||
'Bibi Bloxberg',
|
||
)
|
||
})
|
||
|
||
it('shows the message of the transaction', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-message').at(0).text()).toContain(
|
||
'Um den Kessel schlingt den Reihn, Werft die Eingeweid‘ hinein. Kröte du, die Nacht und Tag Unterm kalten Steine lag,',
|
||
)
|
||
})
|
||
|
||
it('shows the date of the transaction', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-date').at(0).text()).toContain(
|
||
'Mon Feb 28 2022 13:55:47 GMT+0000',
|
||
)
|
||
})
|
||
|
||
it('shows the decay calculation', () => {
|
||
expect(transaction.findAll('div.gdd-transaction-list-item-decay').at(0).text()).toContain(
|
||
'− 0.2038314055482643084',
|
||
)
|
||
})
|
||
})
|
||
|
||
describe('creation transactions', () => {
|
||
let transaction
|
||
|
||
beforeEach(() => {
|
||
transaction = wrapper.findAll('div.list-group-item').at(2)
|
||
})
|
||
|
||
it('has a bi-caret-down-square icon', () => {
|
||
expect(transaction.findAll('svg').at(0).classes()).toEqual([
|
||
'bi-caret-down-square',
|
||
'b-icon',
|
||
'bi',
|
||
'text-muted',
|
||
])
|
||
})
|
||
|
||
it('has a bi-gift icon', () => {
|
||
expect(transaction.findAll('svg').at(1).classes()).toEqual([
|
||
'bi-arrow-right-circle',
|
||
'm-mb-1',
|
||
'font2em',
|
||
'b-icon',
|
||
'bi',
|
||
'gradido-global-color-accent',
|
||
])
|
||
})
|
||
|
||
it('has gradido-global-color-accent color', () => {
|
||
expect(transaction.findAll('svg').at(1).classes()).toEqual([
|
||
'bi-arrow-right-circle',
|
||
'm-mb-1',
|
||
'font2em',
|
||
'b-icon',
|
||
'bi',
|
||
'gradido-global-color-accent',
|
||
])
|
||
})
|
||
|
||
// operators are renderd by GDD filter
|
||
it.skip('has a plus operator', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-operator').at(0).text()).toContain(
|
||
'+',
|
||
)
|
||
})
|
||
|
||
it('shows the amount of transaction', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-amount').at(0).text()).toContain(
|
||
'+ 10 GDD',
|
||
)
|
||
})
|
||
|
||
it('shows the name of the receiver', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-name').at(0).text()).toContain(
|
||
'Bibi Bloxberg',
|
||
)
|
||
})
|
||
|
||
it('shows the date of the transaction', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-date').at(0).text()).toContain(
|
||
'Wed Feb 23 2022 10:55:30 GMT+0000',
|
||
)
|
||
})
|
||
})
|
||
|
||
describe('receive transactions', () => {
|
||
let transaction
|
||
beforeEach(() => {
|
||
transaction = wrapper.findAll('div.list-group-item').at(3)
|
||
})
|
||
|
||
it('has a bi-caret-down-square icon', () => {
|
||
expect(transaction.findAll('svg').at(0).classes()).toEqual([
|
||
'bi-caret-down-square',
|
||
'b-icon',
|
||
'bi',
|
||
'text-muted',
|
||
])
|
||
})
|
||
|
||
it('has a bi-arrow-right-circle icon', () => {
|
||
expect(transaction.findAll('svg').at(1).classes()).toEqual([
|
||
'bi-gift',
|
||
'm-mb-1',
|
||
'font2em',
|
||
'b-icon',
|
||
'bi',
|
||
'gradido-global-color-accent',
|
||
])
|
||
})
|
||
|
||
it('has gradido-global-color-accent color', () => {
|
||
expect(transaction.findAll('svg').at(1).classes()).toEqual([
|
||
'bi-gift',
|
||
'm-mb-1',
|
||
'font2em',
|
||
'b-icon',
|
||
'bi',
|
||
'gradido-global-color-accent',
|
||
])
|
||
})
|
||
|
||
// operators are renderd by GDD filter
|
||
it.skip('has a plus operator', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-operator').at(0).text()).toContain(
|
||
'+',
|
||
)
|
||
})
|
||
|
||
it('shows the amount of transaction', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-amount').at(0).text()).toContain(
|
||
'10',
|
||
)
|
||
})
|
||
|
||
it('shows the name of the recipient', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-name').at(0).text()).toContain(
|
||
'Gradido Akademie',
|
||
)
|
||
})
|
||
|
||
it('shows the message of the transaction', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-message').at(0).text()).toContain(
|
||
'Jammern hilft nichts, sondern ich kann selber meinen Teil dazu beitragen.',
|
||
)
|
||
})
|
||
|
||
it('shows the date of the transaction', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-date').at(0).text()).toContain(
|
||
'Fri Feb 25 2022 07:29:26 GMT+0000',
|
||
)
|
||
})
|
||
|
||
it('shows the decay calculation', () => {
|
||
expect(transaction.findAll('.gdd-transaction-list-item-decay').at(0).text()).toContain(
|
||
'0',
|
||
)
|
||
})
|
||
})
|
||
})
|
||
|
||
describe('pagination buttons', () => {
|
||
beforeEach(async () => {
|
||
await wrapper.setProps({
|
||
transactions: Array.from({ length: 42 }, (_, idx) => {
|
||
return {
|
||
amount: '3.14',
|
||
balanceDate: '2021-04-29T17:26:40+00:00',
|
||
decay: {
|
||
decay: '-477.01',
|
||
start: '2021-05-13T17:46:31.000Z',
|
||
end: '2022-04-20T06:51:25.000Z',
|
||
duration: 29509494,
|
||
},
|
||
memo: 'Kreiszahl PI',
|
||
linkedUser: {
|
||
firstName: 'Bibi',
|
||
lastName: 'Bloxberg',
|
||
},
|
||
id: idx + 1,
|
||
typeId: 'RECEIVE',
|
||
balance: '33.33',
|
||
}
|
||
}),
|
||
transactionCount: 42,
|
||
decayStartBlock,
|
||
pageSize: 25,
|
||
showPagination: true,
|
||
})
|
||
})
|
||
|
||
describe('next page button clicked', () => {
|
||
beforeEach(async () => {
|
||
jest.clearAllMocks()
|
||
// await wrapper.vm.$nextTick()
|
||
await wrapper.findComponent({ name: 'BPagination' }).vm.$emit('input', 2)
|
||
})
|
||
|
||
it('emits update transactions', () => {
|
||
expect(wrapper.emitted('update-transactions')).toEqual(
|
||
expect.arrayContaining([[{ currentPage: 2, pageSize: 25 }]]),
|
||
)
|
||
})
|
||
})
|
||
})
|
||
|
||
describe('show no pagination', () => {
|
||
beforeEach(async () => {
|
||
await wrapper.setProps({
|
||
transactions: [],
|
||
transactionCount: 2,
|
||
decayStartBlock,
|
||
pageSize: 25,
|
||
showPagination: false,
|
||
})
|
||
})
|
||
|
||
it('shows no pagination buttons', () => {
|
||
expect(wrapper.find('ul.pagination').exists()).toBe(false)
|
||
})
|
||
})
|
||
})
|
||
})
|