testcafe
Version:
Automated browser testing for the modern web development stack.
70 lines • 9.29 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const events_1 = require("events");
const nanoid_1 = __importDefault(require("nanoid"));
const phase_1 = __importDefault(require("./phase"));
const type_assertions_1 = require("../errors/runtime/type-assertions");
const wrap_test_function_1 = __importDefault(require("../api/wrap-test-function"));
const test_page_url_1 = require("../api/test-page-url");
const marker_symbol_1 = __importDefault(require("./marker-symbol"));
const testcafe_hammerhead_1 = require("testcafe-hammerhead");
class Role extends events_1.EventEmitter {
constructor(loginPage, initFn, options = {}) {
super();
this[marker_symbol_1.default] = true;
this.id = nanoid_1.default(7);
this.phase = loginPage ? phase_1.default.uninitialized : phase_1.default.initialized;
this.loginPage = loginPage;
this.initFn = initFn;
this.opts = options;
this.url = null;
this.stateSnapshot = testcafe_hammerhead_1.StateSnapshot.empty();
this.initErr = null;
}
async _storeStateSnapshot(testRun) {
if (this.initErr)
return;
this.stateSnapshot = await testRun.getStateSnapshot();
}
async _executeInitFn(testRun) {
try {
testRun.disableDebugBreakpoints = false;
await this.initFn(testRun);
}
catch (err) {
this.initErr = err;
}
finally {
testRun.disableDebugBreakpoints = true;
}
}
async initialize(testRun) {
this.phase = phase_1.default.pendingInitialization;
await testRun.switchToCleanRun(this.loginPage);
await this._executeInitFn(testRun);
await this._storeStateSnapshot(testRun);
if (this.opts.preserveUrl)
this.url = await testRun.getCurrentUrl();
this.phase = phase_1.default.initialized;
this.emit('initialized');
}
}
function createRole(loginPage, initFn, options = {}) {
type_assertions_1.assertType(type_assertions_1.is.string, 'Role', '"loginPage" argument', loginPage);
type_assertions_1.assertType(type_assertions_1.is.function, 'Role', '"initFn" argument', initFn);
type_assertions_1.assertType(type_assertions_1.is.nonNullObject, 'Role', '"options" argument', options);
if (options.preserveUrl !== void 0)
type_assertions_1.assertType(type_assertions_1.is.boolean, 'Role', '"preserveUrl" option', options.preserveUrl);
loginPage = test_page_url_1.resolvePageUrl(loginPage);
initFn = wrap_test_function_1.default(initFn);
return new Role(loginPage, initFn, options);
}
exports.createRole = createRole;
function createAnonymousRole() {
return new Role(null, null);
}
exports.createAnonymousRole = createAnonymousRole;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm9sZS9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFzQztBQUN0QyxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLHVFQUFtRTtBQUNuRSxtRkFBeUQ7QUFDekQsd0RBQXNEO0FBQ3RELG9FQUF5QztBQUN6Qyw2REFBb0Q7QUFFcEQsTUFBTSxJQUFLLFNBQVEscUJBQVk7SUFDM0IsWUFBYSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sR0FBRyxFQUFFO1FBQ3hDLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLHVCQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFeEIsSUFBSSxDQUFDLEVBQUUsR0FBTSxnQkFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsV0FBVyxDQUFDO1FBRWpFLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQU0sTUFBTSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQVEsT0FBTyxDQUFDO1FBRXpCLElBQUksQ0FBQyxHQUFHLEdBQWEsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsbUNBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFTLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQixDQUFFLE9BQU87UUFDOUIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUNaLE9BQU87UUFFWCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUUsT0FBTztRQUN6QixJQUFJO1lBQ0EsT0FBTyxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztZQUN4QyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDOUI7UUFDRCxPQUFPLEdBQUcsRUFBRTtZQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1NBQ3RCO2dCQUNPO1lBQ0osT0FBTyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztTQUMxQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFFLE9BQU87UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFLLENBQUMscUJBQXFCLENBQUM7UUFFekMsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTdDLElBQUksQ0FBQyxLQUFLLEdBQUcsZUFBSyxDQUFDLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUVELFNBQWdCLFVBQVUsQ0FBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sR0FBRyxFQUFFO0lBQ3ZELDRCQUFVLENBQUMsb0JBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2pFLDRCQUFVLENBQUMsb0JBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdELDRCQUFVLENBQUMsb0JBQUUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXBFLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUM7UUFDOUIsNEJBQVUsQ0FBQyxvQkFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRWhGLFNBQVMsR0FBRyw4QkFBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sR0FBTSw0QkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVyQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQVpELGdDQVlDO0FBRUQsU0FBZ0IsbUJBQW1CO0lBQy9CLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFGRCxrREFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgbmFub2lkIGZyb20gJ25hbm9pZCc7XG5pbXBvcnQgUEhBU0UgZnJvbSAnLi9waGFzZSc7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgd3JhcFRlc3RGdW5jdGlvbiBmcm9tICcuLi9hcGkvd3JhcC10ZXN0LWZ1bmN0aW9uJztcbmltcG9ydCB7IHJlc29sdmVQYWdlVXJsIH0gZnJvbSAnLi4vYXBpL3Rlc3QtcGFnZS11cmwnO1xuaW1wb3J0IHJvbGVNYXJrZXIgZnJvbSAnLi9tYXJrZXItc3ltYm9sJztcbmltcG9ydCB7IFN0YXRlU25hcHNob3QgfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuY2xhc3MgUm9sZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3IgKGxvZ2luUGFnZSwgaW5pdEZuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzW3JvbGVNYXJrZXJdID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmlkICAgID0gbmFub2lkKDcpO1xuICAgICAgICB0aGlzLnBoYXNlID0gbG9naW5QYWdlID8gUEhBU0UudW5pbml0aWFsaXplZCA6IFBIQVNFLmluaXRpYWxpemVkO1xuXG4gICAgICAgIHRoaXMubG9naW5QYWdlID0gbG9naW5QYWdlO1xuICAgICAgICB0aGlzLmluaXRGbiAgICA9IGluaXRGbjtcbiAgICAgICAgdGhpcy5vcHRzICAgICAgPSBvcHRpb25zO1xuXG4gICAgICAgIHRoaXMudXJsICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGVTbmFwc2hvdCA9IFN0YXRlU25hcHNob3QuZW1wdHkoKTtcbiAgICAgICAgdGhpcy5pbml0RXJyICAgICAgID0gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBfc3RvcmVTdGF0ZVNuYXBzaG90ICh0ZXN0UnVuKSB7XG4gICAgICAgIGlmICh0aGlzLmluaXRFcnIpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5zdGF0ZVNuYXBzaG90ID0gYXdhaXQgdGVzdFJ1bi5nZXRTdGF0ZVNuYXBzaG90KCk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2V4ZWN1dGVJbml0Rm4gKHRlc3RSdW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRlc3RSdW4uZGlzYWJsZURlYnVnQnJlYWtwb2ludHMgPSBmYWxzZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdEZuKHRlc3RSdW4pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdEVyciA9IGVycjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRlc3RSdW4uZGlzYWJsZURlYnVnQnJlYWtwb2ludHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdGlhbGl6ZSAodGVzdFJ1bikge1xuICAgICAgICB0aGlzLnBoYXNlID0gUEhBU0UucGVuZGluZ0luaXRpYWxpemF0aW9uO1xuXG4gICAgICAgIGF3YWl0IHRlc3RSdW4uc3dpdGNoVG9DbGVhblJ1bih0aGlzLmxvZ2luUGFnZSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZUluaXRGbih0ZXN0UnVuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RvcmVTdGF0ZVNuYXBzaG90KHRlc3RSdW4pO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdHMucHJlc2VydmVVcmwpXG4gICAgICAgICAgICB0aGlzLnVybCA9IGF3YWl0IHRlc3RSdW4uZ2V0Q3VycmVudFVybCgpO1xuXG4gICAgICAgIHRoaXMucGhhc2UgPSBQSEFTRS5pbml0aWFsaXplZDtcbiAgICAgICAgdGhpcy5lbWl0KCdpbml0aWFsaXplZCcpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJvbGUgKGxvZ2luUGFnZSwgaW5pdEZuLCBvcHRpb25zID0ge30pIHtcbiAgICBhc3NlcnRUeXBlKGlzLnN0cmluZywgJ1JvbGUnLCAnXCJsb2dpblBhZ2VcIiBhcmd1bWVudCcsIGxvZ2luUGFnZSk7XG4gICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ1JvbGUnLCAnXCJpbml0Rm5cIiBhcmd1bWVudCcsIGluaXRGbik7XG4gICAgYXNzZXJ0VHlwZShpcy5ub25OdWxsT2JqZWN0LCAnUm9sZScsICdcIm9wdGlvbnNcIiBhcmd1bWVudCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnMucHJlc2VydmVVcmwgIT09IHZvaWQgMClcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5ib29sZWFuLCAnUm9sZScsICdcInByZXNlcnZlVXJsXCIgb3B0aW9uJywgb3B0aW9ucy5wcmVzZXJ2ZVVybCk7XG5cbiAgICBsb2dpblBhZ2UgPSByZXNvbHZlUGFnZVVybChsb2dpblBhZ2UpO1xuICAgIGluaXRGbiAgICA9IHdyYXBUZXN0RnVuY3Rpb24oaW5pdEZuKTtcblxuICAgIHJldHVybiBuZXcgUm9sZShsb2dpblBhZ2UsIGluaXRGbiwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbm9ueW1vdXNSb2xlICgpIHtcbiAgICByZXR1cm4gbmV3IFJvbGUobnVsbCwgbnVsbCk7XG59XG4iXX0=