126 lines
3.3 KiB
JavaScript
126 lines
3.3 KiB
JavaScript
const fetch = require('node-fetch');
|
|
|
|
//
|
|
// Generic utils
|
|
//
|
|
exports.sleep = (time) => {
|
|
return new Promise((resolve) => setTimeout(resolve, time));
|
|
};
|
|
|
|
exports.clearText = async keyboard => {
|
|
await keyboard.down('Shift');
|
|
for (let i = 0; i < 100; i++) {
|
|
await keyboard.press('ArrowUp');
|
|
}
|
|
await keyboard.up('Shift');
|
|
await keyboard.press('Backspace');
|
|
await keyboard.down('Shift');
|
|
for (let i = 0; i < 100; i++) {
|
|
await keyboard.press('ArrowDown');
|
|
}
|
|
await keyboard.up('Shift');
|
|
await keyboard.press('Backspace');
|
|
};
|
|
|
|
exports.createResponseCallback = (page, url) => {
|
|
return new Promise(resolve => {
|
|
page.on('response', function callback(response) {
|
|
if (response.url() === url) {
|
|
resolve(response);
|
|
page.removeListener('response', callback);
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
exports.getInnerText = id => {
|
|
let element = document.getElementById(id);
|
|
return element && element.textContent;
|
|
};
|
|
|
|
exports.getInputValue = id => {
|
|
let element = document.getElementById(id);
|
|
return element && element.value;
|
|
};
|
|
|
|
//
|
|
// Application specific utils
|
|
//
|
|
exports.API_HOST = process.env['API_HOST'] || 'http://127.0.0.1:8080';
|
|
exports.API_ROOT = `${exports.API_HOST}/api`;
|
|
|
|
exports.fetchExamples = async () => (await fetch(`${exports.API_HOST}/static/examples/list`)).json();
|
|
|
|
exports.runCommandAndGetOutputFor = async (command, endpoint) => {
|
|
await page.click('#configure-tab');
|
|
await exports.sleep(1000);
|
|
|
|
await page.click('#command-select');
|
|
await page.click(`#${command}`);
|
|
|
|
// Gotta create response callback before clicking run because some responses are too fast
|
|
const responseCallback = exports.createResponseCallback(page, `${exports.API_ROOT}/${endpoint}`);
|
|
|
|
await page.click('#run');
|
|
await responseCallback;
|
|
|
|
return page.evaluate(exports.getInnerText, 'output');
|
|
};
|
|
|
|
exports.verifyAllExamples = async (action, done) => {
|
|
const examples = await exports.fetchExamples();
|
|
|
|
for (example of examples) {
|
|
await page.click(`#${example.id}`);
|
|
|
|
expect(await action()).not.toContain('Error: ');
|
|
}
|
|
|
|
done();
|
|
};
|
|
|
|
exports.verifyWithParameter = async (command, parameter, value, action, done) => {
|
|
await page.click('#command-select');
|
|
await page.click(`#${command}`);
|
|
|
|
await page.click(`#${parameter}`);
|
|
await exports.clearText(page.keyboard);
|
|
await page.keyboard.type(value);
|
|
|
|
expect(await action()).toEqual(`Error: "${parameter}" is not allowed to be empty`);
|
|
|
|
done();
|
|
}
|
|
|
|
exports.verifyWithBlankParameter = async (command, parameter, action, done) => {
|
|
await page.click('#command-select');
|
|
await page.click(`#${command}`);
|
|
|
|
await page.click(`#${parameter}`);
|
|
await exports.clearText(page.keyboard);
|
|
|
|
expect(await action()).toEqual(`Error: "${parameter}" is not allowed to be empty`);
|
|
|
|
done();
|
|
}
|
|
|
|
exports.verifyEntrypointBlank = async (command, action, done) => {
|
|
exports.verifyWithBlankParameter(command, 'entrypoint', action, done);
|
|
}
|
|
|
|
exports.verifyParametersBlank = async (command, action, done) => {
|
|
exports.verifyWithBlankParameter(command, 'parameters', action, done);
|
|
}
|
|
|
|
exports.verifyStorageBlank = async (command, action, done) => {
|
|
exports.verifyWithBlankParameter(command, 'storage', action, done);
|
|
}
|
|
|
|
exports.verifyWithCompilationError = async (action, done) => {
|
|
await page.click('#editor');
|
|
await page.keyboard.type('asdf');
|
|
|
|
expect(await action()).toContain('Error: ');
|
|
done();
|
|
};
|