diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 78d381820..e43fd92ee 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -159,7 +159,7 @@ jobs: with: type: lcov result_path: ./coverage/lcov.info - min_coverage: 10 + min_coverage: 11 token: ${{ github.token }} #test: diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index 3b9d2e217..8f6975889 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -24,7 +24,7 @@ "sender":"Absender", "firstname":"Vorname", "lastname":"Nachname", - "email":"eMail", + "email":"E-Mail", "email_repeat":"eMail wiederholen", "password":"Passwort", "password_repeat":"Passwort wiederholen", @@ -59,9 +59,12 @@ "signup": { "title": "Erstelle dein Gradido-Konto", "subtitle": "Werde Teil der Gemeinschaft!", - "strength":"Passwortsicherheit:", - "strong":"stark", - "agree":"habe ich gelesen und verstanden und stimme diesen zu." + "agree":"Ich stimme der Datenschutzerklärung zu.", + "lowercase":"Ein Kleinbuchstabe erforderlich.", + "uppercase":"Ein Großbuchstabe erforderlich.", + "minimum":"Mindestens 8 Zeichen.", + "one_number":"Eine Zahl erforderlich.", + "dont_match":"Die Passwörter stimmen nicht überein." }, "password": { "title": "Passwort zurücksetzen", diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index d05a9e0d5..849873cae 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -59,9 +59,12 @@ "signup": { "title": "Create your Gradido account", "subtitle": "Become a part of the community!", - "strength":"Password strength:", - "strong":"strong", - "agree":"I have read and understood and agree to them" + "agree":"I agree to the privacy policy.", + "lowercase":"One lowercase letter required.", + "uppercase":"One uppercase letter required.", + "minimum":"8 characters minimum.", + "one_number":"One number required.", + "dont_match":"Passwords don't match." }, "password": { "title": "Reset password", diff --git a/frontend/src/views/Pages/Register.spec.js b/frontend/src/views/Pages/Register.spec.js new file mode 100644 index 000000000..e9d09a242 --- /dev/null +++ b/frontend/src/views/Pages/Register.spec.js @@ -0,0 +1,107 @@ +import { mount, RouterLinkStub } from '@vue/test-utils' +import Vuex from 'vuex' +import flushPromises from 'flush-promises' + +import Register from './Register' + +const localVue = global.localVue + +describe('Register', () => { + let wrapper + + let mocks = { + $i18n: { + locale: 'en', + }, + $t: jest.fn((t) => t), + } + + let state = { + // loginfail: false, + } + + let store = new Vuex.Store({ + state, + }) + + let stubs = { + RouterLink: RouterLinkStub, + } + + const Wrapper = () => { + return mount(Register, { localVue, mocks, store, stubs }) + } + + describe('mount', () => { + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders the Register form', () => { + expect(wrapper.find('div.register-form').exists()).toBeTruthy() + }) + + describe('Register header', () => { + it('has a welcome message', () => { + expect(wrapper.find('div.header').text()).toBe('site.signup.title site.signup.subtitle') + }) + }) + + describe('links', () => { + it('has a link "Back"', () => { + expect(wrapper.findAllComponents(RouterLinkStub).at(0).text()).toEqual('back') + }) + + it('links to /login when clicking "Back"', () => { + expect(wrapper.findAllComponents(RouterLinkStub).at(0).props().to).toBe('/login') + }) + }) + + describe('Register form', () => { + it('has a register form', () => { + expect(wrapper.find('form').exists()).toBeTruthy() + }) + + it('has 3 text input fields', () => { + expect(wrapper.findAll('input[type="text"]').length).toBe(3) + }) + + it('has 2 password input fields', () => { + expect(wrapper.findAll('input[type="password"]').length).toBe(2) + }) + + it('has 1 checkbox input fields', () => { + expect(wrapper.findAll('input[type="checkbox"]').length).toBe(1) + }) + + it('has no submit button when not completely filled', () => { + expect(wrapper.find('button[type="submit"]').exists()).toBe(false) + }) + + it('shows a warning when no valid Email is entered', async () => { + wrapper.findAll('input[type="text"]').at(2).setValue('no_valid@Email') + await flushPromises() + await expect(wrapper.find('.invalid-feedback').text()).toEqual( + 'The Email field must be a valid email', + ) + }) + + it('shows 4 warnings when no password is set', async () => { + const passwords = wrapper.findAll('input[type="password"]') + passwords.at(0).setValue('') + passwords.at(1).setValue('') + await flushPromises() + await expect(wrapper.find('div.hints').text()).toContain( + 'site.signup.lowercase', + 'site.signup.uppercase', + 'site.signup.minimum', + 'site.signup.one_number', + ) + }) + + // TODO test different invalid password combinations + }) + + // TODO test submit button + }) +}) diff --git a/frontend/src/views/Pages/Register.vue b/frontend/src/views/Pages/Register.vue index d207404d2..b651d8144 100755 --- a/frontend/src/views/Pages/Register.vue +++ b/frontend/src/views/Pages/Register.vue @@ -1,5 +1,5 @@