From dd4c8ec5b4070481a8248904ee863228d549c979 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 19 May 2022 17:08:27 +0200 Subject: [PATCH 01/11] refactor: Use Logger Categories --- backend/log4js-config.json | 39 ++++++++++++++++++++++++++++++++++- backend/src/server/plugins.ts | 8 +++---- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/backend/log4js-config.json b/backend/log4js-config.json index 1c4b3fb6d..df9b428fe 100644 --- a/backend/log4js-config.json +++ b/backend/log4js-config.json @@ -13,6 +13,14 @@ { "type": "dateFile", "filename": "../logs/backend/apollo.log", + "pattern": "%d{ISO8601} %p %c %m", + "keepFileExt" : true, + "fileNameSep" : "_" + }, + "backend": + { + "type": "dateFile", + "filename": "../logs/backend/backend.log", "pattern": "%d{ISO8601} %p %c %X{user} %f:%l %m", "keepFileExt" : true, "fileNameSep" : "_" @@ -38,8 +46,16 @@ { "type": "pattern", "pattern": "%d{ISO8601} %p %c %X{user} %f:%l %m" } + }, + "apolloOut": + { + "type": "stdout", + "layout": + { + "type": "pattern", "pattern": "%d{ISO8601} %p %c %m" + } - } + } }, "categories": { @@ -48,7 +64,28 @@ "appenders": [ "out", + "errors" + ], + "level": "debug", + "enableCallStack": true + }, + "apollo": + { + "appenders": + [ "apollo", + "apolloOut", + "errors" + ], + "level": "debug", + "enableCallStack": true + }, + "backend": + { + "appenders": + [ + "backend", + "out", "errors" ], "level": "debug", diff --git a/backend/src/server/plugins.ts b/backend/src/server/plugins.ts index f3067d44a..e3e593b03 100644 --- a/backend/src/server/plugins.ts +++ b/backend/src/server/plugins.ts @@ -32,16 +32,16 @@ const logPlugin = { requestDidStart(requestContext: any) { const { logger } = requestContext const { query, mutation, variables } = requestContext.request - logger.trace(`Request: + logger.info(`Request: ${mutation || query}variables: ${JSON.stringify(filterVariables(variables), null, 2)}`) return { willSendResponse(requestContext: any) { - if (requestContext.context.user) logger.trace(`User ID: ${requestContext.context.user.id}`) + if (requestContext.context.user) logger.info(`User ID: ${requestContext.context.user.id}`) if (requestContext.response.data) - logger.trace(`Response-Data: + logger.info(`Response-Data: ${JSON.stringify(requestContext.response.data, null, 2)}`) if (requestContext.response.errors) - logger.trace(`Response-Errors: + logger.info(`Response-Errors: ${JSON.stringify(requestContext.response.errors, null, 2)}`) return requestContext }, From 3bccc01c26d20922888e3dc2188f605c64c1c5f2 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 19 May 2022 17:14:48 +0200 Subject: [PATCH 02/11] fix ws --- backend/log4js-config.json | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/backend/log4js-config.json b/backend/log4js-config.json index df9b428fe..451da56ab 100644 --- a/backend/log4js-config.json +++ b/backend/log4js-config.json @@ -39,7 +39,7 @@ "level": "error", "appender": "errorFile" }, - "out": + "out": { "type": "stdout", "layout": @@ -54,10 +54,9 @@ { "type": "pattern", "pattern": "%d{ISO8601} %p %c %m" } - } }, - "categories": + "categories": { "default": { @@ -71,7 +70,7 @@ }, "apollo": { - "appenders": + "appenders": [ "apollo", "apolloOut", @@ -82,7 +81,7 @@ }, "backend": { - "appenders": + "appenders": [ "backend", "out", From 8853e0d5f9aa0cd7123da05059da6414c3db0c68 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 19 May 2022 20:33:07 +0200 Subject: [PATCH 03/11] remove user context from apollo logger --- backend/src/server/logger.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/server/logger.ts b/backend/src/server/logger.ts index 939d7eaba..27d0cf75b 100644 --- a/backend/src/server/logger.ts +++ b/backend/src/server/logger.ts @@ -12,7 +12,6 @@ log4js.configure(options) const apolloLogger = log4js.getLogger('apollo') const backendLogger = log4js.getLogger('backend') -apolloLogger.addContext('user', 'unknown') backendLogger.addContext('user', 'unknown') export { apolloLogger, backendLogger } From d2d01d9c745ce4de1e911b561362337d02bc9f96 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 23 May 2022 17:45:44 +0200 Subject: [PATCH 04/11] docu: Creation Flowchart --- .../graphics/Creation_Flowchart.drawio | 1 + .../image/Creation_flowchart.drawio.png | Bin 0 -> 68735 bytes 2 files changed, 1 insertion(+) create mode 100644 docu/Concepts/BusinessRequirements/graphics/Creation_Flowchart.drawio create mode 100644 docu/Concepts/BusinessRequirements/image/Creation_flowchart.drawio.png diff --git a/docu/Concepts/BusinessRequirements/graphics/Creation_Flowchart.drawio b/docu/Concepts/BusinessRequirements/graphics/Creation_Flowchart.drawio new file mode 100644 index 000000000..4c401e10e --- /dev/null +++ b/docu/Concepts/BusinessRequirements/graphics/Creation_Flowchart.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docu/Concepts/BusinessRequirements/image/Creation_flowchart.drawio.png b/docu/Concepts/BusinessRequirements/image/Creation_flowchart.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..1e5b21d7598fe15753d82177780d243001f4f682 GIT binary patch literal 68735 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�Y=vw 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ⅈ7)-K+c^rUFWrS3cL)?x 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 I$DtnkVlWd3<*b>hbak-)u6Q=={ls^&(| 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 literal 0 HcmV?d00001 From 8922b51dcf15889a51e95d29981900e219d01235 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 23 May 2022 19:16:47 +0200 Subject: [PATCH 05/11] devops: Update License in all package.json --- admin/package.json | 2 +- backend/package.json | 2 +- database/package.json | 2 +- frontend/#package.json# | 105 ++++++++++++++++++++++++++++++++++++++++ frontend/package.json | 1 + package.json | 2 +- 6 files changed, 110 insertions(+), 4 deletions(-) create mode 100755 frontend/#package.json# diff --git a/admin/package.json b/admin/package.json index 57711b8be..771e7991e 100644 --- a/admin/package.json +++ b/admin/package.json @@ -4,7 +4,7 @@ "main": "index.js", "author": "Moriz Wahl", "version": "1.8.3", - "license": "MIT", + "license": "Apache License 2.0", "private": false, "scripts": { "start": "node run/server.js", diff --git a/backend/package.json b/backend/package.json index 678e3578a..7bb404520 100644 --- a/backend/package.json +++ b/backend/package.json @@ -5,7 +5,7 @@ "main": "src/index.ts", "repository": "https://github.com/gradido/gradido/backend", "author": "Ulf Gebhardt", - "license": "MIT", + "license": "Apache License 2.0", "private": false, "scripts": { "build": "tsc --build", diff --git a/database/package.json b/database/package.json index f5a16fd31..19d21dd5b 100644 --- a/database/package.json +++ b/database/package.json @@ -5,7 +5,7 @@ "main": "src/index.ts", "repository": "https://github.com/gradido/gradido/database", "author": "Ulf Gebhardt", - "license": "MIT", + "license": "Apache License 2.0", "private": false, "scripts": { "build": "mkdir -p build/src/config/ && cp src/config/*.txt build/src/config/ && tsc --build", diff --git a/frontend/#package.json# b/frontend/#package.json# new file mode 100755 index 000000000..9c862d2a8 --- /dev/null +++ b/frontend/#package.json# @@ -0,0 +1,105 @@ +{ + "name": "bootstrap-vue-gradido-wallet", + "version": "1.8.3", + "private": true, + "scripts": { + "start": "node run/server.js", + "serve": "vue-cli-service serve --open", + "build": "vue-cli-service build", + "dev": "yarn run serve", + "analyse-bundle": "yarn build && webpack-bundle-analyzer dist/webpack.stats.json", + "lint": "eslint --max-warnings=0 --ext .js,.vue,.json .", + "stylelint": "stylelint --max-warnings=0 '**/*.{scss,vue}'", + "test": "cross-env TZ=UTC jest --coverage", + "locales": "scripts/sort.sh" + }, + "dependencies": { + "@babel/core": "^7.13.13", + "@babel/node": "^7.13.13", + "@babel/preset-env": "^7.13.12", + "@vue/cli-plugin-unit-jest": "^4.5.12", + "@vue/test-utils": "^1.1.3", + "apollo-boost": "^0.4.9", + "babel-core": "^7.0.0-bridge.0", + "babel-jest": "^27.3.1", + "babel-preset-vue": "^2.0.2", + "bootstrap": "^4.5.3", + "bootstrap-vue": "^2.21.2", + "clipboard-polyfill": "^4.0.0-rc1", + "es6-promise": "^4.1.1", + "eslint": "^7.25.0", + "eslint-config-prettier": "^8.1.0", + "eslint-config-standard": "^16.0.2", + "eslint-loader": "^4.0.2", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jest": "^24.3.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-promise": "^4.3.1", + "eslint-plugin-vue": "^7.8.0", + "express": "^4.17.1", + "flatpickr": "^4.5.7", + "flush-promises": "^1.0.2", + "graphql": "^15.5.1", + "identity-obj-proxy": "^3.0.0", + "jest": "^26.6.3", + "jest-canvas-mock": "^2.3.1", + "jest-environment-jsdom-sixteen": "^2.0.0", + "particles-bg-vue": "1.2.3", + "portal-vue": "^2.1.7", + "prettier": "^2.2.1", + "qrcanvas-vue": "2.1.1", + "regenerator-runtime": "^0.13.7", + "vee-validate": "^3.4.5", + "vue": "2.6.12", + "vue-apollo": "^3.0.7", + "vue-flatpickr-component": "^8.1.2", + "vue-focus": "^2.1.0", + "vue-i18n": "^8.22.4", + "vue-jest": "^3.0.7", + "vue-loading-overlay": "^3.4.2", + "vue-moment": "^4.1.0", + "vue-router": "^3.0.6", + "vue2-transitions": "^0.2.3", + "vuex": "^3.6.0", + "vuex-persistedstate": "^4.0.0-beta.3" + }, + "devDependencies": { + "@intlify/eslint-plugin-vue-i18n": "^1.4.0", + "@vue/cli-plugin-babel": "^3.7.0", + "@vue/cli-plugin-eslint": "^3.7.0", + "@vue/cli-service": "^3.7.0", + "@vue/eslint-config-prettier": "^4.0.1", + "babel-eslint": "^10.1.0", + "babel-plugin-component": "^1.1.0", + "babel-plugin-transform-require-context": "^0.1.1", + "cross-env": "^7.0.3", + "dotenv-webpack": "^7.0.3", + "postcss": "^8.4.8", + "postcss-html": "^1.3.0", + "postcss-scss": "^4.0.3", + "sass": "1.32.13", + "sass-loader": "^10", + "stats-webpack-plugin": "^0.7.0", + "stylelint": "^14.5.3", + "stylelint-config-recommended-vue": "^1.3.0", + "stylelint-config-standard-scss": "^3.0.0", + "vue-cli-plugin-i18n": "^1.0.1", + "vue-html-webpack-plugin": "^3.2.2", + "vue-template-compiler": "^2.6.11", + "webpack-bundle-analyzer": "^4.5.0" + }, + "postcss": { + "plugins": { + "autoprefixer": {} + } + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie <= 10" + ], + "author": "Gradido-Akademie - https://www.gradido.net/", + "license": "Apache License 2.0", + "description": "Gradido, the Natural Economy of Life, is a way to worldwide prosperity and peace in harmony with nature. - Gradido, die Natürliche Ökonomie des lebens, ist ein Weg zu weltweitem Wohlstand und Frieden in Harmonie mit der Natur." +} diff --git a/frontend/package.json b/frontend/package.json index 9d70ace58..9c862d2a8 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -100,5 +100,6 @@ "not ie <= 10" ], "author": "Gradido-Akademie - https://www.gradido.net/", + "license": "Apache License 2.0", "description": "Gradido, the Natural Economy of Life, is a way to worldwide prosperity and peace in harmony with nature. - Gradido, die Natürliche Ökonomie des lebens, ist ein Weg zu weltweitem Wohlstand und Frieden in Harmonie mit der Natur." } diff --git a/package.json b/package.json index 20ab8dd35..4baa9c48f 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "repository": "git@github.com:gradido/gradido.git", "author": "Ulf Gebhardt ", - "license": "MIT", + "license": "Apache License 2.0", "scripts": { "release": "scripts/release.sh" }, From d0a119ade9d62c4a865274220968dbdab24ecf1f Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 23 May 2022 19:18:48 +0200 Subject: [PATCH 06/11] Delete #package.json# --- frontend/#package.json# | 105 ---------------------------------------- 1 file changed, 105 deletions(-) delete mode 100755 frontend/#package.json# diff --git a/frontend/#package.json# b/frontend/#package.json# deleted file mode 100755 index 9c862d2a8..000000000 --- a/frontend/#package.json# +++ /dev/null @@ -1,105 +0,0 @@ -{ - "name": "bootstrap-vue-gradido-wallet", - "version": "1.8.3", - "private": true, - "scripts": { - "start": "node run/server.js", - "serve": "vue-cli-service serve --open", - "build": "vue-cli-service build", - "dev": "yarn run serve", - "analyse-bundle": "yarn build && webpack-bundle-analyzer dist/webpack.stats.json", - "lint": "eslint --max-warnings=0 --ext .js,.vue,.json .", - "stylelint": "stylelint --max-warnings=0 '**/*.{scss,vue}'", - "test": "cross-env TZ=UTC jest --coverage", - "locales": "scripts/sort.sh" - }, - "dependencies": { - "@babel/core": "^7.13.13", - "@babel/node": "^7.13.13", - "@babel/preset-env": "^7.13.12", - "@vue/cli-plugin-unit-jest": "^4.5.12", - "@vue/test-utils": "^1.1.3", - "apollo-boost": "^0.4.9", - "babel-core": "^7.0.0-bridge.0", - "babel-jest": "^27.3.1", - "babel-preset-vue": "^2.0.2", - "bootstrap": "^4.5.3", - "bootstrap-vue": "^2.21.2", - "clipboard-polyfill": "^4.0.0-rc1", - "es6-promise": "^4.1.1", - "eslint": "^7.25.0", - "eslint-config-prettier": "^8.1.0", - "eslint-config-standard": "^16.0.2", - "eslint-loader": "^4.0.2", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.3.2", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-promise": "^4.3.1", - "eslint-plugin-vue": "^7.8.0", - "express": "^4.17.1", - "flatpickr": "^4.5.7", - "flush-promises": "^1.0.2", - "graphql": "^15.5.1", - "identity-obj-proxy": "^3.0.0", - "jest": "^26.6.3", - "jest-canvas-mock": "^2.3.1", - "jest-environment-jsdom-sixteen": "^2.0.0", - "particles-bg-vue": "1.2.3", - "portal-vue": "^2.1.7", - "prettier": "^2.2.1", - "qrcanvas-vue": "2.1.1", - "regenerator-runtime": "^0.13.7", - "vee-validate": "^3.4.5", - "vue": "2.6.12", - "vue-apollo": "^3.0.7", - "vue-flatpickr-component": "^8.1.2", - "vue-focus": "^2.1.0", - "vue-i18n": "^8.22.4", - "vue-jest": "^3.0.7", - "vue-loading-overlay": "^3.4.2", - "vue-moment": "^4.1.0", - "vue-router": "^3.0.6", - "vue2-transitions": "^0.2.3", - "vuex": "^3.6.0", - "vuex-persistedstate": "^4.0.0-beta.3" - }, - "devDependencies": { - "@intlify/eslint-plugin-vue-i18n": "^1.4.0", - "@vue/cli-plugin-babel": "^3.7.0", - "@vue/cli-plugin-eslint": "^3.7.0", - "@vue/cli-service": "^3.7.0", - "@vue/eslint-config-prettier": "^4.0.1", - "babel-eslint": "^10.1.0", - "babel-plugin-component": "^1.1.0", - "babel-plugin-transform-require-context": "^0.1.1", - "cross-env": "^7.0.3", - "dotenv-webpack": "^7.0.3", - "postcss": "^8.4.8", - "postcss-html": "^1.3.0", - "postcss-scss": "^4.0.3", - "sass": "1.32.13", - "sass-loader": "^10", - "stats-webpack-plugin": "^0.7.0", - "stylelint": "^14.5.3", - "stylelint-config-recommended-vue": "^1.3.0", - "stylelint-config-standard-scss": "^3.0.0", - "vue-cli-plugin-i18n": "^1.0.1", - "vue-html-webpack-plugin": "^3.2.2", - "vue-template-compiler": "^2.6.11", - "webpack-bundle-analyzer": "^4.5.0" - }, - "postcss": { - "plugins": { - "autoprefixer": {} - } - }, - "browserslist": [ - "> 1%", - "last 2 versions", - "not ie <= 10" - ], - "author": "Gradido-Akademie - https://www.gradido.net/", - "license": "Apache License 2.0", - "description": "Gradido, the Natural Economy of Life, is a way to worldwide prosperity and peace in harmony with nature. - Gradido, die Natürliche Ökonomie des lebens, ist ein Weg zu weltweitem Wohlstand und Frieden in Harmonie mit der Natur." -} From 44d62b535c6978c470494c03878710fd3f1a383e Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 24 May 2022 16:55:44 +0200 Subject: [PATCH 07/11] fix: Add Timezone to Decay Start Block --- backend/src/config/index.test.ts | 2 +- backend/src/config/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/config/index.test.ts b/backend/src/config/index.test.ts index 3c4c7865e..1dabf9292 100644 --- a/backend/src/config/index.test.ts +++ b/backend/src/config/index.test.ts @@ -3,7 +3,7 @@ import CONFIG from './index' describe('config/index', () => { describe('decay start block', () => { it('has the correct date set', () => { - expect(CONFIG.DECAY_START_TIME).toEqual(new Date('2021-05-13 17:46:31')) + expect(CONFIG.DECAY_START_TIME).toEqual(new Date('2021-05-13 17:46:31-0000')) }) }) }) diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 559b8e9c5..28318ed6b 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -11,7 +11,7 @@ Decimal.set({ const constants = { DB_VERSION: '0036-unique_previous_in_transactions', - DECAY_START_TIME: new Date('2021-05-13 17:46:31'), // GMT+0 + DECAY_START_TIME: new Date('2021-05-13 17:46:31-0000'), // GMT+0 LOG4JS_CONFIG: 'log4js-config.json', // default log level on production should be info LOG_LEVEL: process.env.LOG_LEVEL || 'info', From 32f8e43c90e24b43201886faab70f596cc82f6be Mon Sep 17 00:00:00 2001 From: ogerly Date: Sun, 29 May 2022 12:08:28 +0200 Subject: [PATCH 08/11] remove files and code from coinanimation settings --- .../UserSettings/UserCoinAnimation.spec.js | 127 ------------------ .../UserSettings/UserCoinAnimation.vue | 65 --------- frontend/src/graphql/mutations.js | 2 - frontend/src/graphql/queries.js | 2 - frontend/src/locales/de.json | 5 - frontend/src/locales/en.json | 5 - frontend/src/pages/Profile.spec.js | 4 - frontend/src/pages/Profile.vue | 4 - frontend/src/store/store.js | 6 - frontend/src/store/store.test.js | 40 ++---- 10 files changed, 10 insertions(+), 250 deletions(-) delete mode 100644 frontend/src/components/UserSettings/UserCoinAnimation.spec.js delete mode 100644 frontend/src/components/UserSettings/UserCoinAnimation.vue diff --git a/frontend/src/components/UserSettings/UserCoinAnimation.spec.js b/frontend/src/components/UserSettings/UserCoinAnimation.spec.js deleted file mode 100644 index aabf927fb..000000000 --- a/frontend/src/components/UserSettings/UserCoinAnimation.spec.js +++ /dev/null @@ -1,127 +0,0 @@ -import { mount } from '@vue/test-utils' -import UserCoinAnimation from './UserCoinAnimation' -import { updateUserInfos } from '@/graphql/mutations' - -import { toastErrorSpy, toastSuccessSpy } from '@test/testSetup' - -const localVue = global.localVue - -const mockAPIcall = jest.fn() - -const storeCommitMock = jest.fn() - -describe('UserCard_CoinAnimation', () => { - let wrapper - - const mocks = { - $t: jest.fn((t) => t), - $store: { - state: { - language: 'de', - coinanimation: true, - }, - commit: storeCommitMock, - }, - $apollo: { - mutate: mockAPIcall, - }, - } - - const Wrapper = () => { - return mount(UserCoinAnimation, { localVue, mocks }) - } - - describe('mount', () => { - beforeEach(() => { - jest.clearAllMocks() - wrapper = Wrapper() - }) - - it('renders the component', () => { - expect(wrapper.find('div#formusercoinanimation').exists()).toBeTruthy() - }) - - it('has an edit BFormCheckbox switch', () => { - expect(wrapper.find('.Test-BFormCheckbox').exists()).toBeTruthy() - }) - - describe('enable with success', () => { - beforeEach(async () => { - await wrapper.setData({ CoinAnimationStatus: false }) - mockAPIcall.mockResolvedValue({ - data: { - updateUserInfos: { - validValues: 1, - }, - }, - }) - await wrapper.find('input').setChecked() - }) - - it('calls the updateUserInfos mutation', () => { - expect(mockAPIcall).toBeCalledWith({ - mutation: updateUserInfos, - variables: { - coinanimation: true, - }, - }) - }) - - it('updates the store', () => { - expect(storeCommitMock).toBeCalledWith('coinanimation', true) - }) - - it('toasts a success message', () => { - expect(toastSuccessSpy).toBeCalledWith('settings.coinanimation.True') - }) - }) - - describe('disable with success', () => { - beforeEach(async () => { - await wrapper.setData({ CoinAnimationStatus: true }) - mockAPIcall.mockResolvedValue({ - data: { - updateUserInfos: { - validValues: 1, - }, - }, - }) - await wrapper.find('input').setChecked(false) - }) - - it('calls the subscribe mutation', () => { - expect(mockAPIcall).toBeCalledWith({ - mutation: updateUserInfos, - variables: { - coinanimation: false, - }, - }) - }) - - it('updates the store', () => { - expect(storeCommitMock).toBeCalledWith('coinanimation', false) - }) - - it('toasts a success message', () => { - expect(toastSuccessSpy).toBeCalledWith('settings.coinanimation.False') - }) - }) - - describe('disable with server error', () => { - beforeEach(() => { - mockAPIcall.mockRejectedValue({ - message: 'Ouch', - }) - wrapper.find('input').trigger('change') - }) - - it('resets the CoinAnimationStatus', () => { - expect(wrapper.vm.CoinAnimationStatus).toBeTruthy() - }) - - it('toasts an error message', () => { - expect(toastErrorSpy).toBeCalledWith('Ouch') - }) - }) - }) -}) diff --git a/frontend/src/components/UserSettings/UserCoinAnimation.vue b/frontend/src/components/UserSettings/UserCoinAnimation.vue deleted file mode 100644 index 040825105..000000000 --- a/frontend/src/components/UserSettings/UserCoinAnimation.vue +++ /dev/null @@ -1,65 +0,0 @@ - - diff --git a/frontend/src/graphql/mutations.js b/frontend/src/graphql/mutations.js index 672af5f04..9b035cba6 100644 --- a/frontend/src/graphql/mutations.js +++ b/frontend/src/graphql/mutations.js @@ -31,7 +31,6 @@ export const updateUserInfos = gql` $password: String $passwordNew: String $locale: String - $coinanimation: Boolean ) { updateUserInfos( firstName: $firstName @@ -39,7 +38,6 @@ export const updateUserInfos = gql` password: $password passwordNew: $passwordNew language: $locale - coinanimation: $coinanimation ) } ` diff --git a/frontend/src/graphql/queries.js b/frontend/src/graphql/queries.js index 2bd905e5e..601880a51 100644 --- a/frontend/src/graphql/queries.js +++ b/frontend/src/graphql/queries.js @@ -7,7 +7,6 @@ export const login = gql` firstName lastName language - coinanimation klickTipp { newsletterState } @@ -25,7 +24,6 @@ export const verifyLogin = gql` firstName lastName language - coinanimation klickTipp { newsletterState } diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index 3b4912a2f..a3e412a0e 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -186,11 +186,6 @@ "send_gdd": "GDD versenden", "send_per_link": "GDD versenden per Link", "settings": { - "coinanimation": { - "coinanimation": "Münzanimation", - "False": "Münzanimation ausgeschaltet", - "True": "Münzanimation eingeschaltet" - }, "language": { "changeLanguage": "Sprache ändern", "de": "Deutsch", diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 63f2510a3..4a7245147 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -186,11 +186,6 @@ "send_gdd": "GDD send", "send_per_link": "GDD send via link", "settings": { - "coinanimation": { - "coinanimation": "Coin animation", - "False": "Coin animation disabled", - "True": "Coin animation enabled" - }, "language": { "changeLanguage": "Change language", "de": "Deutsch", diff --git a/frontend/src/pages/Profile.spec.js b/frontend/src/pages/Profile.spec.js index fb4ee2d42..6a6efcfe3 100644 --- a/frontend/src/pages/Profile.spec.js +++ b/frontend/src/pages/Profile.spec.js @@ -38,9 +38,5 @@ describe('Profile', () => { it('has a user change newsletter form', () => { expect(wrapper.findComponent({ name: 'UserNewsletter' }).exists()).toBeTruthy() }) - - it('has a user change coin animation form', () => { - expect(wrapper.findComponent({ name: 'UserCoinAnimation' }).exists()).toBeTruthy() - }) }) }) diff --git a/frontend/src/pages/Profile.vue b/frontend/src/pages/Profile.vue index 01308b29a..703fea307 100644 --- a/frontend/src/pages/Profile.vue +++ b/frontend/src/pages/Profile.vue @@ -8,8 +8,6 @@
-
-