@@ -25,7 +10,6 @@
diff --git a/frontend/src/views/Pages/AccountOverview/GddSend/QrCode.vue b/frontend/src/views/Pages/AccountOverview/GddSend/QrCode.vue
new file mode 100644
index 000000000..edf027aef
--- /dev/null
+++ b/frontend/src/views/Pages/AccountOverview/GddSend/QrCode.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('form.cancel') }}
+
+
+
+
+
+
+
diff --git a/frontend/src/views/Pages/AccountOverview/GddSend/TransactionConfirmation.vue b/frontend/src/views/Pages/AccountOverview/GddSend/TransactionConfirmation.vue
new file mode 100644
index 000000000..0b318b815
--- /dev/null
+++ b/frontend/src/views/Pages/AccountOverview/GddSend/TransactionConfirmation.vue
@@ -0,0 +1,49 @@
+
+
+
+ {{ $t('form.send_check') }}
+
+
+ {{ email }}
+ {{ $t('form.receiver') }}
+
+
+ {{ amount }} GDD
+ {{ $t('form.amount') }}
+
+
+ {{ memo ? memo : '-' }}
+ {{ $t('form.message') }}
+
+
+ {{ date }}
+ {{ $moment(date).format('DD.MM.YYYY - HH:mm:ss') }}
+ {{ $t('form.date') }}
+
+
+
+
+
+ {{ $t('form.cancel') }}
+
+
+
+ {{ $t('form.send_now') }}
+
+
+
+
+
+
+
diff --git a/frontend/src/views/Pages/AccountOverview/GddSend/TransactionForm.spec.js b/frontend/src/views/Pages/AccountOverview/GddSend/TransactionForm.spec.js
new file mode 100644
index 000000000..61656f86c
--- /dev/null
+++ b/frontend/src/views/Pages/AccountOverview/GddSend/TransactionForm.spec.js
@@ -0,0 +1,121 @@
+import { mount } from '@vue/test-utils'
+import TransactionForm from './TransactionForm'
+
+const localVue = global.localVue
+
+describe('GddSend', () => {
+ let wrapper
+
+ const mocks = {
+ $t: jest.fn((t) => t),
+ $moment: jest.fn((m) => ({
+ format: () => m,
+ })),
+ $i18n: {
+ locale: jest.fn(() => 'en'),
+ },
+ $n: jest.fn((n) => String(n)),
+ $store: {
+ state: {
+ email: 'user@example.org',
+ },
+ },
+ }
+
+ const Wrapper = () => {
+ return mount(TransactionForm, { localVue, mocks })
+ }
+
+ describe('mount', () => {
+ beforeEach(() => {
+ wrapper = Wrapper()
+ })
+
+ it('renders the component', () => {
+ expect(wrapper.find('div.transaction-form').exists()).toBeTruthy()
+ })
+
+ describe('warning messages', () => {
+ it('has a warning message', () => {
+ expect(wrapper.find('div.alert-default').find('span').text()).toBe('form.attention')
+ })
+ })
+
+ describe('transaction form', () => {
+ describe('email field', () => {
+ it('has an input field of type email', () => {
+ expect(wrapper.find('#input-group-1').find('input').attributes('type')).toBe('email')
+ })
+
+ it('has an envelope icon', () => {
+ expect(wrapper.find('#input-group-1').find('svg').attributes('aria-label')).toBe(
+ 'envelope',
+ )
+ })
+
+ it('has a label form.receiver', () => {
+ expect(wrapper.findAll('div.text-left').at(0).text()).toBe('form.receiver')
+ })
+
+ it('has a placeholder "E-Mail"', () => {
+ expect(wrapper.find('#input-group-1').find('input').attributes('placeholder')).toBe(
+ 'E-Mail',
+ )
+ })
+ })
+
+ describe('ammount field', () => {
+ it('has an input field of type number', () => {
+ expect(wrapper.find('#input-group-2').find('input').attributes('type')).toBe('number')
+ })
+
+ it('has an GDD text icon', () => {
+ expect(wrapper.find('#input-group-2').find('div.h3').text()).toBe('GDD')
+ })
+
+ it('has a label form.amount', () => {
+ expect(wrapper.findAll('div.text-left').at(1).text()).toBe('form.amount')
+ })
+
+ it('has a placeholder "0.01"', () => {
+ expect(wrapper.find('#input-group-2').find('input').attributes('placeholder')).toBe(
+ '0.01',
+ )
+ })
+ })
+
+ describe('message text box', () => {
+ it('has an textarea field', () => {
+ expect(wrapper.find('#input-group-3').find('textarea').exists()).toBeTruthy()
+ })
+
+ it('has an chat-right-text icon', () => {
+ expect(wrapper.find('#input-group-3').find('svg').attributes('aria-label')).toBe(
+ 'chat right text',
+ )
+ })
+
+ it('has a label form.memo', () => {
+ expect(wrapper.findAll('div.text-left').at(2).text()).toBe('form.memo')
+ })
+ })
+
+ describe('cancel button', () => {
+ it('has a cancel button', () => {
+ expect(wrapper.find('button[type="reset"]').exists()).toBeTruthy()
+ })
+
+ it('has the text "form.cancel"', () => {
+ expect(wrapper.find('button[type="reset"]').text()).toBe('form.reset')
+ })
+
+ it.skip('clears the email field on click', async () => {
+ wrapper.find('#input-group-1').find('input').setValue('someone@watches.tv')
+ wrapper.find('button[type="reset"]').trigger('click')
+ await wrapper.vm.$nextTick()
+ expect(wrapper.vm.form.email).toBeNull()
+ })
+ })
+ })
+ })
+})
diff --git a/frontend/src/views/Pages/AccountOverview/GddSend/TransactionForm.vue b/frontend/src/views/Pages/AccountOverview/GddSend/TransactionForm.vue
new file mode 100644
index 000000000..3967bbec0
--- /dev/null
+++ b/frontend/src/views/Pages/AccountOverview/GddSend/TransactionForm.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('form.receiver') }}
+
+ {{ error }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('form.amount') }}
+
+ {{ error }}
+
+
+
+
+ GDD
+
+
+
+ {{ $t('form.memo') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('form.reset') }}
+
+
+
+
+ {{ $t('form.send_now') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/views/Pages/AccountOverview/GddSend/TransactionResult.vue b/frontend/src/views/Pages/AccountOverview/GddSend/TransactionResult.vue
new file mode 100644
index 000000000..11d52fef5
--- /dev/null
+++ b/frontend/src/views/Pages/AccountOverview/GddSend/TransactionResult.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+ {{ $t('form.thx') }}
+
+ {{ $t('form.send_transaction_success') }}
+
+
+ {{ $t('form.close') }}
+
+
+
+
+
+
+
+
+ {{ $t('form.sorry') }}
+
+ {{ $t('form.send_transaction_error') }}
+
+
+ {{ $t('form.close') }}
+
+
+
+
+
+
diff --git a/frontend/src/views/Pages/AccountOverview/GddStatus.spec.js b/frontend/src/views/Pages/AccountOverview/GddStatus.spec.js
index 9adc3b4ca..b414f4e93 100644
--- a/frontend/src/views/Pages/AccountOverview/GddStatus.spec.js
+++ b/frontend/src/views/Pages/AccountOverview/GddStatus.spec.js
@@ -24,12 +24,30 @@ describe('GddStatus', () => {
wrapper = Wrapper()
})
- it('it displays the ammount of GDD', () => {
- expect(wrapper.findAll('div.card-body').at(0).text()).toEqual('1234 GDD')
+ describe('balance is loading', () => {
+ it('it displays em-dash as the ammount of GDD', () => {
+ expect(wrapper.findAll('div.card-body').at(0).text()).toEqual('— GDD')
+ })
+
+ it('it displays em-dash as the ammount of GDT', () => {
+ expect(wrapper.findAll('div.card-body').at(1).text()).toEqual('— GDT')
+ })
})
- it('it displays the ammount of GDT', () => {
- expect(wrapper.findAll('div.card-body').at(1).text()).toEqual('9876 GDT')
+ describe('balance is loaded', () => {
+ beforeEach(() => {
+ wrapper.setProps({
+ pending: false,
+ })
+ })
+
+ it('it displays the ammount of GDD', () => {
+ expect(wrapper.findAll('div.card-body').at(0).text()).toEqual('1234 GDD')
+ })
+
+ it('it displays the ammount of GDT', () => {
+ expect(wrapper.findAll('div.card-body').at(1).text()).toEqual('9876 GDT')
+ })
})
})
})
diff --git a/frontend/src/views/Pages/AccountOverview/GddStatus.vue b/frontend/src/views/Pages/AccountOverview/GddStatus.vue
index 8698d1fdc..32fccce28 100644
--- a/frontend/src/views/Pages/AccountOverview/GddStatus.vue
+++ b/frontend/src/views/Pages/AccountOverview/GddStatus.vue
@@ -2,24 +2,14 @@
-
- {{ $n(balance) }} GDD
-
+
+ {{ pending ? '—' : $n(balance) }} GDD
+
-
- {{ $n(GdtBalance) }} GDT
-
+
+ {{ pending ? '—' : $n(GdtBalance) }} GDT
+
@@ -31,6 +21,10 @@ export default {
props: {
balance: { type: Number, default: 0 },
GdtBalance: { type: Number, default: 0 },
+ pending: {
+ type: Boolean,
+ default: true,
+ },
},
}
diff --git a/frontend/src/views/Pages/AccountOverview/GddTable.vue b/frontend/src/views/Pages/AccountOverview/GddTable.vue
index 194315b31..f516f7cbb 100644
--- a/frontend/src/views/Pages/AccountOverview/GddTable.vue
+++ b/frontend/src/views/Pages/AccountOverview/GddTable.vue
@@ -88,11 +88,9 @@
-
-
- {{ $t('transaction.nullTransactions') }}
-
-
+
+ {{ $t('transaction.nullTransactions') }}
+
@@ -102,7 +100,7 @@ export default {
name: 'GddTable',
props: {
transactions: { default: [] },
- max: { type: Number, default: 25 },
+ max: { type: Number, default: 1000 },
timestamp: { type: Number, default: 0 },
transactionCount: { type: Number, default: 0 },
},
diff --git a/frontend/src/views/Pages/Register.vue b/frontend/src/views/Pages/Register.vue
index 42761ec99..30ab578a2 100755
--- a/frontend/src/views/Pages/Register.vue
+++ b/frontend/src/views/Pages/Register.vue
@@ -97,7 +97,6 @@