From 4e240992a5f3a1ae1c33693b452b01edeb14ecfb Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 17 Aug 2022 17:00:23 +0200 Subject: [PATCH] test the API calls --- admin/jest.config.js | 2 +- admin/package.json | 1 + admin/src/components/CommunityStatistic.vue | 8 +- admin/src/pages/Overview.spec.js | 127 ++++++++++++++------ admin/src/pages/Overview.vue | 10 +- admin/yarn.lock | 80 +++++++++++- backend/src/auth/RIGHTS.ts | 1 - 7 files changed, 182 insertions(+), 47 deletions(-) diff --git a/admin/jest.config.js b/admin/jest.config.js index 3e416e7b6..57f871f49 100644 --- a/admin/jest.config.js +++ b/admin/jest.config.js @@ -26,5 +26,5 @@ module.exports = { testMatch: ['**/?(*.)+(spec|test).js?(x)'], // snapshotSerializers: ['jest-serializer-vue'], transformIgnorePatterns: ['/node_modules/(?!vee-validate/dist/rules)'], - // testEnvironment: 'jest-environment-jsdom-sixteen', // not needed anymore since jest@26, see: https://www.npmjs.com/package/jest-environment-jsdom-sixteen + testEnvironment: 'jest-environment-jsdom-sixteen', // not needed anymore since jest@26, see: https://www.npmjs.com/package/jest-environment-jsdom-sixteen } diff --git a/admin/package.json b/admin/package.json index 98746be6d..9879064de 100644 --- a/admin/package.json +++ b/admin/package.json @@ -39,6 +39,7 @@ "identity-obj-proxy": "^3.0.0", "jest": "26.6.3", "jest-canvas-mock": "^2.3.1", + "jest-environment-jsdom-sixteen": "^2.0.0", "portal-vue": "^2.1.7", "qrcanvas-vue": "2.1.1", "regenerator-runtime": "^0.13.9", diff --git a/admin/src/components/CommunityStatistic.vue b/admin/src/components/CommunityStatistic.vue index ca450bf3d..7e67f2ba9 100644 --- a/admin/src/components/CommunityStatistic.vue +++ b/admin/src/components/CommunityStatistic.vue @@ -24,22 +24,22 @@
{{ $t('statistic.totalGradidoCreated') }}{{ $t('math.colon') }} - {{ Math.round(value.totalGradidoCreated) }} {{ $t('GDD') }} + {{ ($n(value.totalGradidoCreated), 'decimal') }} {{ $t('GDD') }} {{ value.totalGradidoCreated }}
{{ $t('statistic.totalGradidoDecayed') }}{{ $t('math.colon') }} - {{ Math.round(value.totalGradidoDecayed) }} {{ $t('GDD') }} + {{ $n(value.totalGradidoDecayed, 'decimal') }} {{ $t('GDD') }} {{ value.totalGradidoDecayed }}
{{ $t('statistic.totalGradidoAvailable') }}{{ $t('math.colon') }} - {{ Math.round(value.totalGradidoAvailable) }} {{ $t('GDD') }} + {{ $n(value.totalGradidoAvailable, 'decimal') }} {{ $t('GDD') }} {{ value.totalGradidoAvailable }}
{{ $t('statistic.totalGradidoUnbookedDecayed') }}{{ $t('math.colon') }} - {{ Math.round(value.totalGradidoUnbookedDecayed) }} {{ $t('GDD') }} + {{ $n(value.totalGradidoUnbookedDecayed, 'decimal') }} {{ $t('GDD') }} {{ value.totalGradidoUnbookedDecayed }}
diff --git a/admin/src/pages/Overview.spec.js b/admin/src/pages/Overview.spec.js index 1926dd9ca..e0063a446 100644 --- a/admin/src/pages/Overview.spec.js +++ b/admin/src/pages/Overview.spec.js @@ -1,46 +1,83 @@ import { mount } from '@vue/test-utils' import Overview from './Overview.vue' +import { listContributionLinks } from '@/graphql/listContributionLinks.js' +import { communityStatistics } from '@/graphql/communityStatistics.js' +import { listUnconfirmedContributions } from '@/graphql/listUnconfirmedContributions.js' const localVue = global.localVue -const apolloQueryMock = jest.fn().mockResolvedValue({ - data: { - listUnconfirmedContributions: [ - { - pending: true, - }, - { - pending: true, - }, - { - pending: true, - }, - ], - }, -}) - -const propsData = { - items: [ - { - id: 1, - name: 'Meditation', - memo: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut l', - amount: '200', - validFrom: '2022-04-01', - validTo: '2022-08-01', - cycle: 'täglich', - maxPerCycle: '3', - maxAmountPerMonth: 0, - link: 'https://localhost/redeem/CL-1a2345678', +const apolloQueryMock = jest + .fn() + .mockResolvedValueOnce({ + data: { + listUnconfirmedContributions: [ + { + pending: true, + }, + { + pending: true, + }, + { + pending: true, + }, + ], }, - ], - count: 1, -} + }) + .mockResolvedValueOnce({ + data: { + communityStatistics: { + totalUsers: 3113, + activeUsers: 1057, + deletedUsers: 35, + totalGradidoCreated: '4083774.05000000000000000000', + totalGradidoDecayed: '-1062639.13634129622923372197', + totalGradidoAvailable: '2513565.869444365732411569', + totalGradidoUnbookedDecayed: '-500474.6738366222166261272', + }, + }, + }) + .mockResolvedValueOnce({ + data: { + listContributionLinks: { + links: [ + { + id: 1, + name: 'Meditation', + memo: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut l', + amount: '200', + validFrom: '2022-04-01', + validTo: '2022-08-01', + cycle: 'täglich', + maxPerCycle: '3', + maxAmountPerMonth: 0, + link: 'https://localhost/redeem/CL-1a2345678', + }, + ], + count: 1, + }, + }, + }) + .mockResolvedValue({ + data: { + listUnconfirmedContributions: [ + { + pending: true, + }, + { + pending: true, + }, + { + pending: true, + }, + ], + }, + }) const storeCommitMock = jest.fn() const mocks = { $t: jest.fn((t) => t), + $n: jest.fn((n) => n), $apollo: { query: apolloQueryMock, }, @@ -56,7 +93,7 @@ describe('Overview', () => { let wrapper const Wrapper = () => { - return mount(Overview, { localVue, mocks, propsData }) + return mount(Overview, { localVue, mocks }) } describe('mount', () => { @@ -65,10 +102,30 @@ describe('Overview', () => { }) it('calls listUnconfirmedContributions', () => { - expect(apolloQueryMock).toBeCalled() + expect(apolloQueryMock).toBeCalledWith( + expect.objectContaining({ + query: listUnconfirmedContributions, + }), + ) }) - it('commts three pending creations to store', () => { + it('calls communityStatistics', () => { + expect(apolloQueryMock).toBeCalledWith( + expect.objectContaining({ + query: communityStatistics, + }), + ) + }) + + it('calls listContributionLinks', () => { + expect(apolloQueryMock).toBeCalledWith( + expect.objectContaining({ + query: listContributionLinks, + }), + ) + }) + + it('commits three pending creations to store', () => { expect(storeCommitMock).toBeCalledWith('setOpenCreations', 3) }) diff --git a/admin/src/pages/Overview.vue b/admin/src/pages/Overview.vue index 665cd4493..dcef93a14 100644 --- a/admin/src/pages/Overview.vue +++ b/admin/src/pages/Overview.vue @@ -37,7 +37,7 @@ import { listContributionLinks } from '@/graphql/listContributionLinks.js' import { communityStatistics } from '@/graphql/communityStatistics.js' import ContributionLink from '../components/ContributionLink.vue' import CommunityStatistic from '../components/CommunityStatistic.vue' -import { listUnconfirmedContributions } from '../graphql/listUnconfirmedContributions' +import { listUnconfirmedContributions } from '@/graphql/listUnconfirmedContributions.js' export default { name: 'overview', @@ -61,7 +61,7 @@ export default { } }, methods: { - async getPendingCreations() { + getPendingCreations() { this.$apollo .query({ query: listUnconfirmedContributions, @@ -71,7 +71,7 @@ export default { this.$store.commit('setOpenCreations', result.data.listUnconfirmedContributions.length) }) }, - async getContributionLinks() { + getContributionLinks() { this.$apollo .query({ query: listContributionLinks, @@ -85,7 +85,7 @@ export default { this.toastError('listContributionLinks has no result, use default data') }) }, - async getCommunityStatistics() { + getCommunityStatistics() { this.$apollo .query({ query: communityStatistics, @@ -103,7 +103,7 @@ export default { result.data.communityStatistics.totalGradidoUnbookedDecayed }) .catch(() => { - this.toastError('listContributionLinks has no result, use default data') + this.toastError('communityStatistics has no result, use default data') }) }, }, diff --git a/admin/yarn.lock b/admin/yarn.lock index b5b76cee8..09b543354 100644 --- a/admin/yarn.lock +++ b/admin/yarn.lock @@ -1282,6 +1282,17 @@ jest-message-util "^24.9.0" jest-mock "^24.9.0" +"@jest/fake-timers@^25.1.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" + integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== + dependencies: + "@jest/types" "^25.5.0" + jest-message-util "^25.5.0" + jest-mock "^25.5.0" + jest-util "^25.5.0" + lolex "^5.0.0" + "@jest/fake-timers@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" @@ -1493,6 +1504,16 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + "@jest/types@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" @@ -4109,6 +4130,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -7983,6 +8012,16 @@ jest-environment-jsdom-fifteen@^1.0.2: jest-util "^24.0.0" jsdom "^15.2.1" +jest-environment-jsdom-sixteen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom-sixteen/-/jest-environment-jsdom-sixteen-2.0.0.tgz#0f8c12663ccd9836d248574decffc575bfb091e1" + integrity sha512-BF+8P67aEJcd78TQzwSb9P4a73cArOWb5KgqI8eU6cHRWDIJdDRE8XTeZAmOuDSDhKpuEXjKkXwWB3GOJvqHJQ== + dependencies: + "@jest/fake-timers" "^25.1.0" + jest-mock "^25.1.0" + jest-util "^25.1.0" + jsdom "^16.2.1" + jest-environment-jsdom@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" @@ -8197,6 +8236,20 @@ jest-message-util@^24.9.0: slash "^2.0.0" stack-utils "^1.0.1" +jest-message-util@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" + integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^25.5.0" + "@types/stack-utils" "^1.0.1" + chalk "^3.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + slash "^3.0.0" + stack-utils "^1.0.1" + jest-message-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" @@ -8219,6 +8272,13 @@ jest-mock@^24.0.0, jest-mock@^24.9.0: dependencies: "@jest/types" "^24.9.0" +jest-mock@^25.1.0, jest-mock@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" + integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== + dependencies: + "@jest/types" "^25.5.0" + jest-mock@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" @@ -8495,6 +8555,17 @@ jest-util@^24.0.0, jest-util@^24.9.0: slash "^2.0.0" source-map "^0.6.0" +jest-util@^25.1.0, jest-util@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" + integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== + dependencies: + "@jest/types" "^25.5.0" + chalk "^3.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + make-dir "^3.0.0" + jest-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" @@ -8741,7 +8812,7 @@ jsdom@^15.2.1: ws "^7.0.0" xml-name-validator "^3.0.0" -jsdom@^16.4.0: +jsdom@^16.2.1, jsdom@^16.4.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== @@ -9096,6 +9167,13 @@ loglevel@^1.6.8: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== +lolex@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + dependencies: + "@sinonjs/commons" "^1.7.0" + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" diff --git a/backend/src/auth/RIGHTS.ts b/backend/src/auth/RIGHTS.ts index 89e4829fd..0d8252402 100644 --- a/backend/src/auth/RIGHTS.ts +++ b/backend/src/auth/RIGHTS.ts @@ -50,5 +50,4 @@ export enum RIGHTS { CREATE_CONTRIBUTION_LINK = 'CREATE_CONTRIBUTION_LINK', DELETE_CONTRIBUTION_LINK = 'DELETE_CONTRIBUTION_LINK', UPDATE_CONTRIBUTION_LINK = 'UPDATE_CONTRIBUTION_LINK', - COMMUNITY_STATISTICS = 'COMMUNITY_STATISTICS', }