mirror of
https://github.com/Redocly/redoc.git
synced 2024-11-25 10:03:45 +03:00
57e93ec435
Co-authored-by: Jonathan Bailey <jonathan_bailey@bose.com> Co-authored-by: Roman Hotsiy <gotsijroman@gmail.com>
139 lines
4.6 KiB
JavaScript
139 lines
4.6 KiB
JavaScript
'use strict';
|
|
const verifyNoBrowserErrors = require('./helpers').verifyNoBrowserErrors;
|
|
const scrollToEl = require('./helpers').scrollToEl;
|
|
const fixFFTest = require('./helpers').fixFFTest;
|
|
const eachNth = require('./helpers').eachNth;
|
|
const getInnerHtml = require('./helpers').getInnerHtml;
|
|
|
|
const URL = 'index.html';
|
|
|
|
function waitForInit() {
|
|
const EC = protractor.ExpectedConditions;
|
|
const $apiInfo = $('api-info');
|
|
const $errorMessage = $('.redoc-error');
|
|
browser.wait(EC.or(EC.visibilityOf($apiInfo), EC.visibilityOf($errorMessage)), 60000);
|
|
}
|
|
|
|
function basicTests(swaggerUrl, title) {
|
|
describe(`Basic suite for ${title}`, () => {
|
|
let specUrl = URL;
|
|
if (swaggerUrl) {
|
|
specUrl += `?url=${encodeURIComponent(swaggerUrl)}`;
|
|
}
|
|
|
|
beforeEach(done => {
|
|
browser.get(specUrl);
|
|
waitForInit();
|
|
fixFFTest(done);
|
|
});
|
|
|
|
afterEach(() => {
|
|
verifyNoBrowserErrors();
|
|
});
|
|
|
|
it('should init redoc without errors', done => {
|
|
const $redoc = $('redoc');
|
|
expect($redoc.isPresent()).toBe(true);
|
|
setTimeout(() => {
|
|
const $operations = $$('operation');
|
|
expect($operations.count()).toBeGreaterThan(0);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
basicTests(null, 'Extended Petstore');
|
|
|
|
describe('Scroll sync', () => {
|
|
const specUrl = URL;
|
|
|
|
beforeEach(done => {
|
|
browser.get(specUrl);
|
|
waitForInit();
|
|
fixFFTest(done);
|
|
});
|
|
|
|
it('should update active menu entries on page scroll forwards', () => {
|
|
scrollToEl('[section="tag/store"]').then(() => {
|
|
expect(getInnerHtml('.menu-item.menu-item-depth-1.active > .menu-item-header')).toContain(
|
|
'store',
|
|
);
|
|
expect(getInnerHtml('.selected-tag')).toContain('store');
|
|
});
|
|
});
|
|
|
|
it('should update active menu entries on page scroll backwards', () => {
|
|
scrollToEl('[operation-id="getPetById"]').then(() => {
|
|
expect(getInnerHtml('.menu-item.menu-item-depth-1.active .menu-item-header')).toContain(
|
|
'pet',
|
|
);
|
|
expect(getInnerHtml('.selected-tag')).toContain('pet');
|
|
expect(getInnerHtml('.menu-item.menu-item-depth-2.active .menu-item-header')).toContain(
|
|
'Find pet by ID',
|
|
);
|
|
expect(getInnerHtml('.selected-endpoint')).toContain('Find pet by ID');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Language tabs sync', () => {
|
|
const specUrl = URL;
|
|
|
|
beforeEach(done => {
|
|
browser.get(specUrl);
|
|
waitForInit();
|
|
fixFFTest(done);
|
|
});
|
|
|
|
// skip as it fails for no reason on IE on sauce-labs
|
|
// TODO: fixme
|
|
xit('should sync language tabs', () => {
|
|
const $item = $$('[operation-id="addPet"] tabs > ul > li').last();
|
|
// check if correct item
|
|
expect($item.getText()).toContain('PHP');
|
|
const EC = protractor.ExpectedConditions;
|
|
browser.wait(EC.elementToBeClickable($item), 5000);
|
|
$item.click().then(() => {
|
|
expect($('[operation-id="updatePet"] li.active').getText()).toContain('PHP');
|
|
});
|
|
});
|
|
});
|
|
|
|
if (process.env.JOB === 'e2e-guru') {
|
|
describe('APIs.guru specs test', () => {
|
|
// global.apisGuruList was loaded in onPrepare method of protractor config
|
|
let apisGuruList = global.apisGuruList;
|
|
|
|
// Remove certain APIs that are known to cause problems
|
|
delete apisGuruList['motaword.com']; // invalid (see https://github.com/BigstickCarpet/swagger-parser/issues/26)
|
|
delete apisGuruList['learnifier.com']; // allof object and no type
|
|
delete apisGuruList['googleapis.com:mirror']; // bad urls in images
|
|
delete apisGuruList['googleapis.com:discovery']; // non-string references
|
|
delete apisGuruList['clarify.io']; // non-string references
|
|
//delete apisGuruList['pushpay.com']; // https://github.com/Redocly/redoc/issues/30
|
|
delete apisGuruList['bbci.co.uk']; // too big
|
|
delete apisGuruList['bbc.com']; // too big
|
|
delete apisGuruList['osisoft.com']; // too big
|
|
delete apisGuruList['magento.com']; // too big
|
|
|
|
// run quick version of e2e test on all builds except releases
|
|
if (process.env.TRAVIS && !process.env.TRAVIS_TAG) {
|
|
console.log('Running on a short APIs guru list');
|
|
apisGuruList = eachNth(apisGuruList, 20);
|
|
} else {
|
|
console.log('Running on full APIs guru list');
|
|
}
|
|
|
|
for (const apiName of Object.keys(apisGuruList)) {
|
|
const apiInfo = apisGuruList[apiName].versions[apisGuruList[apiName].preferred];
|
|
let url = apiInfo.swaggerUrl;
|
|
|
|
// temporary hack due to this issue: https://github.com/substack/https-browserify/issues/6
|
|
url = url.replace('https://', 'http://');
|
|
url = url.replace('apis-guru.github.io/', 'apis-guru.github.io:80/');
|
|
basicTests(url, `${apiName}:${apiInfo.info.version}\n${url}`);
|
|
}
|
|
});
|
|
}
|