From b45b7cf03b3273fdd580d922cbd506f0f023dcd4 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 6 Jul 2021 14:28:34 +0200 Subject: [PATCH] load all validation rules for unit tests --- frontend/src/main.js | 3 + frontend/src/validation-rules.js | 169 ++++++++++++++++--------------- frontend/test/testSetup.js | 14 ++- 3 files changed, 100 insertions(+), 86 deletions(-) diff --git a/frontend/src/main.js b/frontend/src/main.js index 0e6fd0ef2..dff366780 100755 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -3,6 +3,7 @@ import DashboardPlugin from './plugins/dashboard-plugin' import App from './App.vue' import i18n from './i18n.js' import './validation-rules' +import { loadAllRules } from './validation-rules' import { store } from './store/store' @@ -12,6 +13,8 @@ import router from './routes/router' Vue.use(DashboardPlugin) Vue.config.productionTip = false +loadAllRules(i18n) + router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !store.state.sessionId) { next({ path: '/login' }) diff --git a/frontend/src/validation-rules.js b/frontend/src/validation-rules.js index e92e820bb..4476e3de2 100644 --- a/frontend/src/validation-rules.js +++ b/frontend/src/validation-rules.js @@ -1,104 +1,105 @@ -import i18n from './i18n.js' import { configure, extend } from 'vee-validate' // eslint-disable-next-line camelcase import { required, email, min, max, is_not } from 'vee-validate/dist/rules' import loginAPI from './apis/loginAPI' -configure({ - defaultMessage: (field, values) => { - values._field_ = i18n.t(`fields.${field}`) - return i18n.t(`validations.messages.${values._rule_}`, values) - }, -}) +export const loadAllRules = (i18nCallback) => { + configure({ + defaultMessage: (field, values) => { + values._field_ = i18nCallback.t(`fields.${field}`) + return i18nCallback.t(`validations.messages.${values._rule_}`, values) + }, + }) -extend('email', { - ...email, - message: (_, values) => i18n.t('validations.messages.email', values), -}) + extend('email', { + ...email, + message: (_, values) => i18nCallback.t('validations.messages.email', values), + }) -extend('required', { - ...required, - message: (_, values) => i18n.t('validations.messages.required', values), -}) + extend('required', { + ...required, + message: (_, values) => i18nCallback.t('validations.messages.required', values), + }) -extend('min', { - ...min, - message: (_, values) => i18n.t('validations.messages.min', values), -}) + extend('min', { + ...min, + message: (_, values) => i18nCallback.t('validations.messages.min', values), + }) -extend('max', { - ...max, - message: (_, values) => i18n.t('validations.messages.max', values), -}) + extend('max', { + ...max, + message: (_, values) => i18nCallback.t('validations.messages.max', values), + }) -extend('gddSendAmount', { - validate(value, { min, max }) { - value = value.replace(',', '.') - return value.match(/^[0-9]+(\.[0-9]{0,2})?$/) && Number(value) >= min && Number(value) <= max - }, - params: ['min', 'max'], - message: (_, values) => { - values.min = i18n.n(values.min, 'ungroupedDecimal') - values.max = i18n.n(values.max, 'ungroupedDecimal') - return i18n.t('form.validation.gddSendAmount', values) - }, -}) + extend('gddSendAmount', { + validate(value, { min, max }) { + value = value.replace(',', '.') + return value.match(/^[0-9]+(\.[0-9]{0,2})?$/) && Number(value) >= min && Number(value) <= max + }, + params: ['min', 'max'], + message: (_, values) => { + values.min = i18nCallback.n(values.min, 'ungroupedDecimal') + values.max = i18nCallback.n(values.max, 'ungroupedDecimal') + return i18nCallback.t('form.validation.gddSendAmount', values) + }, + }) -extend('gddUsernameUnique', { - async validate(value) { - const result = await loginAPI.checkUsername(value) - return result.result.data.state === 'success' - }, - message: (_, values) => i18n.t('form.validation.usernmae-unique', values), -}) + extend('gddUsernameUnique', { + async validate(value) { + const result = await loginAPI.checkUsername(value) + return result.result.data.state === 'success' + }, + message: (_, values) => i18nCallback.t('form.validation.usernmae-unique', values), + }) -extend('gddUsernameRgex', { - validate(value) { - return !!value.match(/^[a-zA-Z][-_a-zA-Z0-9]{2,}$/) - }, - message: (_, values) => i18n.t('form.validation.usernmae-regex', values), -}) + extend('gddUsernameRgex', { + validate(value) { + return !!value.match(/^[a-zA-Z][-_a-zA-Z0-9]{2,}$/) + }, + message: (_, values) => i18nCallback.t('form.validation.usernmae-regex', values), + }) -// eslint-disable-next-line camelcase -extend('is_not', { // eslint-disable-next-line camelcase - ...is_not, - message: (_, values) => i18n.t('form.validation.is-not', values), -}) + extend('is_not', { + // eslint-disable-next-line camelcase + ...is_not, + message: (_, values) => i18nCallback.t('form.validation.is-not', values), + }) -// Password validation + // Password validation -extend('containsLowercaseCharacter', { - validate(value) { - return !!value.match(/[a-z]+/) - }, - message: (_, values) => i18n.t('site.signup.lowercase', values), -}) + extend('containsLowercaseCharacter', { + validate(value) { + return !!value.match(/[a-z]+/) + }, + message: (_, values) => i18nCallback.t('site.signup.lowercase', values), + }) -extend('containsUppercaseCharacter', { - validate(value) { - return !!value.match(/[A-Z]+/) - }, - message: (_, values) => i18n.t('site.signup.uppercase', values), -}) + extend('containsUppercaseCharacter', { + validate(value) { + return !!value.match(/[A-Z]+/) + }, + message: (_, values) => i18nCallback.t('site.signup.uppercase', values), + }) -extend('containsNumericCharacter', { - validate(value) { - return !!value.match(/[0-9]+/) - }, - message: (_, values) => i18n.t('site.signup.one_number', values), -}) + extend('containsNumericCharacter', { + validate(value) { + return !!value.match(/[0-9]+/) + }, + message: (_, values) => i18nCallback.t('site.signup.one_number', values), + }) -extend('atLeastEightCharactera', { - validate(value) { - return !!value.match(/.{8,}/) - }, - message: (_, values) => i18n.t('site.signup.minimum', values), -}) + extend('atLeastEightCharactera', { + validate(value) { + return !!value.match(/.{8,}/) + }, + message: (_, values) => i18nCallback.t('site.signup.minimum', values), + }) -extend('samePassword', { - validate(value, [pwd]) { - return value === pwd - }, - message: (_, values) => i18n.t('site.signup.dont_match', values), -}) + extend('samePassword', { + validate(value, [pwd]) { + return value === pwd + }, + message: (_, values) => i18nCallback.t('site.signup.dont_match', values), + }) +} diff --git a/frontend/test/testSetup.js b/frontend/test/testSetup.js index 26d311941..565ebc33f 100644 --- a/frontend/test/testSetup.js +++ b/frontend/test/testSetup.js @@ -1,10 +1,11 @@ import { createLocalVue } from '@vue/test-utils' import { BootstrapVue, IconsPlugin } from 'bootstrap-vue' import Vuex from 'vuex' + import { ValidationProvider, ValidationObserver, extend } from 'vee-validate' import * as rules from 'vee-validate/dist/rules' - import { messages } from 'vee-validate/dist/locale/en.json' + import RegeneratorRuntime from 'regenerator-runtime' import SideBar from '@/components/SidebarPlugin' import VueQrcode from 'vue-qrcode' @@ -14,7 +15,7 @@ import VueMoment from 'vue-moment' import clickOutside from '@/directives/click-ouside.js' import { focus } from 'vue-focus' -global.localVue = createLocalVue() +import { loadAllRules } from '../src/validation-rules' Object.keys(rules).forEach((rule) => { extend(rule, { @@ -23,6 +24,15 @@ Object.keys(rules).forEach((rule) => { }) }) +const i18nMock = { + t: (identifier, values) => identifier, + n: (value, format) => value, +} + +loadAllRules(i18nMock) + +global.localVue = createLocalVue() + global.localVue.use(BootstrapVue) global.localVue.use(Vuex) global.localVue.use(IconsPlugin)