diff --git a/src/api/__mocks__/login.js b/src/api/__mocks__/login.js index a94fae9b8b109d0c03bec5e4c8fbee239fe44125..4ce54a8fcbf9d3602f8fdda9e3c017bb86b28267 100644 --- a/src/api/__mocks__/login.js +++ b/src/api/__mocks__/login.js @@ -1,10 +1,11 @@ const users = [ - { username: 'bob', password: '123456' } + { username: 'bob', password: '123456', authHost: 'pleroma' } ] -export async function loginByUsername(username, password) { +export async function loginByUsername(username, password, authHost) { const user = users.find(user => user.username === username) const verifyPassword = user.password === password + const verifyHost = user.authHost === authHost const data = { 'token_type': 'Bearer', 'scope': 'read write follow', @@ -14,7 +15,7 @@ export async function loginByUsername(username, password) { 'access_token': 'bar123' } - return verifyPassword + return verifyPassword && verifyHost ? Promise.resolve({ data }) : Promise.reject({ message: 'Invalid credentials' }) } diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 5ff5b857edb4ca2315fccd4a3105235a8a97d5b0..da396aeabbef194ae66ca2d94ff4cbf924b5c704 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -45,9 +45,7 @@ </template> <script> -import { Message } from 'element-ui' import SvgIcon from '@/components/SvgIcon' -import i18n from '@/lang' export default { name: 'Login', @@ -82,33 +80,20 @@ export default { }, handleLogin() { this.loading = true - if (this.checkUsername()) { - const loginData = this.getLoginData() - this.$store.dispatch('LoginByUsername', loginData).then(() => { - this.loading = false - this.$router.push({ path: this.redirect || '/users/index' }) - }).catch(() => { - this.loading = false - }) - } else { - Message({ - message: i18n.t('login.errorMessage'), - type: 'error', - duration: 7000 - }) - this.$store.dispatch('addErrorLog', { message: i18n.t('login.errorMessage') }) + const loginData = this.getLoginData() + this.$store.dispatch('LoginByUsername', loginData).then(() => { this.loading = false - } - }, - checkUsername() { - return this.loginForm.username.includes('@') + this.$router.push({ path: this.redirect || '/users/index' }) + }).catch(() => { + this.loading = false + }) }, getLoginData() { const [username, authHost] = this.loginForm.username.split('@') return { username: username.trim(), - authHost: authHost.trim(), + authHost: authHost ? authHost.trim() : window.location.host, password: this.loginForm.password } } diff --git a/test/views/login/index.test.js b/test/views/login/index.test.js index 17ac438f301562da39c715184279917f6c58f09b..b2986b5d2e3124e0295a20b6c2da0c79bc382a95 100644 --- a/test/views/login/index.test.js +++ b/test/views/login/index.test.js @@ -31,13 +31,19 @@ describe('Login', () => { router.beforeEach(beforeEachRoute) }) - it('throws error if username does not contain authHost', () => { + it('takes authHost from window.location if it is not provided in username', () => { const wrapper = mount(Login, { store, router, localVue }) + Object.defineProperty(window, 'location', { + value: { + ...window.location, + host: 'pleroma' + } + }); const errorLog = store.state.errorLog.logs expect(errorLog.length).toBe(0) const submitButton = wrapper.find('button') @@ -49,10 +55,7 @@ describe('Login', () => { submitButton.trigger('click') const updatedErrorLog = store.state.errorLog.logs - expect(updatedErrorLog.length).toBe(1) - expect(updatedErrorLog[0].message).toEqual( - 'Username must contain username and host, e.g. john@pleroma.social' - ) + expect(updatedErrorLog.length).toBe(0) }) it('throws error if password is incorrect', async (done) => { @@ -92,7 +95,7 @@ describe('Login', () => { const submitButton = wrapper.find('button') expect(wrapper.vm.$route.path).toBe('/login') - wrapper.find(usernameInput).element.value = 'bob@apple' + wrapper.find(usernameInput).element.value = 'bob@pleroma' wrapper.find(usernameInput).trigger('input') wrapper.find(passwordInput).element.value = '123456' wrapper.find(passwordInput).trigger('input') diff --git a/test/views/users/index.test.js b/test/views/users/index.test.js index 5d604226c72dc4a5b4afc788f40e0267445e2342..7fd14ecf791367c342d9b8bcf69989873eb6470c 100644 --- a/test/views/users/index.test.js +++ b/test/views/users/index.test.js @@ -27,7 +27,8 @@ describe('Search and filter users', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) await flushPromises() @@ -39,7 +40,8 @@ describe('Search and filter users', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) wrapper.vm.handleDebounceSearchInput = (query) => { @@ -76,7 +78,8 @@ describe('Users actions', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) await flushPromises() @@ -99,7 +102,8 @@ describe('Users actions', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) await flushPromises() @@ -114,7 +118,8 @@ describe('Users actions', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) await flushPromises() @@ -133,7 +138,8 @@ describe('Users actions', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) await flushPromises() expect(store.state.users.fetchedUsers.length).toEqual(3) @@ -148,7 +154,8 @@ describe('Users actions', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) await flushPromises() @@ -173,7 +180,8 @@ describe('Users actions', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) await flushPromises() @@ -192,7 +200,8 @@ describe('Users actions', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) await flushPromises() @@ -209,7 +218,8 @@ describe('Users actions', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) await flushPromises() @@ -245,7 +255,8 @@ describe('Creates new account', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) await flushPromises() @@ -269,7 +280,8 @@ describe('Creates new account', () => { const wrapper = mount(Users, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) await flushPromises() expect(wrapper.vm.usersCount).toEqual(3) @@ -302,7 +314,8 @@ describe('Creates new account', () => { const wrapper = mount(NewAccountDialog, { store, localVue, - sync: false + sync: false, + stubs: ['router-link'] }) const validateEmailRule = { validator: wrapper.vm.validateEmail, field: 'email', fullField: 'email', type: 'string' }