Add more auth/oauth/multi-acc related test cases

This commit is contained in:
SleepWalker
2019-12-28 11:28:25 +02:00
parent 0325f0aac4
commit 951f538ee5
8 changed files with 267 additions and 18 deletions

View File

@@ -1,4 +1,6 @@
/* eslint-disable @typescript-eslint/camelcase */
import { account1 } from '../../fixtures/accounts.json';
const defaults = {
client_id: 'ely',
redirect_uri: 'http://ely.by/authorization/oauth',
@@ -14,6 +16,29 @@ it('should complete oauth', () => {
cy.url().should('equal', 'https://ely.by/');
});
it('should restore previous oauthData if any', () => {
localStorage.setItem(
'oauthData',
JSON.stringify({
timestamp: Date.now() - 3600,
payload: {
clientId: 'ely',
redirectUrl: 'http://ely.by/authorization/oauth',
responseType: 'code',
description: null,
scope: 'account_info account_email',
loginHint: null,
state: null,
},
}),
);
cy.login({ accounts: ['default'] });
cy.visit('/');
cy.url().should('equal', 'https://ely.by/');
});
it('should ask to choose an account if user has multiple', () => {
cy.login({ accounts: ['default', 'default2'] }).then(
({ accounts: [account] }) => {
@@ -72,6 +97,20 @@ it('should prompt for permissions', () => {
cy.url().should('match', /^http:\/\/localhost:8080\/?\?code=[^&]+&state=$/);
});
it('should allow sign in during oauth (guest oauth)', () => {
cy.visit(`/oauth2/v1/ely?${new URLSearchParams(defaults)}`);
cy.url().should('include', '/login');
cy.get('[name=login]').type(`${account1.login}{enter}`);
cy.url().should('include', '/password');
cy.get('[name=password]').type(`${account1.password}{enter}`);
cy.url().should('equal', 'https://ely.by/');
});
// TODO: enable, when backend api will return correct response on auth decline
xit('should redirect to error page, when permission request declined', () => {
cy.server();
@@ -170,7 +209,28 @@ describe('login_hint', () => {
describe('prompts', () => {
it('should prompt for account', () => {
cy.login({ accounts: ['default'] });
cy.login({ accounts: ['default'] }).then(({ accounts: [account] }) => {
cy.visit(
`/oauth2/v1/ely?${new URLSearchParams({
...defaults,
prompt: 'select_account',
})}`,
);
cy.url().should('include', '/oauth/choose-account');
cy.getByTestId('auth-header').should('contain', 'Choose an account');
cy.getByTestId('auth-body')
.contains(account.email)
.click();
cy.url().should('equal', 'https://ely.by/');
});
});
it('should allow sign in with another account', () => {
cy.login({ accounts: ['default2'] });
cy.visit(
`/oauth2/v1/ely?${new URLSearchParams({
@@ -181,7 +241,19 @@ describe('prompts', () => {
cy.url().should('include', '/oauth/choose-account');
cy.getByTestId('auth-header').should('contain', 'Choose an account');
cy.getByTestId('auth-controls')
.contains('another account')
.click();
cy.url().should('include', '/login');
cy.get('[name=login]').type(`${account1.login}{enter}`);
cy.url().should('include', '/password');
cy.get('[name=password]').type(`${account1.password}{enter}`);
cy.url().should('equal', 'https://ely.by/');
});
it('should prompt for permissions', () => {
@@ -258,6 +330,33 @@ describe('prompts', () => {
);
});
});
it('should allow sign in during oauth (guest oauth)', () => {
cy.visit(
`/oauth2/v1/ely?${new URLSearchParams({
...defaults,
client_id: 'tlauncher',
redirect_uri: 'http://localhost:8080',
prompt: 'select_account,consent',
})}`,
);
cy.url().should('include', '/login');
cy.get('[name=login]').type(`${account1.login}{enter}`);
cy.url().should('include', '/password');
cy.get('[name=password]').type(`${account1.password}{enter}`);
assertPermissions();
cy.getByTestId('auth-controls')
.contains('Approve')
.click();
cy.url().should('match', /^http:\/\/localhost:8080\/?\?code=[^&]+&state=$/);
});
});
describe('static pages', () => {

View File

@@ -1,8 +1,10 @@
import { account1 } from '../../fixtures/accounts.json';
import { account1, account2 } from '../../fixtures/accounts.json';
it('should sign in', () => {
cy.visit('/');
cy.url().should('include', '/login');
cy.get('[name=login]').type(`${account1.login}{enter}`);
cy.url().should('include', '/password');
@@ -122,3 +124,129 @@ it('should sign in with totp', () => {
cy.location('pathname').should('eq', '/');
});
it('should allow logout', () => {
cy.login({ accounts: ['default'] });
cy.visit('/');
cy.getByTestId('toolbar')
.contains(account1.username)
.click();
cy.getByTestId('active-account')
.getByTestId('logout-account')
.click();
cy.location('pathname').should('eq', '/login');
cy.getByTestId('toolbar').should('contain', 'Join');
});
describe('multi account', () => {
it('should allow sign in with another account', () => {
cy.login({ accounts: ['default2'] });
cy.visit('/');
cy.getByTestId('toolbar')
.contains(account2.username)
.click();
cy.getByTestId('active-account').should('have.length', 1);
cy.get('[data-e2e-account-id]').should('have.length', 0);
cy.getByTestId('add-account').click();
cy.location('pathname').should('eq', '/login');
cy.get('[data-e2e-go-back]').should('exist');
cy.get('[name=login]').type(`${account1.login}{enter}`);
cy.url().should('include', '/password');
cy.get('[name=password]').type(`${account1.password}{enter}`);
cy.location('pathname').should('eq', '/');
cy.getByTestId('toolbar')
.contains(account1.username)
.click();
cy.getByTestId('active-account').should('have.length', 1);
cy.get('[data-e2e-account-id]').should('have.length', 1);
cy.get('[data-e2e-account-id]')
.getByTestId('logout-account')
.click();
});
it('should go back to profile from login screen', () => {
cy.login({ accounts: ['default'] });
cy.visit('/');
cy.getByTestId('toolbar')
.contains(account1.username)
.click();
cy.getByTestId('add-account').click();
cy.location('pathname').should('eq', '/login');
cy.get('[data-e2e-go-back]').click();
cy.location('pathname').should('eq', '/');
});
it('should allow logout active account', () => {
cy.login({ accounts: ['default', 'default2'] });
cy.visit('/');
cy.getByTestId('toolbar')
.contains(account1.username)
.click();
cy.getByTestId('active-account')
.getByTestId('logout-account')
.click();
cy.getByTestId('toolbar')
.contains(account2.username)
.click();
cy.get('[data-e2e-account-id]').should('have.length', 0);
});
it('should not allow log in the same account twice', () => {
cy.login({ accounts: ['default'] });
cy.visit('/');
cy.getByTestId('toolbar')
.contains(account1.username)
.click();
cy.getByTestId('active-account').should('have.length', 1);
cy.get('[data-e2e-account-id]').should('have.length', 0);
cy.getByTestId('add-account').click();
cy.location('pathname').should('eq', '/login');
cy.get('[data-e2e-go-back]').should('exist');
cy.get('[name=login]').type(`${account1.login}{enter}`);
cy.url().should('include', '/password');
cy.get('[name=password]').type(`${account1.password}{enter}`);
cy.location('pathname').should('eq', '/');
cy.getByTestId('toolbar')
.contains(account1.username)
.click();
cy.get('[data-e2e-account-id]').should('have.length', 0);
});
});