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 ContributionForm from './ContributionForm.vue'
|
|
|
|
const localVue = global.localVue
|
|
|
|
describe('ContributionForm', () => {
|
|
let wrapper
|
|
|
|
const propsData = {
|
|
value: {
|
|
id: null,
|
|
date: '',
|
|
memo: '',
|
|
amount: '',
|
|
hours: 0,
|
|
},
|
|
isThisMonth: true,
|
|
minimalDate: new Date(),
|
|
maxGddLastMonth: 1000,
|
|
maxGddThisMonth: 1000,
|
|
}
|
|
|
|
const mocks = {
|
|
$t: jest.fn((t) => t),
|
|
$d: jest.fn((d) => d),
|
|
$n: jest.fn((n) => n),
|
|
$i18n: {
|
|
locale: 'en',
|
|
},
|
|
}
|
|
|
|
const Wrapper = () => {
|
|
return mount(ContributionForm, {
|
|
localVue,
|
|
mocks,
|
|
propsData,
|
|
})
|
|
}
|
|
|
|
describe('mount', () => {
|
|
beforeEach(() => {
|
|
wrapper = Wrapper()
|
|
})
|
|
|
|
it('has a DIV .contribution-form', () => {
|
|
expect(wrapper.find('div.contribution-form').exists()).toBe(true)
|
|
})
|
|
|
|
describe('empty form data', () => {
|
|
describe('button', () => {
|
|
it('has submit disabled', () => {
|
|
expect(wrapper.find('button[data-test="button-submit"]').attributes('disabled')).toBe(
|
|
'disabled',
|
|
)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('dates and max amounts', () => {
|
|
beforeEach(async () => {
|
|
await wrapper.setData({
|
|
form: {
|
|
id: null,
|
|
date: '',
|
|
memo: '',
|
|
amount: '',
|
|
},
|
|
})
|
|
})
|
|
|
|
describe('max amount reached for both months', () => {
|
|
beforeEach(() => {
|
|
wrapper.setProps({
|
|
maxGddLastMonth: 0,
|
|
maxGddThisMonth: 0,
|
|
})
|
|
wrapper.setData({
|
|
form: {
|
|
id: null,
|
|
date: 'set',
|
|
memo: '',
|
|
amount: '',
|
|
},
|
|
})
|
|
})
|
|
|
|
it('shows message that no contributions are available', () => {
|
|
expect(wrapper.find('[data-test="contribtion-message"]').text()).toBe(
|
|
'contribution.noOpenCreation.allMonth',
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('max amount reached for last month, no date selected', () => {
|
|
beforeEach(() => {
|
|
wrapper.setProps({
|
|
maxGddLastMonth: 0,
|
|
})
|
|
})
|
|
|
|
it('shows no message', () => {
|
|
expect(wrapper.find('[data-test="contribtion-message"]').exists()).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe('max amount reached for last month, last month selected', () => {
|
|
beforeEach(async () => {
|
|
wrapper.setProps({
|
|
maxGddLastMonth: 0,
|
|
isThisMonth: false,
|
|
})
|
|
await wrapper.setData({
|
|
form: {
|
|
id: null,
|
|
date: 'set',
|
|
memo: '',
|
|
amount: '',
|
|
},
|
|
})
|
|
})
|
|
|
|
it('shows message that no contributions are available for last month', () => {
|
|
expect(wrapper.find('[data-test="contribtion-message"]').text()).toBe(
|
|
'contribution.noOpenCreation.lastMonth',
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('max amount reached for last month, this month selected', () => {
|
|
beforeEach(async () => {
|
|
wrapper.setProps({
|
|
maxGddLastMonth: 0,
|
|
isThisMonth: true,
|
|
})
|
|
await wrapper.setData({
|
|
form: {
|
|
id: null,
|
|
date: 'set',
|
|
memo: '',
|
|
amount: '',
|
|
},
|
|
})
|
|
})
|
|
|
|
it('shows no message', () => {
|
|
expect(wrapper.find('[data-test="contribtion-message"]').exists()).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe('max amount reached for this month, no date selected', () => {
|
|
beforeEach(() => {
|
|
wrapper.setProps({
|
|
maxGddThisMonth: 0,
|
|
})
|
|
})
|
|
|
|
it('shows no message', () => {
|
|
expect(wrapper.find('[data-test="contribtion-message"]').exists()).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe('max amount reached for this month, this month selected', () => {
|
|
beforeEach(async () => {
|
|
wrapper.setProps({
|
|
maxGddThisMonth: 0,
|
|
isThisMonth: true,
|
|
})
|
|
await wrapper.setData({
|
|
form: {
|
|
id: null,
|
|
date: 'set',
|
|
memo: '',
|
|
amount: '',
|
|
},
|
|
})
|
|
})
|
|
|
|
it('shows message that no contributions are available for last month', () => {
|
|
expect(wrapper.find('[data-test="contribtion-message"]').text()).toBe(
|
|
'contribution.noOpenCreation.thisMonth',
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('max amount reached for this month, last month selected', () => {
|
|
beforeEach(async () => {
|
|
wrapper.setProps({
|
|
maxGddThisMonth: 0,
|
|
isThisMonth: false,
|
|
})
|
|
await wrapper.setData({
|
|
form: {
|
|
id: null,
|
|
date: 'set',
|
|
memo: '',
|
|
amount: '',
|
|
},
|
|
})
|
|
})
|
|
|
|
it('shows no message', () => {
|
|
expect(wrapper.find('[data-test="contribtion-message"]').exists()).toBe(false)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('default return message', () => {
|
|
it('returns an empty string', () => {
|
|
expect(wrapper.vm.noOpenCreation).toBe('')
|
|
})
|
|
})
|
|
|
|
describe('update amount', () => {
|
|
beforeEach(() => {
|
|
wrapper.findComponent({ name: 'InputHour' }).vm.$emit('updateAmount', 20)
|
|
})
|
|
|
|
it('updates form amount', () => {
|
|
expect(wrapper.vm.form.amount).toBe('400.00')
|
|
})
|
|
})
|
|
|
|
describe('watch value', () => {
|
|
beforeEach(() => {
|
|
wrapper.setProps({
|
|
value: {
|
|
id: 42,
|
|
date: 'set',
|
|
memo: 'Some Memo',
|
|
amount: '400.00',
|
|
},
|
|
})
|
|
})
|
|
|
|
it('updates form', () => {
|
|
expect(wrapper.vm.form).toEqual({
|
|
id: 42,
|
|
date: 'set',
|
|
memo: 'Some Memo',
|
|
amount: '400.00',
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('set contrubtion', () => {
|
|
describe('fill in form data with "id === null"', () => {
|
|
const now = new Date().toISOString()
|
|
|
|
beforeEach(async () => {
|
|
await wrapper.setData({
|
|
form: {
|
|
id: null,
|
|
date: '',
|
|
memo: '',
|
|
amount: '',
|
|
},
|
|
})
|
|
})
|
|
|
|
describe('invalid form data', () => {
|
|
beforeEach(async () => {
|
|
await wrapper.findComponent({ name: 'BFormDatepicker' }).vm.$emit('input', now)
|
|
await wrapper.find('#contribution-amount').find('input').setValue('200')
|
|
})
|
|
|
|
describe('memo lenght < 5, others are valid', () => {
|
|
beforeEach(async () => {
|
|
await wrapper.find('#contribution-memo').find('textarea').setValue('1234')
|
|
})
|
|
|
|
describe('button', () => {
|
|
describe('submit', () => {
|
|
it('has disabled', () => {
|
|
expect(
|
|
wrapper.find('button[data-test="button-submit"]').attributes('disabled'),
|
|
).toBe('disabled')
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('memo lenght > 255, others are valid', () => {
|
|
beforeEach(async () => {
|
|
await wrapper
|
|
.find('#contribution-memo')
|
|
.find('textarea')
|
|
.setValue(
|
|
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
|
|
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
|
|
'01234567890123456789012345678901234567890123456789012345',
|
|
)
|
|
await wrapper.vm.$nextTick()
|
|
})
|
|
|
|
describe('button', () => {
|
|
describe('submit', () => {
|
|
it('has disabled', () => {
|
|
expect(
|
|
wrapper.find('button[data-test="button-submit"]').attributes('disabled'),
|
|
).toBe('disabled')
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('valid form data', () => {
|
|
beforeEach(async () => {
|
|
await wrapper.findComponent({ name: 'BFormDatepicker' }).vm.$emit('input', now)
|
|
await wrapper
|
|
.find('#contribution-memo')
|
|
.find('textarea')
|
|
.setValue('Mein Beitrag zur Gemeinschaft für diesen Monat ...')
|
|
await wrapper.find('#contribution-amount').find('input').setValue('200')
|
|
})
|
|
|
|
describe('button', () => {
|
|
describe('submit', () => {
|
|
it('has enabled', () => {
|
|
expect(
|
|
wrapper.find('button[data-test="button-submit"]').attributes('disabled'),
|
|
).toBeFalsy()
|
|
})
|
|
|
|
it('has label "contribution.submit"', () => {
|
|
expect(wrapper.find('button[data-test="button-submit"]').text()).toContain(
|
|
'contribution.submit',
|
|
)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('on trigger submit', () => {
|
|
beforeEach(async () => {
|
|
await wrapper.find('form').trigger('submit')
|
|
})
|
|
|
|
it('emits "set-contribution"', () => {
|
|
expect(wrapper.emitted('set-contribution')).toEqual(
|
|
expect.arrayContaining([
|
|
expect.arrayContaining([
|
|
{
|
|
id: null,
|
|
date: now,
|
|
memo: 'Mein Beitrag zur Gemeinschaft für diesen Monat ...',
|
|
amount: '200',
|
|
hours: 0,
|
|
},
|
|
]),
|
|
]),
|
|
)
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('update contrubtion', () => {
|
|
describe('fill in form data with set "id"', () => {
|
|
const now = new Date().toISOString()
|
|
|
|
beforeEach(async () => {
|
|
await wrapper.setData({
|
|
form: {
|
|
id: 2,
|
|
date: now,
|
|
memo: 'Mein kommerzieller Beitrag für diesen Monat ...',
|
|
amount: '100',
|
|
},
|
|
})
|
|
})
|
|
|
|
describe('invalid form data', () => {
|
|
beforeEach(async () => {
|
|
// skip this precondition as long as the datepicker is disabled in the component
|
|
// await wrapper.findComponent({ name: 'BFormDatepicker' }).vm.$emit('input', now)
|
|
await wrapper.find('#contribution-amount').find('input').setValue('200')
|
|
})
|
|
|
|
describe('memo lenght < 5, others are valid', () => {
|
|
beforeEach(async () => {
|
|
await wrapper.find('#contribution-memo').find('textarea').setValue('1234')
|
|
})
|
|
|
|
describe('button', () => {
|
|
describe('submit', () => {
|
|
it('has disabled', () => {
|
|
expect(
|
|
wrapper.find('button[data-test="button-submit"]').attributes('disabled'),
|
|
).toBe('disabled')
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('memo lenght > 255, others are valid', () => {
|
|
beforeEach(async () => {
|
|
await wrapper
|
|
.find('#contribution-memo')
|
|
.find('textarea')
|
|
.setValue(
|
|
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
|
|
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
|
|
'01234567890123456789012345678901234567890123456789012345',
|
|
)
|
|
await wrapper.vm.$nextTick()
|
|
})
|
|
|
|
describe('button', () => {
|
|
describe('submit', () => {
|
|
it('has disabled', () => {
|
|
expect(
|
|
wrapper.find('button[data-test="button-submit"]').attributes('disabled'),
|
|
).toBe('disabled')
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('valid form data', () => {
|
|
beforeEach(async () => {
|
|
await wrapper.findComponent({ name: 'BFormDatepicker' }).vm.$emit('input', now)
|
|
await wrapper
|
|
.find('#contribution-memo')
|
|
.find('textarea')
|
|
.setValue('Mein Beitrag zur Gemeinschaft für diesen Monat ...')
|
|
await wrapper.find('#contribution-amount').find('input').setValue('200')
|
|
})
|
|
|
|
describe('button', () => {
|
|
describe('submit', () => {
|
|
it('has enabled', () => {
|
|
expect(
|
|
wrapper.find('button[data-test="button-submit"]').attributes('disabled'),
|
|
).toBeFalsy()
|
|
})
|
|
|
|
it('has label "form.change"', () => {
|
|
expect(wrapper.find('button[data-test="button-submit"]').text()).toContain(
|
|
'form.change',
|
|
)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('on trigger submit', () => {
|
|
beforeEach(async () => {
|
|
await wrapper.find('form').trigger('submit')
|
|
})
|
|
|
|
it('emits "update-contribution"', () => {
|
|
expect(wrapper.emitted('update-contribution')).toEqual([
|
|
[
|
|
{
|
|
id: 2,
|
|
date: now,
|
|
hours: 0,
|
|
memo: 'Mein Beitrag zur Gemeinschaft für diesen Monat ...',
|
|
amount: '200',
|
|
},
|
|
],
|
|
])
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|