From e1e92c6ea86af9cd0f2572eb9d1d97c374834f60 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 15 Apr 2021 01:22:31 +0200 Subject: [PATCH] Pages Register.vue Tests Increase coverage requirement to 11% --- .github/workflows/test.yml | 2 +- frontend/src/views/Pages/Register.spec.js | 107 ++++++++++++++++++++++ frontend/src/views/Pages/Register.vue | 29 ++---- 3 files changed, 117 insertions(+), 21 deletions(-) create mode 100644 frontend/src/views/Pages/Register.spec.js 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/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 f5b3e817d..b651d8144 100755 --- a/frontend/src/views/Pages/Register.vue +++ b/frontend/src/views/Pages/Register.vue @@ -1,5 +1,5 @@