Best JavaScript code snippet using appium-base-driver
test.js
Source:test.js
1/**2 * This program is free software; you can redistribute it and/or3 * modify it under the terms of the GNU General Public License4 * as published by the Free Software Foundation; under version 25 * of the License (non-upgradable).6 *7 * This program is distributed in the hope that it will be useful,8 * but WITHOUT ANY WARRANTY; without even the implied warranty of9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the10 * GNU General Public License for more details.11 *12 * You should have received a copy of the GNU General Public License13 * along with this program; if not, write to the Free Software14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.15 *16 * Copyright (c) 2019 (original work) Open Assessment Technologies SA ;17 */18/**19 * @author Hanna Dzmitryieva <hanna@taotesting.com>20 */21define([22 'jquery',23 'taoTests/runner/runner',24 'taoTests/runner/plugin',25 'taoTests/runner/proxy',26 'ltiTestReview/review/provider/qtiTestReviewProvider',27 'json!ltiTestReview/test/mocks/item-1.json',28 'json!ltiTestReview/test/mocks/item-2.json',29 'json!ltiTestReview/test/mocks/item-3.json',30 'json!ltiTestReview/test/mocks/item-4.json',31 'json!ltiTestReview/test/mocks/testData.json',32 'json!ltiTestReview/test/mocks/testContext.json',33 'json!ltiTestReview/test/mocks/testMap.json',34 'json!ltiTestReview/test/mocks/testResponses.json',35 'tpl!ltiTestReview/test/review/provider/qtiTestReviewProvider/navigation',36 'css!ltiTestReview/review/provider/css/qtiTestReviewProvider'37], function (38 $,39 runnerFactory,40 pluginFactory,41 proxyFactory,42 qtiTestReviewProvider,43 itemData1,44 itemData2,45 itemData3,46 itemData4,47 testData,48 testContext,49 testMap,50 testResponses,51 navigationTpl52) {53 'use strict';54 // the provider must be registered55 runnerFactory.registerProvider('qtiTestReviewProvider', qtiTestReviewProvider);56 QUnit.module('API');57 QUnit.test('module', assert => {58 assert.expect(2);59 assert.equal(typeof qtiTestReviewProvider, 'object', 'The module exposes an object');60 assert.equal(qtiTestReviewProvider.name, 'qtiTestReviewProvider', 'The provider has the expected name');61 });62 QUnit.cases.init([63 {title: 'loadAreaBroker'},64 {title: 'loadProxy'},65 {title: 'loadTestStore'},66 {title: 'install'},67 {title: 'init'},68 {title: 'render'},69 {title: 'loadItem'},70 {title: 'renderItem'},71 {title: 'unloadItem'},72 {title: 'destroy'}73 ]).test('provider API ', (data, assert) => {74 assert.expect(1);75 assert.equal(typeof qtiTestReviewProvider[data.title], 'function', `The provider exposes a ${data.title} function`);76 });77 QUnit.module('behavior');78 QUnit.cases.init([{79 title: 'default',80 proxy: 'qtiTestReviewProxy',81 plugin: 'mock1',82 config: {}83 }, {84 title: 'other proxy',85 proxy: 'installProxy',86 plugin: 'mock2',87 config: {88 proxyProvider: 'installProxy'89 }90 }]).test('install / init ', (data, assert) => {91 assert.expect(6);92 const ready = assert.async();93 const $fixture = $('#fixture-install');94 const mockProxy = {95 name: data.proxy,96 init() {97 assert.ok(true, 'The init method has been called on the proxy');98 return Promise.resolve({99 success: true100 });101 }102 };103 const mockPlugin = {104 name: data.plugin,105 install() {106 assert.ok(true, 'The install method has been called on the plugin');107 },108 init() {109 assert.ok(true, 'The init method has been called on the plugin');110 }111 };112 const config = Object.assign({113 renderTo: $fixture,114 options: {115 plugins: {116 [mockPlugin.name]: {117 foo: 'bar'118 }119 }120 }121 }, data.config || {});122 proxyFactory.registerProvider(mockProxy.name, mockProxy);123 const runner = runnerFactory('qtiTestReviewProvider', [pluginFactory(mockPlugin)], config)124 .on('ready', () => {125 const plugin = runner.getPlugin(mockPlugin.name);126 assert.notEqual(plugin, null, 'The plugin exists');127 assert.equal(typeof plugin, 'object', 'The plugin has been created');128 assert.deepEqual(plugin.getConfig(), config.options.plugins[mockPlugin.name], 'The plugin received the config');129 runner.destroy();130 })131 .on('error', err => {132 assert.pushResult({133 result: false,134 message: err135 });136 runner.destroy();137 })138 .on('destroy', ready)139 .init();140 });141 QUnit.test('init / life-cycle', assert => {142 assert.expect(13);143 const ready = assert.async();144 const $fixture = $('#fixture-init');145 const mockProxy = {146 name: 'initProxy',147 init() {148 assert.ok(true, 'The init method has been called on the proxy');149 return Promise.resolve({150 success: true151 });152 },153 getItem() {154 assert.ok(true, 'The getItem method has been called on the proxy');155 return Promise.resolve({156 success: true,157 content: {158 type: 'qti',159 data: itemData1160 },161 baseUrl: '',162 state: {}163 });164 }165 };166 const config = {167 renderTo: $fixture,168 proxyProvider: mockProxy.name169 };170 proxyFactory.registerProvider(mockProxy.name, mockProxy);171 const runner = runnerFactory('qtiTestReviewProvider', [], config)172 .on('ready', () => {173 Promise.resolve()174 .then(() => Promise.all([175 new Promise(resolve => {176 runner.on('enabletools.test', () => {177 assert.ok(true, 'Event enabletools has been triggered');178 resolve();179 });180 }),181 new Promise(resolve => {182 runner.on('enablenav.test', () => {183 assert.ok(true, 'Event enablenav has been triggered');184 resolve();185 });186 }),187 runner.loadItem('foo')188 ]))189 .then(() => {190 runner.off('.test');191 const promises = Promise.all([192 new Promise(resolve => {193 runner.on('enableitem.test', () => {194 assert.ok(true, 'Event enableitem has been triggered');195 resolve();196 });197 }),198 new Promise(resolve => {199 runner.on('enablenav.test', () => {200 assert.ok(true, 'Event enablenav has been triggered');201 resolve();202 });203 })204 ]);205 runner.trigger('resumeitem');206 return promises;207 })208 .then(() => {209 runner.off('.test');210 const promises = new Promise(resolve => {211 runner.on('disabletools.test', () => {212 assert.ok(true, 'Event disabletools has been triggered');213 resolve();214 });215 });216 runner.trigger('disableitem');217 return promises;218 })219 .then(() => {220 runner.off('.test');221 const promises = new Promise(resolve => {222 runner.on('enabletools.test', () => {223 assert.ok(true, 'Event enabletools has been triggered');224 resolve();225 });226 });227 runner.trigger('enableitem');228 return promises;229 })230 .then(() => {231 runner.off('.test');232 const promises = Promise.all([233 new Promise(resolve => {234 runner.on('disabletools.test', () => {235 assert.ok(true, 'Event disabletools has been triggered');236 resolve();237 });238 }),239 new Promise(resolve => {240 runner.on('enablenav.test', () => {241 assert.ok(true, 'Event enablenav has been triggered');242 resolve();243 });244 })245 ]);246 runner.trigger('error');247 return promises;248 })249 .then(() => {250 runner.off('.test');251 const promises = Promise.all([252 new Promise(resolve => {253 runner.on('disablenav.test', () => {254 assert.ok(true, 'Event disablenav has been triggered');255 resolve();256 });257 }),258 new Promise(resolve => {259 runner.on('disabletools.test', () => {260 assert.ok(true, 'Event disabletools has been triggered');261 resolve();262 });263 }),264 new Promise(resolve => {265 runner.on('flush.test', () => {266 assert.ok(true, 'Event flush has been triggered');267 resolve();268 });269 })270 ]);271 runner.trigger('finish');272 return promises;273 })274 .catch(err => {275 assert.pushResult({276 result: false,277 message: err278 });279 });280 })281 .on('destroy', ready)282 .init();283 });284 QUnit.test('render layout', assert => {285 assert.expect(13);286 const ready = assert.async();287 const $fixture = $('#fixture-render');288 const mockProxy = {289 name: 'renderProxy',290 init() {291 assert.ok(true, 'The init method has been called on the proxy');292 return Promise.resolve({293 success: true294 });295 }296 };297 const config = {298 renderTo: $fixture,299 proxyProvider: mockProxy.name300 };301 proxyFactory.registerProvider(mockProxy.name, mockProxy);302 const runner = runnerFactory('qtiTestReviewProvider', [], config)303 .on('ready', () => {304 const areaBroker = runner.getAreaBroker();305 Promise.resolve()306 .then(() => {307 const $container = areaBroker.getContainer();308 assert.equal($container.length, 1, 'The container exists');309 assert.equal(areaBroker.getContentArea().length, 1, 'The content area exists');310 assert.equal(areaBroker.getToolboxArea().length, 1, 'The toolbox area exists');311 assert.equal(areaBroker.getNavigationArea().length, 1, 'The navigation area exists');312 assert.equal(areaBroker.getControlArea().length, 1, 'The control area exists');313 assert.equal(areaBroker.getArea('actionsBar').length, 1, 'The actionsBar area exists');314 assert.equal(areaBroker.getPanelArea().length, 1, 'The panel area exists');315 assert.equal(areaBroker.getHeaderArea().length, 1, 'The header area exists');316 assert.equal(areaBroker.getArea('context').length, 1, 'The context area exists');317 assert.equal(areaBroker.getArea('contentWrapper').length, 1, 'The contentWrapper area exists');318 assert.equal(areaBroker.getArea('itemTool').length, 1, 'The itemTool area exists');319 return runner.destroy();320 })321 .then(() => {322 const $container = areaBroker.getContainer();323 assert.equal($container.length, 1, 'The container still exists');324 })325 .catch(err => {326 assert.ok(false, `Error in init method: ${err.message}`);327 runner.destroy();328 });329 })330 .on('destroy', ready)331 .init();332 });333 QUnit.cases.init([{334 title: 'item from testContext',335 initData: {336 success: true,337 testData: testData,338 testContext: testContext,339 testMap: testMap,340 testResponses: testResponses341 }342 }, {343 title: 'manual load',344 itemIdentifier: 'item-3',345 initData: {346 success: true347 }348 }]).test('render item ', (data, assert) => {349 assert.expect(6);350 const ready = assert.async();351 const $fixture = $('#fixture-item');352 const items = {353 'item-1': itemData1,354 'item-2': itemData2,355 'item-3': itemData3,356 'item-4': itemData4357 };358 const mockProxy = {359 name: 'itemProxy',360 init() {361 assert.ok(true, 'The init method has been called on the proxy');362 return Promise.resolve(data.initData);363 },364 getItem(itemIdentifier) {365 return Promise.resolve({366 success: true,367 content: {368 type: 'qti',369 data: items[itemIdentifier]370 },371 baseUrl: '',372 state: {}373 });374 }375 };376 const config = {377 renderTo: $fixture,378 proxyProvider: mockProxy.name379 };380 proxyFactory.registerProvider(mockProxy.name, mockProxy);381 const runner = runnerFactory('qtiTestReviewProvider', [], config)382 .on('ready', () => {383 Promise.resolve()384 .then(() => new Promise(resolve => {385 runner386 .off('.test')387 .after('renderitem.test', () => {388 assert.ok(true, 'The previewer has been rendered');389 resolve();390 });391 }))392 .then(() => {393 runner.off('.test');394 const promises = Promise.all([395 new Promise(resolve => {396 runner.on('beforeunloaditem.test', () => {397 assert.ok(true, 'Event beforeunloaditem has been triggered');398 resolve();399 });400 }),401 new Promise(resolve => {402 runner.on('disablenav.test', () => {403 assert.ok(true, 'Event disablenav has been triggered');404 resolve();405 });406 }),407 new Promise(resolve => {408 runner.on('disabletools.test', () => {409 assert.ok(true, 'Event disabletools has been triggered');410 resolve();411 });412 }),413 new Promise(resolve => {414 runner.on('unloaditem.test', () => {415 assert.ok(true, 'Event unloaditem has been triggered');416 resolve();417 });418 }),419 runner.unloadItem()420 ]);421 return promises;422 })423 .catch(err => {424 assert.pushResult({425 result: false,426 message: err427 });428 })429 .then(() => runner.destroy());430 if (data.itemIdentifier) {431 runner.loadItem(data.itemIdentifier);432 }433 })434 .on('error', err => {435 assert.pushResult({436 result: false,437 message: err438 });439 ready();440 })441 .on('destroy', ready)442 .init();443 });444 QUnit.cases.init([{445 title: 'all data provided',446 initData: {447 success: true,448 testData: testData,449 testContext: testContext,450 testMap: testMap,451 testResponses: testResponses452 }453 }, {454 title: 'empty jump table',455 initData: {456 success: true,457 testData: testData,458 testContext: testContext,459 testMap: Object.assign({}, testMap, {jumps: []}),460 testResponses: testResponses461 }462 }, {463 title: 'missing jump table',464 initData: {465 success: true,466 testData: testData,467 testContext: testContext,468 testMap: (() => {469 const {scope, parts, stats} = testMap;470 return {scope, parts, stats};471 })(),472 testResponses: testResponses473 }474 }]).test('navigate ', (data, assert) => {475 assert.expect(14);476 const ready = assert.async();477 const $fixture = $('#fixture-navigate');478 const items = {479 'item-1': itemData1,480 'item-2': itemData2,481 'item-3': itemData3,482 'item-4': itemData4483 };484 const mockProxy = {485 name: 'renderProxy',486 init() {487 assert.ok(true, 'The init method has been called on the proxy');488 return Promise.resolve(data.initData);489 },490 getItem(itemIdentifier) {491 assert.ok(true, 'The getItem method has been called on the proxy');492 return Promise.resolve({493 success: true,494 content: {495 type: 'qti',496 data: items[itemIdentifier]497 },498 baseUrl: '',499 state: {}500 });501 }502 };503 const config = {504 renderTo: $fixture,505 proxyProvider: mockProxy.name506 };507 proxyFactory.registerProvider(mockProxy.name, mockProxy);508 const runner = runnerFactory('qtiTestReviewProvider', [], config)509 .on('ready', () => {510 assert.ok(true, 'The test runner is now ready');511 })512 .on('error', err => {513 assert.pushResult({514 result: false,515 message: err516 });517 ready();518 })519 .on('destroy', ready)520 .init();521 Promise.resolve()522 .then(() => new Promise(resolve => {523 runner524 .off('.test')525 .on('renderitem.test', itemRef => {526 assert.equal(itemRef, 'item-1', 'The first item is rendered');527 resolve();528 });529 }))530 .then(() => new Promise(resolve => {531 runner532 .off('.test')533 .on('renderitem.test', itemRef => {534 assert.equal(itemRef, 'item-2', 'The second item is rendered');535 resolve();536 })537 .next();538 }))539 .then(() => new Promise(resolve => {540 runner541 .off('.test')542 .on('renderitem.test', itemRef => {543 assert.equal(itemRef, 'item-1', 'The first item is rendered again');544 resolve();545 })546 .previous();547 }))548 .then(() => new Promise(resolve => {549 runner550 .off('.test')551 .on('renderitem.test', itemRef => {552 assert.equal(itemRef, 'item-2', 'The second item is rendered again');553 resolve();554 })555 .next();556 }))557 .then(() => new Promise(resolve => {558 runner559 .off('.test')560 .on('renderitem.test', itemRef => {561 assert.equal(itemRef, 'item-1', 'The first item is rendered again');562 resolve();563 })564 .jump(0, 'item');565 }))566 .then(() => new Promise(resolve => {567 runner568 .off('.test')569 .on('renderitem.test', itemRef => {570 assert.equal(itemRef, 'item-3', 'The third item is rendered');571 resolve();572 })573 .jump(2, 'item');574 }))575 .catch(err => {576 assert.pushResult({577 result: false,578 message: err579 });580 })581 .then(() => runner.destroy());582 });583 QUnit.cases.init([{584 title: 'navigationlink',585 selector: '.navigationlink',586 area: 'sidebar'587 }, {588 title: 'answerlink',589 selector: '.answerlink',590 area: 'contentWrapper'591 }]).test('tab navigation', (data, assert) => {592 assert.expect(5);593 const ready = assert.async();594 const $fixture = $('#fixture-jumplinks');595 const mockProxy = {596 name: 'jumplinksProxy',597 init() {598 assert.ok(true, 'The init method has been called on the proxy');599 return Promise.resolve({600 success: true601 });602 }603 };604 const config = {605 renderTo: $fixture,606 proxyProvider: mockProxy.name607 };608 proxyFactory.registerProvider(mockProxy.name, mockProxy);609 const runner = runnerFactory('qtiTestReviewProvider', [], config)610 .on('ready', () => {611 const areaBroker = runner.getAreaBroker();612 const $container = areaBroker.getContainer();613 Promise.resolve()614 .then(() => {615 assert.equal($container.find(data.selector).length, 1, 'The link exists');616 $container.find(data.selector).focus();617 })618 .then(() => {619 assert.ok(areaBroker.getArea(data.area).hasClass('focused'), 'The area is focused');620 areaBroker.getArea(data.area).append('<div><a href="#" tabindex="0" id="navlink">Nav Link</a></div>');621 $container.find(data.selector).click();622 })623 .then(() => {624 assert.equal(areaBroker.getArea(data.area).has($(document.activeElement)).length, 1, 'The active element inside area after click on link');625 return runner.destroy();626 })627 .then(() => {628 const $container = areaBroker.getContainer();629 assert.equal($container.length, 1, 'The container still exists');630 })631 .catch(err => {632 assert.ok(false, `Error in init method: ${err.message}`);633 runner.destroy();634 });635 })636 .on('destroy', ready)637 .init();638 });639 QUnit.test('testmapchange event', assert => {640 assert.expect(3);641 const ready = assert.async();642 const $fixture = $('#fixture-testmapchange');643 const mockProxy = {644 name: 'testmapchangeProxy',645 init() {646 assert.ok(true, 'The init method has been called on the proxy');647 return Promise.resolve({648 success: true649 });650 }651 };652 const config = {653 renderTo: $fixture,654 proxyProvider: mockProxy.name655 };656 proxyFactory.registerProvider(mockProxy.name, mockProxy);657 const runner = runnerFactory('qtiTestReviewProvider', [], config)658 .on('ready', () => {659 assert.equal(runner.getTestMap(), null, 'No test map available yet');660 Promise.resolve()661 .then(() => new Promise(resolve => {662 runner663 .on('.test')664 .on('testmapchange.test', newTestMap => {665 assert.deepEqual(newTestMap, testMap, 'The test map has been changed');666 resolve();667 })668 .setTestMap(testMap);669 }))670 .then(() => {671 runner672 .off('.test');673 })674 .catch(err => {675 assert.pushResult({676 result: false,677 message: err678 });679 })680 .then(() => runner.on('.test').destroy());681 })682 .on('destroy', ready)683 .init();684 });685 QUnit.module('Visual');686 QUnit.test('Visual test', assert => {687 assert.expect(6);688 const ready = assert.async();689 const items = {690 'item-1': itemData1,691 'item-2': itemData2,692 'item-3': itemData3,693 'item-4': itemData4694 };695 const navigationPlugin = {696 name: 'navigation',697 install() {698 assert.ok(true, 'The install method has been called on the plugin');699 },700 init() {701 assert.ok(true, 'The init method has been called on the plugin');702 },703 render() {704 assert.ok(true, 'The render method has been called on the plugin');705 this.getAreaBroker()706 .getNavigationArea()707 .append($(navigationTpl(testMap.jumps.map(jump => Object.assign({label: `Item ${jump.position + 1}`}, jump)))))708 .on('click', e => this.getTestRunner().jump(e.target.dataset.position, 'item'));709 }710 };711 const mockProxy = {712 name: 'visualProxy',713 init() {714 assert.ok(true, 'The init method has been called on the proxy');715 return Promise.resolve({716 success: true,717 testData: testData,718 testContext: testContext,719 testMap: testMap,720 testResponses: testResponses721 });722 },723 getItem(itemIdentifier) {724 return Promise.resolve({725 success: true,726 content: {727 type: 'qti',728 data: items[itemIdentifier]729 },730 baseUrl: '',731 state: {}732 });733 }734 };735 const config = {736 renderTo: $('#visual-test'),737 proxyProvider: mockProxy.name,738 };739 proxyFactory.registerProvider(mockProxy.name, mockProxy);740 const runner = runnerFactory('qtiTestReviewProvider', [pluginFactory(navigationPlugin)], config)741 .on('ready.test', () => {742 assert.ok(true, 'The previewer is ready');743 })744 .on('renderitem.test', () => {745 runner.off('.test');746 assert.ok(true, 'The previewer has been rendered');747 ready();748 })749 .on('error', err => {750 assert.pushResult({751 result: false,752 message: err753 });754 ready();755 })756 .init();757 });...
base.genesys.spec.js
Source:base.genesys.spec.js
1/* global describe beforeAll beforeEach afterEach expect it xit afterAll */2const { browser } = require('protractor');3const config = require('./lib/config');4const log = require('./lib/logger');5const veUtil = require('./lib/veUtil');6const MockProxy = require('./lib/mockProxy');7const Genesys = require('./po/genesys');8const Visitor = require('./po/visitor');9const genesysResponses = require('./lib/genesys');10const { exception } = require('winston');11const PROXY_SERVER_PORT = 9001;12const SOCKET_SERVER_PORT = 9898;13const genesysPageLocation = config.test_env.baseURL + '/static/genesys.purecloud.html';14const REDIRECT_URL = config.test_env.baseURL + '/static/index.html';15const accessToken = veUtil.getUUID();16const channelId = veUtil.getUUID();17describe('genesys page tests in iframe mode', function () {18 // prepare genesys page and visitor page instances19 const genesys = new Genesys();20 const visitor = new Visitor();21 // create proxy server22 const mockProxy = new MockProxy();23 let VISITOR_SESSION_ID;24 let visitorUrl;25 beforeAll(async function () {26 // prepare mocks27 genesysResponses.userResponse.organization.id = config.test_env.organizationId;28 genesysResponses.channels.connectUri = `ws://localhost:${SOCKET_SERVER_PORT}/`;29 genesysResponses.channels.id = channelId;30 genesysResponses.getChannels.entities[0].connectUri = `ws://localhost:${SOCKET_SERVER_PORT}/`;31 genesysResponses.getChannels.entities[0].id = channelId;32 genesysResponses.messages.entities[0].body = JSON.stringify({ interactionId: VISITOR_SESSION_ID });33 const authURLParams = veUtil.generateUrlParamters({34 response_type: 'token',35 client_id: config.test_env.clientId,36 redirect_uri: encodeURIComponent(genesysPageLocation)37 });38 const authHeader = {39 location: genesysPageLocation + '#access_token=' + accessToken + '&expires_in=86399&token_type=bearer'40 };41 // mandatory42 mockProxy.mockIt({ path: '/oauth/(.*)', method: 'GET' }, null, 302, authHeader);43 mockProxy.mockIt({ path: '/api/v2/users/me\\?expand=conversationSummary', method: 'GET' }, genesysResponses.conversationSummary);44 mockProxy.mockIt({ path: '/api/v2/users/me\\?expand=organization', method: 'GET' }, genesysResponses.userResponse);45 mockProxy.mockIt({ path: '/api/v2/users/:userId/presences/PURECLOUD', method: 'PATCH' }, genesysResponses.purecloud);46 mockProxy.mockIt({ path: '/api/v2/notifications/channels', method: 'POST' }, genesysResponses.channels);47 mockProxy.mockIt({ path: '/api/v2/notifications/channels', method: 'GET' }, genesysResponses.getChannels);48 mockProxy.mockIt({ path: '/api/v2/conversations/chats', method: 'GET' }, genesysResponses.chats[0]);49 mockProxy.mockIt({ path: '/api/v2/notifications/channels/' + channelId + '/subscriptions', method: 'GET' }, genesysResponses.subscriptions[0]);50 mockProxy.mockIt({ path: '/api/v2/notifications/channels/' + channelId + '/subscriptions', method: 'PUT' }, genesysResponses.subscriptions[0]);51 // webhook52 mockProxy.mockIt({ path: '/api/v2/conversations', method: 'GET' }, genesysResponses.conversations[0]);53 // not mandaroty54 /*55 mockProxy.mockIt({ path: '/api/v2/users/me\\?expand=chats', method: 'GET' }, genesysResponses.chats[0]);56 */57 // not used in this tests58 /*59 mockProxy.mockIt({ path: '/AGENT_PARTICIPANT_ID', method: 'GET' }, genesysResponses.participants);60 mockProxy.mockIt({ path: '/CONVERSATION_ID', method: 'GET' }, genesysResponses.conversationChat);61 */62 // start 80 port proxy server63 await mockProxy.startHttpProxyServer(PROXY_SERVER_PORT);64 // start 443 port proxy server65 await mockProxy.startSSlProxyServer(PROXY_SERVER_PORT);66 // start https server for mock responses67 await mockProxy.startHttpServer(PROXY_SERVER_PORT);68 // start socket server for mock socket connection69 await mockProxy.startSocketServer(SOCKET_SERVER_PORT);70 // authenticate and set to default db71 await veUtil.authenticate();72 await veUtil.setBrokerageProfile({73 branding:74 {75 visitorShowPrecall: false,76 enablePrecallWorkflow: false,77 inviteUrl: config.test_env.baseURL78 },79 newTheme: false,80 isPopup: false81 });82 });83 beforeEach(async function () {84 VISITOR_SESSION_ID = veUtil.getUUID();85 visitorUrl = visitor.constructUrlC2V(config.test_env, VISITOR_SESSION_ID);86 });87 afterEach(async function () {88 // close agent and visitor pages after the test89 try {90 await genesys.switchToIframe();91 await genesys.hangup.click();92 await genesys.confirm.click();93 await genesys.switchTo();94 await genesys.close();95 await visitor.close();96 } catch (e) {97 log.error(e.stack);98 }99 // close remaining pages100 Genesys.closeAllPages();101 });102 afterAll(async function () {103 // close proxy servers104 mockProxy.stopAndClean();105 });106 it('outbound call: invite visitor, agent is in iframe', async function () {107 // construct genesys url by pak, env, clientId108 const genesysUrl = genesys.constructUrl(config.test_env);109 // open genesys page110 await genesys.openAsNew(genesysUrl);111 // click start video button112 await genesys.authorized();113 // check is websocket conencted114 await mockProxy.isConnected();115 // check c2v button and click it116 await genesys.c2vAvailable();117 await genesys.startVideoButton.click();118 // check if iframe created119 await genesys.iframeCreated();120 await browser.sleep(1000);121 // get generated visitor url from genesys page122 visitorUrl = await genesys.getVisitorUrl();123 // open visitor page and join to the call124 await visitor.openAsNew(visitorUrl);125 expect(await visitor.shortUrlExpanded()).toBeTruthy();126 expect(await visitor.inWaitingState(config.test_env)).toBeTruthy();127 // switch to genesys page and verify we have local and remote video128 await genesys.switchToIframe();129 expect(await genesys.localVideoStarted()).toBeTruthy();130 await genesys.remoteVideoStarted();131 await expect(genesys.localvideo.getAttribute('readyState')).toEqual('4');132 // switch to visitor and verify we have local and remote video133 await visitor.switchTo();134 await visitor.localVideoStarted();135 expect(await visitor.localvideo.getAttribute('readyState')).toEqual('4');136 await visitor.remoteVideoStarted();137 });138 it('should accept inbound call in genesys page, visitor popup opens first', async function () {139 // set mockProxy server to response like there are an active interaction140 // replace chat mock with non-empty resp.141 genesysResponses.messages.entities[0].body = JSON.stringify({ interactionId: VISITOR_SESSION_ID });142 // mandatory143 mockProxy.mockIt({ path: '/api/v2/conversations/chats', method: 'GET' }, genesysResponses.chats[1]);144 mockProxy.mockIt({ path: '/api/v2/conversations/chats/' + genesysResponses.chats[1].entities[0].id + '/messages', method: 'GET' }, genesysResponses.messages);145 // mandatory and added for this test, not mandatory for outbound test146 mockProxy.mockIt({ path: '/api/v2/notifications/channels/' + channelId + '/subscriptions', method: 'GET' }, genesysResponses.subscriptions[1]);147 mockProxy.mockIt({ path: '/api/v2/notifications/channels/' + channelId + '/subscriptions', method: 'PUT' }, genesysResponses.subscriptions[1]);148 // not mandatory149 // mockProxy.mockIt({ path: '/api/v2/conversations/chats/' + genesysResponses.chats[1].entities[0].id, method: 'GET' }, genesysResponses.messages);150 // open visitor page151 await visitor.openAsNew(visitorUrl);152 // check visitor hang state153 expect(await visitor.shortUrlExpanded()).toBeTruthy();154 expect(await visitor.waitingToConnectOrAgent()).toBeTruthy();155 // construct genesys url by pak, env, clientId156 const genesysUrl = genesys.constructUrl(config.test_env);157 // open genesys page158 await genesys.openAsNew(genesysUrl);159 // test localstorage token160 await genesys.authorized(accessToken);161 // check if websocket conencted162 await mockProxy.isConnected();163 // check pickup button and click it164 await genesys.pickupAvailable();165 await genesys.acceptClickToVideoButton.click();166 // check if iframe created167 await genesys.iframeCreated();168 await genesys.switchToIframe();169 // check genesys page local stream170 expect(await genesys.localVideoStarted()).toBeTruthy();171 await genesys.remoteVideoStarted();172 await expect(genesys.localvideo.getAttribute('readyState')).toEqual('4');173 // switch to visitor and verify we have local and remote video174 await visitor.switchTo();175 await visitor.localVideoStarted();176 expect(await visitor.localvideo.getAttribute('readyState')).toEqual('4');177 await visitor.remoteVideoStarted();178 });179});180describe('genesys page tests in popup mode', function () {181 // prepare genesys page and visitor page instances182 const genesys = new Genesys();183 const visitor = new Visitor();184 // create proxy server185 const mockProxy = new MockProxy();186 let VISITOR_SESSION_ID;187 let visitorUrl;188 beforeAll(async function () {189 genesysResponses.userResponse.organization.id = config.test_env.organizationId;190 genesysResponses.channels.connectUri = `ws://localhost:${SOCKET_SERVER_PORT}/`;191 genesysResponses.channels.id = channelId;192 genesysResponses.getChannels.entities[0].connectUri = `ws://localhost:${SOCKET_SERVER_PORT}/`;193 genesysResponses.getChannels.entities[0].id = channelId;194 genesysResponses.messages.entities[0].body = JSON.stringify({ interactionId: VISITOR_SESSION_ID });195 const authHeader = {196 location: genesysPageLocation + '#access_token=' + accessToken + '&expires_in=86399&token_type=bearer'197 };198 mockProxy.mockIt({ path: '/oauth/(.*)', method: 'GET' }, null, 302, authHeader);199 mockProxy.mockIt({ path: '/api/v2/users/me\\?expand=conversationSummary', method: 'GET' }, genesysResponses.conversationSummary);200 mockProxy.mockIt({ path: '/api/v2/users/me\\?expand=organization', method: 'GET' }, genesysResponses.userResponse);201 mockProxy.mockIt({ path: '/api/v2/users/:userId/presences/PURECLOUD', method: 'PATCH' }, genesysResponses.purecloud);202 mockProxy.mockIt({ path: '/api/v2/notifications/channels', method: 'POST' }, genesysResponses.channels);203 mockProxy.mockIt({ path: '/api/v2/notifications/channels', method: 'GET' }, genesysResponses.getChannels);204 mockProxy.mockIt({ path: '/api/v2/conversations/chats', method: 'GET' }, genesysResponses.chats[0]);205 mockProxy.mockIt({ path: '/api/v2/notifications/channels/' + channelId + '/subscriptions', method: 'GET' }, genesysResponses.subscriptions[0]);206 mockProxy.mockIt({ path: '/api/v2/notifications/channels/' + channelId + '/subscriptions', method: 'PUT' }, genesysResponses.subscriptions[0]);207 mockProxy.mockIt({ path: '/api/v2/conversations', method: 'GET' }, genesysResponses.conversations[0]);208 await mockProxy.startHttpProxyServer(PROXY_SERVER_PORT);209 await mockProxy.startSSlProxyServer(PROXY_SERVER_PORT);210 await mockProxy.startHttpServer(PROXY_SERVER_PORT);211 await mockProxy.startSocketServer(SOCKET_SERVER_PORT);212 await veUtil.authenticate();213 await veUtil.setBrokerageProfile({214 branding:215 {216 visitorShowPrecall: false,217 enablePrecallWorkflow: false,218 inviteUrl: config.test_env.baseURL,219 redirectUrl: REDIRECT_URL220 },221 newTheme: false,222 isPopup: true223 });224 });225 beforeEach(async function () {226 VISITOR_SESSION_ID = veUtil.getUUID();227 visitorUrl = visitor.constructUrlC2V(config.test_env, VISITOR_SESSION_ID);228 });229 afterEach(async function () {230 try {231 await visitor.switchTo();232 log.debug(await browser.getCurrentUrl());233 await visitor.close();234 await genesys.close();235 } catch (e) {236 log.error(e.stack);237 }238 // close remaining pages239 Genesys.closeAllPages();240 });241 afterAll(async function () {242 // close proxy servers243 mockProxy.stopAndClean();244 });245 it('outbound call: invite visitor, open agent in popup by pickup button', async function () {246 // construct genesys url by pak, env, clientId247 const genesysUrl = genesys.constructUrl(config.test_env);248 // open genesys page249 await genesys.openAsNew(genesysUrl);250 // click start video button251 await genesys.authorized(accessToken);252 // check is websocket conencted253 await mockProxy.isConnected();254 // check c2v button and click it255 await genesys.c2vAvailable();256 await genesys.startVideoButton.click();257 await browser.sleep(1000);258 // get generated visitor url from genesys page259 visitorUrl = await genesys.getVisitorUrl();260 // open visitor page and join to the call261 await visitor.openAsNew(visitorUrl);262 // check if visitor is redirected from short url263 expect(await visitor.shortUrlExpanded()).toBeTruthy();264 expect(await visitor.inWaitingState(config.test_env)).toBeTruthy();265 await genesys.switchTo();266 // click start video session button to open agent popup267 await genesys.pickupAvailable();268 // check if popup created269 const windowsBeforePopup = await browser.getAllWindowHandles();270 await genesys.acceptClickToVideoButton.click();271 const agent = await genesys.popupCreated(windowsBeforePopup);272 // verify agent273 await agent.switchTo();274 expect(await agent.localVideoStarted()).toBeTruthy();275 await agent.remoteVideoStarted();276 await expect(agent.localvideo.getAttribute('readyState')).toEqual('4');277 // switch to visitor and verify we have local and remote video278 await visitor.switchTo();279 await visitor.localVideoStarted();280 expect(await visitor.localvideo.getAttribute('readyState')).toEqual('4');281 await visitor.remoteVideoStarted();282 // terminate session by agent red button283 await agent.switchTo();284 await agent.hangup.click();285 await agent.confirm.click();286 await visitor.switchTo();287 expect(await visitor.redirectedTo(REDIRECT_URL)).toBeTruthy();288 // except exception289 expect(agent.switchTo())290 .toThrow('NoSuchWindowError')291 .catch(function (e) { log.debug('handle exception to avoid crash', e); });292 });293 it('outbound call: invite visitor, open agent first in popup', async function () {294 // construct genesys url by pak, env, clientId295 const genesysUrl = genesys.constructUrl(config.test_env);296 // open genesys page297 await genesys.openAsNew(genesysUrl);298 // click start video button299 await genesys.authorized(accessToken);300 // check is websocket conencted301 await mockProxy.isConnected();302 // check c2v button and click it303 await genesys.c2vAvailable();304 await genesys.startVideoButton.click();305 await browser.sleep(1000);306 // get generated visitor url from genesys page307 visitorUrl = await genesys.getVisitorUrl();308 // click start video session button to open agent popup309 await genesys.StartVideoSessionAvailable();310 // check if popup created311 const windowsBeforePopup = await browser.getAllWindowHandles();312 await genesys.acceptIncomingCallButton.click();313 const agent = await genesys.popupCreated(windowsBeforePopup);314 await agent.switchTo();315 await agent.previewVideoStarted();316 // open visitor page and join to the call317 await visitor.openAsNew(visitorUrl);318 expect(await visitor.shortUrlExpanded()).toBeTruthy();319 expect(await visitor.inWaitingState(config.test_env)).toBeTruthy();320 // verify agent321 await agent.switchTo();322 expect(await agent.localVideoStarted()).toBeTruthy();323 await agent.remoteVideoStarted();324 await expect(agent.localvideo.getAttribute('readyState')).toEqual('4');325 // switch to visitor and verify we have local and remote video326 await visitor.switchTo();327 await visitor.localVideoStarted();328 expect(await visitor.localvideo.getAttribute('readyState')).toEqual('4');329 await visitor.remoteVideoStarted();330 // terminate session by agent red button331 await agent.switchTo();332 await agent.hangup.click();333 await agent.confirm.click();334 await visitor.switchTo();335 expect(await visitor.redirectedTo(REDIRECT_URL)).toBeTruthy();336 // except exception337 expect(agent.switchTo())338 .toThrow('NoSuchWindowError')339 .catch(function (e) { log.debug('handle exception to avoid crash', e); });340 });341 it('inbound call: create mocked invitation, use pickup button, agent is in popup', async function () {342 // set mockProxy server to response like there are an active interaction343 // replace chat mock with non-empty resp.344 genesysResponses.messages.entities[0].body = JSON.stringify({ interactionId: VISITOR_SESSION_ID });345 // mandatory346 mockProxy.mockIt({ path: '/api/v2/conversations/chats', method: 'GET' }, genesysResponses.chats[1]);347 mockProxy.mockIt({ path: '/api/v2/conversations/chats/' + genesysResponses.chats[1].entities[0].id + '/messages', method: 'GET' }, genesysResponses.messages);348 // mandatory and added for this test, not mandatory for outbound test349 mockProxy.mockIt({ path: '/api/v2/notifications/channels/' + channelId + '/subscriptions', method: 'GET' }, genesysResponses.subscriptions[1]);350 mockProxy.mockIt({ path: '/api/v2/notifications/channels/' + channelId + '/subscriptions', method: 'PUT' }, genesysResponses.subscriptions[1]);351 // not mandatory352 // mockProxy.mockIt({ path: '/api/v2/conversations/chats/' + genesysResponses.chats[1].entities[0].id, method: 'GET' }, genesysResponses.messages);353 // open visitor page354 await visitor.openAsNew(visitorUrl);355 // check visitor hang state356 expect(await visitor.shortUrlExpanded()).toBeTruthy();357 expect(await visitor.waitingToConnectOrAgent()).toBeTruthy();358 // construct genesys url by pak, env, clientId359 const genesysUrl = genesys.constructUrl(config.test_env);360 // open genesys page361 await genesys.openAsNew(genesysUrl);362 // test localstorage token363 await genesys.authorized(accessToken);364 // check if websocket conencted365 await mockProxy.isConnected();366 // check pickup button and click it367 await genesys.pickupAvailable();368 // check if popup created369 const windowsBeforePopup = await browser.getAllWindowHandles();370 await genesys.acceptClickToVideoButton.click();371 const agent = await genesys.popupCreated(windowsBeforePopup);372 // switch to agent popup373 await agent.switchTo();374 expect(await agent.localVideoStarted()).toBeTruthy();375 await agent.remoteVideoStarted();376 await expect(agent.localvideo.getAttribute('readyState')).toEqual('4');377 // switch to visitor and verify we have local and remote video378 await visitor.switchTo();379 await visitor.localVideoStarted();380 expect(await visitor.localvideo.getAttribute('readyState')).toEqual('4');381 await visitor.remoteVideoStarted();382 // terminate session by agent red button383 await agent.switchTo();384 await agent.hangup.click();385 await agent.confirm.click();386 await visitor.switchTo();387 await visitor.redirectedTo(REDIRECT_URL);388 // except exception389 expect(agent.switchTo())390 .toThrow('NoSuchWindowError')391 .catch(function (e) { log.debug('handle exception to avoid crash', e); });392 });...
PlayerTest.js
Source:PlayerTest.js
1var MockProxy = require('../../MockProxy.js');2var Player = require('../../../../src/client/model/board/Player.js');3var ResourceType = require('../../../../src/client/model/ResourceType.js');4var catan = require('byu-catan');5var hexgrid = catan.models.hexgrid;6var HexLocation = hexgrid.HexLocation;7var EdgeDirection = hexgrid.EdgeDirection;8var EdgeLocation = hexgrid.EdgeLocation;9var playerTestCases = require('./PlayerTestCases.json');10var assert = require('chai').assert;11suite('PlayerTests', function() {12 var canBuyTestCases = playerTestCases[0];13 suite(canBuyTestCases.suite, function() {14 canBuyTestCases.testCases.forEach(function(testCase) {15 suite(testCase.description, function() {16 var player;17 setup(function() {18 var mockProxy = new MockProxy();19 player = new Player(mockProxy, testCase.input);20 });21 test('#canBuyRoad()', function() {22 assert.equal(testCase.output.canBuyRoad, player.canBuyRoad());23 });24 test('#canBuySettlement()', function() {25 assert.equal(testCase.output.canBuySettlement, player.canBuySettlement());26 });27 test('#canBuyCity()', function() {28 assert.equal(testCase.output.canBuyCity, player.canBuyCity());29 });30 test('#canBuyDevCard()', function() {31 assert.equal(testCase.output.canBuyDevCard, player.canBuyDevCard());32 });33 });34 });35 });36 var canPlayTestCases = playerTestCases[1];37 suite(canPlayTestCases.suite, function() {38 canPlayTestCases.testCases.forEach(function(testCase) {39 suite(testCase.description, function() {40 var player;41 setup(function() {42 var mockProxy = new MockProxy();43 player = new Player(mockProxy, testCase.input);44 });45 test('#canPlayYearOfPlenty()', function() {46 assert.equal(testCase.output.canPlayYearOfPlenty, player.canPlayYearOfPlenty());47 });48 test('#canPlayMonopoly()', function() {49 assert.equal(testCase.output.canPlayMonopoly, player.canPlayMonopoly());50 });51 test('#canPlaySoldier()', function() {52 assert.equal(testCase.output.canPlaySoldier, player.canPlaySoldier());53 });54 test('#canPlayRoadBuilding()', function() {55 assert.equal(testCase.output.canPlayRoadBuilding, player.canPlayRoadBuilding());56 });57 });58 });59 });60 var canPlayMonumentTestCases = playerTestCases[2];61 suite(canPlayMonumentTestCases.suite, function() {62 canPlayMonumentTestCases.testCases.forEach(function(testCase) {63 suite(testCase.description, function() {64 var player;65 setup(function() {66 var mockProxy = new MockProxy();67 player = new Player(mockProxy, testCase.input);68 });69 test('#canPlayMonument())', function() {70 assert.equal(testCase.output.canPlayMonument, player.canPlayMonument());71 });72 });73 });74 });75 var canMaritimeTradeTestCases = playerTestCases[3];76 suite(canMaritimeTradeTestCases.suite, function() {77 canMaritimeTradeTestCases.testCases.forEach(function(testCase) {78 suite(testCase.description, function() {79 var player;80 setup(function() {81 var mockProxy = new MockProxy();82 player = new Player(mockProxy, testCase.input);83 });84 for (var resource in testCase.output.canMaritimeTrade) {85 test('#canMaritimeTrade()', function() {86 assert.equal(testCase.output.canMaritimeTrade[resource], player.canMaritimeTrade(resource, testCase.ratios[resource]));87 });88 }89 test('#getMaritimeGiveOptions()', function() {90 assert.deepEqual(testCase.output.getMaritimeGiveOptions, player.getMaritimeGiveOptions(testCase.ratios));91 });92 });93 });94 });95 var hasToDiscardTests = playerTestCases[4];96 suite(hasToDiscardTests.suite, function() {97 hasToDiscardTests.testCases.forEach(function(testCase) {98 suite(testCase.description, function() {99 var player;100 setup(function() {101 var mockProxy = new MockProxy();102 player = new Player(mockProxy, testCase.input);103 });104 test('#hasToDiscard()', function() {105 assert.equal(testCase.output.hasToDiscard, player.hasToDiscard());106 });107 });108 });109 });110 suite('functions that talk to the proxy', function() {111 var mockProxy;112 var player;113 var randomIndex = -1992;114 setup(function() {115 mockProxy = new MockProxy();116 var testData = {117 "MAX_GAME_POINTS": 10,118 "resources": {119 "brick": 14,120 "wood": 13,121 "sheep": 15,122 "wheat": 10,123 "ore": 8124 },125 "oldDevCards": {126 "yearOfPlenty": 0,127 "monopoly": 0,128 "soldier": 2,129 "roadBuilding": 0,130 "monument": 1131 },132 "newDevCards": {133 "yearOfPlenty": 0,134 "monopoly": 0,135 "soldier": 1,136 "roadBuilding": 1,137 "monument": 0138 },139 "roads": 8,140 "cities": 2,141 "settlements": 4,142 "soldiers": 1,143 "victoryPoints": 7,144 "monuments": 0,145 "longestRoad": true,146 "largestArmy": false,147 "playedDevCard": true,148 "discarded": false,149 "playerID": 71,150 "orderNumber": 0,151 "name": "Sam",152 "color": "orange"153 };154 player = new Player(mockProxy, testData, randomIndex);155 });156 test('#buyDevCard()', function() {157 var expected = {158 "type": "JSON",159 "template": {160 "type": "buyDevCard",161 "playerIndex": randomIndex162 }163 };164 player.buyDevCard();165 assert.deepEqual(expected.template, mockProxy.lastCommand.getData());166 });167 test('#yearOfPlenty()', function() {168 var resource1 = ResourceType.BRICK;169 var resource2 = ResourceType.SHEEP;170 var expected = {171 "type": "JSON",172 "template": {173 "type": "Year_of_Plenty",174 "playerIndex": randomIndex,175 "resource1": resource1,176 "resource2": resource2177 }178 };179 player.yearOfPlenty(resource1, resource2);180 assert.deepEqual(expected.template, mockProxy.lastCommand.getData());181 });182 test('#roadBuilding()', function() {183 var x1 = -4;184 var y1 = 2;185 var direction1 = EdgeDirection.S;186 var edge1 = new EdgeLocation(new HexLocation(x1, y1), direction1);187 var x2 = 3;188 var y2 = -1;189 var direction2 = EdgeDirection.N;190 var edge2 = new EdgeLocation(new HexLocation(x2, y2), direction2);191 var expected = {192 "type": "JSON",193 "template": {194 "type": "Road_Building",195 "playerIndex": randomIndex,196 "spot1": {197 "x": x1,198 "y": y1,199 "direction": "S"200 },201 "spot2": {202 "x": x2,203 "y": y2,204 "direction": "N"205 }206 }207 };208 player.roadBuilding(edge1, edge2);209 assert.deepEqual(mockProxy.lastCommand.getData(), expected.template);210 });211 test('#playSoldier()', function() {212 var victimIndex = 21;213 var x = 3;214 var y = 4;215 var hexLocation = new HexLocation(x, y);216 var expected = {217 "type": "JSON",218 "template": {219 "type": "Soldier",220 "playerIndex": randomIndex,221 "victimIndex": victimIndex,222 "location": {223 "x": x,224 "y": y225 }226 }227 };228 player.playSoldier(hexLocation, victimIndex);229 assert.deepEqual(mockProxy.lastCommand.getData(), expected.template);230 });231 test('#monopoly()', function() {232 var resourceType = ResourceType.WHEAT;233 var expected = {234 "type": "JSON",235 "template": {236 "type": "Monopoly",237 "resource": resourceType,238 "playerIndex": randomIndex239 }240 };241 player.monopoly(resourceType);242 assert.deepEqual(expected.template, mockProxy.lastCommand.getData());243 });244 test('#playMonument()', function() {245 var expected = {246 "type": "JSON",247 "template": {248 "type": "Monument",249 "playerIndex": randomIndex250 }251 };252 player.playMonument();253 assert.deepEqual(expected.template, mockProxy.lastCommand.getData());254 });255 test('#offerTrade()', function() {256 var brick = 1;257 var ore = 2;258 var sheep = 0;259 var wheat = 0;260 var wood = 10;261 var receiver = 3;262 var expected = {263 "type": "JSON",264 "template": {265 "type": "offerTrade",266 "playerIndex": randomIndex,267 "offer": {268 "brick": brick,269 "ore": ore,270 "sheep": sheep,271 "wheat": wheat,272 "wood": wood273 },274 "receiver": receiver275 }276 };277 player.offerTrade(receiver, brick, ore, sheep, wheat, wood);278 assert.deepEqual(expected.template, mockProxy.lastCommand.getData());279 });280 test('#acceptTrade()', function() {281 var willAccept = true;282 var expected = {283 "type": "JSON",284 "template": {285 "type": "acceptTrade",286 "playerIndex": randomIndex,287 "willAccept": willAccept288 }289 };290 player.acceptTrade(willAccept);291 assert.deepEqual(expected.template, mockProxy.lastCommand.getData());292 });293 test('#maritimeTrade()', function() {294 var ratio = 3;295 var inputResource = ResourceType.WHEAT;296 var outputResource = ResourceType.WOOD;297 var expected = {298 "type": "JSON",299 "template": {300 "type": "maritimeTrade",301 "playerIndex": randomIndex,302 "ratio": ratio,303 "inputResource": inputResource,304 "outputResource": outputResource305 }306 };307 player.maritimeTrade(ratio, inputResource, outputResource);308 assert.deepEqual(expected.template, mockProxy.lastCommand.getData());309 });310 test('#discardCards()', function() {311 var brick = 0;312 var ore = 2;313 var sheep = 3;314 var wheat = 1;315 var wood = 0;316 var expected = {317 "type": "JSON",318 "template": {319 "type": "discardCards",320 "playerIndex": randomIndex,321 "discardedCards": {322 "brick": brick,323 "ore": ore,324 "sheep": sheep,325 "wheat": wheat,326 "wood": wood327 }328 }329 };330 player.discardCards(brick, ore, sheep, wheat, wood);331 assert.deepEqual(expected.template, mockProxy.lastCommand.getData());332 });333 });...
ProxyCollection.spec.js
Source:ProxyCollection.spec.js
...8 return mock;9 };10 var mocks, collection;11 beforeEach(function() {12 mocks = [mockProxy(), mockProxy(), mockProxy()];13 collection = new tabris.ProxyCollection(mocks);14 });15 it("maps proxies to numeric fields", function() {16 expect(collection[0]).toBe(mocks[0]);17 expect(collection[1]).toBe(mocks[1]);18 expect(collection[2]).toBe(mocks[2]);19 });20 it("sets length value", function() {21 expect(collection.length).toBe(3);22 });23 it("first()", function() {24 expect(collection.first()).toBe(mocks[0]);25 });26 it("last()", function() {27 expect(collection.last()).toBe(mocks[2]);28 });29 it("toArray()", function() {30 var arr1 = collection.toArray();31 var arr2 = collection.toArray();32 expect(arr1).toEqual(mocks);33 expect(arr2).toEqual(mocks);34 expect(arr1).not.toBe(arr2);35 });36 it("forEach()", function() {37 var callback = jasmine.createSpy();38 collection.forEach(callback);39 expect(callback).toHaveBeenCalledWith(mocks[0], 0, collection);40 expect(callback).toHaveBeenCalledWith(mocks[1], 1, collection);41 expect(callback).toHaveBeenCalledWith(mocks[2], 2, collection);42 });43 it("indexOf()", function() {44 expect(collection.indexOf(mocks[0])).toBe(0);45 expect(collection.indexOf(mocks[1])).toBe(1);46 expect(collection.indexOf(mocks[2])).toBe(2);47 expect(collection.indexOf(null)).toBe(-1);48 });49 describe("filter()", function() {50 it("with callback", function() {51 expect(collection.filter(function(proxy) {52 return proxy !== mocks[1];53 }).toArray()).toEqual([mocks[0], mocks[2]]);54 });55 it("with type selector", function() {56 mocks[0].type = "Foo";57 mocks[1].type = "Bar";58 mocks[2].type = "Foo";59 expect(collection.filter("Foo").toArray()).toEqual([mocks[0], mocks[2]]);60 });61 it("with * selector", function() {62 mocks[0].type = "Foo";63 mocks[1].type = "Bar";64 mocks[2].type = "Foo";65 expect(collection.filter("*").toArray()).toEqual(mocks);66 });67 it("with # selectors", function() {68 mocks[0].id = "foo";69 mocks[1].id = "bar";70 mocks[2].id = "bar";71 expect(collection.filter("#bar").toArray()).toEqual([mocks[1], mocks[2]]);72 });73 });74 describe("delegation:", function() {75 it("set() is delegated", function() {76 collection.set("foo", "bar");77 expect(mocks[0].set).toHaveBeenCalledWith("foo", "bar");78 expect(mocks[1].set).toHaveBeenCalledWith("foo", "bar");79 expect(mocks[2].set).toHaveBeenCalledWith("foo", "bar");80 });81 it("set() returns collection", function() {82 expect(collection.set("foo", "bar")).toBe(collection);83 });84 it("animate() is delegated", function() {85 var props = {foo: "bar"};86 var options = {delay: 3000};87 collection.animate(props, options);88 expect(mocks[0].animate).toHaveBeenCalledWith(props, options);89 expect(mocks[1].animate).toHaveBeenCalledWith(props, options);90 expect(mocks[2].animate).toHaveBeenCalledWith(props, options);91 });92 it("animate() returns collection", function() {93 expect(collection.animate({}, {})).toBe(collection);94 });95 it("on() is delegated", function() {96 var listener = function() {};97 collection.on("foo", listener);98 expect(mocks[0].on).toHaveBeenCalledWith("foo", listener);99 expect(mocks[1].on).toHaveBeenCalledWith("foo", listener);100 expect(mocks[2].on).toHaveBeenCalledWith("foo", listener);101 });102 it("on() returns collection", function() {103 expect(collection.on("foo", function() {})).toBe(collection);104 });105 it("off() is delegated", function() {106 var listener = function() {};107 collection.off("foo", listener);108 expect(mocks[0].off).toHaveBeenCalledWith("foo", listener);109 expect(mocks[1].off).toHaveBeenCalledWith("foo", listener);110 expect(mocks[2].off).toHaveBeenCalledWith("foo", listener);111 });112 it("off() returns collection", function() {113 expect(collection.off("foo", function() {})).toBe(collection);114 });115 it("dispose() is delegated", function() {116 collection.dispose();117 expect(mocks[0].dispose).toHaveBeenCalled();118 expect(mocks[1].dispose).toHaveBeenCalled();119 expect(mocks[2].dispose).toHaveBeenCalled();120 });121 it("dispose() returns undefined", function() {122 expect(collection.dispose()).toBeUndefined();123 });124 it("get() is delegated to first", function() {125 mocks[0].get.and.returnValue("foo");126 expect(collection.get("bar")).toBe("foo");127 expect(mocks[0].get).toHaveBeenCalledWith("bar");128 });129 it("get() returns undefined for empty collection", function() {130 expect((new tabris.ProxyCollection([])).get("foo")).toBeUndefined();131 });132 it("parent() returns all parents", function() {133 var parents = [mockProxy(), mockProxy()];134 mocks[0].parent.and.returnValue(parents[0]);135 mocks[2].parent.and.returnValue(parents[1]);136 expect(collection.parent().toArray()).toEqual(parents);137 });138 it("parent() returns only unique parents", function() {139 var parents = [mockProxy(), mockProxy()];140 mocks[0].parent.and.returnValue(parents[0]);141 mocks[1].parent.and.returnValue(parents[0]);142 mocks[2].parent.and.returnValue(parents[1]);143 expect(collection.parent().toArray()).toEqual(parents);144 });145 it("parent() returns undefined for empty collection", function() {146 expect((new tabris.ProxyCollection([])).parent()).toBeUndefined();147 });148 it("appendTo(parent) calls parent.append", function() {149 var parent = mockProxy();150 collection.appendTo(parent);151 expect(parent.append).toHaveBeenCalledWith(collection);152 });153 it("children() returns children from all in collection", function() {154 var children = [mockProxy(), mockProxy(), mockProxy(), mockProxy()];155 mocks[0]._children = children.slice(0, 2);156 mocks[2]._children = children.slice(2, 4);157 expect(collection.children().toArray()).toEqual(children);158 });159 it("children() with matcher returns children from all in collection", function() {160 var children = [mockProxy(), mockProxy(), mockProxy(), mockProxy()];161 children[0].type = children[2].type = "Foo";162 mocks[0]._children = children.slice(0, 2);163 mocks[2]._children = children.slice(2, 4);164 expect(collection.children("Foo").toArray()).toEqual([children[0], children[2]]);165 });166 it("find() returns descendants from all proxies in collection", function() {167 var children = [mockProxy(), mockProxy(), mockProxy(), mockProxy()];168 mocks[0]._children = [children[0]];169 mocks[2]._children = [children[1]];170 children[1]._children = children.slice(2, 4);171 expect(collection.find("*").toArray().length).toEqual(children.length);172 expect(collection.find("*").toArray()).toEqual(children);173 });174 it("find() returns no duplicates", function() {175 var children = [mockProxy(), mockProxy(), mockProxy(), mockProxy()];176 mocks[0]._children = [children[0]];177 children[0]._children = [children[1]];178 children[1]._children = [children[2]];179 children[2]._children = [children[3]];180 var result = collection.find("*").find("*");181 expect(result.length).toBe(3);182 expect(result.indexOf(children[1])).not.toBe(-1);183 expect(result.indexOf(children[2])).not.toBe(-1);184 expect(result.indexOf(children[3])).not.toBe(-1);185 });186 });...
3603.js
Source:3603.js
...8 return mock;9 };10 var mocks, collection;11 beforeEach(function() {12 mocks = [mockProxy(), mockProxy(), mockProxy()];13 collection = new tabris.ProxyCollection(mocks);14 });15 it("maps proxies to numeric fields", function() {16 expect(collection[0]).toBe(mocks[0]);17 expect(collection[1]).toBe(mocks[1]);18 expect(collection[2]).toBe(mocks[2]);19 });20 it("sets length value", function() {21 expect(collection.length).toBe(3);22 });23 it("first()", function() {24 expect(collection.first()).toBe(mocks[0]);25 });26 it("last()", function() {27 expect(collection.last()).toBe(mocks[2]);28 });29 it("toArray()", function() {30 var arr1 = collection.toArray();31 var arr2 = collection.toArray();32 expect(arr1).toEqual(mocks);33 expect(arr2).toEqual(mocks);34 expect(arr1).not.toBe(arr2);35 });36 it("forEach()", function() {37 var callback = jasmine.createSpy();38 collection.forEach(callback);39 expect(callback).toHaveBeenCalledWith(mocks[0], 0, collection);40 expect(callback).toHaveBeenCalledWith(mocks[1], 1, collection);41 expect(callback).toHaveBeenCalledWith(mocks[2], 2, collection);42 });43 it("indexOf()", function() {44 expect(collection.indexOf(mocks[0])).toBe(0);45 expect(collection.indexOf(mocks[1])).toBe(1);46 expect(collection.indexOf(mocks[2])).toBe(2);47 expect(collection.indexOf(null)).toBe(-1);48 });49 describe("filter()", function() {50 it("with callback", function() {51 expect(collection.filter(function(proxy) {52 return proxy !== mocks[1];53 }).toArray()).toEqual([mocks[0], mocks[2]]);54 });55 it("with type selector", function() {56 mocks[0].type = "Foo";57 mocks[1].type = "Bar";58 mocks[2].type = "Foo";59 expect(collection.filter("Foo").toArray()).toEqual([mocks[0], mocks[2]]);60 });61 it("with * selector", function() {62 mocks[0].type = "Foo";63 mocks[1].type = "Bar";64 mocks[2].type = "Foo";65 expect(collection.filter("*").toArray()).toEqual(mocks);66 });67 it("with # selectors", function() {68 mocks[0].id = "foo";69 mocks[1].id = "bar";70 mocks[2].id = "bar";71 expect(collection.filter("#bar").toArray()).toEqual([mocks[1], mocks[2]]);72 });73 });74 describe("delegation:", function() {75 it("set() is delegated", function() {76 collection.set("foo", "bar");77 expect(mocks[0].set).toHaveBeenCalledWith("foo", "bar");78 expect(mocks[1].set).toHaveBeenCalledWith("foo", "bar");79 expect(mocks[2].set).toHaveBeenCalledWith("foo", "bar");80 });81 it("set() returns collection", function() {82 expect(collection.set("foo", "bar")).toBe(collection);83 });84 it("animate() is delegated", function() {85 var props = {foo: "bar"};86 var options = {delay: 3000};87 collection.animate(props, options);88 expect(mocks[0].animate).toHaveBeenCalledWith(props, options);89 expect(mocks[1].animate).toHaveBeenCalledWith(props, options);90 expect(mocks[2].animate).toHaveBeenCalledWith(props, options);91 });92 it("animate() returns collection", function() {93 expect(collection.animate({}, {})).toBe(collection);94 });95 it("on() is delegated", function() {96 var listener = function() {};97 collection.on("foo", listener);98 expect(mocks[0].on).toHaveBeenCalledWith("foo", listener);99 expect(mocks[1].on).toHaveBeenCalledWith("foo", listener);100 expect(mocks[2].on).toHaveBeenCalledWith("foo", listener);101 });102 it("on() returns collection", function() {103 expect(collection.on("foo", function() {})).toBe(collection);104 });105 it("off() is delegated", function() {106 var listener = function() {};107 collection.off("foo", listener);108 expect(mocks[0].off).toHaveBeenCalledWith("foo", listener);109 expect(mocks[1].off).toHaveBeenCalledWith("foo", listener);110 expect(mocks[2].off).toHaveBeenCalledWith("foo", listener);111 });112 it("off() returns collection", function() {113 expect(collection.off("foo", function() {})).toBe(collection);114 });115 it("dispose() is delegated", function() {116 collection.dispose();117 expect(mocks[0].dispose).toHaveBeenCalled();118 expect(mocks[1].dispose).toHaveBeenCalled();119 expect(mocks[2].dispose).toHaveBeenCalled();120 });121 it("dispose() returns undefined", function() {122 expect(collection.dispose()).toBeUndefined();123 });124 it("get() is delegated to first", function() {125 mocks[0].get.and.returnValue("foo");126 expect(collection.get("bar")).toBe("foo");127 expect(mocks[0].get).toHaveBeenCalledWith("bar");128 });129 it("get() returns undefined for empty collection", function() {130 expect((new tabris.ProxyCollection([])).get("foo")).toBeUndefined();131 });132 it("parent() returns all parents", function() {133 var parents = [mockProxy(), mockProxy()];134 mocks[0].parent.and.returnValue(parents[0]);135 mocks[2].parent.and.returnValue(parents[1]);136 expect(collection.parent().toArray()).toEqual(parents);137 });138 it("parent() returns only unique parents", function() {139 var parents = [mockProxy(), mockProxy()];140 mocks[0].parent.and.returnValue(parents[0]);141 mocks[1].parent.and.returnValue(parents[0]);142 mocks[2].parent.and.returnValue(parents[1]);143 expect(collection.parent().toArray()).toEqual(parents);144 });145 it("parent() returns undefined for empty collection", function() {146 expect((new tabris.ProxyCollection([])).parent()).toBeUndefined();147 });148 it("appendTo(parent) calls parent.append", function() {149 var parent = mockProxy();150 collection.appendTo(parent);151 expect(parent.append).toHaveBeenCalledWith(collection);152 });153 it("children() returns children from all in collection", function() {154 var children = [mockProxy(), mockProxy(), mockProxy(), mockProxy()];155 mocks[0]._children = children.slice(0, 2);156 mocks[2]._children = children.slice(2, 4);157 expect(collection.children().toArray()).toEqual(children);158 });159 it("children() with matcher returns children from all in collection", function() {160 var children = [mockProxy(), mockProxy(), mockProxy(), mockProxy()];161 children[0].type = children[2].type = "Foo";162 mocks[0]._children = children.slice(0, 2);163 mocks[2]._children = children.slice(2, 4);164 expect(collection.children("Foo").toArray()).toEqual([children[0], children[2]]);165 });166 it("find() returns descendants from all proxies in collection", function() {167 var children = [mockProxy(), mockProxy(), mockProxy(), mockProxy()];168 mocks[0]._children = [children[0]];169 mocks[2]._children = [children[1]];170 children[1]._children = children.slice(2, 4);171 expect(collection.find("*").toArray().length).toEqual(children.length);172 expect(collection.find("*").toArray()).toEqual(children);173 });174 it("find() returns no duplicates", function() {175 var children = [mockProxy(), mockProxy(), mockProxy(), mockProxy()];176 mocks[0]._children = [children[0]];177 children[0]._children = [children[1]];178 children[1]._children = [children[2]];179 children[2]._children = [children[3]];180 var result = collection.find("*").find("*");181 expect(result.length).toBe(3);182 expect(result.indexOf(children[1])).not.toBe(-1);183 expect(result.indexOf(children[2])).not.toBe(-1);184 expect(result.indexOf(children[3])).not.toBe(-1);185 });186 });...
proxy-specs.js
Source:proxy-specs.js
...31 return proxy;32}33describe('proxy', function () {34 it('should override default params', function () {35 let j = mockProxy({server: '127.0.0.2'});36 j.server.should.equal('127.0.0.2');37 j.port.should.equal(4444);38 });39 it('should save session id on session creation', async function () {40 let j = mockProxy();41 let [res, body] = await j.proxy('/session', 'POST', {desiredCapabilities: {}});42 res.statusCode.should.equal(200);43 body.should.eql({status: 0, sessionId: '123', value: {browserName: 'boo'}});44 j.sessionId.should.equal('123');45 });46 describe('getUrlForProxy', function () {47 it('should modify session id, host, and port', function () {48 let j = mockProxy({sessionId: '123'});49 j.getUrlForProxy('http://host.com:1234/wd/hub/session/456/element/200/value')50 .should.eql('http://localhost:4444/wd/hub/session/123/element/200/value');51 });52 it('should prepend scheme, host and port if not provided', function () {53 let j = mockProxy({sessionId: '123'});54 j.getUrlForProxy('/wd/hub/session/456/element/200/value')55 .should.eql('http://localhost:4444/wd/hub/session/123/element/200/value');56 });57 it('should respect nonstandard incoming request base path', function () {58 let j = mockProxy({sessionId: '123', reqBasePath: ''});59 j.getUrlForProxy('/session/456/element/200/value')60 .should.eql('http://localhost:4444/wd/hub/session/123/element/200/value');61 j = mockProxy({sessionId: '123', reqBasePath: '/my/base/path'});62 j.getUrlForProxy('/my/base/path/session/456/element/200/value')63 .should.eql('http://localhost:4444/wd/hub/session/123/element/200/value');64 });65 it('should work with urls which do not have session ids', function () {66 let j = mockProxy({sessionId: '123'});67 j.getUrlForProxy('http://host.com:1234/wd/hub/session')68 .should.eql('http://localhost:4444/wd/hub/session');69 let newUrl = j.getUrlForProxy('/wd/hub/session');70 newUrl.should.eql('http://localhost:4444/wd/hub/session');71 });72 it('should throw an error if url requires a sessionId but its null', function () {73 let j = mockProxy();74 let e;75 try {76 j.getUrlForProxy('/wd/hub/session/456/element/200/value');77 } catch (err) {78 e = err;79 }80 should.exist(e);81 e.message.should.contain('without session id');82 });83 it('should not throw an error if url does not require a session id and its null', function () {84 let j = mockProxy();85 let newUrl = j.getUrlForProxy('/wd/hub/status');86 should.exist(newUrl);87 });88 });89 describe('straight proxy', function () {90 it('should successfully proxy straight', async function () {91 let j = mockProxy();92 let [res, body] = await j.proxy('/status', 'GET');93 res.statusCode.should.equal(200);94 body.should.eql({status: 0, value: {foo: 'bar'}});95 });96 it('should pass along request errors', function () {97 let j = mockProxy({sessionId: '123'});98 j.proxy('/badurl', 'GET').should.eventually.be.rejectedWith('Could not proxy');99 });100 it('should proxy error responses and codes', async function () {101 let j = mockProxy({sessionId: '123'});102 try {103 await j.proxy('/element/bad/text', 'GET');104 } catch (e) {105 isErrorType(e.getActualError(), errors.ElementNotVisibleError).should.be.true;106 }107 });108 });109 describe('command proxy', function () {110 it('should successfully proxy command', async function () {111 let j = mockProxy();112 let res = await j.command('/status', 'GET');113 res.should.eql({foo: 'bar'});114 });115 it('should pass along request errors', function () {116 let j = mockProxy({sessionId: '123'});117 j.command('/badurl', 'GET').should.eventually.be.rejectedWith('Could not proxy');118 });119 it('should throw when a command fails', async function () {120 let j = mockProxy({sessionId: '123'});121 let e = null;122 try {123 await j.command('/element/bad/text', 'GET');124 } catch (err) {125 e = err;126 }127 should.exist(e);128 e.message.should.contain('Invisible element');129 });130 it('should throw when a command fails with a 200 because the status is not 0', async function () {131 let j = mockProxy({sessionId: '123'});132 let e = null;133 try {134 await j.command('/element/200/text', 'GET');135 } catch (err) {136 e = err;137 }138 should.exist(e);139 e.error.should.eql('element not visible');140 });141 it('should throw when a command fails with a 100', async function () {142 let j = mockProxy({sessionId: '123'});143 let e = null;144 try {145 await j.command('/session/badchrome/nochrome', 'GET');146 } catch (err) {147 e = err;148 }149 should.exist(e);150 e.message.should.contain('chrome not reachable');151 });152 });153 describe('req/res proxy', function () {154 it('should successfully proxy via req and send to res', async function () {155 let j = mockProxy();156 let [req, res] = buildReqRes('/status', 'GET');157 await j.proxyReqRes(req, res);158 res.headers['content-type'].should.equal('application/json; charset=utf-8');159 res.sentCode.should.equal(200);160 res.sentBody.should.eql({status: 0, value: {foo: 'bar'}});161 });162 it('should rewrite the inner session id so it doesnt change', async function () {163 let j = mockProxy({sessionId: '123'});164 let [req, res] = buildReqRes('/element/200/value', 'GET');165 await j.proxyReqRes(req, res);166 res.sentBody.should.eql({status: 0, value: 'foobar', sessionId: '123'});167 });168 it('should rewrite the inner session id with sessionId in url', async function () {169 let j = mockProxy({sessionId: '123'});170 let [req, res] = buildReqRes('/wd/hub/session/456/element/200/value', 'POST');171 await j.proxyReqRes(req, res);172 res.sentBody.should.eql({status: 0, value: 'foobar', sessionId: '456'});173 });174 it('should pass through urls that do not require session IDs', async function () {175 let j = mockProxy({sessionId: '123'});176 let [req, res] = buildReqRes('/wd/hub/status', 'GET');177 await j.proxyReqRes(req, res);178 res.sentBody.should.eql({status: 0, value: {'foo': 'bar'}});179 });180 it('should proxy strange responses', async function () {181 let j = mockProxy({sessionId: '123'});182 let [req, res] = buildReqRes('/nochrome', 'GET');183 await j.proxyReqRes(req, res);184 res.sentCode.should.equal(100);185 res.sentBody.should.eql({status: 0, value: {message: 'chrome not reachable'}});186 });187 });...
heartbeat-generator-test.js
Source:heartbeat-generator-test.js
1var test = require('../test');2var HeartbeatGenerator = require(process.cwd() + '/services/heartbeat-generator');3describe('HeartbeatGenerator',function() {4 var BASE_TIME = 1000000000000;5 var redis = null;6 var mockProxy = null;7 beforeEach(function () {8 test.timekeeper.freeze(BASE_TIME);9 test.mockery.enable();10 test.mockery.registerMock('then-redis', test.mockredis);11 test.mockery.warnOnUnregistered(false);12 test.mockredis.reset();13 redis = test.mockredis.createClient();14 mockProxy = {15 config: {imei: '123456789012345',heartbeatInterval: 10 / HeartbeatGenerator.MILLIS_PER_MIN},16 messages: []17 };18 mockProxy.sendPrivate = function(buffer,ignoreAckHint){19 mockProxy.messages.push([buffer.inspect(),ignoreAckHint]);20 };21 mockProxy.snapshot = function(){22 var messages = mockProxy.messages;23 mockProxy.messages = [];24 return messages;25 }26 });27 afterEach(function () {28 test.mockery.deregisterMock('then-redis');29 test.mockery.disable();30 test.mockredis.snapshot().should.eql([]);31 test.pp.snapshot().should.eql([]);32 mockProxy.snapshot().should.eql([]);33 test.timekeeper.reset();34 });35 it('should send a startup but then skip regular heartbeats if recent messages have been sent',function(done){36 test.mockredis.lookup.get['m2m-transmit:last-private-timestamp'] = BASE_TIME;37 test.mockredis.lookup.llen['m2m-transmit:queue'] = 0;38 test.mockredis.lookup.get['m2m-transmit:last-sequence-number'] = '7';39 var events = [];40 var heartbeat = new HeartbeatGenerator(mockProxy);41 heartbeat.on('note',function(type){42 events.push(type);43 if (events.length > 1) {44 heartbeat.stop();45 events.should.eql(['heartbeat','skip']);46 test.pp.snapshot().should.eql([47 '[heartbeat ] start watching',48 '[heartbeat ] send heartbeat: 1',49 '[heartbeat ] stop watching']);50 test.mockredis.snapshot().should.eql([51 {incr: 'm2m-transmit:last-sequence-number'},52 {get: 'm2m-transmit:last-private-timestamp'}]);53 mockProxy.snapshot().should.eql([['<Buffer aa 10 01 00 08 00 00 00 e8 d4 a5 10 00 01 00 02 00 0f 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 11>',8]]);54 done();55 }56 });57 heartbeat.start(mockProxy.config,redis);58 });59 it('should send a startup but then skip regular heartbeats if messages are in the queue',function(done){60 var nextTime = BASE_TIME;61 test.mockredis.lookup.get['m2m-transmit:last-private-timestamp'] = nextTime;62 test.mockredis.lookup.llen['m2m-transmit:queue'] = 1;63 test.mockredis.lookup.get['m2m-transmit:last-sequence-number'] = '7';64 var events = [];65 var heartbeat = new HeartbeatGenerator(mockProxy);66 heartbeat.on('note',function(type){67 events.push(type);68 test.timekeeper.reset();69 test.timekeeper.freeze(nextTime += 20);70 if (events.length > 1) {71 heartbeat.stop();72 events.should.eql(['heartbeat','skip']);73 test.pp.snapshot().should.eql([74 '[heartbeat ] start watching',75 '[heartbeat ] send heartbeat: 1',76 '[heartbeat ] stop watching']);77 test.mockredis.snapshot().should.eql([78 {incr: 'm2m-transmit:last-sequence-number'},79 {get: 'm2m-transmit:last-private-timestamp'},80 {llen: 'm2m-transmit:queue'}81 ]);82 mockProxy.snapshot().should.eql([['<Buffer aa 10 01 00 08 00 00 00 e8 d4 a5 10 00 01 00 02 00 0f 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 11>',8]]);83 done();84 }85 });86 heartbeat.start(mockProxy.config,redis);87 });88 it('should send a startup and then regular heartbeats if no other messages have been sent and the queue is empty',function(done){89 var nextTime = BASE_TIME;90 test.mockredis.lookup.get['m2m-transmit:last-private-timestamp'] = nextTime;91 test.mockredis.lookup.get['m2m-transmit:last-sequence-number'] = '7';92 test.mockredis.lookup.llen['m2m-transmit:queue'] = 0;93 var events = [];94 var heartbeat = new HeartbeatGenerator(mockProxy);95 heartbeat.on('note',function(type){96 events.push(type);97 test.timekeeper.reset();98 test.timekeeper.freeze(nextTime += 20);99 if (events.length > 1) {100 heartbeat.stop();101 events.should.eql(['heartbeat','heartbeat']);102 test.pp.snapshot().should.eql([103 '[heartbeat ] start watching',104 '[heartbeat ] send heartbeat: 1',105 '[heartbeat ] send heartbeat: 0',106 '[heartbeat ] stop watching']);107 test.mockredis.snapshot().should.eql([108 {incr: 'm2m-transmit:last-sequence-number'},109 {get: 'm2m-transmit:last-private-timestamp'},110 {llen: 'm2m-transmit:queue'},111 {incr: 'm2m-transmit:last-sequence-number'}112 ]);113 mockProxy.snapshot().should.eql([114 ['<Buffer aa 10 01 00 08 00 00 00 e8 d4 a5 10 00 01 00 02 00 0f 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 11>',8],115 ['<Buffer aa 10 00 00 09 00 00 00 e8 d4 a5 10 14 01 00 02 00 0f 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 18>',9]116 ]);117 done();118 }119 });120 heartbeat.start(mockProxy.config,redis);121 });122 it('should throw an error if start called twice',function(done){123 test.mockredis.lookup.get['m2m-transmit:last-sequence-number'] = '7';124 var heartbeat = new HeartbeatGenerator(mockProxy).start(mockProxy.config,redis);125 test.expect(function(){ heartbeat.start(mockProxy.config,redis); }).to.throw('already started');126 heartbeat.stop();127 test.pp.snapshot().should.eql([128 '[heartbeat ] start watching',129 '[heartbeat ] send heartbeat: 1',130 '[heartbeat ] stop watching']);131 test.mockredis.snapshot().should.eql([132 {incr: 'm2m-transmit:last-sequence-number'}133 ]);134 mockProxy.snapshot().should.eql([['<Buffer aa 10 01 00 08 00 00 00 e8 d4 a5 10 00 01 00 02 00 0f 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 11>',8]]);135 done();136 });137 it('should throw an error if stopped before started',function(done){138 var heartbeat = new HeartbeatGenerator(mockProxy);139 test.expect(function(){ heartbeat.stop(); }).to.throw('not started');140 test.pp.snapshot().should.eql([]);141 test.mockredis.snapshot().should.eql([]);142 done();143 });...
StandaloneMockProxy.js
Source:StandaloneMockProxy.js
1const veUtil = require('./lib/veUtil');2const config = require('./lib/config');3// create proxy server4const MockProxy = require('./lib/mockProxy');5const mockProxy = new MockProxy();6let VISITOR_SESSION_ID;7const genesysResponses = require('./lib/genesys');8const PROXY_SERVER_PORT = 9001;9const SOCKET_SERVER_PORT = 9898;10const genesysPageLocation = config.test_env.baseURL + '/static/genesys.purecloud.html';11const accessToken = veUtil.getUUID();12const channelId = veUtil.getUUID();13genesysResponses.userResponse.organization.id = config.test_env.organizationId;14genesysResponses.channels.connectUri = `ws://localhost:${SOCKET_SERVER_PORT}/`;15genesysResponses.channels.id = channelId;16genesysResponses.getChannels.entities[0].connectUri = `ws://localhost:${SOCKET_SERVER_PORT}/`;17genesysResponses.getChannels.entities[0].id = channelId;18genesysResponses.messages.entities[0].body = JSON.stringify({ interactionId: VISITOR_SESSION_ID });19const authURLParams = veUtil.generateUrlParamters({20 response_type: 'token',21 client_id: config.test_env.clientId,22 redirect_uri: encodeURIComponent(genesysPageLocation)23});24const authHeader = {25 location: genesysPageLocation + '#access_token=' + accessToken + '&expires_in=86399&token_type=bearer'26};27// mandatory28mockProxy.mockIt({ path: '/oauth/(.*)', method: 'GET' }, null, 302, authHeader);29mockProxy.mockIt({ path: '/api/v2/users/me\\?expand=conversationSummary', method: 'GET' }, genesysResponses.conversationSummary);30mockProxy.mockIt({ path: '/api/v2/users/me\\?expand=organization', method: 'GET' }, genesysResponses.userResponse);31mockProxy.mockIt({ path: '/api/v2/users/:userId/presences/PURECLOUD', method: 'PATCH' }, genesysResponses.purecloud);32mockProxy.mockIt({ path: '/api/v2/notifications/channels', method: 'POST' }, genesysResponses.channels);33mockProxy.mockIt({ path: '/api/v2/notifications/channels', method: 'GET' }, genesysResponses.getChannels);34mockProxy.mockIt({ path: '/api/v2/conversations/chats', method: 'GET' }, genesysResponses.chats[0]);35mockProxy.mockIt({ path: '/api/v2/notifications/channels/' + channelId + '/subscriptions', method: 'GET' }, genesysResponses.subscriptions[0]);36mockProxy.mockIt({ path: '/api/v2/notifications/channels/' + channelId + '/subscriptions', method: 'PUT' }, genesysResponses.subscriptions[0]);37// web hook38mockProxy.mockIt({ path: '/api/v2/conversations', method: 'GET' }, genesysResponses.conversations[0]);39// not mandaroty40/*41mockProxy.mockIt({ path: '/api/v2/users/me\\?expand=chats', method: 'GET' }, genesysResponses.chats[0]);42*/43// not used in this tests44/*45mockProxy.mockIt({ path: '/AGENT_PARTICIPANT_ID', method: 'GET' }, genesysResponses.participants);46mockProxy.mockIt({ path: '/CONVERSATION_ID', method: 'GET' }, genesysResponses.conversationChat);47*/48// start 80 port proxy server49mockProxy.startHttpProxyServer(PROXY_SERVER_PORT);50// start 443 port proxy server51mockProxy.startSSlProxyServer(PROXY_SERVER_PORT);52// start https server for mock responses53mockProxy.startHttpServer(PROXY_SERVER_PORT);54// start socket server for mock socket connection...
Using AI Code Generation
1const wd = require('wd');2const { AppiumBaseDriver } = require('appium-base-driver');3const { startServer } = require('appium');4const { serverArgs } = require('appium/build/lib/parser');5const { iosDriverArgs } = require('appium-ios-driver');6const { androidDriverArgs } = require('appium-android-driver');7const { serverDefaults } = require('appium/build/lib/server-utils');8const server = serverArgs(serverDefaults);9const ios = iosDriverArgs();10const android = androidDriverArgs();11const args = Object.assign({}, server, ios, android);12const driver = new AppiumBaseDriver(args);13startServer(args, async (err, appium) => {14 if (err) {15 console.error(err);16 return;17 }18 const driver = appium.driver;19 const proxy = await driver.mockProxy();20 const mock = proxy.mock;21 const url = proxy.url;22 .withUrl(url)23 .withMethod('GET')24 .withResponse({25 content: {26 }27 });28 const client = wd.promiseChainRemote({29 });30 await client.init({
Using AI Code Generation
1const { BaseDriver } = require('appium-base-driver');2const { mockProxy } = require('appium-base-driver').test;3const driver = new BaseDriver();4const proxy = mockProxy(driver, BaseDriver, [5]);6proxy.createSession('foo', 'bar', 'baz');7proxy.deleteSession();8proxy.executeCommand();
Using AI Code Generation
1const { BaseDriver } = require('appium-base-driver');2const { myMock } = require('./myMock');3const { myMockProxy } = require('./myMockProxy');4class TestDriver extends BaseDriver {5 constructor () {6 super();7 this.proxyMethods = ['myMock'];8 }9 async myMock () {10 return await myMock();11 }12}13const testDriver = new TestDriver();14testDriver.myMockProxy = myMockProxy;15testDriver.myMockProxy();16async function myMock () {17 return 'myMock';18}19module.exports = { myMock };20const { myMock } = require('./myMock');21async function myMockProxy () {22 const myMockResult = await myMock();23 console.log(myMockResult);24}25module.exports = { myMockProxy };
Using AI Code Generation
1 log: function() {2 console.log(arguments);3 }4}, function(err, proxy) {5 if (err) {6 console.log("Error in creating proxy", err);7 } else {8 console.log("Proxy created successfully");9 }10});11 log: function() {12 console.log(arguments);13 }14}, function(err, proxy) {15 if (err) {16 console.log("Error in creating proxy", err);17 } else {18 console.log("Proxy created successfully");19 }20});
Using AI Code Generation
1let BaseDriver = require('appium-base-driver');2let AppiumDriver = require('./appium/appium_driver.js');3let appiumDriver = new AppiumDriver();4appiumDriver.mockProxy('findElement', function (strategy, selector) {5 return new BaseDriver.WebElement('mock_element_id');6});7let BaseDriver = require('appium-base-driver');8let appiumDriver = new BaseDriver();9appiumDriver.mockProxy('findElement', function (strategy, selector) {10 return new BaseDriver.WebElement('mock_element_id');11});12let BaseDriver = require('appium-base-driver');13let appiumDriver = new BaseDriver();14appiumDriver.mockProxy('findElement', function (strategy, selector) {15 return new BaseDriver.WebElement('mock_element_id');16});
Using AI Code Generation
1const AppiumBaseDriver = require('appium-base-driver');2const MockProxy = AppiumBaseDriver.mockProxy;3const server = appium.main();4server.close();5const { server, routeConfiguringFunction } = require('./lib/appium');6const appium = module.exports = { main };7async function main () {8 return server;9}
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!