Best JavaScript code snippet using chromeless
LaunchPage.qunit.js
Source:LaunchPage.qunit.js
1// Copyright (c) 2009-2017 SAP SE, All Rights Reserved2/**3 * @fileOverview QUnit tests for sap.ushell.services.LaunchPage4 */5sap.ui.require([6 "sap/ushell/services/LaunchPage",7 "sap/ushell/test/utils",8 "sap/ushell/adapters/local/LaunchPageAdapter",9 "sap/ushell/Config",10 "sap/ushell/services/_ContentExtensionAdapterFactory/ContentExtensionAdapterConfig",11 "sap/ushell/services/_ContentExtensionAdapterFactory/FeaturedGroupConfig",12 "sap/ushell/resources"13], function (LaunchPage, testUtils, LaunchPageAdapter, Config, AdapterFactoryConfig, FeaturedGroupMock) {14 "use strict";15 /*global asyncTest, deepEqual, module, throws ok, start, strictEqual, test, sinon */16 var sUshellTestRootPath = jQuery.sap.getResourcePath("sap/ushell").replace("resources", "test-resources"),17 oLastStub,18 oGetMockAdapterConfigStub,19 oGetConfigAdaptersStub,20 oLaunchPageConfig = {21 config: {22 pathToLocalizedContentResources: sUshellTestRootPath + "/test/services/resources/resources.properties",23 groups: [{24 id: "group_0",25 title: "test_group1",26 isPreset: true,27 isVisible: true,28 isGroupLocked: false,29 tiles: [{30 id: "9a6eb46c-2d10-3a37-90d8-8f49f60cb111",31 title: "test_tile_header",32 size: "1x1",33 tileType: "sap.ushell.ui.tile.TileBase",34 keywords: ["test_keywords"],35 properties: {36 chipId: "catalogTile_1",37 title: "test_tile_header",38 subtitle: "test_sub_tile_header",39 infoState: "Neutral",40 info: "test_info",41 icon: "sap-icon://travel-expense-report",42 targetURL: "#Action-todefaultapp",43 formFactor: "Desktop,Tablet,Phone"44 }45 },46 {47 id: "tile_001",48 title: "test_tile_preview_api",49 size: "1x1",50 tileType: "sap.ushell.ui.tile.TileBase",51 keywords: ["test_keywords"],52 properties: {53 chipId: "catalogTile_1",54 infoState: "Neutral",55 info: "test_info",56 formFactor: "Desktop,Tablet,Phone"57 }58 },59 {60 id: "tile_787",61 tileType: "sap.ushell.ui.tile.StaticTile",62 isLink: true,63 properties: {64 text: "I am a link!",65 href: "#Action-todefaultapp"66 }67 },68 {69 id: "tile_777",70 tileType: "sap.ushell.ui.tile.StaticTile",71 isLink: true,72 properties: {73 text: "I am an external link!",74 href: "http://www.google.com"75 }76 },77 {78 id: "tile_797",79 tileType: "sap.ushell.ui.tile.StaticTile",80 mode: "HeaderMode",81 properties: {82 title: "test_tile_header",83 subtitle: "test_sub_tile_header"84 }85 },86 {87 id: "tile_807",88 tileType: "sap.ushell.ui.tile.StaticTile",89 mode: "ContentMode",90 properties: {91 title: "test_tile_header",92 subtitle: "test_sub_tile_header"93 }94 }95 ]96 }, {97 id: "group_1",98 title: "test_group2",99 isPreset: true,100 isVisible: true,101 isGroupLocked: false,102 tiles: [{}]103 }, {104 id: "group_2",105 title: "test_group3",106 isPreset: true,107 isVisible: true,108 isGroupLocked: false,109 tiles: [110 {111 id: "tile_102",112 title: "Test component tile",113 size: "1x1",114 tileType: "sap.ushell.ui.tile.StaticTile",115 moduleName: "sap.ushell.demo.demoTiles",116 moduleType: "UIComponent",117 namespace: "sap.ushell.demo.demoTiles",118 path: sUshellTestRootPath + "/demoapps/demoTiles/",119 properties: {120 chipId: "catalogTile_38",121 title: "Test component tile",122 subtitle: "A tile wrapped in a component",123 infoState: "Neutral",124 info: "0 days running without bugs",125 icon: "sap-icon://flight",126 targetURL: "#Action-todefaultapp",127 formFactor: "Desktop,Tablet"128 }129 },130 {131 id: "tile_103",132 title: "Test view tile",133 size: "1x1",134 tileType: "sap.ushell.ui.tile.StaticTile",135 moduleName: "sap.ushell.demo.demoTiles.TestViewTile",136 moduleType: "JS",137 namespace: "sap.ushell.demo.demoTiles",138 path: sUshellTestRootPath + "/demoapps/demoTiles/",139 properties: {140 chipId: "catalogTile_38",141 title: "Test view tile",142 subtitle: "A tile wrapped in a view",143 infoState: "Neutral",144 info: "0 days running without bugs",145 icon: "sap-icon://flight",146 targetURL: "#Action-todefaultapp",147 formFactor: "Desktop,Tablet"148 }149 }150 ]151 }, {152 id: "group_3",153 title: "test_group4",154 isPreset: true,155 isVisible: true,156 isGroupLocked: true,157 tiles: [{}]158 }, {159 id: "group_4",160 title: "test_group5",161 isPreset: true,162 isVisible: false,163 isGroupLocked: true,164 tiles: [{}]165 }],166 catalogs: [167 {168 id: "test_catalog_01",169 title: "test_catalog1",170 tiles: [{}]171 }, {172 id: "test_catalog_02",173 title: "test_catalog2",174 tiles: [{}]175 }176 ]177 }178 },179 aAdditionalAdapterConfig = [{180 name: "feature",181 adapter: "sap.ushell.adapters.local.LaunchPageAdapter",182 config: "/core/home/featuredGroup/enable",183 system: {184 alias: "",185 platform: "local"186 },187 configHandler: function () {188 var bEnableFrequentCard = true,189 bEnableRecentCard = true;190 return FeaturedGroupMock.getMockAdapterConfig(bEnableFrequentCard, bEnableRecentCard);191 }192 }],193 oFeatureGroupConfig = {194 groups: [{195 "id": "featuredArea",196 "contentProvider": "feature",197 "isPersonalizationLocked": function () {198 return true;199 },200 "getTitle": function () {201 return "Featured";202 },203 "title": "Featured",204 "isFeatured": true,205 "isPreset": true,206 "isVisible": true,207 "isDefaultGroup": false,208 "isGroupLocked": true,209 "tiles": [{210 "id": "tile_00",211 "contentProvider": "feature",212 "type": "recent",213 "title": "[FEATURED] Sales Performance",214 "text": "[FEATURED] Sales Performance",215 "size": "1x1",216 "tileType": "sap.ushell.ui.tile.DynamicTile",217 "isLinkPersonalizationSupported": false,218 "keywords": ["sales", "performance"],219 "formFactor": "Desktop,Tablet,Phone",220 "serviceRefreshInterval": 10,221 "actions": [{222 "text": "Go To Sample App",223 "icon": "sap-icon://action",224 "targetURL": "#Action-toappnavsample"225 }, {226 "text": "Go to stackoverflow",227 "icon": "sap-icon://action",228 "targetURL": "http://stackoverflow.com/"229 }, {230 "text": "Illigal URL",231 "icon": "sap-icon://action",232 "targetURL": "stackoverflow.com/"233 }, {234 "text": "Callback action",235 "icon": "sap-icon://action-settings"236 }],237 "chipId": "catalogTile_33",238 "properties": {239 "title": "[FEATURED] Sales Performance",240 "numberValue": 3.75,241 "info": "Change to Last Month in %",242 "numberFactor": "%",243 "numberDigits": 2,244 "numberState": "Positive",245 "stateArrow": "Up",246 "icon": "sap-icon://Fiori2/F0002",247 "targetURL": "#Action-toappnavsample"248 }249 }, {250 "id": "tile_shelluiservicesample",251 "contentProvider": "feature",252 "type": "frequent",253 "title": "[FEATURED] ShellUIService Sample App",254 "size": "1x1",255 "tileType": "sap.ushell.ui.tile.StaticTile",256 "isLinkPersonalizationSupported": true,257 "formFactor": "Desktop,Tablet",258 "chipId": "catalogTile_45",259 "properties": {260 "title": "[FEATURED] Sample App for ShellUIService",261 "text": "[FEATURED] Sample App for ShellUIService",262 "subtitle": "",263 "infoState": "Neutral",264 "info": "#Action-toappshelluiservicesample",265 "icon": "sap-icon://syringe",266 "targetURL": "#Action-toappshelluiservicesample"267 }268 }]269 }]270 };271 [272 {273 testDescription: "when enableFeaturedGroup is true",274 input: {275 enableFeaturedGroup: true276 },277 output: {278 numberOfFeaturedGroups: 1279 }280 },281 {282 testDescription: "when enableFeaturedGroup is false",283 input: {284 enableFeaturedGroup: false285 },286 output: {287 numberOfFeaturedGroups: 0288 }289 }290 ].forEach(function (oFixture) {291 module("sap.ushell.services.LaunchPage " + oFixture.testDescription, {292 beforeEach: function (assert) {293 oLastStub = sinon.stub(Config, 'last');294 oLastStub.withArgs("/core/spaces/enabled").returns(false);295 oLastStub.returns(oFixture.input.enableFeaturedGroup);296 oGetMockAdapterConfigStub = sinon.stub(FeaturedGroupMock, "getMockAdapterConfig").returns(297 oFeatureGroupConfig298 );299 oGetConfigAdaptersStub = sinon.stub(AdapterFactoryConfig, "_getConfigAdapters").returns(300 aAdditionalAdapterConfig301 );302 },303 teardown: function () {304 testUtils.restoreSpies(305 );306 oLastStub.restore();307 oGetMockAdapterConfigStub.restore();308 oGetConfigAdaptersStub.restore();309 }310 });311 test("addBookmark failures", function () {312 var oLaunchPageService = new LaunchPage();313 // code under test and tests314 throws(function () {315 oLaunchPageService.addBookmark();316 });317 throws(function () {318 oLaunchPageService.addBookmark("Test");319 });320 throws(function () {321 oLaunchPageService.addBookmark({});322 }, /Title missing in bookmark configuration/);323 throws(function () {324 oLaunchPageService.addBookmark({title: ""});325 }, /Title missing in bookmark configuration/);326 throws(function () {327 oLaunchPageService.addBookmark({title: "MyTitle"});328 }, /URL missing in bookmark configuration/);329 });330 test("addBookmark success", function () {331 var oActualPromise,332 oBookmarkConfig = { title: "MyTitle", url: "MyUrl" },333 oLaunchPageAdapter = {334 addBookmark: sinon.stub().returns(new jQuery.Deferred().promise())335 },336 oLaunchPageService;337 // prepare test338 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);339 // code under test340 oActualPromise = oLaunchPageService.addBookmark(oBookmarkConfig);341 // test342 ok(oLaunchPageAdapter.addBookmark.calledOnce);343 ok(oLaunchPageAdapter.addBookmark.calledWith(oBookmarkConfig));344 strictEqual(oActualPromise, oLaunchPageAdapter.addBookmark.returnValues[0]);345 });346 test("setTileVisible", function () {347 var oTile = {},348 oLaunchPageAdapter = {349 setTileVisible: sinon.spy()350 },351 oLaunchPageService;352 // prepare test353 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);354 // code under test355 oLaunchPageService.setTileVisible(oTile, true);356 // test357 ok(oLaunchPageAdapter.setTileVisible.calledOnce);358 ok(oLaunchPageAdapter.setTileVisible.calledWithExactly(oTile, true));359 });360 test("getCatalogError", function () {361 var oCatalog = {},362 oLaunchPageAdapter = {363 getCatalogError: sinon.stub().returns("foo")364 },365 oLaunchPageService;366 // prepare test367 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);368 // code under test369 strictEqual(oLaunchPageService.getCatalogError(oCatalog), "foo");370 // test371 ok(oLaunchPageAdapter.getCatalogError.calledOnce);372 ok(oLaunchPageAdapter.getCatalogError.calledWithExactly(oCatalog));373 });374 test("isTileIntentSupported", function () {375 var oTile = {},376 oLaunchPageAdapter = {377 isTileIntentSupported: sinon.stub().returns("foo") // deliberately no boolean378 },379 oLaunchPageService;380 // part 1: unsupported in adapter381 oLaunchPageService = new LaunchPage({});382 strictEqual(oLaunchPageService.isTileIntentSupported(oTile), true);383 // part 2: delegates to adapter384 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);385 strictEqual(oLaunchPageService.isTileIntentSupported(oTile), "foo");386 ok(oLaunchPageAdapter.isTileIntentSupported.calledOnce);387 ok(oLaunchPageAdapter.isTileIntentSupported.calledWithExactly(oTile));388 });389 test("getCardManifest", function () {390 var oCard = {},391 oLaunchPageAdapter = {392 getCardManifest: sinon.stub().returns("Manifest")393 },394 oLaunchPageService;395 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);396 strictEqual(oLaunchPageService.getCardManifest(oCard), "Manifest");397 ok(oLaunchPageAdapter.getCardManifest.calledOnce);398 ok(oLaunchPageAdapter.getCardManifest.calledWithExactly(oCard));399 });400 test("isGroupVisible", function () {401 var oGroup = {},402 oLaunchPageAdapter = {403 isGroupVisible: sinon.stub().returns("visible")404 },405 oLaunchPageService;406 // part 1: unsupported in adapter - default value received from the service directly407 oLaunchPageService = new LaunchPage({});408 strictEqual(oLaunchPageService.isGroupVisible(oGroup), true);409 // part 2: delegates to adapter410 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);411 strictEqual(oLaunchPageService.isGroupVisible(oGroup), "visible");412 ok(oLaunchPageAdapter.isGroupVisible.calledOnce);413 ok(oLaunchPageAdapter.isGroupVisible.calledWithExactly(oGroup));414 });415 test("isGroupLocked", function () {416 var oGroup = {},417 oLaunchPageAdapter = {418 isGroupLocked: sinon.stub().returns("foo")419 },420 oLaunchPageService;421 // part 1: unsupported in adapter - default value received from the service directly422 oLaunchPageService = new LaunchPage({});423 strictEqual(oLaunchPageService.isGroupLocked(oGroup), false);424 // part 2: delegates to adapter425 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);426 strictEqual(oLaunchPageService.isGroupLocked(oGroup), "foo");427 ok(oLaunchPageAdapter.isGroupLocked.calledOnce);428 ok(oLaunchPageAdapter.isGroupLocked.calledWithExactly(oGroup));429 });430 test("hideGroups", function () {431 var aGroups = [],432 oLaunchPageAdapter = {433 hideGroups: sinon.stub().returns({434 fail: function (f) {},435 done: function (f) { return this; }436 })437 },438 oLaunchPageService;439 // part 1: unsupported in adapter - A deferred object is expected which is in failed status440 oLaunchPageService = new LaunchPage({});441 var oDeferred = oLaunchPageService.hideGroups([]);442 strictEqual(oDeferred.state(), "rejected");443 // part 2: delegates to adapter444 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);445 oLaunchPageService.hideGroups(aGroups);446 ok(oLaunchPageAdapter.hideGroups.calledOnce);447 ok(oLaunchPageAdapter.hideGroups.calledWithExactly(aGroups));448 });449 test("getCatalogData", function () {450 var oCatalog = {},451 oResult = {},452 oLaunchPageAdapter,453 oLaunchPageService,454 oLogMock = testUtils.createLogMock()455 .filterComponent("sap.ushell.services.LaunchPage")456 .warning("getCatalogData not implemented in adapter", null,457 "sap.ushell.services.LaunchPage");458 // part 1: unsupported in adapter459 oLaunchPageService = new LaunchPage({460 getCatalogId: function (oCatalog0) {461 strictEqual(oCatalog0, oCatalog);462 return "foo";463 }464 });465 deepEqual(oLaunchPageService.getCatalogData(oCatalog), {id: "foo"});466 oLogMock.verify();467 // part 2: delegates to adapter468 oLaunchPageAdapter = {469 getCatalogData: sinon.stub().returns(oResult)470 };471 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);472 strictEqual(oLaunchPageService.getCatalogData(oCatalog), oResult);473 ok(oLaunchPageAdapter.getCatalogData.calledOnce);474 ok(oLaunchPageAdapter.getCatalogData.calledWithExactly(oCatalog));475 });476 test("test countBookmarks", function () {477 var oActualPromise,478 oExpectedPromise = (new jQuery.Deferred()).promise(),479 oLaunchPageAdapter = {480 countBookmarks: sinon.stub().returns(oExpectedPromise)481 },482 oLaunchPageService;483 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);484 throws(function () {485 oLaunchPageService.countBookmarks();486 }, /Missing URL/);487 throws(function () {488 oLaunchPageService.countBookmarks("");489 }, /Missing URL/);490 throws(function () {491 oLaunchPageService.countBookmarks({});492 }, /Missing URL/);493 ok(oLaunchPageAdapter.countBookmarks.notCalled);494 oActualPromise = oLaunchPageService.countBookmarks("###");495 strictEqual(oActualPromise, oExpectedPromise);496 ok(oLaunchPageAdapter.countBookmarks.calledOnce);497 strictEqual(oLaunchPageAdapter.countBookmarks.args[0][0], "###");498 });499 test("test deleteBookmarks", function () {500 var oActualPromise,501 oExpectedPromise = (new jQuery.Deferred()).promise(),502 oLaunchPageAdapter = {503 deleteBookmarks: sinon.stub().returns(oExpectedPromise)504 },505 oLaunchPageService;506 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);507 throws(function () {508 oLaunchPageService.deleteBookmarks();509 }, /Missing URL/);510 throws(function () {511 oLaunchPageService.deleteBookmarks("");512 }, /Missing URL/);513 throws(function () {514 oLaunchPageService.deleteBookmarks({});515 }, /Missing URL/);516 ok(oLaunchPageAdapter.deleteBookmarks.notCalled);517 oActualPromise = oLaunchPageService.deleteBookmarks("###");518 strictEqual(oActualPromise, oExpectedPromise);519 ok(oLaunchPageAdapter.deleteBookmarks.calledOnce);520 strictEqual(oLaunchPageAdapter.deleteBookmarks.args[0][0], "###");521 });522 test("test updateBookmarks", function () {523 var oActualPromise,524 oExpectedPromise = (new jQuery.Deferred()).promise(),525 oLaunchPageAdapter = {526 updateBookmarks: sinon.stub().returns(oExpectedPromise)527 },528 oLaunchPageService,529 oParameters = {530 url: "foo"531 };532 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);533 throws(function () {534 oLaunchPageService.updateBookmarks();535 }, /Missing URL/);536 throws(function () {537 oLaunchPageService.updateBookmarks("");538 }, /Missing URL/);539 throws(function () {540 oLaunchPageService.updateBookmarks({});541 }, /Missing URL/);542 throws(function () {543 oLaunchPageService.updateBookmarks("foo");544 }, /Missing parameters/);545 throws(function () {546 oLaunchPageService.updateBookmarks("foo", true);547 }, /Missing parameters/);548 ok(oLaunchPageAdapter.updateBookmarks.notCalled);549 oActualPromise = oLaunchPageService.updateBookmarks("###", oParameters);550 strictEqual(oActualPromise, oExpectedPromise);551 ok(oLaunchPageAdapter.updateBookmarks.calledOnce);552 strictEqual(oLaunchPageAdapter.updateBookmarks.args[0][0], "###");553 strictEqual(oLaunchPageAdapter.updateBookmarks.args[0][1], oParameters);554 });555 test("Tile actions", function () {556 var oTile = {},557 aInternalActions,558 aExternalActions1,559 aExternalActions2,560 oLaunchPageAdapter,561 oLaunchPageService;562 // part 1: no actions563 oLaunchPageAdapter = {};564 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);565 deepEqual(oLaunchPageService.getTileActions(oTile), []);566 // part 2: internal actions567 aInternalActions = [{text: "InternalAction1"}, {text: "InternalAction2"}];568 oLaunchPageAdapter = {569 getTileActions: sinon.stub().returns(aInternalActions)570 };571 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);572 deepEqual(oLaunchPageService.getTileActions(oTile), aInternalActions);573 ok(oLaunchPageAdapter.getTileActions.calledWithExactly(oTile));574 // part 3: external actions575 aExternalActions1 = [{text: "ExternalAction11"}, {text: "ExternalAction12"}];576 aExternalActions2 = [{text: "ExternalAction21"}, {text: "ExternalAction22"}];577 oLaunchPageAdapter = {};578 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);579 oLaunchPageService.registerTileActionsProvider(sinon.stub().returns(aExternalActions1));580 oLaunchPageService.registerTileActionsProvider(sinon.stub().returns(aExternalActions2));581 deepEqual(oLaunchPageService.getTileActions(oTile), aExternalActions1.concat(aExternalActions2));582 // part 4: internal and external actions583 aInternalActions = [{text: "InternalAction1"}, {text: "InternalAction2"}];584 oLaunchPageAdapter = {585 getTileActions: sinon.stub().returns(aInternalActions)586 };587 aExternalActions1 = [{text: "ExternalAction11"}, {text: "ExternalAction12"}];588 aExternalActions2 = [{text: "ExternalAction21"}, {text: "ExternalAction22"}];589 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);590 oLaunchPageService.registerTileActionsProvider(sinon.stub().returns(aExternalActions1));591 oLaunchPageService.registerTileActionsProvider(sinon.stub().returns(aExternalActions2));592 deepEqual(oLaunchPageService.getTileActions(oTile), aInternalActions.concat(aExternalActions1.concat(aExternalActions2)));593 ok(oLaunchPageAdapter.getTileActions.calledWithExactly(oTile));594 });595 test("getCatalogTileTargetURL", function () {596 var oLaunchPageService,597 sTargetUrl,598 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);599 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);600 // part 1: TargetUrl exist in configuration601 sTargetUrl = oLaunchPageService.getCatalogTileTargetURL(oLaunchPageConfig.config.groups[0].tiles[0]);602 strictEqual(sTargetUrl, oLaunchPageConfig.config.groups[0].tiles[0].properties.targetURL, "TargetUrl as expected");603 // part 2: TargetUrl does not exist in configuration604 sTargetUrl = oLaunchPageService.getCatalogTileTargetURL(oLaunchPageConfig.config.groups[0].tiles[1]);605 strictEqual(sTargetUrl, null, "TargetUrl default value is null");606 });607 test("getCatalogTilePreviewTitle", function () {608 var oLaunchPageService,609 sPreviewTitle,610 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);611 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);612 // part 1: Title exist in configuration613 sPreviewTitle = oLaunchPageService.getCatalogTilePreviewTitle(oLaunchPageConfig.config.groups[0].tiles[0]);614 strictEqual(sPreviewTitle, oLaunchPageConfig.config.groups[0].tiles[0].properties.title, "Preview title as expected");615 // part 2: Title does not exist in configuration616 sPreviewTitle = oLaunchPageService.getCatalogTilePreviewTitle(oLaunchPageConfig.config.groups[0].tiles[1]);617 strictEqual(sPreviewTitle, null, "Preview title default value is null");618 });619 test("getCatalogTilePreviewInfo", function () {620 // Arrange621 var oLaunchPageService,622 sPreviewInfo,623 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);624 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);625 // Act626 sPreviewInfo = oLaunchPageService.getCatalogTilePreviewInfo(oLaunchPageConfig.config.groups[0].tiles[0]);627 // Assert628 strictEqual(sPreviewInfo, oLaunchPageConfig.config.groups[0].tiles[0].properties.info, "The function getCatalogTilePreviewInfo returns the correct catalog tile preview info.");629 });630 test("getCatalogTilePreviewSubtitle", function () {631 var oLaunchPageService,632 sPreviewSubtitle,633 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);634 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);635 // part 1: Title exist in configuration636 sPreviewSubtitle = oLaunchPageService.getCatalogTilePreviewSubtitle(oLaunchPageConfig.config.groups[0].tiles[0]);637 strictEqual(sPreviewSubtitle, oLaunchPageConfig.config.groups[0].tiles[0].properties.subtitle, "Preview subtitle as expected");638 // part 2: Title does not exist in configuration639 sPreviewSubtitle = oLaunchPageService.getCatalogTilePreviewSubtitle(oLaunchPageConfig.config.groups[0].tiles[1]);640 strictEqual(sPreviewSubtitle, null, "Preview subtitle default value is null");641 });642 test("getCatalogTilePreviewIcon", function () {643 var oLaunchPageService,644 sPreviewIcon,645 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);646 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);647 // part 1: Title exist in configuration648 sPreviewIcon = oLaunchPageService.getCatalogTilePreviewIcon(oLaunchPageConfig.config.groups[0].tiles[0]);649 strictEqual(sPreviewIcon, oLaunchPageConfig.config.groups[0].tiles[0].properties.icon, "Preview icon as expected");650 // part 2: Title does not exist in configuration651 sPreviewIcon = oLaunchPageService.getCatalogTilePreviewIcon(oLaunchPageConfig.config.groups[0].tiles[1]);652 strictEqual(sPreviewIcon, null, "Preview icon default value is null");653 });654 asyncTest("getCatalogWithTranslation", function () {655 var oLaunchPageService,656 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);657 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);658 oLaunchPageService.getCatalogs().done(function (aCatalogs) {659 start();660 strictEqual(aCatalogs[0].title, "Translated Catalog 1", "Correct catalog [0] title");661 strictEqual(aCatalogs[1].title, "Translated Catalog 2", "Correct catalog [1] title");662 });663 });664 asyncTest("getGroupsWithTranslation", function () {665 var oLaunchPageService,666 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);667 // part 1: unsupported in adapter668 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);669 oLaunchPageService.getGroups().done(function (aGroups) {670 start();671 strictEqual(aGroups[0].title, "Translated Group 1", "Group translation error for aGroups[0].title");672 strictEqual(aGroups[1].title, "Translated Group 2", "Group translation error for aGroups[1].title");673 });674 });675 asyncTest("getGroupsWithFeatureGroup", function () {676 var iNumFeaturedGroups,677 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig),678 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);679 oLaunchPageService.getGroups().done(function (aGroups) {680 start();681 iNumFeaturedGroups = aGroups.filter(function (oGroup) {682 return oGroup.contentProvider === "feature";683 }).length;684 strictEqual(iNumFeaturedGroups, oFixture.output.numberOfFeaturedGroups, "feature group loaded");685 });686 });687 asyncTest("getViewDataWithTranslation", function () {688 var oLaunchPageService,689 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);690 // part 1: unsupported in adapter691 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);692 oLaunchPageService.getTileView(oLaunchPageConfig.config.groups[0].tiles[0]).done(function (oView) {693 start();694 strictEqual(oView.getProperty("title"), "Translated Header title", "Translated title check");695 strictEqual(oView.getProperty("subtitle"), "Translated Sub Title", "Translated Sub Title");696 strictEqual(oView.getProperty("info"), "Translated Info", "Translated Info");697 strictEqual(oLaunchPageConfig.config.groups[0].tiles[0].keywords[0], "Translated Keyword", "Translated keywords");698 });699 });700 asyncTest("getViewForComponentTile", function () {701 var oLaunchPageService,702 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);703 // part 1: unsupported in adapter704 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);705 oLaunchPageService.getTileView(oLaunchPageConfig.config.groups[2].tiles[0]).done(function (oTileUI) {706 start();707 ok(oTileUI.getMetadata().getName() === "sap.ui.core.ComponentContainer", "Module path registered and Component wrapped with ComponentContainer");708 });709 });710 asyncTest("getViewForViewTileTile", function () {711 var oLaunchPageService,712 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);713 // part 1: unsupported in adapter714 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);715 oLaunchPageService.getTileView(oLaunchPageConfig.config.groups[2].tiles[1]).done(function (oTileUI) {716 start();717 ok(oTileUI.getMetadata().getName() === "sap.ui.core.mvc.JSView", "Modelu path registered and View tile retreived");718 });719 });720 asyncTest("getViewForHeaderModeTile", function () {721 var oLaunchPageService,722 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);723 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);724 oLaunchPageService.getTileView(oLaunchPageConfig.config.groups[0].tiles[4]).done(function (oTileUI) {725 start();726 ok(oTileUI.getProperty("mode") === "HeaderMode", "Tile is in Header Mode");727 });728 });729 asyncTest("getViewForContentModeTile", function () {730 var oLaunchPageService,731 oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig);732 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);733 oLaunchPageService.getTileView(oLaunchPageConfig.config.groups[0].tiles[5]).done(function (oTileUI) {734 start();735 ok(oTileUI.getProperty("mode") === "ContentMode", "Tile is in Content Mode");736 });737 });738 test("isLinkPersonalizationSupported", function () {739 var oTile = {},740 oLaunchPageAdapter = {741 isLinkPersonalizationSupported: sinon.stub().returns(true)742 },743 oLaunchPageService;744 oLaunchPageService = new LaunchPage({});745 strictEqual(oLaunchPageService.isLinkPersonalizationSupported(oTile), false);746 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);747 strictEqual(oLaunchPageService.isLinkPersonalizationSupported(oTile), true);748 ok(oLaunchPageAdapter.isLinkPersonalizationSupported.calledOnce);749 ok(oLaunchPageAdapter.isLinkPersonalizationSupported.calledWithExactly(oTile));750 });751 test("getCatalogTileView", function () {752 var oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig),753 oLaunchPageService = new LaunchPage(oLaunchPageAdapter),754 oTileData = {755 namespace: undefined,756 path: undefined,757 moduleType: undefined,758 tileType: "tileTypePart1.tileTypePart2.tileTypePart3",759 properties: {760 title: "title",761 subtitle: "subTitle",762 info: "info",763 targetURL: "#a-b"764 }765 },766 oView,767 oViewConstructor = function (oProps) {768 var oViewObject = {769 oViewProperties: oProps770 };771 return oViewObject;772 },773 oHandleTilePressStub = sinon.stub(oLaunchPageAdapter, "_handleTilePress").returns({}),774 oApplyDynamicTileIfoStateStub = sinon.stub(oLaunchPageAdapter, "_applyDynamicTileIfoState").returns({}),775 oJQuaryRequireStub = sinon.stub(jQuery.sap, "require"),776 oJQuaryGetObjectStub = sinon.stub(jQuery.sap, "getObject").callsFake( function (sObjectPath) {777 if (sObjectPath === "tileTypePart1.tileTypePart2.tileTypePart3") {778 return oViewConstructor;779 }780 }),781 oRiginalSapUiRequire = sap.ui.require;782 sap.ui.require = sinon.spy();783 oView = oLaunchPageService.getCatalogTileView(oTileData);784 ok(sap.ui.require.called, "sap.ui.require is called");785 ok(sap.ui.require.args[sap.ui.require.args.length - 1][0] === "tileTypePart1/tileTypePart2/tileTypePart3", "sap.ui.require called for the view path tileTypePart1/tileTypePart2/tileTypePart3");786 ok(oJQuaryGetObjectStub.calledTwice === true, "sap.ui.getObject calledTwice");787 ok(oJQuaryGetObjectStub.args[0][0] === "tileTypePart1.tileTypePart2.tileTypePart3", "1st call to sap.ui.getObject for tileTypePart1.tileTypePart2.tileTypePart3");788 ok(oJQuaryGetObjectStub.args[1][0] === "tileTypePart1.tileTypePart2.tileTypePart3", "2nd call to sap.ui.getObject for tileTypePart1.tileTypePart2.tileTypePart3");789 ok(oHandleTilePressStub.calledOnce === true, "_handleTilePressStub called once");790 ok(oApplyDynamicTileIfoStateStub.calledOnce === true, "_applyDynamicTileIfoState called once");791 ok(oView.oViewProperties.title === "title", "Returned view title is correct");792 sap.ui.require = oRiginalSapUiRequire;793 oJQuaryRequireStub.restore();794 oJQuaryGetObjectStub.restore();795 oHandleTilePressStub.restore();796 oApplyDynamicTileIfoStateStub.restore();797 });798 asyncTest("getCatalogTileViewControl", function () {799 var oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig),800 oLaunchPageService = new LaunchPage(oLaunchPageAdapter),801 oTileData = {802 namespace: undefined,803 path: undefined,804 moduleType: undefined,805 tileType: "tileTypePart1.tileTypePart2.tileTypePart3",806 properties: {807 title: "title",808 subtitle: "subTitle",809 info: "info",810 targetURL: "#a-b"811 }812 },813 oViewConstructor = function (oProps) {814 var oViewObject = {815 oViewProperties: oProps816 };817 return oViewObject;818 },819 oOrigRequire = sap.ui.require,820 oGetImageContentStub = sinon.stub(oLaunchPageAdapter, "_getImageContent").returns({821 addStyleClass: function () {}822 }),823 oRequireStub = sinon.stub(sap.ui, "require").callsFake( function (aRequirePath, fCallback) {824 fCallback(oViewConstructor);825 }),826 oHandleTilePressStub = sinon.stub(oLaunchPageAdapter, "_handleTilePress").returns({}),827 oApplyDynamicTileIfoState = sinon.stub(oLaunchPageAdapter, "_applyDynamicTileIfoState").returns({});828 oLaunchPageService.getCatalogTileViewControl(oTileData).done(function (oView) {829 start();830 ok(oRequireStub.callCount === 1, "sap.ui.require called");831 ok(oRequireStub.args[0][0][0] === "tileTypePart1/tileTypePart2/tileTypePart3", "sap.ui.require called for tileTypePart1/tileTypePart2/tileTypePart3");832 ok(oHandleTilePressStub.calledOnce === true, "_handleTilePressStub called once");833 ok(oApplyDynamicTileIfoState.calledOnce === true, "_applyDynamicTileIfoState called once");834 ok(oView.oViewProperties.title === "title", "Returned view title is correct");835 sap.ui.require = oOrigRequire;836 oGetImageContentStub.restore();837 oHandleTilePressStub.restore();838 oApplyDynamicTileIfoState.restore();839 });840 });841 test("getCatalogTileViewRedirect", function () {842 var oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig),843 oLaunchPageService = new LaunchPage(oLaunchPageAdapter),844 oGetCatalogTileViewStub;845 oLaunchPageAdapter.getCatalogTileViewControl = undefined;846 oGetCatalogTileViewStub = sinon.stub(oLaunchPageAdapter, "getCatalogTileView").returns({text: "viewText"});847 oLaunchPageService.getCatalogTileViewControl().done(function (obj) {848 ok(oLaunchPageAdapter.getCatalogTileView.calledOnce === true, "When adapter function getCatalogTileViewControl does not exist - getCatalogTileView is called");849 ok(obj.text === "viewText", "Correct returned object");850 oGetCatalogTileViewStub.restore();851 });852 });853 });854 asyncTest("getGroupsForBookmarks when part of the groups are locked or not visable", function () {855 var oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig),856 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);857 oLaunchPageService.getGroupsForBookmarks().done(function (aGroups) {858 start();859 strictEqual(aGroups.length, 3, "groups were filtered correctly");860 strictEqual(aGroups[0].title, "My Home", "title was changed correctly");861 });862 });863 module("getGroups", function () {864 asyncTest("getGroups with pages enabled should return a promise resolving to an empty array", function() {865 var oConfigStub = sinon.stub(Config, "last");866 oConfigStub.withArgs("/core/spaces/enabled").returns(true);867 var oLaunchPageAdapter = new LaunchPageAdapter(undefined, undefined, oLaunchPageConfig),868 oLaunchPageService = new LaunchPage(oLaunchPageAdapter);869 oLaunchPageService.getGroups().done(function (aGroups) {870 strictEqual(aGroups.length, 0, "an empty array is returned");871 start();872 });873 });874 });...
index.js
Source:index.js
1import Head from "next/head";2import Image from "next/image";3import styles from "../styles/Home.module.css";4import { ApolloClient, InMemoryCache, gql } from "@apollo/client";5export default function Home({ launches }) {6 return (7 <div className={styles.container}>8 <Head>9 <title>SpaceX launch Sequece</title>10 <meta name="description" content="Generated by create next app" />11 <link rel="icon" href="/favicon.ico" />12 </Head>13 <main className={styles.main}>14 <h1 className={styles.title}>15 Welcome to <a href="https://nextjs.org">Next.js!</a>16 </h1>17 <div className={styles.grid}>18 {launches.map((launch) => {19 return (20 <span key={launch.id} className={styles.card}>21 <a href={launch.links.video_link}>22 <h3>{launch.mission_name}</h3>23 <p>24 <strong>Launch Date:</strong>{" "}25 {new Date(launch.launch_date_local).toLocaleDateString(26 "en-US"27 )}28 </p>29 <Image30 src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"31 placeholder="blur"32 blurDataURL="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"33 height={100}34 width={100}35 quality={80}36 alt={37 launch.links.mission_patch38 ? launch.links.mission_patch39 : "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"40 }41 />42 <br />43 </a>44 <a45 href={launch.links.mission_patch}46 target="_blank"47 rel="noopener noreferrer"48 >49 Open Image50 </a>51 </span>52 );53 })}54 </div>55 </main>56 <footer className={styles.footer}>57 <a58 href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"59 target="_blank"60 rel="noopener noreferrer"61 >62 Powered by{" "}63 <span className={styles.logo}>64 <Image src="/vercel.svg" alt="Vercel Logo" width={72} height={16} />65 </span>66 </a>67 </footer>68 </div>69 );70}71export async function getStaticProps() {72 try {73 const client = new ApolloClient({74 uri: "https://api.spacex.land/graphql/",75 cache: new InMemoryCache(),76 });77 const { data } = await client.query({78 query: gql`79 query GetLaunches {80 launchesPast(limit: 10) {81 id82 mission_name83 launch_date_local84 launch_site {85 site_name_long86 }87 links {88 article_link89 video_link90 mission_patch91 }92 rocket {93 rocket_name94 }95 }96 }97 `,98 });99 // Code will go here100 return {101 props: {102 launches: data.launchesPast,103 },104 };105 } catch (error) {106 return {107 props: {108 launches: [109 {110 __typename: "Launch",111 id: "109",112 mission_name: "Starlink-15 (v1.0)",113 launch_date_local: "2020-10-24T11:31:00-04:00",114 launch_site: {115 __typename: "LaunchSite",116 site_name_long:117 "Cape Canaveral Air Force Station Space Launch Complex 40",118 },119 links: {120 __typename: "LaunchLinks",121 article_link: null,122 video_link: "https://youtu.be/J442-ti-Dhg",123 mission_patch: "https://images2.imgbox.com/d2/3b/bQaWiil0_o.png",124 },125 rocket: { __typename: "LaunchRocket", rocket_name: "Falcon 9" },126 },127 {128 __typename: "Launch",129 id: "108",130 mission_name: "Sentinel-6 Michael Freilich",131 launch_date_local: "2020-11-21T09:17:00-08:00",132 launch_site: {133 __typename: "LaunchSite",134 site_name_long:135 "Vandenberg Air Force Base Space Launch Complex 4E",136 },137 links: {138 __typename: "LaunchLinks",139 article_link:140 "https://spaceflightnow.com/2020/11/21/international-satellite-launches-to-extend-measurements-of-sea-level-rise/",141 video_link: "https://youtu.be/aVFPzTDCihQ",142 mission_patch: null,143 },144 rocket: { __typename: "LaunchRocket", rocket_name: "Falcon 9" },145 },146 {147 __typename: "Launch",148 id: "107",149 mission_name: "Crew-1",150 launch_date_local: "2020-11-15T19:27:00-05:00",151 launch_site: {152 __typename: "LaunchSite",153 site_name_long:154 "Kennedy Space Center Historic Launch Complex 39A",155 },156 links: {157 __typename: "LaunchLinks",158 article_link:159 "https://spaceflightnow.com/2020/11/16/astronauts-ride-spacex-crew-capsule-in-landmark-launch-for-commercial-spaceflight/",160 video_link: "https://youtu.be/bnChQbxLkkI",161 mission_patch: "https://i.imgur.com/t5R4BAQ.png",162 },163 rocket: { __typename: "LaunchRocket", rocket_name: "Falcon 9" },164 },165 {166 __typename: "Launch",167 id: "106",168 mission_name: "GPS III SV04 (Sacagawea)",169 launch_date_local: "2020-11-05T18:24:00-05:00",170 launch_site: {171 __typename: "LaunchSite",172 site_name_long:173 "Cape Canaveral Air Force Station Space Launch Complex 40",174 },175 links: {176 __typename: "LaunchLinks",177 article_link:178 "https://spaceflightnow.com/2020/11/06/spacex-launches-gps-navigation-satellite-from-cape-canaveral/",179 video_link: "https://youtu.be/wufXF5YKR1M",180 mission_patch: "https://i.imgur.com/Ehe9AgY.png",181 },182 rocket: { __typename: "LaunchRocket", rocket_name: "Falcon 9" },183 },184 {185 __typename: "Launch",186 id: "105",187 mission_name: "Starlink-14 (v1.0)",188 launch_date_local: "2020-10-24T11:31:00-04:00",189 launch_site: {190 __typename: "LaunchSite",191 site_name_long:192 "Cape Canaveral Air Force Station Space Launch Complex 40",193 },194 links: {195 __typename: "LaunchLinks",196 article_link:197 "https://spaceflightnow.com/2020/10/24/spacex-adds-another-60-satellites-to-starlink-network/",198 video_link: "https://youtu.be/2gbVgTxLgN0",199 mission_patch: "https://images2.imgbox.com/d2/3b/bQaWiil0_o.png",200 },201 rocket: { __typename: "LaunchRocket", rocket_name: "Falcon 9" },202 },203 {204 __typename: "Launch",205 id: "104",206 mission_name: "Starlink-13 (v1.0)",207 launch_date_local: "2020-10-18T08:25:00-04:00",208 launch_site: {209 __typename: "LaunchSite",210 site_name_long:211 "Kennedy Space Center Historic Launch Complex 39A",212 },213 links: {214 __typename: "LaunchLinks",215 article_link:216 "https://spaceflightnow.com/2020/10/18/spacex-launches-another-batch-of-starlink-satellites/",217 video_link: "https://youtu.be/UM8CDDAmp98",218 mission_patch: "https://images2.imgbox.com/d2/3b/bQaWiil0_o.png",219 },220 rocket: { __typename: "LaunchRocket", rocket_name: "Falcon 9" },221 },222 {223 __typename: "Launch",224 id: "103",225 mission_name: "Starlink-12 (v1.0)",226 launch_date_local: "2020-10-06T07:29:00-04:00",227 launch_site: {228 __typename: "LaunchSite",229 site_name_long:230 "Kennedy Space Center Historic Launch Complex 39A",231 },232 links: {233 __typename: "LaunchLinks",234 article_link: null,235 video_link: "https://youtu.be/8O8Z2yPyTnc",236 mission_patch: "https://images2.imgbox.com/d2/3b/bQaWiil0_o.png",237 },238 rocket: { __typename: "LaunchRocket", rocket_name: "Falcon 9" },239 },240 {241 __typename: "Launch",242 id: "102",243 mission_name: "Starlink-11 (v1.0)",244 launch_date_local: "2020-09-03T08:46:00-04:00",245 launch_site: {246 __typename: "LaunchSite",247 site_name_long:248 "Kennedy Space Center Historic Launch Complex 39A",249 },250 links: {251 __typename: "LaunchLinks",252 article_link: null,253 video_link: "https://youtu.be/_j4xR7LMCGY",254 mission_patch: "https://images2.imgbox.com/d2/3b/bQaWiil0_o.png",255 },256 rocket: { __typename: "LaunchRocket", rocket_name: "Falcon 9" },257 },258 {259 __typename: "Launch",260 id: "101",261 mission_name: "SAOCOM 1B, GNOMES-1, Tyvak-0172",262 launch_date_local: "2020-08-30T19:18:00-04:00",263 launch_site: {264 __typename: "LaunchSite",265 site_name_long:266 "Cape Canaveral Air Force Station Space Launch Complex 40",267 },268 links: {269 __typename: "LaunchLinks",270 article_link:271 "https://spaceflightnow.com/2020/08/31/spacex-launches-first-polar-orbit-mission-from-florida-in-decades/",272 video_link: "https://youtu.be/P-gLOsDjE3E",273 mission_patch: "https://images2.imgbox.com/43/33/36WPntCu_o.png",274 },275 rocket: { __typename: "LaunchRocket", rocket_name: "Falcon 9" },276 },277 {278 __typename: "Launch",279 id: "100",280 mission_name: "Starlink-10 (v1.0) & SkySat 19-21",281 launch_date_local: "2020-08-18T10:31:00-04:00",282 launch_site: {283 __typename: "LaunchSite",284 site_name_long:285 "Cape Canaveral Air Force Station Space Launch Complex 40",286 },287 links: {288 __typename: "LaunchLinks",289 article_link:290 "https://spaceflightnow.com/2020/08/18/spacex-adds-more-satellites-to-ever-growing-starlink-network/",291 video_link: "https://youtu.be/jTMJK7wb0rM",292 mission_patch: "https://images2.imgbox.com/d2/3b/bQaWiil0_o.png",293 },294 rocket: { __typename: "LaunchRocket", rocket_name: "Falcon 9" },295 },296 ],297 },298 };299 }...
LaunchUIComponent.js
Source:LaunchUIComponent.js
1'use strict';2Object.defineProperty(exports, "__esModule", {3 value: true4});5exports.LaunchUIComponent = undefined;6var _string;7function _load_string() {8 return _string = require('nuclide-commons/string');9}10var _react = _interopRequireDefault(require('react'));11var _AtomInput;12function _load_AtomInput() {13 return _AtomInput = require('nuclide-commons-ui/AtomInput');14}15var _UniversalDisposable;16function _load_UniversalDisposable() {17 return _UniversalDisposable = _interopRequireDefault(require('nuclide-commons/UniversalDisposable'));18}19var _nuclideUri;20function _load_nuclideUri() {21 return _nuclideUri = _interopRequireDefault(require('nuclide-commons/nuclideUri'));22}23var _nuclideDebuggerBase;24function _load_nuclideDebuggerBase() {25 return _nuclideDebuggerBase = require('../../nuclide-debugger-base');26}27var _classnames;28function _load_classnames() {29 return _classnames = _interopRequireDefault(require('classnames'));30}31function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }32class LaunchUIComponent extends _react.default.Component {33 constructor(props) {34 super(props);35 this._handleLaunchClick = () => {36 // TODO: perform some validation for the input.37 const launchExecutable = this.refs.launchExecutable.getText().trim();38 const coreDump = this.refs.coreDump.getText().trim();39 const launchArguments = (0, (_string || _load_string()).shellParse)(this.refs.launchArguments.getText());40 const launchEnvironmentVariables = (0, (_string || _load_string()).shellParse)(this.refs.launchEnvironmentVariables.getText());41 const launchWorkingDirectory = this.refs.launchWorkingDirectory.getText().trim();42 const stdinFilePath = this.refs.stdinFilePath.getText().trim();43 const launchTarget = {44 executablePath: launchExecutable,45 arguments: launchArguments,46 environmentVariables: launchEnvironmentVariables,47 workingDirectory: launchWorkingDirectory,48 stdinFilePath,49 coreDump50 };51 // Fire and forget.52 this.props.actions.launchDebugger(launchTarget);53 (0, (_nuclideDebuggerBase || _load_nuclideDebuggerBase()).serializeDebuggerConfig)(...this._getSerializationArgs(), {54 launchExecutable: this.state.launchExecutable,55 launchArguments: this.state.launchArguments,56 launchEnvironmentVariables: this.state.launchEnvironmentVariables,57 launchWorkingDirectory: this.state.launchWorkingDirectory,58 stdinFilePath: this.state.stdinFilePath,59 coreDump: this.state.coreDump60 });61 };62 this._disposables = new (_UniversalDisposable || _load_UniversalDisposable()).default();63 this.state = {64 launchExecutable: '',65 launchArguments: '',66 launchEnvironmentVariables: '',67 launchWorkingDirectory: '',68 stdinFilePath: '',69 coreDump: ''70 };71 }72 _getSerializationArgs() {73 return [(_nuclideUri || _load_nuclideUri()).default.isRemote(this.props.targetUri) ? (_nuclideUri || _load_nuclideUri()).default.getHostname(this.props.targetUri) : 'local', 'launch', 'native'];74 }75 setState(newState) {76 super.setState(newState);77 this.props.configIsValidChanged(this._debugButtonShouldEnable());78 }79 _debugButtonShouldEnable() {80 return true;81 }82 componentDidMount() {83 (0, (_nuclideDebuggerBase || _load_nuclideDebuggerBase()).deserializeDebuggerConfig)(...this._getSerializationArgs(), (transientSettings, savedSettings) => {84 this.setState({85 launchExecutable: savedSettings.launchExecutable,86 launchArguments: savedSettings.launchArguments,87 launchEnvironmentVariables: savedSettings.launchEnvironmentVariables,88 launchWorkingDirectory: savedSettings.launchWorkingDirectory,89 stdinFilePath: savedSettings.stdinFilePath,90 coreDump: savedSettings.coreDump || ''91 });92 });93 const launchExecutableInput = this.refs.launchExecutable;94 if (launchExecutableInput != null) {95 launchExecutableInput.focus();96 }97 this._disposables.add(atom.commands.add('atom-workspace', {98 'core:confirm': () => {99 this._handleLaunchClick();100 }101 }));102 this.props.configIsValidChanged(true);103 }104 componentWillUnmount() {105 this._disposables.dispose();106 }107 render() {108 // TODO: smart fill the working directory textbox.109 // TODO: make tab stop between textbox work.110 // Reserve tabIndex [1~10] to header portion of the UI so we start from "11" here.111 return _react.default.createElement(112 'div',113 { className: 'block' },114 _react.default.createElement(115 'label',116 null,117 'Executable: '118 ),119 _react.default.createElement((_AtomInput || _load_AtomInput()).AtomInput, {120 ref: 'launchExecutable',121 tabIndex: '11',122 placeholderText: 'Input the executable path you want to launch',123 value: this.state.launchExecutable,124 onDidChange: value => this.setState({ launchExecutable: value })125 }),126 _react.default.createElement(127 'label',128 null,129 'Core dump file: '130 ),131 _react.default.createElement((_AtomInput || _load_AtomInput()).AtomInput, {132 ref: 'coreDump',133 tabIndex: '12',134 placeholderText: 'Optional path to a core dump file to offline debug a crash',135 value: this.state.coreDump,136 onDidChange: value => this.setState({ coreDump: value })137 }),138 _react.default.createElement(139 'div',140 { className: 'nuclide-native-launch-small-text' },141 'Be sure to copy the core dump to a location where Nuclide has read access. (Nuclide server does not run as root).'142 ),143 _react.default.createElement(144 'div',145 {146 className: (0, (_classnames || _load_classnames()).default)({147 'nuclide-native-launch-disabled': this.state.coreDump !== ''148 }) },149 _react.default.createElement(150 'label',151 null,152 'Arguments: '153 ),154 _react.default.createElement((_AtomInput || _load_AtomInput()).AtomInput, {155 ref: 'launchArguments',156 tabIndex: '13',157 disabled: this.state.coreDump !== '',158 placeholderText: 'Arguments to the executable',159 value: this.state.launchArguments,160 onDidChange: value => this.setState({ launchArguments: value })161 }),162 _react.default.createElement(163 'label',164 null,165 'Environment Variables: '166 ),167 _react.default.createElement((_AtomInput || _load_AtomInput()).AtomInput, {168 ref: 'launchEnvironmentVariables',169 tabIndex: '14',170 disabled: this.state.coreDump !== '',171 placeholderText: 'Environment variables (e.g., SHELL=/bin/bash PATH=/bin)',172 value: this.state.launchEnvironmentVariables,173 onDidChange: value => this.setState({ launchEnvironmentVariables: value })174 }),175 _react.default.createElement(176 'label',177 null,178 'Working directory: '179 ),180 _react.default.createElement((_AtomInput || _load_AtomInput()).AtomInput, {181 ref: 'launchWorkingDirectory',182 tabIndex: '15',183 disabled: this.state.coreDump !== '',184 placeholderText: 'Working directory for the launched executable',185 value: this.state.launchWorkingDirectory,186 onDidChange: value => this.setState({ launchWorkingDirectory: value })187 }),188 _react.default.createElement(189 'label',190 null,191 'Stdin file: '192 ),193 _react.default.createElement((_AtomInput || _load_AtomInput()).AtomInput, {194 ref: 'stdinFilePath',195 tabIndex: '16',196 disabled: this.state.coreDump !== '',197 placeholderText: 'Redirect stdin to this file',198 value: this.state.stdinFilePath,199 onDidChange: value => this.setState({ stdinFilePath: value })200 })201 )202 );203 }204}205exports.LaunchUIComponent = LaunchUIComponent; /**206 * Copyright (c) 2015-present, Facebook, Inc.207 * All rights reserved.208 *209 * This source code is licensed under the license found in the LICENSE file in210 * the root directory of this source tree.211 *212 * 213 * @format...
pc-launch-filter.js
Source:pc-launch-filter.js
1// Filter Phone2document.getElementById("phone-label").addEventListener("click", function (event) {3 //if()4 var list = document.getElementsByClassName('phone-call-tag');5 for (var i = 0; i < list.length; i++) {6 list[i].style.display = 'none';7 }8});9// Filter Phone10document.getElementById("phone-label").addEventListener("click", function (event) {11 //if()12 $("li.phone-call-tag").not("")13});14// Filter Chat15document.getElementById("chat-label").addEventListener("click", function (event) {16 //if()17 var list = document.getElementsByClassName('chat-tag');18 for (var i = 0; i < list.length; i++) {19 list[i].style.display = 'none';20 }21});22// Filter Email23document.getElementById("email-label").addEventListener("click", function (event) {24 //if()25 var list = document.getElementsByClassName('email-tag');26 for (var i = 0; i < list.length; i++) {27 list[i].style.display = 'none';28 }29});30// Filter SMS31document.getElementById("sms-label").addEventListener("click", function (event) {32 //if()33 var list = document.getElementsByClassName('sms-tag');34 for (var i = 0; i < list.length; i++) {35 list[i].style.display = 'none';36 }37});38// Filter DFO39document.getElementById("dfo-label").addEventListener("click", function (event) {40 //if()41 var list = document.getElementsByClassName('dfo-tag');42 for (var i = 0; i < list.length; i++) {43 list[i].style.display = 'none';44 }45});46// Sidebar Reporting View47$('#Reporting-View').on('click', function (e) {48 if ($("div#launch-chats").closest(".email-app-details").hasClass('show')) {49 $("div#launch-chats").closest(".email-app-details").toggleClass('show');50 } else if ($("div#launch-emails").closest(".email-app-details").hasClass('show')) {51 $("div#launch-emails").closest(".email-app-details").toggleClass('show');52 } else if ($("div#launch-sms").closest(".email-app-details").hasClass('show')) {53 $("div#launch-sms").closest(".email-app-details").toggleClass('show');54 } else if ($("div#launch-dfo").closest(".email-app-details").hasClass('show')) {55 $("div#launch-dfo").closest(".email-app-details").toggleClass('show');56 } else if ($("div#launch-phone-call").closest(".email-app-details").hasClass('show')) {57 $("div#launch-phone-call").closest(".email-app-details").toggleClass('show');58 }else {59 60 }61 62});63// Sidebar Phone64$('#phone-launch-btn').on('click', function (e) {65 if ($("div#launch-chats").closest(".email-app-details").hasClass('show')) {66 $("div#launch-chats").closest(".email-app-details").toggleClass('show');67 } else if ($("div#launch-emails").closest(".email-app-details").hasClass('show')) {68 $("div#launch-emails").closest(".email-app-details").toggleClass('show');69 } else if ($("div#launch-sms").closest(".email-app-details").hasClass('show')) {70 $("div#launch-sms").closest(".email-app-details").toggleClass('show');71 } else if ($("div#launch-dfo").closest(".email-app-details").hasClass('show')) {72 $("div#launch-dfo").closest(".email-app-details").toggleClass('show');73 } else {74 $("div#launch-phone-call").closest(".email-app-details").toggleClass('show');75 }76});77// Sidebar Chat78$('#chat-launch-btn').on('click', function (e) {79 if ($("div#launch-phone-call").closest(".email-app-details").hasClass('show')) {80 $("div#launch-phone-call").closest(".email-app-details").toggleClass('show');81 } else if ($("div#launch-emails").closest(".email-app-details").hasClass('show')) {82 $("div#launch-emails").closest(".email-app-details").toggleClass('show');83 } else if ($("div#launch-sms").closest(".email-app-details").hasClass('show')) {84 $("div#launch-sms").closest(".email-app-details").toggleClass('show');85 } else if ($("div#launch-dfo").closest(".email-app-details").hasClass('show')) {86 $("div#launch-dfo").closest(".email-app-details").toggleClass('show');87 }88 $("div#launch-chats").closest(".email-app-details").toggleClass('show');89});90// Sidebar Email91$('#email-launch-btn').on('click', function (e) {92 if ($("div#launch-phone-call").closest(".email-app-details").hasClass('show')) {93 $("div#launch-phone-call").closest(".email-app-details").toggleClass('show');94 } else if ($("div#launch-chats").closest(".email-app-details").hasClass('show')) {95 $("div#launch-chats").closest(".email-app-details").toggleClass('show');96 } else if ($("div#launch-chats").closest(".email-app-details").hasClass('show')) {97 $("div#launch-chats").closest(".email-app-details").toggleClass('show');98 } else if ($("div#launch-sms").closest(".email-app-details").hasClass('show')) {99 $("div#launch-sms").closest(".email-app-details").toggleClass('show');100 } else if ($("div#launch-dfo").closest(".email-app-details").hasClass('show')) {101 $("div#launch-dfo").closest(".email-app-details").toggleClass('show');102 }103 $("div#launch-emails").closest(".email-app-details").toggleClass('show');104});105// Sidebar SMS106$('#sms-launch-btn').on('click', function (e) {107 if ($("div#launch-phone-call").closest(".email-app-details").hasClass('show')) {108 $("div#launch-phone-call").closest(".email-app-details").toggleClass('show');109 } else if ($("div#launch-chats").closest(".email-app-details").hasClass('show')) {110 $("div#launch-chats").closest(".email-app-details").toggleClass('show');111 } else if ($("div#launch-chats").closest(".email-app-details").hasClass('show')) {112 $("div#launch-chats").closest(".email-app-details").toggleClass('show');113 } else if ($("div#launch-emails").closest(".email-app-details").hasClass('show')) {114 $("div#launch-emails").closest(".email-app-details").toggleClass('show');115 } else if ($("div#launch-dfo").closest(".email-app-details").hasClass('show')) {116 $("div#launch-dfo").closest(".email-app-details").toggleClass('show');117 }118 $("div#launch-sms").closest(".email-app-details").toggleClass('show');119});120// Sidebar DFO121$('#dfo-launch-btn').on('click', function (e) {122 if ($("div#launch-phone-call").closest(".email-app-details").hasClass('show')) {123 $("div#launch-phone-call").closest(".email-app-details").toggleClass('show');124 } else if ($("div#launch-chats").closest(".email-app-details").hasClass('show')) {125 $("div#launch-chats").closest(".email-app-details").toggleClass('show');126 } else if ($("div#launch-chats").closest(".email-app-details").hasClass('show')) {127 $("div#launch-chats").closest(".email-app-details").toggleClass('show');128 } else if ($("div#launch-emails").closest(".email-app-details").hasClass('show')) {129 $("div#launch-emails").closest(".email-app-details").toggleClass('show');130 } else if ($("div#launch-sms").closest(".email-app-details").hasClass('show')) {131 $("div#launch-sms").closest(".email-app-details").toggleClass('show');132 }133 $("div#launch-dfo").closest(".email-app-details").toggleClass('show');134 // Math for current time135 var d = new Date();136 var ampm = d.getHours >= 12 ? 'am' : 'pm';137 var b12 = d.getHours();138 var a12 = d.getHours() - 12;139 var hours = d.getHours >= 12 ? b12 : a12;140 // Math for current date141 var currentDay = d.getDate();142 var currentMonth = d.toLocaleString('default', {143 month: 'long'144 });145 var currentYear = d.getFullYear();146 // Display current time147 document.getElementById("currentTime").innerHTML = hours + ":" + d.getMinutes() + " " + ampm;148 document.getElementById("currentDate").innerHTML = currentDay + " " + currentMonth + " " + currentYear;149});150// MailTo Email151$("button#email-submit").on("click", function() {152 var toAddress = $("input#emailTo").val();153 var eSubject = $("input#emailSubject").val();154 var eCC = $("input#emailCC").val();155 var eBody = $("div#emailBody").val();156 $(".email-submit").attr("onClick", "mailTo:" + toAddress + "?cc=" + eCC + "&" + eSubject);157 console.log("did this work?");158});159$("button#refreshButton").on("click", function(){160 window.location.reload();...
launches.model.js
Source:launches.model.js
1const axios = require('axios');2// Linking our mongodb launches collection3const launchesDatabase = require('./launches.mongo');4const planets = require('./planets.mongo');5// Default flight number in case our getLatestLaunch function has no launches to reference6const DEFAULT_FLIGHT_NUMBER = 100;7// SpaceX API url8const SPACEX_API_URL = "https://api.spacexdata.com/v4/launches/query";9// Saving SpaceX launches to our database10async function populateLaunches() {11 console.log("Downloading launches data...");12 const response = await axios.post(SPACEX_API_URL, {13 query: {},14 options: {15 pagination: false,16 populate: [17 {18 path: 'rocket',19 select: {20 name: 121 }22 },23 {24 path: 'payloads',25 select: {26 'customers': 127 }28 }29 ]30 }31 });32 if (response.status != 200) {33 console.log('Problem downloading launch data');34 throw new Error('Launch data download failed');35 }36 // Response from our axios query for launch data, which axios stores in a docs array in the response.data 37 const launchDocs = response.data.docs38 // Looping over the launch data to make a launch object to save in our database39 for (const launchDoc of launchDocs) {40 // Using the built in flatMap() function to make a new array out of each element in the array where customers are stored, it is called on an array and takes a callback which runs on each element and then combines the results of each into a new array41 const payloads = launchDoc['payloads'];42 // Iterating over each payload and taking each customers value for each payload and combining them into an array to use in our new launch document, creating the new document, and saving it to mongodb43 const customers = payloads.flatMap((payload) => {44 return payload['customers'];45 });46 const launch = {47 flightNumber: launchDoc['flight_number'],48 mission: launchDoc['name'],49 rocket: launchDoc['rocket']['name'],50 launchDate: launchDoc['date_local'],51 upcoming: launchDoc['upcoming'],52 success: launchDoc['success'],53 customers54 }55 console.log(`${launch.flightNumber}, ${launch.mission}`);56 // Populate launches collection57 await saveLaunch(launch);58 }59}60// Loading all the SpaceX launch data we need with axios61async function loadLaunchesData() {62 // Checking if the data has already been loaded63 const firstLaunch = await findLaunch({64 flightNumber: 1,65 rocket: 'Falcon 1',66 mission: 'FalconSat'67 });68 if (firstLaunch) {69 console.log('Launch data already loaded');70 } else {71 await populateLaunches();72 }73}74// Function to use to only add launches not in our database already75async function findLaunch(filter) {76 return await launchesDatabase.findOne(filter);77}78// See if a launch exists within our database79async function existsLaunchWithId(launchId) {80 return await findLaunch({81 flightNumber: launchId82 });83}84// Get our latest flight number from the database using a filter that finds the highest flight number value85async function getLatestFlightNumber() {86 const latestLaunch = await launchesDatabase87 .findOne()88 .sort('-flightNumber');89 if (!latestLaunch) {90 return DEFAULT_FLIGHT_NUMBER;91 }92 return latestLaunch.flightNumber;93}94// GET all launches95async function getAllLaunches(skip, limit) {96 return await launchesDatabase97 .find({}, { '_id': 0, '__v': 0})98 .sort({ flightNumber: 1 })99 .skip(skip)100 .limit(limit);101}102// Saving launches to mongodb103async function saveLaunch(launch) {104 // Saving a doocument with the newly passed in launch object, or updating it if it already exists by flight number105 try {106 await launchesDatabase.findOneAndUpdate({107 flightNumber: launch.flightNumber,108 }, launch, {109 upsert: true110 })} catch(err) {111 return console.error(`Could not save launch ${err}`); 112 }113}114// Adding a document containing a new launch to mongodb115async function scheduleNewLaunch(launch) {116 // Validating the planet exists, so we do not add launches to planets that do not exist in our database117 const planet = await planets.findOne({118 keplerName: launch.target119 });120 if (!planet) {121 throw new Error('No matching planet was found');122 }123 const newFlightNumber = await getLatestFlightNumber() + 1;124 const newLaunch = Object.assign(launch, {125 success: true,126 upcoming: true,127 customers: ['ZTM', 'NASA'],128 flightNumber: newFlightNumber129 });130 await saveLaunch(newLaunch);131}132// Rather than deleting aborted launches outright, update them to show they are not successful and are no longer upcoming133async function abortLaunchById(launchId) {134 const aborted = await launchesDatabase.updateOne({135 flightNumber: launchId136 }, {137 upcoming: false,138 success: false139 });140 /* Returning that a document was modified, and that one document was modified. We can see this object by reading the res.json from our controller function if we simply used the above await updateOne operation, like below141 const aborted = await abortLaunchById(launchId);142 return res.status(200).json(aborted); */143 return aborted.modifiedCount === 1;144}145module.exports = {146 loadLaunchesData,147 existsLaunchWithId,148 getAllLaunches,149 scheduleNewLaunch,150 abortLaunchById...
resolvers.js
Source:resolvers.js
1const { paginateResults } = require('./utils');2module.exports = {3 Query: {4 launches: async (_, { pageSize = 20, after }, { dataSources }) => {5 const allLaunches = await dataSources.launchAPI.getAllLaunches();6 // we want these in reverse chronological order7 allLaunches.reverse();8 const launches = paginateResults({9 after,10 pageSize,11 results: allLaunches,12 });13 return {14 launches,15 cursor: launches.length ? launches[launches.length - 1].cursor : null,16 // if the cursor of the end of the paginated results is the same as the17 // last item in _all_ results, then there are no more results after this18 hasMore: launches.length19 ? launches[launches.length - 1].cursor !==20 allLaunches[allLaunches.length - 1].cursor21 : false,22 };23 },24 launch: (_, { id }, { dataSources }) =>25 dataSources.launchAPI.getLaunchById({ launchId: id }),26 me: async (_, __, { dataSources }) =>27 dataSources.userAPI.findOrCreateUser(),28 },29 Mutation: {30 bookTrips: async (_, { launchIds }, { dataSources }) => {31 const results = await dataSources.userAPI.bookTrips({ launchIds });32 const launches = await dataSources.launchAPI.getLaunchesByIds({33 launchIds,34 });35 return {36 success: results && results.length === launchIds.length,37 message:38 results.length === launchIds.length39 ? 'trips booked successfully'40 : `the following launches couldn't be booked: ${launchIds.filter(41 id => !results.includes(id),42 )}`,43 launches,44 };45 },46 cancelTrip: async (_, { launchId }, { dataSources }) => {47 const result = dataSources.userAPI.cancelTrip({ launchId });48 if (!result)49 return {50 success: false,51 message: 'failed to cancel trip',52 };53 const launch = await dataSources.launchAPI.getLaunchById({ launchId });54 return {55 success: true,56 message: 'trip cancelled',57 launches: [launch],58 };59 },60 login: async (_, { email }, { dataSources }) => {61 const user = await dataSources.userAPI.findOrCreateUser({ email });62 if (user) return new Buffer(email).toString('base64');63 },64 },65 Launch: {66 isBooked: async (launch, _, { dataSources }) =>67 dataSources.userAPI.isBookedOnLaunch({ launchId: launch.id }),68 },69 Mission: {70 // make sure the default size is 'large' in case user doesn't specify71 missionPatch: (mission, { size } = { size: 'LARGE' }) => {72 return size === 'SMALL'73 ? mission.missionPatchSmall74 : mission.missionPatchLarge;75 },76 },77 User: {78 trips: async (_, __, { dataSources }) => {79 // get ids of launches by user80 const launchIds = await dataSources.userAPI.getLaunchIdsByUser();81 if (!launchIds.length) return [];82 // look up those launches by their ids83 return (84 dataSources.launchAPI.getLaunchesByIds({85 launchIds,86 }) || []87 );88 },89 },...
launch.js
Source:launch.js
1const { RESTDataSource } = require('apollo-datasource-rest');2class LaunchAPI extends RESTDataSource {3 constructor() {4 super();5 this.baseURL = 'https://api.spacexdata.com/v2/';6 }7 // Create a rocket object although it is based on a launch8 rocketReducer(launch) {9 let launchFailureDetails = null10 if(launch.launch_failure_details) {11 launchFailureDetails = launch.launch_failure_details.reason12 }13 return {14 id: launch.rocket.rocket_id,15 name: launch.rocket.rocket_name,16 mission: {17 name: launch.mission_name,18 launchDateLocal: launch.launch_date_local,19 launchSuccess: launch.launch_success,20 launchFailureDetails: launchFailureDetails,21 missionPatchSmall:launch.links.mission_patch_small22 },23 site: {24 name: launch.launch_site.site_name25 }26 }27 };28 // Group launches by rocket id29 groupRockets(launches) {30 const launchesByRocket = new Map();31 let rocketId, rocketLaunches;32 launches.forEach((launch) => {33 rocketId = launch.rocket.rocket_id;34 rocketLaunches = launchesByRocket.get(rocketId);35 if (!rocketLaunches) {36 launchesByRocket.set(rocketId, launch);37 } else {38 // To simplify the project, I'll use only one launch per rocket39 // rocketLaunches.push(launch)40 }41 })42 return launchesByRocket;43 }44 // leaving this inside the class to make the class easier to test45 launchReducer(launch) {46 return {47 id: launch.flight_number || 0,48 cursor: `${launch.launch_date_local}`,49 site: launch.launch_site && launch.launch_site.site_name,50 mission: {51 name: launch.mission_name,52 missionPatchSmall: launch.links.mission_patch_small,53 missionPatchLarge: launch.links.mission_patch,54 },55 rocket: {56 id: launch.rocket.rocket_id,57 name: launch.rocket.rocket_name,58 type: launch.rocket.rocket_type,59 60 },61 };62 }63 async getAllRockets() {64 const response = await this.get('launches');65 if (Array.isArray(response)) {66 const launchesPerRocket = Array.from(this.groupRockets(response).values());67 const result = launchesPerRocket.map(launch => this.rocketReducer(launch))68 return result69 } else {70 return []71 }72 }73 async getAllLaunches() {74 const response = await this.get('launches');75 // transform the raw launches to a more friendly76 return Array.isArray(response)77 ? response.map(launch => this.launchReducer(launch)) : [];78 }79 async getLaunchById({ launchId }) {80 const res = await this.get('launches', { flight_number: launchId });81 return this.launchReducer(res[0]);82 }83 async getLaunchesByIds({ launchIds }) {84 return Promise.all(85 launchIds.map(launchId => this.getLaunchById({ launchId })),86 );87 }88}...
launches.controller.js
Source:launches.controller.js
1const { 2 getAllLaunches,3 scheduleNewLaunch,4 existsLaunchWithId,5 abortLaunchById6 } = require('../../models/launches.model');7 const {8 getPagination9 } = require('../../services/query');10// Getting our launches data, taking any pagination parameters, and sending it to our api and mongo to get a list of launches11async function httpGetAllLaunches(req, res) {12 const { skip, limit } = getPagination(req.query);13 const launches = await getAllLaunches(skip, limit)14 return res.status(200).json(launches);15}16// Function for handling POST of new launches17async function httpAddNewLaunch(req, res) {18 const launch = req.body;19 // Validate all of our values exist20 if (!launch.mission || !launch.rocket || !launch.launchDate 21 || !launch.target) {22 return res.status(400).json({23 error: 'Missing required launch property'24 })25 }26 // Since we cannot pass date objects from our json, we will convert the passed in date string to a Date object here27 launch.launchDate = new Date(launch.launchDate);28 // Validate that our date is a valid date29 if (isNaN(launch.launchDate)) {30 return res.status(400).json({31 error: 'Invalid launch date'32 })33 };34 await scheduleNewLaunch(launch);35 return res.status(201).json(launch);36}37async function httpAbortLaunch(req, res) {38 const launchId = +req.params.id;39 const existsLaunch = await existsLaunchWithId(launchId);40 // If launch doesn't exist41 if (!existsLaunch) {42 return res.status(404).json({43 error: "Launch not found"44 });45 } 46 // If launch does exist47 const aborted = await abortLaunchById(launchId);48 if (!aborted) {49 return res.status(400).json({50 error: "Launch not aborted"51 });52 }53 return res.status(200).json({54 ok: true55 });56}57module.exports = {58 httpGetAllLaunches,59 httpAddNewLaunch,60 httpAbortLaunch...
Using AI Code Generation
1const chromeless = new Chromeless()2 .type('chromeless', 'input[name="q"]')3 .press(13)4 .wait('#resultStats')5 .screenshot()6await chromeless.end()7const chromeless = new Chromeless()8 .type('chromeless', 'input[name="q"]')9 .press(13)10 .wait('#resultStats')11 .screenshot()12await chromeless.end()13const chromeless = new Chromeless()14 .type('chromeless', 'input[name="q"]')15 .press(13)16 .wait('#resultStats')17 .screenshot()18await chromeless.end()19const chromeless = new Chromeless()20 .type('chromeless', 'input[name="q"]')21 .press(13)22 .wait('#resultStats')23 .screenshot()24await chromeless.end()25const chromeless = new Chromeless()26 .type('chromeless', 'input[name="q"]')27 .press(13)28 .wait('#resultStats')29 .screenshot()30await chromeless.end()31const chromeless = new Chromeless()32 .type('chromeless', 'input[name="q"]')33 .press(13)34 .wait('#resultStats')35 .screenshot()
Using AI Code Generation
1const chromeless = new Chromeless();2 .type('chromeless', 'input[name="q"]')3 .press(13)4 .wait('#resultStats')5 .screenshot();6await chromeless.end();7const chromeless = new Chromeless();8 .type('chromeless', 'input[name="q"]')9 .press(13)10 .wait('#resultStats')11 .screenshot();12await chromeless.end();13const chromeless = new Chromeless();14 .type('chromeless', 'input[name="q"]')15 .press(13)16 .wait('#resultStats')17 .screenshot();18await chromeless.end();19const chromeless = new Chromeless();20 .type('chromeless', 'input[name="q"]')21 .press(13)22 .wait('#resultStats')23 .screenshot();24await chromeless.end();25const chromeless = new Chromeless();26 .type('chromeless', 'input[name="q"]')27 .press(13)28 .wait('#resultStats')29 .screenshot();30await chromeless.end();31const chromeless = new Chromeless();32 .type('chromeless', 'input[name="q"]')33 .press(13)34 .wait('#resultStats')35 .screenshot();
Using AI Code Generation
1const chromeless = new Chromeless();2 .type('chromeless', 'input[name="q"]')3 .press(13)4 .wait('#resultStats')5 .screenshot();6await chromeless.end();
Using AI Code Generation
1const Chromeless = require('chromeless').default2async function run() {3 const chromeless = new Chromeless()4 .type('chromeless', 'input[name="q"]')5 .press(13)6 .wait('#resultStats')7 .screenshot()8 await chromeless.end()9}10run().catch(console.error.bind(console))11{12 "scripts": {13 },14 "dependencies": {15 }16}17{18}19{20}21{22 {23 "targets": {24 }25 }26}27{28 "parserOptions": {29 },30 "rules": {
Using AI Code Generation
1const chromeless = new Chromeless({ launchChrome: false })2 .type('chromeless', 'input[name="q"]')3 .press(13)4 .wait('#resultStats')5 .screenshot()6await chromeless.end()7const chromeless = new Chromeless({8})9const chromeless = new Chromeless({ launchChrome: false })10 .type('chromeless', 'input[name="q"]')11 .press(13)12 .wait('#resultStats')13 .screenshot()14await chromeless.end()
Using AI Code Generation
1const Chromeless = require('chromeless').Chromeless;2const chromeless = new Chromeless();3 .type('chromeless', 'input[name="q"]')4 .press(13)5 .wait('#resultStats')6 .evaluate(() => {7 })8 .then((title) => {9 })10 .catch((err) => {11 console.error(err)12 })13 .then(() => {14 chromeless.end()15 })16{17 "scripts": {18 },19 "repository": {
Using AI Code Generation
1const chromeless = new Chromeless();2 .type("chromeless", "input[name="q"]")3 .press(13)4 .wait("#resultStats")5 .screenshot();6await chromeless.end();7const chromeless = new Chromeless();8 .type("chromeless", "input[name="q"]")9 .press(13)10 .wait("#resultStats")11 .screenshot();12await chromeless.end();13const chromeless = new Chromeless();14 .type("chromeless", "input[name="q"]")15 .press(13)16 .wait("#resultStats")17 .screenshot();18await chromeless.end();19const chromeless = new Chromeless();20 .type("chromeless", "input[name="q"]")21 .press(13)22 .wait("#resultStats")23 .screenshot();24await chromeless.end();25const chromeless = new Chromeless();26 .type("chromeless", "input[name="q"]")27 .press(13)28 .wait("#resultStats")
Using AI Code Generation
1const Chromeless = require('chromeless').Chromeless;2const chromeless = new Chromeless();3 .type('chromeless', 'input[name="q"]')4 .press(13)5 .wait('#resultStats')6 .screenshot();7await chromeless.end();8const chromeless = new Chromeless();9 .type('chromeless', 'input[name="q"]')10 .press(13)11 .wait('#resultStats')12 .screenshot();13await chromeless.end();14const chromeless = new Chromeless();15 .type('chromeless', 'input[name="q"]')16 .press(13)17 .wait('#resultStats')18 .screenshot();19await chromeless.end();20const chromeless = new Chromeless();21 .type('chromeless', 'input[name="q"]')22 .press(13)23 .wait('#resultStats')24 .screenshot();25await chromeless.end();26const chromeless = new Chromeless();27 .type('chromeless', 'input[name="q"]')28 .press(13)29 .wait('#resultStats')30 .screenshot();31await chromeless.end();
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!!