mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
Merge branch 'master' into 1594-Show-transaction-was-created-by-link
This commit is contained in:
commit
453d23a7c9
@ -34,6 +34,9 @@ import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualT
|
|||||||
import Decimal from 'decimal.js-light'
|
import Decimal from 'decimal.js-light'
|
||||||
import { calculateDecay } from '@/util/decay'
|
import { calculateDecay } from '@/util/decay'
|
||||||
|
|
||||||
|
const MEMO_MAX_CHARS = 255
|
||||||
|
const MEMO_MIN_CHARS = 5
|
||||||
|
|
||||||
export const executeTransaction = async (
|
export const executeTransaction = async (
|
||||||
amount: Decimal,
|
amount: Decimal,
|
||||||
memo: string,
|
memo: string,
|
||||||
@ -45,6 +48,14 @@ export const executeTransaction = async (
|
|||||||
throw new Error('Sender and Recipient are the same.')
|
throw new Error('Sender and Recipient are the same.')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (memo.length > MEMO_MAX_CHARS) {
|
||||||
|
throw new Error(`memo text is too long (${MEMO_MAX_CHARS} characters maximum)`)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (memo.length < MEMO_MIN_CHARS) {
|
||||||
|
throw new Error(`memo text is too short (${MEMO_MIN_CHARS} characters minimum)`)
|
||||||
|
}
|
||||||
|
|
||||||
// validate amount
|
// validate amount
|
||||||
const receivedCallDate = new Date()
|
const receivedCallDate = new Date()
|
||||||
const sendBalance = await calculateBalance(sender.id, amount.mul(-1), receivedCallDate)
|
const sendBalance = await calculateBalance(sender.id, amount.mul(-1), receivedCallDate)
|
||||||
|
|||||||
@ -62,11 +62,8 @@ describe('TransactionForm', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('is selected: "send"', () => {
|
describe('send GDD', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
// await wrapper.setData({
|
|
||||||
// selected: 'send',
|
|
||||||
// })
|
|
||||||
await wrapper.findAll('input[type="radio"]').at(0).setChecked()
|
await wrapper.findAll('input[type="radio"]').at(0).setChecked()
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -78,15 +75,18 @@ describe('TransactionForm', () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
wrapper.setProps({ balance: 100.0 })
|
wrapper.setProps({ balance: 100.0 })
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('transaction form show because balance 100,0 GDD', () => {
|
describe('transaction form show because balance 100,0 GDD', () => {
|
||||||
it('has no warning message ', () => {
|
it('has no warning message ', () => {
|
||||||
expect(wrapper.find('.errors').exists()).toBe(false)
|
expect(wrapper.find('.errors').exists()).toBe(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('has a reset button', () => {
|
it('has a reset button', () => {
|
||||||
expect(wrapper.find('.test-buttons').findAll('button').at(0).attributes('type')).toBe(
|
expect(wrapper.find('.test-buttons').findAll('button').at(0).attributes('type')).toBe(
|
||||||
'reset',
|
'reset',
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('has a submit button', () => {
|
it('has a submit button', () => {
|
||||||
expect(wrapper.find('.test-buttons').findAll('button').at(1).attributes('type')).toBe(
|
expect(wrapper.find('.test-buttons').findAll('button').at(1).attributes('type')).toBe(
|
||||||
'submit',
|
'submit',
|
||||||
@ -121,6 +121,12 @@ describe('TransactionForm', () => {
|
|||||||
expect(wrapper.find('span.errors').text()).toBe('validations.messages.email')
|
expect(wrapper.find('span.errors').text()).toBe('validations.messages.email')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('flushes an error message when email is the email of logged in user', async () => {
|
||||||
|
await wrapper.find('#input-group-1').find('input').setValue('user@example.org')
|
||||||
|
await flushPromises()
|
||||||
|
expect(wrapper.find('span.errors').text()).toBe('form.validation.is-not')
|
||||||
|
})
|
||||||
|
|
||||||
it('trims the email after blur', async () => {
|
it('trims the email after blur', async () => {
|
||||||
await wrapper.find('#input-group-1').find('input').setValue(' valid@email.com ')
|
await wrapper.find('#input-group-1').find('input').setValue(' valid@email.com ')
|
||||||
await wrapper.find('#input-group-1').find('input').trigger('blur')
|
await wrapper.find('#input-group-1').find('input').trigger('blur')
|
||||||
@ -195,6 +201,41 @@ describe('TransactionForm', () => {
|
|||||||
expect(wrapper.find('span.errors').text()).toBe('validations.messages.min')
|
expect(wrapper.find('span.errors').text()).toBe('validations.messages.min')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('flushes an error message when memo is more than 255 characters', async () => {
|
||||||
|
await wrapper.find('#input-group-3').find('textarea').setValue(`
|
||||||
|
Es ist ein König in Thule, der trinkt
|
||||||
|
Champagner, es geht ihm nichts drüber;
|
||||||
|
Und wenn er seinen Champagner trinkt,
|
||||||
|
Dann gehen die Augen ihm über.
|
||||||
|
|
||||||
|
Die Ritter sitzen um ihn her,
|
||||||
|
Die ganze Historische Schule;
|
||||||
|
Ihm aber wird die Zunge schwer,
|
||||||
|
Es lallt der König von Thule:
|
||||||
|
|
||||||
|
„Als Alexander, der Griechenheld,
|
||||||
|
Mit seinem kleinen Haufen
|
||||||
|
Erobert hatte die ganze Welt,
|
||||||
|
Da gab er sich ans Saufen.
|
||||||
|
|
||||||
|
Ihn hatten so durstig gemacht der Krieg
|
||||||
|
Und die Schlachten, die er geschlagen;
|
||||||
|
Er soff sich zu Tode nach dem Sieg,
|
||||||
|
Er konnte nicht viel vertragen.
|
||||||
|
|
||||||
|
Ich aber bin ein stärkerer Mann
|
||||||
|
Und habe mich klüger besonnen:
|
||||||
|
Wie jener endete, fang ich an,
|
||||||
|
Ich hab mit dem Trinken begonnen.
|
||||||
|
|
||||||
|
Im Rausche wird der Heldenzug
|
||||||
|
Mir später weit besser gelingen;
|
||||||
|
Dann werde ich, taumelnd von Krug zu Krug,
|
||||||
|
Die ganze Welt bezwingen.“`)
|
||||||
|
await flushPromises()
|
||||||
|
expect(wrapper.find('span.errors').text()).toBe('validations.messages.max')
|
||||||
|
})
|
||||||
|
|
||||||
it('flushes no error message when memo is valid', async () => {
|
it('flushes no error message when memo is valid', async () => {
|
||||||
await wrapper.find('#input-group-3').find('textarea').setValue('Long enough')
|
await wrapper.find('#input-group-3').find('textarea').setValue('Long enough')
|
||||||
await flushPromises()
|
await flushPromises()
|
||||||
|
|||||||
@ -99,7 +99,7 @@
|
|||||||
:rules="{
|
:rules="{
|
||||||
required: true,
|
required: true,
|
||||||
min: 5,
|
min: 5,
|
||||||
max: 150,
|
max: 255,
|
||||||
}"
|
}"
|
||||||
:name="$t('form.message')"
|
:name="$t('form.message')"
|
||||||
v-slot="{ errors }"
|
v-slot="{ errors }"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user