Merge branch 'master' into 2715-feature-document-the-technical-federation-architecture

This commit is contained in:
clauspeterhuebner 2023-02-27 12:37:25 +01:00 committed by GitHub
commit 78d241482a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
96 changed files with 232 additions and 577 deletions

View File

@ -6,7 +6,7 @@
</template> </template>
<script> <script>
import defaultLayout from '@/layouts/defaultLayout.vue' import defaultLayout from '@/layouts/defaultLayout'
export default { export default {
name: 'app', name: 'app',

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ChangeUserRoleFormular from './ChangeUserRoleFormular.vue' import ChangeUserRoleFormular from './ChangeUserRoleFormular'
import { setUserRole } from '../graphql/setUserRole' import { setUserRole } from '../graphql/setUserRole'
import { toastSuccessSpy, toastErrorSpy } from '../../test/testSetup' import { toastSuccessSpy, toastErrorSpy } from '../../test/testSetup'

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ConfirmRegisterMailFormular from './ConfirmRegisterMailFormular.vue' import ConfirmRegisterMailFormular from './ConfirmRegisterMailFormular'
import { toastErrorSpy, toastSuccessSpy } from '../../test/testSetup' import { toastErrorSpy, toastSuccessSpy } from '../../test/testSetup'

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionLink from './ContributionLink.vue' import ContributionLink from './ContributionLink'
const localVue = global.localVue const localVue = global.localVue

View File

@ -43,8 +43,8 @@
</div> </div>
</template> </template>
<script> <script>
import ContributionLinkForm from '../ContributionLink/ContributionLinkForm.vue' import ContributionLinkForm from '../ContributionLink/ContributionLinkForm'
import ContributionLinkList from '../ContributionLink/ContributionLinkList.vue' import ContributionLinkList from '../ContributionLink/ContributionLinkList'
export default { export default {
name: 'ContributionLink', name: 'ContributionLink',

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionLinkForm from './ContributionLinkForm.vue' import ContributionLinkForm from './ContributionLinkForm'
import { toastErrorSpy, toastSuccessSpy } from '../../../test/testSetup' import { toastErrorSpy, toastSuccessSpy } from '../../../test/testSetup'
import { createContributionLink } from '@/graphql/createContributionLink.js' import { createContributionLink } from '@/graphql/createContributionLink.js'

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionLinkList from './ContributionLinkList.vue' import ContributionLinkList from './ContributionLinkList'
import { toastSuccessSpy, toastErrorSpy } from '../../../test/testSetup' import { toastSuccessSpy, toastErrorSpy } from '../../../test/testSetup'
// import { deleteContributionLink } from '../graphql/deleteContributionLink' // import { deleteContributionLink } from '../graphql/deleteContributionLink'

View File

@ -46,7 +46,7 @@
</template> </template>
<script> <script>
import { deleteContributionLink } from '@/graphql/deleteContributionLink.js' import { deleteContributionLink } from '@/graphql/deleteContributionLink.js'
import FigureQrCode from '../FigureQrCode.vue' import FigureQrCode from '../FigureQrCode'
export default { export default {
name: 'ContributionLinkList', name: 'ContributionLinkList',

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionMessagesFormular from './ContributionMessagesFormular.vue' import ContributionMessagesFormular from './ContributionMessagesFormular'
import { toastErrorSpy, toastSuccessSpy } from '../../../test/testSetup' import { toastErrorSpy, toastSuccessSpy } from '../../../test/testSetup'
const localVue = global.localVue const localVue = global.localVue

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionMessagesList from './ContributionMessagesList.vue' import ContributionMessagesList from './ContributionMessagesList'
const localVue = global.localVue const localVue = global.localVue

View File

@ -15,8 +15,8 @@
</div> </div>
</template> </template>
<script> <script>
import ContributionMessagesListItem from './slots/ContributionMessagesListItem.vue' import ContributionMessagesListItem from './slots/ContributionMessagesListItem'
import ContributionMessagesFormular from '../ContributionMessages/ContributionMessagesFormular.vue' import ContributionMessagesFormular from '../ContributionMessages/ContributionMessagesFormular'
import { listContributionMessages } from '../../graphql/listContributionMessages.js' import { listContributionMessages } from '../../graphql/listContributionMessages.js'
export default { export default {

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionMessagesListItem from './ContributionMessagesListItem.vue' import ContributionMessagesListItem from './ContributionMessagesListItem'
const localVue = global.localVue const localVue = global.localVue

View File

@ -16,7 +16,7 @@
</div> </div>
</template> </template>
<script> <script>
import ParseMessage from '@/components/ContributionMessages/ParseMessage.vue' import ParseMessage from '@/components/ContributionMessages/ParseMessage'
export default { export default {
name: 'ContributionMessagesListItem', name: 'ContributionMessagesListItem',

View File

@ -1,7 +1,6 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import CreationFormular from './CreationFormular.vue' import CreationFormular from './CreationFormular'
import { adminCreateContribution } from '../graphql/adminCreateContribution' import { adminCreateContribution } from '../graphql/adminCreateContribution'
import { adminCreateContributions } from '../graphql/adminCreateContributions'
import { toastErrorSpy, toastSuccessSpy } from '../../test/testSetup' import { toastErrorSpy, toastSuccessSpy } from '../../test/testSetup'
const localVue = global.localVue const localVue = global.localVue
@ -328,122 +327,6 @@ describe('CreationFormular', () => {
}) })
}) })
}) })
describe('mass creation with success', () => {
beforeEach(async () => {
jest.clearAllMocks()
apolloMutateMock.mockResolvedValue({
data: {
adminCreateContributions: {
success: true,
successfulContribution: ['bob@baumeister.de', 'bibi@bloxberg.de'],
failedContribution: [],
},
},
})
await wrapper.setProps({
type: 'massCreation',
creation: [200, 400, 600],
items: [{ email: 'bob@baumeister.de' }, { email: 'bibi@bloxberg.de' }],
})
await wrapper.findAll('input[type="radio"]').at(1).setChecked()
await wrapper.find('textarea').setValue('Test mass create coins')
await wrapper.find('input[type="number"]').setValue(200)
await wrapper.find('.test-submit').trigger('click')
})
it('calls the API', () => {
expect(apolloMutateMock).toBeCalledWith(
expect.objectContaining({
mutation: adminCreateContributions,
variables: {
pendingCreations: [
{
email: 'bob@baumeister.de',
creationDate: getCreationDate(1),
amount: 200,
memo: 'Test mass create coins',
},
{
email: 'bibi@bloxberg.de',
creationDate: getCreationDate(1),
amount: 200,
memo: 'Test mass create coins',
},
],
},
}),
)
})
it('updates open creations in store', () => {
expect(stateCommitMock).toBeCalledWith('openCreationsPlus', 2)
})
it('emits remove-all-bookmark', () => {
expect(wrapper.emitted('remove-all-bookmark')).toBeTruthy()
})
})
describe('mass creation with success but all failed', () => {
beforeEach(async () => {
jest.clearAllMocks()
apolloMutateMock.mockResolvedValue({
data: {
adminCreateContributions: {
success: true,
successfulContribution: [],
failedContribution: ['bob@baumeister.de', 'bibi@bloxberg.de'],
},
},
})
await wrapper.setProps({
type: 'massCreation',
creation: [200, 400, 600],
items: [{ email: 'bob@baumeister.de' }, { email: 'bibi@bloxberg.de' }],
})
await wrapper.findAll('input[type="radio"]').at(1).setChecked()
await wrapper.find('textarea').setValue('Test mass create coins')
await wrapper.find('input[type="number"]').setValue(200)
await wrapper.find('.test-submit').trigger('click')
})
it('updates open creations in store', () => {
expect(stateCommitMock).toBeCalledWith('openCreationsPlus', 0)
})
it('emits remove all bookmarks', () => {
expect(wrapper.emitted('remove-all-bookmark')).toBeTruthy()
})
it('emits toast failed creations with two emails', () => {
expect(wrapper.emitted('toast-failed-creations')).toEqual([
[['bob@baumeister.de', 'bibi@bloxberg.de']],
])
})
})
describe('mass creation with error', () => {
beforeEach(async () => {
jest.clearAllMocks()
apolloMutateMock.mockRejectedValue({
message: 'Oh no!',
})
await wrapper.setProps({
type: 'massCreation',
creation: [200, 400, 600],
items: [{ email: 'bob@baumeister.de' }, { email: 'bibi@bloxberg.de' }],
})
await wrapper.findAll('input[type="radio"]').at(1).setChecked()
await wrapper.find('textarea').setValue('Test mass create coins')
await wrapper.find('input[type="number"]').setValue(200)
await wrapper.find('.test-submit').trigger('click')
})
it('toasts an error message', () => {
expect(toastErrorSpy).toBeCalledWith('Oh no!')
})
})
}) })
}) })
}) })

View File

@ -86,16 +86,11 @@
</template> </template>
<script> <script>
import { adminCreateContribution } from '../graphql/adminCreateContribution' import { adminCreateContribution } from '../graphql/adminCreateContribution'
import { adminCreateContributions } from '../graphql/adminCreateContributions'
import { creationMonths } from '../mixins/creationMonths' import { creationMonths } from '../mixins/creationMonths'
export default { export default {
name: 'CreationFormular', name: 'CreationFormular',
mixins: [creationMonths], mixins: [creationMonths],
props: { props: {
type: {
type: String,
required: false,
},
pagetype: { pagetype: {
type: String, type: String,
required: false, required: false,
@ -140,78 +135,38 @@ export default {
updateRadioSelected(name) { updateRadioSelected(name) {
// do we want to reset the memo everytime the month changes? // do we want to reset the memo everytime the month changes?
this.text = this.$t('creation_form.creation_for') + ' ' + name.short + ' ' + name.year this.text = this.$t('creation_form.creation_for') + ' ' + name.short + ' ' + name.year
if (this.type === 'singleCreation') { this.rangeMin = 0
this.rangeMin = 0 this.rangeMax = name.creation
this.rangeMax = name.creation
}
}, },
submitCreation() { submitCreation() {
let submitObj = [] this.$apollo
if (this.type === 'massCreation') { .mutate({
this.items.forEach((item) => { mutation: adminCreateContribution,
submitObj.push({ variables: {
email: item.email, email: this.item.email,
creationDate: this.selected.date, creationDate: this.selected.date,
amount: Number(this.value), amount: Number(this.value),
memo: this.text, memo: this.text,
}) },
})
.then((result) => {
this.$emit('update-user-data', this.item, result.data.adminCreateContribution)
this.$store.commit('openCreationsPlus', 1)
this.toastSuccess(
this.$t('creation_form.toasted', {
value: this.value,
email: this.item.email,
}),
)
// what is this? Tests says that this.text is not reseted
this.$refs.creationForm.reset()
this.value = 0
})
.catch((error) => {
this.toastError(error.message)
this.$refs.creationForm.reset()
this.value = 0
}) })
this.$apollo
.mutate({
mutation: adminCreateContributions,
variables: {
pendingCreations: submitObj,
},
fetchPolicy: 'no-cache',
})
.then((result) => {
const failedContributions = []
this.$store.commit(
'openCreationsPlus',
result.data.adminCreateContributions.successfulContribution.length,
)
if (result.data.adminCreateContributions.failedContribution.length > 0) {
result.data.adminCreateContributions.failedContribution.forEach((email) => {
failedContributions.push(email)
})
}
this.$emit('remove-all-bookmark')
this.$emit('toast-failed-creations', failedContributions)
})
.catch((error) => {
this.toastError(error.message)
})
} else if (this.type === 'singleCreation') {
submitObj = {
email: this.item.email,
creationDate: this.selected.date,
amount: Number(this.value),
memo: this.text,
}
this.$apollo
.mutate({
mutation: adminCreateContribution,
variables: submitObj,
})
.then((result) => {
this.$emit('update-user-data', this.item, result.data.adminCreateContribution)
this.$store.commit('openCreationsPlus', 1)
this.toastSuccess(
this.$t('creation_form.toasted', {
value: this.value,
email: this.item.email,
}),
)
// what is this? Tests says that this.text is not reseted
this.$refs.creationForm.reset()
this.value = 0
})
.catch((error) => {
this.toastError(error.message)
this.$refs.creationForm.reset()
this.value = 0
})
}
}, },
}, },
watch: { watch: {

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import CreationTransactionList from './CreationTransactionList.vue' import CreationTransactionList from './CreationTransactionList'
import { toastErrorSpy } from '../../test/testSetup' import { toastErrorSpy } from '../../test/testSetup'
const localVue = global.localVue const localVue = global.localVue

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import DeletedUserFormular from './DeletedUserFormular.vue' import DeletedUserFormular from './DeletedUserFormular'
import { deleteUser } from '../graphql/deleteUser' import { deleteUser } from '../graphql/deleteUser'
import { unDeleteUser } from '../graphql/unDeleteUser' import { unDeleteUser } from '../graphql/unDeleteUser'
import { toastErrorSpy } from '../../test/testSetup' import { toastErrorSpy } from '../../test/testSetup'

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import EditCreationFormular from './EditCreationFormular.vue' import EditCreationFormular from './EditCreationFormular'
import { toastErrorSpy, toastSuccessSpy } from '../../test/testSetup' import { toastErrorSpy, toastSuccessSpy } from '../../test/testSetup'
const localVue = global.localVue const localVue = global.localVue

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import FigureQrCode from './FigureQrCode.vue' import FigureQrCode from './FigureQrCode'
const localVue = global.localVue const localVue = global.localVue

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import NavBar from './NavBar.vue' import NavBar from './NavBar'
const localVue = global.localVue const localVue = global.localVue
@ -68,14 +68,11 @@ describe('NavBar', () => {
}) })
describe('wallet', () => { describe('wallet', () => {
const windowLocationMock = jest.fn()
const windowLocation = window.location const windowLocation = window.location
beforeEach(async () => { beforeEach(async () => {
delete window.location delete window.location
window.location = { window.location = ''
assign: windowLocationMock, await wrapper.findAll('.nav-item').at(4).find('a').trigger('click')
}
await wrapper.findAll('.nav-item').at(5).find('a').trigger('click')
}) })
afterEach(() => { afterEach(() => {
@ -83,8 +80,8 @@ describe('NavBar', () => {
window.location = windowLocation window.location = windowLocation
}) })
it.skip('changes window location to wallet', () => { it('changes window location to wallet', () => {
expect(windowLocationMock()).toBe('valid-token') expect(window.location).toBe('http://localhost/authenticate?token=valid-token')
}) })
it('dispatches logout to store', () => { it('dispatches logout to store', () => {

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import Overlay from './Overlay.vue' import Overlay from './Overlay'
const localVue = global.localVue const localVue = global.localVue

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import OpenCreationsTable from './OpenCreationsTable.vue' import OpenCreationsTable from './OpenCreationsTable'
const localVue = global.localVue const localVue = global.localVue

View File

@ -117,9 +117,9 @@
<script> <script>
import { toggleRowDetails } from '../../mixins/toggleRowDetails' import { toggleRowDetails } from '../../mixins/toggleRowDetails'
import RowDetails from '../RowDetails.vue' import RowDetails from '../RowDetails'
import EditCreationFormular from '../EditCreationFormular.vue' import EditCreationFormular from '../EditCreationFormular'
import ContributionMessagesList from '../ContributionMessages/ContributionMessagesList.vue' import ContributionMessagesList from '../ContributionMessages/ContributionMessagesList'
const iconMap = { const iconMap = {
IN_PROGRESS: 'question-square', IN_PROGRESS: 'question-square',

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import SearchUserTable from './SearchUserTable.vue' import SearchUserTable from './SearchUserTable'
const localVue = global.localVue const localVue = global.localVue

View File

@ -53,7 +53,6 @@
<b-tab :title="$t('creation')" active :disabled="row.item.deletedAt !== null"> <b-tab :title="$t('creation')" active :disabled="row.item.deletedAt !== null">
<creation-formular <creation-formular
v-if="!row.item.deletedAt" v-if="!row.item.deletedAt"
type="singleCreation"
pagetype="singleCreation" pagetype="singleCreation"
:creation="row.item.creation" :creation="row.item.creation"
:item="row.item" :item="row.item"
@ -92,12 +91,12 @@
</div> </div>
</template> </template>
<script> <script>
import CreationFormular from '../CreationFormular.vue' import CreationFormular from '../CreationFormular'
import ConfirmRegisterMailFormular from '../ConfirmRegisterMailFormular.vue' import ConfirmRegisterMailFormular from '../ConfirmRegisterMailFormular'
import CreationTransactionList from '../CreationTransactionList.vue' import CreationTransactionList from '../CreationTransactionList'
import TransactionLinkList from '../TransactionLinkList.vue' import TransactionLinkList from '../TransactionLinkList'
import ChangeUserRoleFormular from '../ChangeUserRoleFormular.vue' import ChangeUserRoleFormular from '../ChangeUserRoleFormular'
import DeletedUserFormular from '../DeletedUserFormular.vue' import DeletedUserFormular from '../DeletedUserFormular'
export default { export default {
name: 'SearchUserTable', name: 'SearchUserTable',

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import StatisticTable from './StatisticTable.vue' import StatisticTable from './StatisticTable'
const localVue = global.localVue const localVue = global.localVue

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import TransactionLinkList from './TransactionLinkList.vue' import TransactionLinkList from './TransactionLinkList'
import { listTransactionLinksAdmin } from '../graphql/listTransactionLinksAdmin.js' import { listTransactionLinksAdmin } from '../graphql/listTransactionLinksAdmin.js'
import { toastErrorSpy } from '../../test/testSetup' import { toastErrorSpy } from '../../test/testSetup'

View File

@ -1,11 +0,0 @@
import gql from 'graphql-tag'
export const adminCreateContributions = gql`
mutation ($pendingCreations: [AdminCreateContributionArgs!]!) {
adminCreateContributions(pendingCreations: $pendingCreations) {
success
successfulContribution
failedContribution
}
}
`

View File

@ -7,8 +7,8 @@
</template> </template>
<script> <script>
import NavBar from '@/components/NavBar.vue' import NavBar from '@/components/NavBar'
import ContentFooter from '@/components/ContentFooter.vue' import ContentFooter from '@/components/ContentFooter'
export default { export default {
name: 'defaultLayout', name: 'defaultLayout',
components: { components: {

View File

@ -1,5 +1,5 @@
import Vue from 'vue' import Vue from 'vue'
import App from './App.vue' import App from './App'
// without this async calls are not working // without this async calls are not working
import 'regenerator-runtime' import 'regenerator-runtime'

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import CommunityStatistic from './CommunityStatistic.vue' import CommunityStatistic from './CommunityStatistic'
import { communityStatistics } from '@/graphql/communityStatistics.js' import { communityStatistics } from '@/graphql/communityStatistics.js'
import { toastErrorSpy } from '../../test/testSetup' import { toastErrorSpy } from '../../test/testSetup'
import VueApollo from 'vue-apollo' import VueApollo from 'vue-apollo'

View File

@ -5,7 +5,7 @@
</template> </template>
<script> <script>
import { communityStatistics } from '@/graphql/communityStatistics.js' import { communityStatistics } from '@/graphql/communityStatistics.js'
import StatisticTable from '../components/Tables/StatisticTable.vue' import StatisticTable from '../components/Tables/StatisticTable'
export default { export default {
name: 'CommunityStatistic', name: 'CommunityStatistic',

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionLinks from './ContributionLinks.vue' import ContributionLinks from './ContributionLinks'
import { listContributionLinks } from '@/graphql/listContributionLinks.js' import { listContributionLinks } from '@/graphql/listContributionLinks.js'
import { toastErrorSpy } from '../../test/testSetup' import { toastErrorSpy } from '../../test/testSetup'

View File

@ -9,7 +9,7 @@
</template> </template>
<script> <script>
import { listContributionLinks } from '@/graphql/listContributionLinks.js' import { listContributionLinks } from '@/graphql/listContributionLinks.js'
import ContributionLink from '../components/ContributionLink/ContributionLink.vue' import ContributionLink from '../components/ContributionLink/ContributionLink'
export default { export default {
name: 'ContributionLinks', name: 'ContributionLinks',

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import CreationConfirm from './CreationConfirm.vue' import CreationConfirm from './CreationConfirm'
import { adminDeleteContribution } from '../graphql/adminDeleteContribution' import { adminDeleteContribution } from '../graphql/adminDeleteContribution'
import { denyContribution } from '../graphql/denyContribution' import { denyContribution } from '../graphql/denyContribution'
import { listAllContributions } from '../graphql/listAllContributions' import { listAllContributions } from '../graphql/listAllContributions'

View File

@ -71,8 +71,8 @@
</div> </div>
</template> </template>
<script> <script>
import Overlay from '../components/Overlay.vue' import Overlay from '../components/Overlay'
import OpenCreationsTable from '../components/Tables/OpenCreationsTable.vue' import OpenCreationsTable from '../components/Tables/OpenCreationsTable'
import { listAllContributions } from '../graphql/listAllContributions' import { listAllContributions } from '../graphql/listAllContributions'
import { adminDeleteContribution } from '../graphql/adminDeleteContribution' import { adminDeleteContribution } from '../graphql/adminDeleteContribution'
import { confirmContribution } from '../graphql/confirmContribution' import { confirmContribution } from '../graphql/confirmContribution'

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import Overview from './Overview.vue' import Overview from './Overview'
import { listAllContributions } from '../graphql/listAllContributions' import { listAllContributions } from '../graphql/listAllContributions'
import VueApollo from 'vue-apollo' import VueApollo from 'vue-apollo'
import { createMockClient } from 'mock-apollo-client' import { createMockClient } from 'mock-apollo-client'

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import UserSearch from './UserSearch.vue' import UserSearch from './UserSearch'
import { toastErrorSpy, toastSuccessSpy } from '../../test/testSetup' import { toastErrorSpy, toastSuccessSpy } from '../../test/testSetup'
const localVue = global.localVue const localVue = global.localVue

View File

@ -58,7 +58,7 @@
</div> </div>
</template> </template>
<script> <script>
import SearchUserTable from '../components/Tables/SearchUserTable.vue' import SearchUserTable from '../components/Tables/SearchUserTable'
import { searchUsers } from '../graphql/searchUsers' import { searchUsers } from '../graphql/searchUsers'
import { creationMonths } from '../mixins/creationMonths' import { creationMonths } from '../mixins/creationMonths'
@ -72,7 +72,6 @@ export default {
return { return {
showArrays: false, showArrays: false,
searchResult: [], searchResult: [],
massCreation: [],
criteria: '', criteria: '',
filters: { filters: {
byActivated: null, byActivated: null,

View File

@ -24,9 +24,6 @@ export const mutations = {
moderator: (state, moderator) => { moderator: (state, moderator) => {
state.moderator = moderator state.moderator = moderator
}, },
setUserSelectedInMassCreation: (state, userSelectedInMassCreation) => {
state.userSelectedInMassCreation = userSelectedInMassCreation
},
} }
export const actions = { export const actions = {

View File

@ -10,7 +10,6 @@ const {
resetOpenCreations, resetOpenCreations,
setOpenCreations, setOpenCreations,
moderator, moderator,
setUserSelectedInMassCreation,
} = mutations } = mutations
const { logout } = actions const { logout } = actions
@ -65,14 +64,6 @@ describe('Vuex store', () => {
expect(state.openCreations).toEqual(12) expect(state.openCreations).toEqual(12)
}) })
}) })
describe('setUserSelectedInMassCreation', () => {
it('sets userSelectedInMassCreation to given value', () => {
const state = { userSelectedInMassCreation: [] }
setUserSelectedInMassCreation(state, [0, 1, 2])
expect(state.userSelectedInMassCreation).toEqual([0, 1, 2])
})
})
}) })
describe('actions', () => { describe('actions', () => {

View File

@ -42,7 +42,6 @@ export enum RIGHTS {
DELETE_USER = 'DELETE_USER', DELETE_USER = 'DELETE_USER',
UNDELETE_USER = 'UNDELETE_USER', UNDELETE_USER = 'UNDELETE_USER',
ADMIN_CREATE_CONTRIBUTION = 'ADMIN_CREATE_CONTRIBUTION', ADMIN_CREATE_CONTRIBUTION = 'ADMIN_CREATE_CONTRIBUTION',
ADMIN_CREATE_CONTRIBUTIONS = 'ADMIN_CREATE_CONTRIBUTIONS',
ADMIN_UPDATE_CONTRIBUTION = 'ADMIN_UPDATE_CONTRIBUTION', ADMIN_UPDATE_CONTRIBUTION = 'ADMIN_UPDATE_CONTRIBUTION',
ADMIN_DELETE_CONTRIBUTION = 'ADMIN_DELETE_CONTRIBUTION', ADMIN_DELETE_CONTRIBUTION = 'ADMIN_DELETE_CONTRIBUTION',
LIST_UNCONFIRMED_CONTRIBUTIONS = 'LIST_UNCONFIRMED_CONTRIBUTIONS', LIST_UNCONFIRMED_CONTRIBUTIONS = 'LIST_UNCONFIRMED_CONTRIBUTIONS',

View File

@ -1,19 +0,0 @@
import { ObjectType, Field } from 'type-graphql'
@ObjectType()
export class AdminCreateContributions {
constructor() {
this.success = false
this.successfulContribution = []
this.failedContribution = []
}
@Field(() => Boolean)
success: boolean
@Field(() => [String])
successfulContribution: string[]
@Field(() => [String])
failedContribution: string[]
}

View File

@ -13,7 +13,6 @@ import {
denyContribution, denyContribution,
confirmContribution, confirmContribution,
adminCreateContribution, adminCreateContribution,
adminCreateContributions,
adminUpdateContribution, adminUpdateContribution,
adminDeleteContribution, adminDeleteContribution,
login, login,
@ -1655,21 +1654,6 @@ describe('ContributionResolver', () => {
}) })
}) })
describe('adminCreateContributions', () => {
it('returns an error', async () => {
await expect(
mutate({
mutation: adminCreateContributions,
variables: { pendingCreations: [variables] },
}),
).resolves.toEqual(
expect.objectContaining({
errors: [new GraphQLError('401 Unauthorized')],
}),
)
})
})
describe('adminUpdateContribution', () => { describe('adminUpdateContribution', () => {
it('returns an error', async () => { it('returns an error', async () => {
await expect( await expect(
@ -1749,21 +1733,6 @@ describe('ContributionResolver', () => {
}) })
}) })
describe('adminCreateContributions', () => {
it('returns an error', async () => {
await expect(
mutate({
mutation: adminCreateContributions,
variables: { pendingCreations: [variables] },
}),
).resolves.toEqual(
expect.objectContaining({
errors: [new GraphQLError('401 Unauthorized')],
}),
)
})
})
describe('adminUpdateContribution', () => { describe('adminUpdateContribution', () => {
it('returns an error', async () => { it('returns an error', async () => {
await expect( await expect(
@ -2094,59 +2063,13 @@ describe('ContributionResolver', () => {
}) })
}) })
describe('adminCreateContributions', () => { describe('adminUpdateContribution', () => {
// at this point we have this data in DB: // at this point we have this data in DB:
// bibi@bloxberg.de: [1000, 1000, 800] // bibi@bloxberg.de: [1000, 1000, 800]
// peter@lustig.de: [1000, 600, 1000] // peter@lustig.de: [1000, 600, 1000]
// stephen@hawking.uk: [1000, 1000, 1000] - deleted // stephen@hawking.uk: [1000, 1000, 1000] - deleted
// garrick@ollivander.com: [1000, 1000, 1000] - not activated // garrick@ollivander.com: [1000, 1000, 1000] - not activated
const massCreationVariables = [
'bibi@bloxberg.de',
'peter@lustig.de',
'stephen@hawking.uk',
'garrick@ollivander.com',
'bob@baumeister.de',
].map((email) => {
return {
email,
amount: new Decimal(500),
memo: 'Grundeinkommen',
creationDate: contributionDateFormatter(new Date()),
}
})
it('returns success, two successful creation and three failed creations', async () => {
await expect(
mutate({
mutation: adminCreateContributions,
variables: { pendingCreations: massCreationVariables },
}),
).resolves.toEqual(
expect.objectContaining({
data: {
adminCreateContributions: {
success: true,
successfulContribution: ['bibi@bloxberg.de', 'peter@lustig.de'],
failedContribution: [
'stephen@hawking.uk',
'garrick@ollivander.com',
'bob@baumeister.de',
],
},
},
}),
)
})
})
describe('adminUpdateContribution', () => {
// at this I expect to have this data in DB:
// bibi@bloxberg.de: [1000, 1000, 300]
// peter@lustig.de: [1000, 600, 500]
// stephen@hawking.uk: [1000, 1000, 1000] - deleted
// garrick@ollivander.com: [1000, 1000, 1000] - not activated
describe('user for creation to update does not exist', () => { describe('user for creation to update does not exist', () => {
it('throws an error', async () => { it('throws an error', async () => {
jest.clearAllMocks() jest.clearAllMocks()
@ -2360,7 +2283,7 @@ describe('ContributionResolver', () => {
date: expect.any(String), date: expect.any(String),
memo: 'Das war leider zu Viel!', memo: 'Das war leider zu Viel!',
amount: '200', amount: '200',
creation: ['1000', '800', '500'], creation: ['1000', '800', '1000'],
}, },
}, },
}), }),
@ -2772,15 +2695,15 @@ describe('ContributionResolver', () => {
resetToken() resetToken()
}) })
it('returns 19 creations in total', async () => { it('returns 17 creations in total', async () => {
const { const {
data: { adminListAllContributions: contributionListObject }, data: { adminListAllContributions: contributionListObject },
}: { data: { adminListAllContributions: ContributionListResult } } = await query({ }: { data: { adminListAllContributions: ContributionListResult } } = await query({
query: adminListAllContributions, query: adminListAllContributions,
}) })
expect(contributionListObject.contributionList).toHaveLength(19) expect(contributionListObject.contributionList).toHaveLength(17)
expect(contributionListObject).toMatchObject({ expect(contributionListObject).toMatchObject({
contributionCount: 19, contributionCount: 17,
contributionList: expect.arrayContaining([ contributionList: expect.arrayContaining([
expect.objectContaining({ expect.objectContaining({
amount: expect.decimalEqual(50), amount: expect.decimalEqual(50),
@ -2845,24 +2768,6 @@ describe('ContributionResolver', () => {
messagesCount: 0, messagesCount: 0,
state: 'PENDING', state: 'PENDING',
}), }),
expect.objectContaining({
amount: expect.decimalEqual(500),
firstName: 'Bibi',
id: expect.any(Number),
lastName: 'Bloxberg',
memo: 'Grundeinkommen',
messagesCount: 0,
state: 'PENDING',
}),
expect.objectContaining({
amount: expect.decimalEqual(500),
firstName: 'Peter',
id: expect.any(Number),
lastName: 'Lustig',
memo: 'Grundeinkommen',
messagesCount: 0,
state: 'PENDING',
}),
expect.objectContaining({ expect.objectContaining({
amount: expect.decimalEqual(10), amount: expect.decimalEqual(10),
firstName: 'Bibi', firstName: 'Bibi',
@ -2957,21 +2862,21 @@ describe('ContributionResolver', () => {
}) })
}) })
it('returns five pending creations with page size set to 5', async () => { it('returns two pending creations with page size set to 2', async () => {
const { const {
data: { adminListAllContributions: contributionListObject }, data: { adminListAllContributions: contributionListObject },
}: { data: { adminListAllContributions: ContributionListResult } } = await query({ }: { data: { adminListAllContributions: ContributionListResult } } = await query({
query: adminListAllContributions, query: adminListAllContributions,
variables: { variables: {
currentPage: 1, currentPage: 1,
pageSize: 5, pageSize: 2,
order: Order.DESC, order: Order.DESC,
statusFilter: ['PENDING'], statusFilter: ['PENDING'],
}, },
}) })
expect(contributionListObject.contributionList).toHaveLength(5) expect(contributionListObject.contributionList).toHaveLength(2)
expect(contributionListObject).toMatchObject({ expect(contributionListObject).toMatchObject({
contributionCount: 6, contributionCount: 4,
contributionList: expect.arrayContaining([ contributionList: expect.arrayContaining([
expect.objectContaining({ expect.objectContaining({
amount: '400', amount: '400',
@ -2991,33 +2896,6 @@ describe('ContributionResolver', () => {
messagesCount: 0, messagesCount: 0,
state: 'PENDING', state: 'PENDING',
}), }),
expect.objectContaining({
amount: '500',
firstName: 'Bibi',
id: expect.any(Number),
lastName: 'Bloxberg',
memo: 'Grundeinkommen',
messagesCount: 0,
state: 'PENDING',
}),
expect.objectContaining({
amount: '500',
firstName: 'Peter',
id: expect.any(Number),
lastName: 'Lustig',
memo: 'Grundeinkommen',
messagesCount: 0,
state: 'PENDING',
}),
expect.objectContaining({
amount: '100',
firstName: 'Peter',
id: expect.any(Number),
lastName: 'Lustig',
memo: 'Test env contribution',
messagesCount: 0,
state: 'PENDING',
}),
expect.not.objectContaining({ expect.not.objectContaining({
state: 'DENIED', state: 'DENIED',
}), }),

View File

@ -8,7 +8,6 @@ import { UserContact } from '@entity/UserContact'
import { User as DbUser } from '@entity/User' import { User as DbUser } from '@entity/User'
import { Transaction as DbTransaction } from '@entity/Transaction' import { Transaction as DbTransaction } from '@entity/Transaction'
import { AdminCreateContributions } from '@model/AdminCreateContributions'
import { AdminUpdateContribution } from '@model/AdminUpdateContribution' import { AdminUpdateContribution } from '@model/AdminUpdateContribution'
import { Contribution, ContributionListResult } from '@model/Contribution' import { Contribution, ContributionListResult } from '@model/Contribution'
import { Decay } from '@model/Decay' import { Decay } from '@model/Decay'
@ -318,33 +317,6 @@ export class ContributionResolver {
return getUserCreation(emailContact.userId, clientTimezoneOffset) return getUserCreation(emailContact.userId, clientTimezoneOffset)
} }
@Authorized([RIGHTS.ADMIN_CREATE_CONTRIBUTIONS])
@Mutation(() => AdminCreateContributions)
async adminCreateContributions(
@Arg('pendingCreations', () => [AdminCreateContributionArgs])
contributions: AdminCreateContributionArgs[],
@Ctx() context: Context,
): Promise<AdminCreateContributions> {
let success = false
const successfulContribution: string[] = []
const failedContribution: string[] = []
for (const contribution of contributions) {
await this.adminCreateContribution(contribution, context)
.then(() => {
successfulContribution.push(contribution.email)
success = true
})
.catch(() => {
failedContribution.push(contribution.email)
})
}
return {
success,
successfulContribution,
failedContribution,
}
}
@Authorized([RIGHTS.ADMIN_UPDATE_CONTRIBUTION]) @Authorized([RIGHTS.ADMIN_UPDATE_CONTRIBUTION])
@Mutation(() => AdminUpdateContribution) @Mutation(() => AdminUpdateContribution)
async adminUpdateContribution( async adminUpdateContribution(

View File

@ -126,16 +126,6 @@ export const unDeleteUser = gql`
} }
` `
export const adminCreateContributions = gql`
mutation ($pendingCreations: [AdminCreateContributionArgs!]!) {
adminCreateContributions(pendingCreations: $pendingCreations) {
success
successfulContribution
failedContribution
}
}
`
export const adminUpdateContribution = gql` export const adminUpdateContribution = gql`
mutation ($id: Int!, $email: String!, $amount: Decimal!, $memo: String!, $creationDate: String!) { mutation ($id: Int!, $email: String!, $amount: Decimal!, $memo: String!, $creationDate: String!) {
adminUpdateContribution( adminUpdateContribution(

View File

@ -57,10 +57,15 @@ EMAIL_CODE_REQUEST_TIME=10
WEBHOOK_ELOPAGE_SECRET=secret WEBHOOK_ELOPAGE_SECRET=secret
# Federation # Federation
# if you set the value of FEDERATION_DHT_TOPIC, the DHT hyperswarm will start to announce and listen FEDERATION_DHT_CONFIG_VERSION=v2.2023-02-07
# on an hash created from this topic # if you set the value of FEDERATION_DHT_TOPIC, the DHT hyperswarm will start to announce and listen on an hash created from this topic
# FEDERATION_DHT_TOPIC=GRADIDO_HUB # FEDERATION_DHT_TOPIC=GRADIDO_HUB
# FEDERATION_DHT_SEED=64ebcb0e3ad547848fef4197c6e2332f # FEDERATION_DHT_SEED=64ebcb0e3ad547848fef4197c6e2332f
FEDERATION_COMMUNITY_URL=http://stage1.gradido.net
# the api port is the baseport, which will be added with the api-version, e.g. 1_0 = 5010
FEDERATION_COMMUNITY_API_PORT=5000
# database # database
DATABASE_CONFIG_VERSION=v1.2022-03-18 DATABASE_CONFIG_VERSION=v1.2022-03-18

View File

@ -137,6 +137,9 @@ envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/frontend/.env
# Configure admin # Configure admin
envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/admin/.env.template > $PROJECT_ROOT/admin/.env envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/admin/.env.template > $PROJECT_ROOT/admin/.env
# Configure dht-node
envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/dht-node/.env.template > $PROJECT_ROOT/dht-node/.env
# create cronjob to delete yarn output in /tmp # create cronjob to delete yarn output in /tmp
# crontab -e # crontab -e
# hourly job: 0 * * * * find /tmp -name "yarn--*" -cmin +60 -exec rm -r {} \; > /dev/null # hourly job: 0 * * * * find /tmp -name "yarn--*" -cmin +60 -exec rm -r {} \; > /dev/null

View File

@ -93,10 +93,12 @@ cp -f $PROJECT_ROOT/database/.env $PROJECT_ROOT/database/.env.bak
cp -f $PROJECT_ROOT/backend/.env $PROJECT_ROOT/backend/.env.bak cp -f $PROJECT_ROOT/backend/.env $PROJECT_ROOT/backend/.env.bak
cp -f $PROJECT_ROOT/frontend/.env $PROJECT_ROOT/frontend/.env.bak cp -f $PROJECT_ROOT/frontend/.env $PROJECT_ROOT/frontend/.env.bak
cp -f $PROJECT_ROOT/admin/.env $PROJECT_ROOT/admin/.env.bak cp -f $PROJECT_ROOT/admin/.env $PROJECT_ROOT/admin/.env.bak
cp -f $PROJECT_ROOT/dht-node/.env $PROJECT_ROOT/dht-node/.env.bak
envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/database/.env.template > $PROJECT_ROOT/database/.env envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/database/.env.template > $PROJECT_ROOT/database/.env
envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/backend/.env.template > $PROJECT_ROOT/backend/.env envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/backend/.env.template > $PROJECT_ROOT/backend/.env
envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/frontend/.env.template > $PROJECT_ROOT/frontend/.env envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/frontend/.env.template > $PROJECT_ROOT/frontend/.env
envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/admin/.env.template > $PROJECT_ROOT/admin/.env envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/admin/.env.template > $PROJECT_ROOT/admin/.env
envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/dht-node/.env.template > $PROJECT_ROOT/dht-node/.env
# Install & build database # Install & build database
echo 'Updating database' >> $UPDATE_HTML echo 'Updating database' >> $UPDATE_HTML
@ -152,6 +154,25 @@ pm2 delete gradido-admin
pm2 start --name gradido-admin "yarn --cwd $PROJECT_ROOT/admin start" -l $GRADIDO_LOG_PATH/pm2.admin.$TODAY.log --log-date-format 'YYYY-MM-DD HH:mm:ss.SSS' pm2 start --name gradido-admin "yarn --cwd $PROJECT_ROOT/admin start" -l $GRADIDO_LOG_PATH/pm2.admin.$TODAY.log --log-date-format 'YYYY-MM-DD HH:mm:ss.SSS'
pm2 save pm2 save
# Install & build dht-node
echo 'Updating dht-node' >> $UPDATE_HTML
cd $PROJECT_ROOT/dht-node
# TODO maybe handle this differently?
unset NODE_ENV
yarn install
yarn build
# TODO maybe handle this differently?
export NODE_ENV=production
pm2 delete gradido-dht-node
if [ ! -z $FEDERATION_DHT_TOPIC ]; then
pm2 start --name gradido-dht-node "yarn --cwd $PROJECT_ROOT/dht-node start" -l $GRADIDO_LOG_PATH/pm2.dht-node.$TODAY.log --log-date-format 'YYYY-MM-DD HH:mm:ss.SSS'
else
echo "====================================================================="
echo "WARNING: FEDERATION_DHT_TOPIC not configured. DHT-Node not started..."
echo "====================================================================="
fi
pm2 save
# let nginx showing gradido # let nginx showing gradido
echo 'Configuring nginx to serve gradido again' >> $UPDATE_HTML echo 'Configuring nginx to serve gradido again' >> $UPDATE_HTML
ln -s /etc/nginx/sites-available/gradido.conf /etc/nginx/sites-enabled/ ln -s /etc/nginx/sites-available/gradido.conf /etc/nginx/sites-enabled/

View File

@ -11,9 +11,9 @@ TYPEORM_LOGGING_RELATIVE_PATH=typeorm.dht-node.log
# LOG_LEVEL=info # LOG_LEVEL=info
# Federation # Federation
# if you set the value of FEDERATION_DHT_TOPIC, the DHT hyperswarm will start to announce and listen # if you set the value of FEDERATION_DHT_TOPIC, the DHT hyperswarm will start to announce and listen on an hash created from this topic
# on an hash created from this topic
FEDERATION_DHT_TOPIC=GRADIDO_HUB FEDERATION_DHT_TOPIC=GRADIDO_HUB
# FEDERATION_DHT_SEED=64ebcb0e3ad547848fef4197c6e2332f # FEDERATION_DHT_SEED=64ebcb0e3ad547848fef4197c6e2332f
# FEDERATION_COMMUNITY_URL=http://localhost FEDERATION_COMMUNITY_URL=http://localhost
# FEDERATION_COMMUNITY_API_PORT=5000 # the api port is the dht baseport, which will be added with the supported api-versions, e.g. 1_0 = 5010
FEDERATION_COMMUNITY_API_PORT=5000

View File

@ -1,4 +1,4 @@
CONFIG_VERSION=$BACKEND_CONFIG_VERSION CONFIG_VERSION=$FEDERATION_DHT_CONFIG_VERSION
# Database # Database
DB_HOST=localhost DB_HOST=localhost

View File

@ -8,7 +8,7 @@
"pattern": "yyyy-MM-dd", "pattern": "yyyy-MM-dd",
"layout": "layout":
{ {
"type": "pattern", "pattern": "%d{ISO8601} %c [%X{user}] [%f : %l] - %m" "type": "pattern", "pattern": "%d{ISO8601} %p %c [%X{user}] [%f : %l] - %m"
}, },
"keepFileExt" : true, "keepFileExt" : true,
"fileNameSep" : "_", "fileNameSep" : "_",
@ -21,7 +21,7 @@
"pattern": "yyyy-MM-dd", "pattern": "yyyy-MM-dd",
"layout": "layout":
{ {
"type": "pattern", "pattern": "%d{ISO8601} %c [%X{user}] [%f : %l] - %m" "type": "pattern", "pattern": "%d{ISO8601} %p %c [%X{user}] [%f : %l] - %m"
}, },
"keepFileExt" : true, "keepFileExt" : true,
"fileNameSep" : "_", "fileNameSep" : "_",

View File

@ -31,8 +31,8 @@ export const startDHT = async (topic: string): Promise<void> => {
logger.info(`keyPairDHT: publicKey=${keyPair.publicKey.toString('hex')}`) logger.info(`keyPairDHT: publicKey=${keyPair.publicKey.toString('hex')}`)
logger.debug(`keyPairDHT: secretKey=${keyPair.secretKey.toString('hex')}`) logger.debug(`keyPairDHT: secretKey=${keyPair.secretKey.toString('hex')}`)
const ownApiVersions = writeHomeCommunityEnries(keyPair.publicKey) const ownApiVersions = await writeHomeCommunityEnries(keyPair.publicKey)
logger.debug(`ApiList: ${JSON.stringify(ownApiVersions)}`) logger.info(`ApiList: ${JSON.stringify(ownApiVersions)}`)
const node = new DHT({ keyPair }) const node = new DHT({ keyPair })

View File

@ -123,10 +123,6 @@ Zusätzlich wird als Parameter ein *creationDate* vom User mitgeliefert, das dem
nothing to do nothing to do
#### + adminCreateContributions
Hier wird eine Liste von übergebenen Contributions über den internen Aufruf von *adminCreateContribution()* verarbeitet. Da dort eine Berücksichtigung des User-TimeOffsets notwendig ist, muss hier die UserTime entsprechen im Context weitergereicht werden.
#### - adminDeleteContribution #### - adminDeleteContribution
nothing to do nothing to do

View File

@ -8,8 +8,8 @@
</template> </template>
<script> <script>
import DashboardLayout from '@/layouts/DashboardLayout.vue' import DashboardLayout from '@/layouts/DashboardLayout'
import AuthLayout from '@/layouts/AuthLayout.vue' import AuthLayout from '@/layouts/AuthLayout'
export default { export default {
name: 'App', name: 'App',

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionMessagesFormular from './ContributionMessagesFormular.vue' import ContributionMessagesFormular from './ContributionMessagesFormular'
import { toastErrorSpy, toastSuccessSpy } from '../../../test/testSetup' import { toastErrorSpy, toastSuccessSpy } from '../../../test/testSetup'
const localVue = global.localVue const localVue = global.localVue

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionMessagesList from './ContributionMessagesList.vue' import ContributionMessagesList from './ContributionMessagesList'
const localVue = global.localVue const localVue = global.localVue

View File

@ -23,8 +23,8 @@
</div> </div>
</template> </template>
<script> <script>
import ContributionMessagesListItem from '@/components/ContributionMessages/ContributionMessagesListItem.vue' import ContributionMessagesListItem from '@/components/ContributionMessages/ContributionMessagesListItem'
import ContributionMessagesFormular from '@/components/ContributionMessages/ContributionMessagesFormular.vue' import ContributionMessagesFormular from '@/components/ContributionMessages/ContributionMessagesFormular'
export default { export default {
name: 'ContributionMessagesList', name: 'ContributionMessagesList',

View File

@ -1,6 +1,6 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionMessagesList from './ContributionMessagesList.vue' import ContributionMessagesList from './ContributionMessagesList'
import ContributionMessagesListItem from './ContributionMessagesListItem.vue' import ContributionMessagesListItem from './ContributionMessagesListItem'
const localVue = global.localVue const localVue = global.localVue
let wrapper let wrapper

View File

@ -35,7 +35,7 @@
<script> <script>
import Avatar from 'vue-avatar' import Avatar from 'vue-avatar'
import ParseMessage from '@/components/ContributionMessages/ParseMessage.vue' import ParseMessage from '@/components/ContributionMessages/ParseMessage'
export default { export default {
name: 'ContributionMessagesListItem', name: 'ContributionMessagesListItem',

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionForm from './ContributionForm.vue' import ContributionForm from './ContributionForm'
const localVue = global.localVue const localVue = global.localVue

View File

@ -88,9 +88,9 @@
</div> </div>
</template> </template>
<script> <script>
import InputHour from '@/components/Inputs/InputHour.vue' import InputHour from '@/components/Inputs/InputHour'
import InputAmount from '@/components/Inputs/InputAmount.vue' import InputAmount from '@/components/Inputs/InputAmount'
import InputTextarea from '@/components/Inputs/InputTextarea.vue' import InputTextarea from '@/components/Inputs/InputTextarea'
export default { export default {
name: 'ContributionForm', name: 'ContributionForm',

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionList from './ContributionList.vue' import ContributionList from './ContributionList'
const localVue = global.localVue const localVue = global.localVue

View File

@ -38,7 +38,7 @@
</div> </div>
</template> </template>
<script> <script>
import ContributionListItem from '@/components/Contributions/ContributionListItem.vue' import ContributionListItem from '@/components/Contributions/ContributionListItem'
export default { export default {
name: 'ContributionList', name: 'ContributionList',

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionListItem from './ContributionListItem.vue' import ContributionListItem from './ContributionListItem'
const localVue = global.localVue const localVue = global.localVue

View File

@ -104,7 +104,7 @@
<script> <script>
import Avatar from 'vue-avatar' import Avatar from 'vue-avatar'
import CollapseIcon from '../TransactionRows/CollapseIcon' import CollapseIcon from '../TransactionRows/CollapseIcon'
import ContributionMessagesList from '@/components/ContributionMessages/ContributionMessagesList.vue' import ContributionMessagesList from '@/components/ContributionMessages/ContributionMessagesList'
import { listContributionMessages } from '../../graphql/queries.js' import { listContributionMessages } from '../../graphql/queries.js'
export default { export default {

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import OpenCreationsAmount from './OpenCreationsAmount.vue' import OpenCreationsAmount from './OpenCreationsAmount'
const localVue = global.localVue const localVue = global.localVue

View File

@ -30,7 +30,7 @@
</div> </div>
</template> </template>
<script> <script>
import TransactionLink from '@/components/TransactionLinks/TransactionLink.vue' import TransactionLink from '@/components/TransactionLinks/TransactionLink'
export default { export default {
name: 'CollapseLinksList', name: 'CollapseLinksList',
components: { components: {

View File

@ -66,7 +66,7 @@
</div> </div>
</template> </template>
<script> <script>
import DurationRow from '@/components/TransactionRows/DurationRow.vue' import DurationRow from '@/components/TransactionRows/DurationRow'
export default { export default {
name: 'DecayInformation-StartBlock', name: 'DecayInformation-StartBlock',

View File

@ -55,7 +55,7 @@
</div> </div>
</template> </template>
<script> <script>
import DurationRow from '@/components/TransactionRows/DurationRow.vue' import DurationRow from '@/components/TransactionRows/DurationRow'
export default { export default {
name: 'DecayInformation-Long', name: 'DecayInformation-Long',

View File

@ -1,8 +1,8 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import TransactionForm from './TransactionForm.vue' import TransactionForm from './TransactionForm'
import flushPromises from 'flush-promises' import flushPromises from 'flush-promises'
import { SEND_TYPES } from '@/pages/Send.vue' import { SEND_TYPES } from '@/pages/Send'
import DashboardLayout from '@/layouts/DashboardLayout.vue' import DashboardLayout from '@/layouts/DashboardLayout'
const localVue = global.localVue const localVue = global.localVue

View File

@ -120,10 +120,10 @@
</div> </div>
</template> </template>
<script> <script>
import { SEND_TYPES } from '@/pages/Send.vue' import { SEND_TYPES } from '@/pages/Send'
import InputEmail from '@/components/Inputs/InputEmail.vue' import InputEmail from '@/components/Inputs/InputEmail'
import InputAmount from '@/components/Inputs/InputAmount.vue' import InputAmount from '@/components/Inputs/InputAmount'
import InputTextarea from '@/components/Inputs/InputTextarea.vue' import InputTextarea from '@/components/Inputs/InputTextarea'
export default { export default {
name: 'TransactionForm', name: 'TransactionForm',

View File

@ -19,8 +19,8 @@
</div> </div>
</template> </template>
<script> <script>
import ClipboardCopy from '../ClipboardCopy.vue' import ClipboardCopy from '../ClipboardCopy'
import FigureQrCode from '../QrCode/FigureQrCode.vue' import FigureQrCode from '../QrCode/FigureQrCode'
export default { export default {
name: 'TransactionResultLink', name: 'TransactionResultLink',

View File

@ -42,7 +42,7 @@
</template> </template>
<script> <script>
import Transaction from '@/components/Transaction.vue' import Transaction from '@/components/Transaction'
export default { export default {
name: 'GdtTransactionList', name: 'GdtTransactionList',

View File

@ -23,7 +23,7 @@
</div> </div>
</template> </template>
<script> <script>
import RedeemInformation from '@/components/LinkInformations/RedeemInformation.vue' import RedeemInformation from '@/components/LinkInformations/RedeemInformation'
import { authLinks } from '@/mixins/authLinks' import { authLinks } from '@/mixins/authLinks'
export default { export default {

View File

@ -15,7 +15,7 @@
</div> </div>
</template> </template>
<script> <script>
import RedeemInformation from '@/components/LinkInformations/RedeemInformation.vue' import RedeemInformation from '@/components/LinkInformations/RedeemInformation'
export default { export default {
name: 'RedeemSelfCreator', name: 'RedeemSelfCreator',

View File

@ -11,7 +11,7 @@
</div> </div>
</template> </template>
<script> <script>
import RedeemInformation from '@/components/LinkInformations/RedeemInformation.vue' import RedeemInformation from '@/components/LinkInformations/RedeemInformation'
export default { export default {
name: 'RedeemValid', name: 'RedeemValid',

View File

@ -1,6 +1,6 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import VueRouter from 'vue-router' import VueRouter from 'vue-router'
import AuthNavbar from './Navbar.vue' import AuthNavbar from './Navbar'
const localVue = global.localVue const localVue = global.localVue
localVue.use(VueRouter) localVue.use(VueRouter)

View File

@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import Sidebar from './Sidebar.vue' import Sidebar from './Sidebar'
const localVue = global.localVue const localVue = global.localVue

View File

@ -8,7 +8,7 @@
</div> </div>
</template> </template>
<script> <script>
import Sidebar from '@/components/Menu/Sidebar.vue' import Sidebar from '@/components/Menu/Sidebar'
export default { export default {
name: 'MobileSidebar', name: 'MobileSidebar',

View File

@ -55,7 +55,7 @@
</template> </template>
<script> <script>
import Avatar from 'vue-avatar' import Avatar from 'vue-avatar'
import Name from '@/components/TransactionRows/Name.vue' import Name from '@/components/TransactionRows/Name'
export default { export default {
name: 'LastTransactions', name: 'LastTransactions',

View File

@ -47,7 +47,7 @@
</template> </template>
<script> <script>
import CollapseIcon from './TransactionRows/CollapseIcon' import CollapseIcon from './TransactionRows/CollapseIcon'
import TransactionCollapse from './TransactionCollapse.vue' import TransactionCollapse from './TransactionCollapse'
import { GdtEntryType } from '../graphql/enums' import { GdtEntryType } from '../graphql/enums'
export default { export default {

View File

@ -75,7 +75,7 @@ import AmountAndNameRow from '../TransactionRows/AmountAndNameRow'
import MemoRow from '../TransactionRows/MemoRow' import MemoRow from '../TransactionRows/MemoRow'
import DateRow from '../TransactionRows/DateRow' import DateRow from '../TransactionRows/DateRow'
import DecayRow from '../TransactionRows/DecayRow' import DecayRow from '../TransactionRows/DecayRow'
import FigureQrCode from '@/components/QrCode/FigureQrCode.vue' import FigureQrCode from '@/components/QrCode/FigureQrCode'
import { copyLinks } from '../../mixins/copyLinks' import { copyLinks } from '../../mixins/copyLinks'
export default { export default {

View File

@ -61,7 +61,7 @@
</b-card> </b-card>
</template> </template>
<script> <script>
import LanguageSwitchSelect from '@/components/LanguageSwitchSelect.vue' import LanguageSwitchSelect from '@/components/LanguageSwitchSelect'
import { updateUserInfos } from '@/graphql/mutations' import { updateUserInfos } from '@/graphql/mutations'
export default { export default {

View File

@ -81,11 +81,11 @@
</template> </template>
<script> <script>
import AuthNavbar from '@/components/Auth/AuthNavbar.vue' import AuthNavbar from '@/components/Auth/AuthNavbar'
import AuthNavbarSmall from '@/components/Auth/AuthNavbarSmall.vue' import AuthNavbarSmall from '@/components/Auth/AuthNavbarSmall'
import AuthCarousel from '@/components/Auth/AuthCarousel.vue' import AuthCarousel from '@/components/Auth/AuthCarousel'
import LanguageSwitch from '@/components/LanguageSwitch2' import LanguageSwitch from '@/components/LanguageSwitch2'
import AuthFooter from '@/components/Auth/AuthFooter.vue' import AuthFooter from '@/components/Auth/AuthFooter'
import CONFIG from '@/config' import CONFIG from '@/config'
export default { export default {

View File

@ -185,25 +185,25 @@
</div> </div>
</template> </template>
<script> <script>
import ContentHeader from '@/layouts/templates/ContentHeader.vue' import ContentHeader from '@/layouts/templates/ContentHeader'
import CommunityTemplate from '@/layouts/templates/CommunityTemplate.vue' import CommunityTemplate from '@/layouts/templates/CommunityTemplate'
import Breadcrumb from '@/components/Breadcrumb/breadcrumb.vue' import Breadcrumb from '@/components/Breadcrumb/breadcrumb'
import RightSide from '@/layouts/templates/RightSide.vue' import RightSide from '@/layouts/templates/RightSide'
import SkeletonOverview from '@/components/skeleton/Overview.vue' import SkeletonOverview from '@/components/skeleton/Overview'
import Navbar from '@/components/Menu/Navbar.vue' import Navbar from '@/components/Menu/Navbar'
import Sidebar from '@/components/Menu/Sidebar.vue' import Sidebar from '@/components/Menu/Sidebar'
import MobileSidebar from '@/components/MobileSidebar/MobileSidebar.vue' import MobileSidebar from '@/components/MobileSidebar/MobileSidebar'
import SessionLogoutTimeout from '@/components/SessionLogoutTimeout.vue' import SessionLogoutTimeout from '@/components/SessionLogoutTimeout'
import { transactionsQuery, communityStatistics } from '@/graphql/queries' import { transactionsQuery, communityStatistics } from '@/graphql/queries'
import { logout } from '@/graphql/mutations' import { logout } from '@/graphql/mutations'
import ContentFooter from '@/components/ContentFooter.vue' import ContentFooter from '@/components/ContentFooter'
import { FadeTransition } from 'vue2-transitions' import { FadeTransition } from 'vue2-transitions'
import CONFIG from '@/config' import CONFIG from '@/config'
import GddAmount from '@/components/Template/ContentHeader/GddAmount.vue' import GddAmount from '@/components/Template/ContentHeader/GddAmount'
import GdtAmount from '@/components/Template/ContentHeader/GdtAmount.vue' import GdtAmount from '@/components/Template/ContentHeader/GdtAmount'
import CommunityMember from '@/components/Template/ContentHeader/CommunityMember.vue' import CommunityMember from '@/components/Template/ContentHeader/CommunityMember'
import NavCommunity from '@/components/Template/ContentHeader/NavCommunity.vue' import NavCommunity from '@/components/Template/ContentHeader/NavCommunity'
import LastTransactions from '@/components/Template/RightSide/LastTransactions.vue' import LastTransactions from '@/components/Template/RightSide/LastTransactions'
export default { export default {
name: 'DashboardLayout', name: 'DashboardLayout',

View File

@ -1,6 +1,6 @@
import Vue from 'vue' import Vue from 'vue'
import DashboardPlugin from './plugins/dashboard-plugin' import DashboardPlugin from './plugins/dashboard-plugin'
import App from './App.vue' import App from './App'
import i18n from './i18n.js' import i18n from './i18n.js'
import { loadAllRules } from './validation-rules' import { loadAllRules } from './validation-rules'
import { toasters } from './mixins/toaster' import { toasters } from './mixins/toaster'

View File

@ -58,9 +58,9 @@
</div> </div>
</template> </template>
<script> <script>
import OpenCreationsAmount from '@/components/Contributions/OpenCreationsAmount.vue' import OpenCreationsAmount from '@/components/Contributions/OpenCreationsAmount'
import ContributionForm from '@/components/Contributions/ContributionForm.vue' import ContributionForm from '@/components/Contributions/ContributionForm'
import ContributionList from '@/components/Contributions/ContributionList.vue' import ContributionList from '@/components/Contributions/ContributionList'
import { createContribution, updateContribution, deleteContribution } from '@/graphql/mutations' import { createContribution, updateContribution, deleteContribution } from '@/graphql/mutations'
import { listContributions, listAllContributions, openCreations } from '@/graphql/queries' import { listContributions, listAllContributions, openCreations } from '@/graphql/queries'
@ -119,13 +119,13 @@ export default {
query() { query() {
return listAllContributions return listAllContributions
}, },
fetchPolicy: 'network-only',
variables() { variables() {
return { return {
currentPage: this.currentPageAll, currentPage: this.currentPageAll,
pageSize: this.pageSizeAll, pageSize: this.pageSizeAll,
} }
}, },
fetchPolicy: 'no-cache',
update({ listAllContributions }) { update({ listAllContributions }) {
this.contributionCountAll = listAllContributions.contributionCount this.contributionCountAll = listAllContributions.contributionCount
this.itemsAll = listAllContributions.contributionList this.itemsAll = listAllContributions.contributionList

View File

@ -4,7 +4,7 @@
</div> </div>
</template> </template>
<script> <script>
import CommunityNews from '@/components/Overview/CommunityNews.vue' import CommunityNews from '@/components/Overview/CommunityNews'
export default { export default {
name: 'Overview', name: 'Overview',

View File

@ -104,7 +104,7 @@
<script> <script>
import { createUser } from '@/graphql/mutations' import { createUser } from '@/graphql/mutations'
import CONFIG from '@/config' import CONFIG from '@/config'
import InputEmail from '@/components/Inputs/InputEmail.vue' import InputEmail from '@/components/Inputs/InputEmail'
import Message from '@/components/Message/Message' import Message from '@/components/Message/Message'
export default { export default {

View File

@ -1,9 +1,9 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import Send, { SEND_TYPES } from './Send' import Send, { SEND_TYPES } from './Send'
import { toastErrorSpy, toastSuccessSpy } from '@test/testSetup' import { toastErrorSpy, toastSuccessSpy } from '@test/testSetup'
import { TRANSACTION_STEPS } from '@/components/GddSend.vue' import { TRANSACTION_STEPS } from '@/components/GddSend'
import { sendCoins, createTransactionLink } from '@/graphql/mutations.js' import { sendCoins, createTransactionLink } from '@/graphql/mutations.js'
import DashboardLayout from '@/layouts/DashboardLayout.vue' import DashboardLayout from '@/layouts/DashboardLayout'
import flushPromises from 'flush-promises' import flushPromises from 'flush-promises'
const apolloMutationMock = jest.fn() const apolloMutationMock = jest.fn()

View File

@ -52,13 +52,13 @@
</div> </div>
</template> </template>
<script> <script>
import GddSend, { TRANSACTION_STEPS } from '@/components/GddSend.vue' import GddSend, { TRANSACTION_STEPS } from '@/components/GddSend'
import TransactionForm from '@/components/GddSend/TransactionForm.vue' import TransactionForm from '@/components/GddSend/TransactionForm'
import TransactionConfirmationSend from '@/components/GddSend/TransactionConfirmationSend.vue' import TransactionConfirmationSend from '@/components/GddSend/TransactionConfirmationSend'
import TransactionConfirmationLink from '@/components/GddSend/TransactionConfirmationLink.vue' import TransactionConfirmationLink from '@/components/GddSend/TransactionConfirmationLink'
import TransactionResultSendSuccess from '@/components/GddSend/TransactionResultSendSuccess.vue' import TransactionResultSendSuccess from '@/components/GddSend/TransactionResultSendSuccess'
import TransactionResultSendError from '@/components/GddSend/TransactionResultSendError.vue' import TransactionResultSendError from '@/components/GddSend/TransactionResultSendError'
import TransactionResultLink from '@/components/GddSend/TransactionResultLink.vue' import TransactionResultLink from '@/components/GddSend/TransactionResultLink'
import { sendCoins, createTransactionLink } from '@/graphql/mutations.js' import { sendCoins, createTransactionLink } from '@/graphql/mutations.js'
const EMPTY_TRANSACTION_DATA = { const EMPTY_TRANSACTION_DATA = {

View File

@ -11,11 +11,11 @@
</div> </div>
</template> </template>
<script> <script>
import UserCard from '@/components/UserSettings/UserCard.vue' import UserCard from '@/components/UserSettings/UserCard'
import UserData from '@/components/UserSettings/UserData.vue' import UserData from '@/components/UserSettings/UserData'
import UserPassword from '@/components/UserSettings/UserPassword.vue' import UserPassword from '@/components/UserSettings/UserPassword'
import UserLanguage from '@/components/UserSettings/UserLanguage.vue' import UserLanguage from '@/components/UserSettings/UserLanguage'
import UserNewsletter from '@/components/UserSettings/UserNewsletter.vue' import UserNewsletter from '@/components/UserSettings/UserNewsletter'
export default { export default {
name: 'Profile', name: 'Profile',

View File

@ -23,8 +23,8 @@
</div> </div>
</template> </template>
<script> <script>
import GddTransactionList from '@/components/GddTransactionList.vue' import GddTransactionList from '@/components/GddTransactionList'
import GdtTransactionList from '@/components/GdtTransactionList.vue' import GdtTransactionList from '@/components/GdtTransactionList'
import { listGDTEntriesQuery } from '@/graphql/queries' import { listGDTEntriesQuery } from '@/graphql/queries'
export default { export default {

View File

@ -1,5 +1,5 @@
import router from './router' import router from './router'
import NotFound from '@/pages/NotFoundPage.vue' import NotFound from '@/pages/NotFoundPage'
describe('router', () => { describe('router', () => {
describe('options', () => { describe('options', () => {

View File

@ -1,4 +1,4 @@
import NotFound from '@/pages/NotFoundPage.vue' import NotFound from '@/pages/NotFoundPage'
const routes = [ const routes = [
{ {
@ -12,7 +12,7 @@ const routes = [
}, },
{ {
path: '/overview', path: '/overview',
component: () => import('@/pages/Overview.vue'), component: () => import('@/pages/Overview'),
meta: { meta: {
requiresAuth: true, requiresAuth: true,
pageTitle: 'overview', pageTitle: 'overview',
@ -20,7 +20,7 @@ const routes = [
}, },
{ {
path: '/send', path: '/send',
component: () => import('@/pages/Send.vue'), component: () => import('@/pages/Send'),
meta: { meta: {
requiresAuth: true, requiresAuth: true,
pageTitle: 'send', pageTitle: 'send',
@ -28,14 +28,14 @@ const routes = [
}, },
// { // {
// path: '/profile', // path: '/profile',
// component: () => import('@/pages/Profile.vue'), // component: () => import('@/pages/Profile'),
// meta: { // meta: {
// requiresAuth: true, // requiresAuth: true,
// }, // },
// }, // },
{ {
path: '/transactions', path: '/transactions',
component: () => import('@/pages/Transactions.vue'), component: () => import('@/pages/Transactions'),
props: { gdt: false }, props: { gdt: false },
meta: { meta: {
requiresAuth: true, requiresAuth: true,
@ -44,7 +44,7 @@ const routes = [
}, },
{ {
path: '/gdt', path: '/gdt',
component: () => import('@/pages/Transactions.vue'), component: () => import('@/pages/Transactions'),
props: { gdt: true }, props: { gdt: true },
meta: { meta: {
requiresAuth: true, requiresAuth: true,
@ -53,7 +53,7 @@ const routes = [
}, },
{ {
path: '/community', path: '/community',
component: () => import('@/pages/Community.vue'), component: () => import('@/pages/Community'),
meta: { meta: {
requiresAuth: true, requiresAuth: true,
pageTitle: 'community', pageTitle: 'community',
@ -72,7 +72,7 @@ const routes = [
}, },
{ {
path: '/information', path: '/information',
component: () => import('@/pages/InfoStatistic.vue'), component: () => import('@/pages/InfoStatistic'),
meta: { meta: {
requiresAuth: true, requiresAuth: true,
pageTitle: 'information', pageTitle: 'information',
@ -80,21 +80,21 @@ const routes = [
}, },
// { // {
// path: '/storys', // path: '/storys',
// component: () => import('@/pages/TopStorys.vue'), // component: () => import('@/pages/TopStorys'),
// meta: { // meta: {
// requiresAuth: true, // requiresAuth: true,
// }, // },
// }, // },
// { // {
// path: '/addresses', // path: '/addresses',
// component: () => import('@/pages/Addresses.vue'), // component: () => import('@/pages/Addresses'),
// meta: { // meta: {
// requiresAuth: true, // requiresAuth: true,
// }, // },
// }, // },
{ {
path: '/settings', path: '/settings',
component: () => import('@/pages/Settings.vue'), component: () => import('@/pages/Settings'),
meta: { meta: {
requiresAuth: true, requiresAuth: true,
pageTitle: 'settings', pageTitle: 'settings',
@ -102,39 +102,39 @@ const routes = [
}, },
{ {
path: '/login/:code?', path: '/login/:code?',
component: () => import('@/pages/Login.vue'), component: () => import('@/pages/Login'),
}, },
{ {
path: '/register/:code?', path: '/register/:code?',
component: () => import('@/pages/Register.vue'), component: () => import('@/pages/Register'),
}, },
{ {
path: '/forgot-password', path: '/forgot-password',
component: () => import('@/pages/ForgotPassword.vue'), component: () => import('@/pages/ForgotPassword'),
}, },
{ {
path: '/forgot-password/:comingFrom', path: '/forgot-password/:comingFrom',
component: () => import('@/pages/ForgotPassword.vue'), component: () => import('@/pages/ForgotPassword'),
}, },
{ {
path: '/register-community', path: '/register-community',
component: () => import('@/pages/RegisterCommunity.vue'), component: () => import('@/pages/RegisterCommunity'),
}, },
// { // {
// path: '/select-community', // path: '/select-community',
// component: () => import('@/pages/SelectCommunity.vue'), // component: () => import('@/pages/SelectCommunity'),
// }, // },
{ {
path: '/reset-password/:optin', path: '/reset-password/:optin',
component: () => import('@/pages/ResetPassword.vue'), component: () => import('@/pages/ResetPassword'),
}, },
{ {
path: '/checkEmail/:optin/:code?', path: '/checkEmail/:optin/:code?',
component: () => import('@/pages/ResetPassword.vue'), component: () => import('@/pages/ResetPassword'),
}, },
{ {
path: '/redeem/:code', path: '/redeem/:code',
component: () => import('@/pages/TransactionLink.vue'), component: () => import('@/pages/TransactionLink'),
}, },
{ path: '*', component: NotFound }, { path: '*', component: NotFound },
] ]