How to use launch method in Cypress

Best JavaScript code snippet using cypress

LaunchPage.qunit.js

Source:LaunchPage.qunit.js Github

copy

Full Screen

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    });...

Full Screen

Full Screen

index.js

Source:index.js Github

copy

Full Screen

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  }...

Full Screen

Full Screen

LaunchUIComponent.js

Source:LaunchUIComponent.js Github

copy

Full Screen

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...

Full Screen

Full Screen

pc-launch-filter.js

Source:pc-launch-filter.js Github

copy

Full Screen

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();...

Full Screen

Full Screen

launches.model.js

Source:launches.model.js Github

copy

Full Screen

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...

Full Screen

Full Screen

resolvers.js

Source:resolvers.js Github

copy

Full Screen

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  },...

Full Screen

Full Screen

launch.js

Source:launch.js Github

copy

Full Screen

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}...

Full Screen

Full Screen

launches.controller.js

Source:launches.controller.js Github

copy

Full Screen

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...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', () => {2  it('Visits the Kitchen Sink', () => {3  })4})5describe('My First Test', () => {6  it('Visits the Kitchen Sink', () => {7  })8})9describe('My First Test', () => {10  it('Visits the Kitchen Sink', () => {11  })12})13describe('My First Test', () => {14  it('Visits the Kitchen Sink', () => {15  })16})17describe('My First Test', () => {18  it('Visits the Kitchen Sink', () => {19  })20})21describe('My First Test', () => {22  it('Visits the Kitchen Sink', () => {23  })24})25describe('My First Test', () => {26  it('Visits the Kitchen Sink', () => {27  })28})29describe('My First Test', () => {30  it('Visits the Kitchen Sink', () => {31  })32})33describe('My First Test', () => {34  it('Visits the Kitchen Sink', () => {35  })36})37describe('My First Test', () => {38  it('Visits the Kitchen Sink', () => {39  })40})41describe('My First Test', () => {42  it('Visits the Kitchen Sink', () => {43  })44})45describe('My First Test', () => {46  it('Visits the

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2  it('Does not do much!', function() {3  })4})5{6}7{8  "scripts": {9  }10}11describe('My First Test', function() {12  it('Does not do much!', function() {13    cy.visit('/')14  })15})16describe('My First Test', function() {17  it('Does not do much!', function() {18  })19})20describe('My First Test', function() {21  it('Does not do much!', function() {22    cy.visit('/')23  })24})25describe('My First Test', function() {26  it('Does not do much!', function() {27  })28})29describe('My First Test', function() {30  it('Does not do much!', function() {31    cy.visit('/')32  })33})34describe('My First Test', function() {35  it('Does not do much!', function() {36  })37})38describe('My First Test', function() {39  it('Does not do much!', function() {40    cy.visit('/')41  })42})43describe('My First Test', function() {44  it('Does not do much!', function() {45  })46})47describe('My First Test', function() {48  it('Does not do much!', function() {49    cy.visit('/')50  })51})52describe('My First Test', function() {53  it('Does not

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2  it('Visits the Kitchen Sink', function() {3  })4})5describe('My First Test', function() {6  it('Finds an element', function() {7    cy.contains('type')8  })9})10describe('My First Test', function() {11  it('Gets, types and asserts', function() {12    cy.contains('type').click()13    cy.url().should('include', '/commands/actions')14    cy.get('.action-email')15      .type('

Full Screen

Using AI Code Generation

copy

Full Screen

1Cypress.launch({2    env: {3    }4})5cy.title().should('eq', 'Google')6cy.url().should('include', 'google')7cy.contains('Gmail').should('be.visible')8cy.get('.gLFyf').type('Cypress')9cy.get('.gNO89b').click()10cy.contains('Cypress.io').should('be.visible')11cy.get('.LC20lb').click()12cy.contains('The Fast, Easy and Reliable Testing Tool').should('be.visible')13cy.get('.navbar-nav > :nth-child(3) > .nav-link').click()14cy.contains('Get Started').should('be.visible')15cy.get('.navbar-nav > :nth-child(4) > .nav-link').click()16cy.contains('Get Started').should('be.visible')17cy.get('.navbar-nav > :nth-child(5) > .nav-link').click()18cy.contains('Get Started').should('be.visible')19cy.get('.navbar-nav > :nth-child(6) > .nav-link').click()20cy.contains('Get Started').should('be.visible')21cy.get('.navbar-nav > :nth-child(7) > .nav-link').click()22cy.contains('Get Started').should('be.visible')23cy.get('.navbar-nav > :nth-child(8

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('Cypress Demo', function() {2    it('Launch browser', function() {3    })4})5{6}7{8    "scripts": {9    },10    "devDependencies": {11    }12}

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('My First Test', function() {2  it('Does not do much!', function() {3    cy.contains('Welcome to the app!').should('be.visible')4  })5})6{7  "reporterOptions": {8  }9}10{11  "scripts": {12  },13  "dependencies": {

Full Screen

Cypress Tutorial

Cypress is a renowned Javascript-based open-source, easy-to-use end-to-end testing framework primarily used for testing web applications. Cypress is a relatively new player in the automation testing space and has been gaining much traction lately, as evidenced by the number of Forks (2.7K) and Stars (42.1K) for the project. LambdaTest’s Cypress Tutorial covers step-by-step guides that will help you learn from the basics till you run automation tests on LambdaTest.

Chapters:

  1. What is Cypress? -
  2. Why Cypress? - Learn why Cypress might be a good choice for testing your web applications.
  3. Features of Cypress Testing - Learn about features that make Cypress a powerful and flexible tool for testing web applications.
  4. Cypress Drawbacks - Although Cypress has many strengths, it has a few limitations that you should be aware of.
  5. Cypress Architecture - Learn more about Cypress architecture and how it is designed to be run directly in the browser, i.e., it does not have any additional servers.
  6. Browsers Supported by Cypress - Cypress is built on top of the Electron browser, supporting all modern web browsers. Learn browsers that support Cypress.
  7. Selenium vs Cypress: A Detailed Comparison - Compare and explore some key differences in terms of their design and features.
  8. Cypress Learning: Best Practices - Take a deep dive into some of the best practices you should use to avoid anti-patterns in your automation tests.
  9. How To Run Cypress Tests on LambdaTest? - Set up a LambdaTest account, and now you are all set to learn how to run Cypress tests.

Certification

You can elevate your expertise with end-to-end testing using the Cypress automation framework and stay one step ahead in your career by earning a Cypress certification. Check out our Cypress 101 Certification.

YouTube

Watch this 3 hours of complete tutorial to learn the basics of Cypress and various Cypress commands with the Cypress testing at LambdaTest.

Run Cypress automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful