Hanxiang Gao 4eb68e7fb2 feat: Add initial code of skyline-console
Add initial code of skyline-console

Change-Id: Icba2152a014761f53789357b5085d0779cd0e2a4
2021-06-01 23:29:30 +08:00

178 lines
5.4 KiB
JavaScript

// Copyright 2021 99cloud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import getTitle from './common';
Cypress.Commands.add('setLanguage', () => {
const exp = Date.now() + 864000000;
const language = Cypress.env('language') || 'zh';
const value = language === 'zh' ? 'zh-cn' : 'en';
const langValue = { value, expires: exp };
window.localStorage.setItem('lang', JSON.stringify(langValue));
});
Cypress.Commands.add('visitPage', (url = '') => {
cy.visit(url);
const isListPage = url.indexOf('overview') < 0;
cy.get('#app', { timeout: 120000 }).should('exist');
if (url && isListPage) {
cy.wait(2000);
cy.get('.ant-table-wrapper', { timeout: 120000 }).should('exist');
cy.waitTableLoading();
}
});
Cypress.Commands.add(
'login',
(visitUrl = '', swithToAdmin = false, isAdmin = false) => {
cy.setLanguage();
const switchProject = swithToAdmin;
if (isAdmin) {
if (Cypress.config('adminToken')) {
cy.setCookie('session', Cypress.config('adminSession'));
cy.setCookie('X-Auth-Token', Cypress.config('adminToken'));
cy.visitPage(visitUrl || '/base/overview-admin');
if (switchProject) {
cy.switchToAdminProject();
}
return;
}
} else if (Cypress.config('token')) {
cy.setCookie('session', Cypress.config('session'));
cy.setCookie('X-Auth-Token', Cypress.config('token'));
cy.visitPage(visitUrl || '/base/overview');
if (switchProject) {
cy.switchToAdminProject();
}
return;
}
cy.log('need login by request');
const body = {
password: isAdmin
? Cypress.env('passwordAdmin')
: Cypress.env('password'),
username: isAdmin
? Cypress.env('usernameAdmin')
: Cypress.env('username'),
region: Cypress.env('region'),
domain: Cypress.env('domain'),
};
cy.request({
url: '/api/openstack/skyline/api/v1/login',
body,
method: 'POST',
}).then((res) => {
const { body: resBody, headers } = res;
const [sk] = headers['set-cookie'];
// eslint-disable-next-line no-unused-vars
const [_, session] = sk.split(';')[0].split('=');
const { keystone_token } = resBody || {};
cy.setCookie('session', session);
cy.setCookie('X-Auth-Token', keystone_token);
if (isAdmin) {
Cypress.config('adminToken', keystone_token);
Cypress.config('adminSession', session);
cy.visitPage(visitUrl || '/base/overview-admin');
if (switchProject) {
cy.switchToAdminProject();
}
} else {
Cypress.config('token', keystone_token);
Cypress.config('session', session);
cy.visitPage(visitUrl || '/base/overview');
if (switchProject) {
cy.switchToAdminProject();
}
}
});
}
);
Cypress.Commands.add('clearToken', () => {
cy.setCookie('session', '');
cy.setCookie('X-Auth-Token', '');
Cypress.config('token', null);
Cypress.config('adminToken', null);
});
Cypress.Commands.add('loginAdmin', (visitUrl = '', swithToAdmin = false) => {
const switchProject = swithToAdmin || Cypress.env('switchToAdminProject');
cy.login(visitUrl || '/base/overview-admin', switchProject, true);
});
Cypress.Commands.add('loginByPage', (username, password) => {
cy.visit('/');
cy.waitLoginFormLoading().wait(5000);
cy.loginFormSelect(0, 'RegionOne')
.loginFormSelect(1, 'Default')
.loginFormInput('username', username || Cypress.env('username'))
.loginFormInput('password', password || Cypress.env('password'))
.loginFormSubmit();
});
Cypress.Commands.add('clickMenu', (fatherIndex, sonIndex) => {
const ele = cy
.get('.ant-menu-dark')
.find('.ant-menu-submenu')
.eq(fatherIndex);
ele.click();
cy.wait(1000);
cy.get('li.ant-menu-submenu-open').first().find('ul>li').eq(sonIndex).click();
cy.wait(1000);
});
Cypress.Commands.add('setLanguageByPage', () => {
const language = Cypress.env('language');
if (language === 'zh') {
return;
}
cy.log('change language to english');
cy.get('#app > div > div > div > section > header > div > div')
.find('div')
.eq(1)
.find('.ant-col')
.last()
.find('button')
.trigger('mouseover');
cy.get('.ant-dropdown-menu-light')
.find('li')
.eq(2)
.find('button')
.eq(1)
.click()
.wait(5000);
});
Cypress.Commands.add('switchToAdminProject', () => {
cy.get('#project-switch').click().wait(2000);
cy.formTableSelectBySearch('project', 'admin')
.clickModalActionSubmitButton()
.wait(5000);
});
Cypress.Commands.add('clickTab', (label, urlTab, waitTime = 2000) => {
const realTitle = getTitle(label);
cy.get('.ant-tabs-tab-btn').contains(realTitle).click().wait(waitTime);
if (urlTab) {
cy.url().should('include', urlTab);
}
});
Cypress.Commands.add('logout', () => {
cy.clearToken();
cy.get('.ant-layout-header').find('.anticon-user').click().wait(2000);
});