mirror of
https://github.com/freqtrade/frequi.git
synced 2024-11-10 18:23:50 +00:00
157 lines
5.6 KiB
TypeScript
157 lines
5.6 KiB
TypeScript
describe('Login', () => {
|
|
it('Is not logged in', () => {
|
|
cy.visit('/');
|
|
cy.get('button').should('contain', 'Login');
|
|
cy.get('li').should('contain', 'No bot selected');
|
|
cy.get('button').contains('Login').click();
|
|
cy.get('.modal-title').contains('Login to your bot');
|
|
// Test prefilled URL
|
|
cy.get('input[id=url-input]').should('have.value', 'http://localhost:3000');
|
|
cy.get('#name-input').should('exist');
|
|
cy.get('#username-input').should('exist');
|
|
cy.get('#password-input').should('exist');
|
|
// Modal popup will use "OK" instead of "submit"
|
|
cy.get('button[type=submit]').should('not.exist');
|
|
});
|
|
|
|
it('Explicit login page', () => {
|
|
cy.visit('/login');
|
|
cy.get('button').should('contain', 'Login');
|
|
cy.get('li').should('contain', 'No bot selected');
|
|
cy.get('.card-header').contains('Freqtrade bot Login');
|
|
// Test prefilled URL
|
|
cy.get('input[id=url-input]').should('have.value', 'http://localhost:3000');
|
|
cy.get('input[id=name-input]').should('exist');
|
|
cy.get('input[id=username-input]').should('exist');
|
|
cy.get('input[id=password-input]').should('exist');
|
|
cy.get('button[type=submit]').should('exist');
|
|
});
|
|
|
|
it('Redirect when not logged in', () => {
|
|
cy.visit('/trade');
|
|
cy.location().should((loc) => {
|
|
expect(loc.pathname).to.eq('/login');
|
|
expect(loc.search).to.eq('?redirect=/trade');
|
|
});
|
|
});
|
|
|
|
it('Test Login', () => {
|
|
cy.visit('/login');
|
|
cy.get('.card-header').contains('Freqtrade bot Login');
|
|
cy.get('input[id=name-input]').type('TestBot');
|
|
cy.get('input[id=username-input]').type('Freqtrader');
|
|
cy.get('input[id=password-input]').type('SuperDuperBot');
|
|
|
|
cy.intercept('**/api/v1/**', {
|
|
statusCode: 200,
|
|
// eslint-disable-next-line @typescript-eslint/camelcase
|
|
body: { access_token: 'access_token_tesst', refresh_token: 'refresh_test' },
|
|
headers: { 'access-control-allow-origin': '*' },
|
|
}).as('RandomAPICall');
|
|
cy.intercept(
|
|
{
|
|
method: 'Post',
|
|
url: '**/api/v1/token/login',
|
|
},
|
|
{
|
|
statusCode: 200,
|
|
// eslint-disable-next-line @typescript-eslint/camelcase
|
|
body: { access_token: 'access_token_tesst', refresh_token: 'refresh_test' },
|
|
headers: { 'access-control-allow-origin': '*' },
|
|
},
|
|
).as('login');
|
|
|
|
cy.get('button[type=submit]')
|
|
.click()
|
|
.should(() => {
|
|
const loginInfo = JSON.parse(localStorage.getItem('ftAuthLoginInfo') || '{}');
|
|
const bot1 = 'ftbot.0';
|
|
|
|
expect(loginInfo[bot1].botName).to.eq('TestBot');
|
|
expect(loginInfo[bot1].botName).to.eq('TestBot');
|
|
expect(loginInfo[bot1].apiUrl).to.eq('http://localhost:3000');
|
|
expect(loginInfo[bot1].accessToken).to.eq('access_token_tesst');
|
|
expect(loginInfo[bot1].refreshToken).to.eq('refresh_test');
|
|
});
|
|
// Forwarded to Main page
|
|
cy.location().should((loc) => {
|
|
expect(loc.pathname).to.eq('/');
|
|
expect(loc.search).to.eq('');
|
|
});
|
|
cy.get('button').should('contain', 'Add new bot');
|
|
cy.get('span').should('contain', 'TestBot');
|
|
// Check API calls have been made.
|
|
cy.wait('@RandomAPICall');
|
|
// login button gone
|
|
cy.get('button').should('not.contain', 'Login');
|
|
|
|
// Test logout
|
|
cy.get('[id=avatar-drop]').parent().click();
|
|
cy.get('.dropdown-menu > a:last').click();
|
|
cy.get('button').should('contain', 'Login');
|
|
// login button there again
|
|
});
|
|
|
|
it('Test Login failed - wrong api url', () => {
|
|
cy.visit('/login');
|
|
cy.get('.card-header').contains('Freqtrade bot Login');
|
|
cy.get('input[id=name-input]').type('TestBot');
|
|
cy.get('input[id=username-input]').type('Freqtrader');
|
|
cy.get('input[id=password-input]').type('SuperDuperBot');
|
|
|
|
cy.intercept('**/api/v1/**', {
|
|
statusCode: 200,
|
|
// eslint-disable-next-line @typescript-eslint/camelcase
|
|
body: { access_token: 'access_token_tesst', refresh_token: 'refresh_test' },
|
|
headers: { 'access-control-allow-origin': '*' },
|
|
}).as('RandomAPICall');
|
|
cy.intercept(
|
|
{
|
|
method: 'Post',
|
|
url: '**/api/v1/token/login',
|
|
},
|
|
{
|
|
statusCode: 404,
|
|
// eslint-disable-next-line @typescript-eslint/camelcase
|
|
body: { access_token: 'access_token_tesst', refresh_token: 'refresh_test' },
|
|
headers: { 'access-control-allow-origin': '*' },
|
|
},
|
|
).as('login');
|
|
cy.get('button[type=submit]').click();
|
|
cy.get('div').should('contain', 'Login failed.');
|
|
|
|
cy.get('div').should('contain', 'API Url required');
|
|
});
|
|
|
|
it('Test Login failed - wrong password url', () => {
|
|
cy.visit('/login');
|
|
cy.get('.card-header').contains('Freqtrade bot Login');
|
|
cy.get('input[id=name-input]').type('TestBot');
|
|
cy.get('input[id=username-input]').type('Freqtrader');
|
|
cy.get('input[id=password-input]').type('SuperDuperBot');
|
|
|
|
cy.intercept('**/api/v1/**', {
|
|
statusCode: 200,
|
|
// eslint-disable-next-line @typescript-eslint/camelcase
|
|
body: { access_token: 'access_token_tesst', refresh_token: 'refresh_test' },
|
|
headers: { 'access-control-allow-origin': '*' },
|
|
}).as('RandomAPICall');
|
|
cy.intercept(
|
|
{
|
|
method: 'Post',
|
|
url: '**/api/v1/token/login',
|
|
},
|
|
{
|
|
statusCode: 401,
|
|
// eslint-disable-next-line @typescript-eslint/camelcase
|
|
body: { access_token: 'access_token_tesst', refresh_token: 'refresh_test' },
|
|
headers: { 'access-control-allow-origin': '*' },
|
|
},
|
|
).as('login');
|
|
cy.get('button[type=submit]').click();
|
|
cy.get('div').should('contain', 'Connected to bot, however Login');
|
|
|
|
cy.get('div').should('contain', 'Name and Password are required.');
|
|
});
|
|
});
|