diff --git a/CHANGELOG.md b/CHANGELOG.md index 8403b0ac78..28fcfb863a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -92,6 +92,7 @@ ### Chores +- Added tests for currency display settings and stake-pool settings screens ([PR 2622](https://github.com/input-output-hk/daedalus/pull/2622)) - Removed "Alonzo tada" icon and "Alonzo countdown" screen ([PR 2708](https://github.com/input-output-hk/daedalus/pull/2708)) - Improved the Daedalus startup by avoiding unnecessary Cardano Node restarts ([PR 2716](https://github.com/input-output-hk/daedalus/pull/2716)) - Updated README with solution steps for the nix SSL issue ([PR 2727](https://github.com/input-output-hk/daedalus/pull/2727)) @@ -134,6 +135,7 @@ ### Chores +- Added tests for currency display settings and stake-pool settings screens ([PR 2622](https://github.com/input-output-hk/daedalus/pull/2622)) - Updated `cardano-wallet` to version `2021-09-29` which includes `cardano-node` 1.30.1 - Updated `trezor-connect` dependency to version `8.2.0` ([PR 2675](https://github.com/input-output-hk/daedalus/pull/2675)) diff --git a/package.json b/package.json index 57802061c4..f4c8528ed4 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "test:e2e:rerun:fail-fast": "yarn cucumber:rerun --require 'tests/setup-e2e.js' --require 'tests/**/e2e/**/*.js' --tags '@e2e and not @skip and not @wip'", "test:e2e:watch": "gulp test:e2e:watch", "test:e2e:watch:once": "KEEP_APP_AFTER_TESTS=true yarn test:e2e --tags '@e2e and @watch'", - "cucumber": "cross-env NODE_ENV=test cucumber-js --require 'tests/setup-common.js' --require-module @babel/register -f json:tests-report/report-data.json -f summary:tests-report/summary.log -f node_modules/cucumber-pretty:tests-report/results.log --format-options '{\"snippetInterface\": \"async-await\"}' -f node_modules/cucumber-pretty --format-options '{\"snippetInterface\": \"async-await\"}' -f rerun:tests/@rerun.txt", + "cucumber": "cross-env NODE_ENV=test cucumber-js --require 'tests/setup-common.js' --require-module @babel/register -f json:tests-report/report-data.json -f summary:tests-report/summary.log --format-options '{\"snippetInterface\": \"async-await\"}' -f @cucumber/pretty-formatter --format-options '{\"snippetInterface\": \"async-await\"}' -f rerun:tests/@rerun.txt", "cucumber:run": "yarn cucumber tests", "cucumber:fail-fast": "yarn cucumber tests --fail-fast", "cucumber:rerun": "yarn cucumber tests-report/@rerun.txt", @@ -81,6 +81,8 @@ "@babel/preset-flow": "7.16.0", "@babel/preset-react": "7.0.0", "@babel/register": "7.0.0", + "@cucumber/cucumber": "7.3.1", + "@cucumber/pretty-formatter": "1.0.0-alpha.1", "@dump247/storybook-state": "1.6.1", "@storybook/addon-actions": "5.3.14", "@storybook/addon-knobs": "5.3.14", @@ -102,8 +104,6 @@ "concurrently": "5.3.0", "cross-env": "7.0.2", "css-loader": "2.0.1", - "cucumber": "6.0.5", - "cucumber-pretty": "6.0.0", "del": "6.0.0", "electron-chromedriver": "16.0.0", "electron-connect": "0.6.3", @@ -159,7 +159,7 @@ "seedrandom": "3.0.5", "sinon": "9.2.2", "spawn-sync": "2.0.0", - "spectron": "14.0.0", + "spectron": "15.0.0", "style-loader": "0.23.1", "stylelint": "13.7.2", "stylelint-order": "4.1.0", diff --git a/tests/_utils/TestDecorator.js b/tests/_utils/TestDecorator.ts similarity index 100% rename from tests/_utils/TestDecorator.js rename to tests/_utils/TestDecorator.ts diff --git a/tests/addresses/e2e/steps/addresses.js b/tests/addresses/e2e/steps/addresses.ts similarity index 99% rename from tests/addresses/e2e/steps/addresses.js rename to tests/addresses/e2e/steps/addresses.ts index e46ac97307..4d15b8d4cd 100644 --- a/tests/addresses/e2e/steps/addresses.js +++ b/tests/addresses/e2e/steps/addresses.ts @@ -1,5 +1,5 @@ // @flow -import { Given, Then, When } from 'cucumber'; +import { Given, Then, When } from '@cucumber/cucumber'; import { expect } from 'chai'; import { find } from 'lodash'; import { getVisibleElementsCountForSelector } from '../../../common/e2e/steps/helpers'; diff --git a/tests/app/e2e/steps/about-dialog.js b/tests/app/e2e/steps/about-dialog.ts similarity index 94% rename from tests/app/e2e/steps/about-dialog.js rename to tests/app/e2e/steps/about-dialog.ts index 7b3d316a22..1fca35feca 100644 --- a/tests/app/e2e/steps/about-dialog.js +++ b/tests/app/e2e/steps/about-dialog.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import packageJson from '../../../../package.json'; import type { Daedalus } from '../../../types'; diff --git a/tests/app/e2e/steps/app-version-difference.js b/tests/app/e2e/steps/app-version-difference.ts similarity index 97% rename from tests/app/e2e/steps/app-version-difference.js rename to tests/app/e2e/steps/app-version-difference.ts index cd1704b267..d58838f3a4 100644 --- a/tests/app/e2e/steps/app-version-difference.js +++ b/tests/app/e2e/steps/app-version-difference.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { environment } from '../../../../source/main/environment'; import { getVisibleTextsForSelector } from '../../../common/e2e/steps/helpers'; diff --git a/tests/app/e2e/steps/cardano-node.js b/tests/app/e2e/steps/cardano-node.ts similarity index 91% rename from tests/app/e2e/steps/cardano-node.js rename to tests/app/e2e/steps/cardano-node.ts index 376f811eae..2e041773a6 100644 --- a/tests/app/e2e/steps/cardano-node.js +++ b/tests/app/e2e/steps/cardano-node.ts @@ -1,5 +1,5 @@ // @flow -import { Given, Then } from 'cucumber'; +import { Given, Then } from '@cucumber/cucumber'; import { CardanoNodeStates } from '../../../../source/common/types/cardano-node.types'; import { getCardanoNodeState, waitForCardanoNodeToExit } from './helpers'; diff --git a/tests/app/e2e/steps/daedalus-process.js b/tests/app/e2e/steps/daedalus-process.ts similarity index 97% rename from tests/app/e2e/steps/daedalus-process.js rename to tests/app/e2e/steps/daedalus-process.ts index 89648e554d..74b1b267a3 100644 --- a/tests/app/e2e/steps/daedalus-process.js +++ b/tests/app/e2e/steps/daedalus-process.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { waitUntilTextInSelector } from '../../../common/e2e/steps/helpers'; import { refreshClient, waitForCardanoNodeToExit, waitForDaedalusToExit } from './helpers'; @@ -69,4 +69,4 @@ When(/^I disconnect app$/, function() { this.client.execute(() => { daedalus.stores.networkStatus._setDisconnected(true); }); -}); \ No newline at end of file +}); diff --git a/tests/app/e2e/steps/data-layer-migration.js b/tests/app/e2e/steps/data-layer-migration.ts similarity index 93% rename from tests/app/e2e/steps/data-layer-migration.js rename to tests/app/e2e/steps/data-layer-migration.ts index 65a4376eb7..34860846fa 100644 --- a/tests/app/e2e/steps/data-layer-migration.js +++ b/tests/app/e2e/steps/data-layer-migration.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import type { Daedalus } from '../../../types'; declare var daedalus: Daedalus; diff --git a/tests/app/e2e/steps/helpers.js b/tests/app/e2e/steps/helpers.ts similarity index 97% rename from tests/app/e2e/steps/helpers.js rename to tests/app/e2e/steps/helpers.ts index 57873e60f3..331d3ccc98 100644 --- a/tests/app/e2e/steps/helpers.js +++ b/tests/app/e2e/steps/helpers.ts @@ -1,5 +1,5 @@ // @flow -import { When } from 'cucumber'; +import { When } from '@cucumber/cucumber'; import { getProcessesByName } from '../../../../source/main/utils/processes'; import type { Daedalus } from '../../../types'; diff --git a/tests/app/e2e/steps/inject-fault.js b/tests/app/e2e/steps/inject-fault.ts similarity index 88% rename from tests/app/e2e/steps/inject-fault.js rename to tests/app/e2e/steps/inject-fault.ts index 9029269e56..72c1fd48ac 100644 --- a/tests/app/e2e/steps/inject-fault.js +++ b/tests/app/e2e/steps/inject-fault.ts @@ -1,5 +1,5 @@ // @flow -import { When } from 'cucumber'; +import { When } from '@cucumber/cucumber'; import type { Daedalus } from '../../../types'; declare var daedalus: Daedalus; @@ -13,4 +13,4 @@ When(/^I inject fault named "([^"]*)"$/, async function(faultName) { throw e; }); }, faultName); -}); \ No newline at end of file +}); diff --git a/tests/app/e2e/steps/local-time-difference.js b/tests/app/e2e/steps/local-time-difference.ts similarity index 95% rename from tests/app/e2e/steps/local-time-difference.js rename to tests/app/e2e/steps/local-time-difference.ts index 5d684f51f8..469bc97f4a 100644 --- a/tests/app/e2e/steps/local-time-difference.js +++ b/tests/app/e2e/steps/local-time-difference.ts @@ -1,5 +1,5 @@ // @flow -import { Given, Then } from 'cucumber'; +import { Given, Then } from '@cucumber/cucumber'; import { expectTextInSelector } from '../../../common/e2e/steps/helpers'; import type { Daedalus } from '../../../types'; diff --git a/tests/app/e2e/steps/no-disk-space.js b/tests/app/e2e/steps/no-disk-space.ts similarity index 100% rename from tests/app/e2e/steps/no-disk-space.js rename to tests/app/e2e/steps/no-disk-space.ts diff --git a/tests/app/e2e/steps/node-restart.js b/tests/app/e2e/steps/node-restart.ts similarity index 93% rename from tests/app/e2e/steps/node-restart.js rename to tests/app/e2e/steps/node-restart.ts index 389a1c17ba..5f722ee583 100644 --- a/tests/app/e2e/steps/node-restart.js +++ b/tests/app/e2e/steps/node-restart.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { waitUntilTextInSelector } from '../../../common/e2e/steps/helpers'; import type { Daedalus } from '../../../types'; diff --git a/tests/app/e2e/steps/trouble-connecting-notification.js b/tests/app/e2e/steps/trouble-connecting-notification.ts similarity index 96% rename from tests/app/e2e/steps/trouble-connecting-notification.js rename to tests/app/e2e/steps/trouble-connecting-notification.ts index a95869a60c..69e02a4d5d 100644 --- a/tests/app/e2e/steps/trouble-connecting-notification.js +++ b/tests/app/e2e/steps/trouble-connecting-notification.ts @@ -1,5 +1,5 @@ // @flow -import { Then } from 'cucumber'; +import { Then } from '@cucumber/cucumber'; import { waitUntilTextInSelector } from '../../../common/e2e/steps/helpers'; import type { Daedalus } from '../../../types'; diff --git a/tests/app/e2e/steps/trouble-syncing-notification.js b/tests/app/e2e/steps/trouble-syncing-notification.ts similarity index 90% rename from tests/app/e2e/steps/trouble-syncing-notification.js rename to tests/app/e2e/steps/trouble-syncing-notification.ts index 3759204f3c..4dd8687d41 100644 --- a/tests/app/e2e/steps/trouble-syncing-notification.js +++ b/tests/app/e2e/steps/trouble-syncing-notification.ts @@ -1,5 +1,5 @@ // @flow -import { Then } from 'cucumber'; +import { Then } from '@cucumber/cucumber'; import { waitUntilTextInSelector } from '../../../common/e2e/steps/helpers'; import type { Daedalus } from '../../../types'; diff --git a/tests/assets/unit/assets.spec.js b/tests/assets/unit/assets.spec.ts similarity index 100% rename from tests/assets/unit/assets.spec.js rename to tests/assets/unit/assets.spec.ts diff --git a/tests/common/e2e/steps/config.js b/tests/common/e2e/steps/config.ts similarity index 100% rename from tests/common/e2e/steps/config.js rename to tests/common/e2e/steps/config.ts diff --git a/tests/common/e2e/steps/helpers.js b/tests/common/e2e/steps/helpers.ts similarity index 100% rename from tests/common/e2e/steps/helpers.js rename to tests/common/e2e/steps/helpers.ts diff --git a/tests/common/unit/networks.spec.js b/tests/common/unit/networks.spec.ts similarity index 100% rename from tests/common/unit/networks.spec.js rename to tests/common/unit/networks.spec.ts diff --git a/tests/common/unit/steps/mnemonics-form-validation.steps.js b/tests/common/unit/steps/mnemonics-form-validation.steps.ts similarity index 96% rename from tests/common/unit/steps/mnemonics-form-validation.steps.js rename to tests/common/unit/steps/mnemonics-form-validation.steps.ts index 899a44bce5..7ab38e60aa 100644 --- a/tests/common/unit/steps/mnemonics-form-validation.steps.js +++ b/tests/common/unit/steps/mnemonics-form-validation.steps.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { sampleSize } from 'lodash'; import sinon from 'sinon'; diff --git a/tests/delegation/e2e/steps/delegation-pending.js b/tests/delegation/e2e/steps/delegation-pending.ts similarity index 99% rename from tests/delegation/e2e/steps/delegation-pending.js rename to tests/delegation/e2e/steps/delegation-pending.ts index 2abdf2b9cb..41e0f3b359 100644 --- a/tests/delegation/e2e/steps/delegation-pending.js +++ b/tests/delegation/e2e/steps/delegation-pending.ts @@ -1,5 +1,5 @@ // @flow -import { Given, Then } from 'cucumber'; +import { Given, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { last } from 'lodash'; import type { Daedalus } from '../../../types'; diff --git a/tests/delegation/e2e/steps/delegation.js b/tests/delegation/e2e/steps/delegation.ts similarity index 99% rename from tests/delegation/e2e/steps/delegation.js rename to tests/delegation/e2e/steps/delegation.ts index c78adbfd78..661de17902 100644 --- a/tests/delegation/e2e/steps/delegation.js +++ b/tests/delegation/e2e/steps/delegation.ts @@ -1,5 +1,5 @@ // @flow -import { Given, Then } from 'cucumber'; +import { Given, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import BigNumber from 'bignumber.js'; import { navigateTo } from '../../../navigation/e2e/steps/helpers'; diff --git a/tests/delegation/e2e/steps/helpers.js b/tests/delegation/e2e/steps/helpers.ts similarity index 100% rename from tests/delegation/e2e/steps/helpers.js rename to tests/delegation/e2e/steps/helpers.ts diff --git a/tests/delegation/e2e/steps/rewards.js b/tests/delegation/e2e/steps/rewards.ts similarity index 97% rename from tests/delegation/e2e/steps/rewards.js rename to tests/delegation/e2e/steps/rewards.ts index a0c7faf016..964b8c53ff 100644 --- a/tests/delegation/e2e/steps/rewards.js +++ b/tests/delegation/e2e/steps/rewards.ts @@ -1,6 +1,6 @@ // @flow import fs from 'fs'; -import { When, Then } from 'cucumber'; +import { When, Then } from '@cucumber/cucumber'; import path from 'path'; import moment from 'moment'; import type { Daedalus } from '../../../types'; diff --git a/tests/delegation/e2e/steps/stake-pools.js b/tests/delegation/e2e/steps/stake-pools.ts similarity index 99% rename from tests/delegation/e2e/steps/stake-pools.js rename to tests/delegation/e2e/steps/stake-pools.ts index deda0239a5..915f54a36c 100644 --- a/tests/delegation/e2e/steps/stake-pools.js +++ b/tests/delegation/e2e/steps/stake-pools.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import BigNumber from 'bignumber.js/bignumber'; import { delegationCentreStakingHelper, getStakePoolByRanking } from './helpers'; diff --git a/tests/navigation/e2e/steps/general-settings.js b/tests/navigation/e2e/steps/general-settings.ts similarity index 87% rename from tests/navigation/e2e/steps/general-settings.js rename to tests/navigation/e2e/steps/general-settings.ts index e7de37b64f..57d858e880 100644 --- a/tests/navigation/e2e/steps/general-settings.js +++ b/tests/navigation/e2e/steps/general-settings.ts @@ -1,5 +1,5 @@ // @flow -import { Given, Then } from 'cucumber'; +import { Given, Then } from '@cucumber/cucumber'; import { navigateTo, waitUntilUrlEquals } from './helpers'; Given(/^I am on the General Settings "([^"]*)" screen$/, async function( @@ -12,4 +12,4 @@ Then(/^I should see General Settings "([^"]*)" screen$/, async function( screenName ) { return waitUntilUrlEquals.call(this, `/settings/${screenName}`); -}); \ No newline at end of file +}); diff --git a/tests/navigation/e2e/steps/helpers.js b/tests/navigation/e2e/steps/helpers.ts similarity index 100% rename from tests/navigation/e2e/steps/helpers.js rename to tests/navigation/e2e/steps/helpers.ts diff --git a/tests/navigation/e2e/steps/sidebar.js b/tests/navigation/e2e/steps/sidebar.ts similarity index 98% rename from tests/navigation/e2e/steps/sidebar.js rename to tests/navigation/e2e/steps/sidebar.ts index 177fe8c21b..6c08703b52 100644 --- a/tests/navigation/e2e/steps/sidebar.js +++ b/tests/navigation/e2e/steps/sidebar.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { sidebarHelpers } from './helpers'; import type { Daedalus } from '../../../types'; diff --git a/tests/news/e2e/steps/newsfeed-steps.js b/tests/news/e2e/steps/newsfeed-steps.ts similarity index 99% rename from tests/news/e2e/steps/newsfeed-steps.js rename to tests/news/e2e/steps/newsfeed-steps.ts index 6588f18b9d..c0542c352c 100644 --- a/tests/news/e2e/steps/newsfeed-steps.js +++ b/tests/news/e2e/steps/newsfeed-steps.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import { get } from 'lodash'; -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import moment from 'moment'; import newsDummyJson from '../documents/dummy-news.json'; diff --git a/tests/paper-wallets/e2e/steps/paper-wallets-certificate.js b/tests/paper-wallets/e2e/steps/paper-wallets-certificate.ts similarity index 99% rename from tests/paper-wallets/e2e/steps/paper-wallets-certificate.js rename to tests/paper-wallets/e2e/steps/paper-wallets-certificate.ts index 05e6431c1a..ace4546ec2 100644 --- a/tests/paper-wallets/e2e/steps/paper-wallets-certificate.js +++ b/tests/paper-wallets/e2e/steps/paper-wallets-certificate.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import path from 'path'; import { fillOutWalletSendForm } from '../../../wallets/e2e/steps/helpers'; diff --git a/tests/reporter.js b/tests/reporter.ts similarity index 100% rename from tests/reporter.js rename to tests/reporter.ts diff --git a/tests/settings/e2e/features/currency-display-settings.feature b/tests/settings/e2e/features/currency-display-settings.feature new file mode 100644 index 0000000000..b2c52225c3 --- /dev/null +++ b/tests/settings/e2e/features/currency-display-settings.feature @@ -0,0 +1,32 @@ +@e2e +Feature: Wallet currency display settings + + Background: + Given I have completed the basic setup + And I have the following wallets: + | name | + | Test Wallet | + + Scenario Outline: User selects alternative currency's to display wallet balance + Given I am on the General Settings "wallets" screen + And I open currency selection dropdown + When I select "" as the selected displayed currency + And I am on the "Test Wallet" wallet "summary" screen + Then I should see "" displayed beside wallet balance + + Examples: + | currency | ticker | + | Litecoin | LTC | + | Stellar | XLM | + + Scenario: User hits toggle button to show/not show ada wallet balance in other currency's + Given I am on the General Settings "wallets" screen + When I toggle the button off to change if I want to see my ada balance in other currency's + Then the currency selection box is hidden + And I am on the "Test Wallet" wallet "summary" screen + Then The wallet summary screen does not show ada balance in other currency's placeholder + When I am on the General Settings "wallets" screen + And I toggle the button on to change if I want to see my ada balance in other currency's + Then the currency selection box is visible + And I am on the "Test Wallet" wallet "summary" screen + Then The wallet summary screen does show ada balance in other currency's placeholder diff --git a/tests/settings/e2e/features/stakepool-settings.feature b/tests/settings/e2e/features/stakepool-settings.feature new file mode 100644 index 0000000000..f91fdbddf8 --- /dev/null +++ b/tests/settings/e2e/features/stakepool-settings.feature @@ -0,0 +1,35 @@ +@e2e +Feature: Stake-pool server settings + + Background: + Given I have completed the basic setup + And I have the following wallets: + | name | + | Test Wallet | + + Scenario: Navigating to Stake-pool settings screen and selecting custom stake-pool server + Given I am on the General Settings "stake-pools" screen + When I open stake pool server dropdown + When I select custom server + And The smash server input textBox is visible + And And I enter a custom server URL as custom server option + And I focus the stake-pool custom server input box submit button and then click it + And I see the 'Your changes have been saved' success message + And I am on the Delegation "stake-pools" screen + Then The custom server I chose earlier is visible on stake-pool screen above stake-pool list and is clickable + And I am brought back to the stake-pool server settings screen + + Scenario: Verify stake-pool custom server text box is visible and error message verification + Given I am on the General Settings "stake-pools" screen + When I open stake pool server dropdown + And I select custom server option + Then The smash server input textBox is visible + And I enter invalid url "www.test" in to the custom server input-box + Then Stake-pool custom input box error message "https://" is displayed + And I delete values in smash server custom url input box + And I enter invalid url "https://test.com/path" in to the custom server input-box + Then Stake-pool custom input box error message "protocol and hostname" is displayed + And I delete values in smash server custom url input box + And I enter invalid server "https://www.google.ie" containing https + And I focus the stake-pool custom server input box submit button and then click it + Then I see the "This url is not a valid SMASH server" error message displayed diff --git a/tests/settings/e2e/steps/basic-setup.js b/tests/settings/e2e/steps/basic-setup.ts similarity index 91% rename from tests/settings/e2e/steps/basic-setup.js rename to tests/settings/e2e/steps/basic-setup.ts index 3d87f4bd3e..3e81a5ddfb 100644 --- a/tests/settings/e2e/steps/basic-setup.js +++ b/tests/settings/e2e/steps/basic-setup.ts @@ -1,5 +1,5 @@ // @flow -import { Given } from 'cucumber'; +import { Given } from '@cucumber/cucumber'; import { initialSettingsHelpers, migrationHelpers, termsOfUseHelpers } from './helpers'; const { acceptMigration } = migrationHelpers; diff --git a/tests/settings/e2e/steps/currency-display-settings.ts b/tests/settings/e2e/steps/currency-display-settings.ts new file mode 100644 index 0000000000..c076fd4d32 --- /dev/null +++ b/tests/settings/e2e/steps/currency-display-settings.ts @@ -0,0 +1,39 @@ +// @flow +import { When, Then } from '@cucumber/cucumber'; +import en from '../../../../source/renderer/app/i18n/locales/en-US.json'; + +const SELECT_CURRENCY_TEXT = en['settings.wallets.currency.selectLabel']; + +const CONVERTED_CURRENCY_WALLET_DISPLAY_GENERAL = '//*[@class="WalletSummaryCurrency_currencyRate"]'; +const DISPLAY_BALANCE_OTHER_CURRENCY_TOGGLE_STATUS_OFF = '//*[@class="SimpleSwitch_switch SwitchOverrides_switch"]'; +const DISPLAY_BALANCE_OTHER_CURRENCY_TOGGLE_STATUS_ON = '//*[@class="NormalSwitch_component SimpleSwitch_root SwitchOverrides_root SimpleSwitch_checked SwitchOverrides_checked"]'; +const SELECT_CURRENCY_DROPDOWN = `//*[@label="${SELECT_CURRENCY_TEXT}"]`; + +When(/^I open currency selection dropdown$/, function() { + return this.client.click(SELECT_CURRENCY_DROPDOWN); +}); + +When(/^I select "([^"]*)" as the selected displayed currency$/, function(currency) { + return this.client.click(`//*[contains(text(), "${currency}")]`); +}); + +Then(/^I should see "([^"]*)" displayed beside wallet balance$/, function(ticker) { + return this.client.waitForVisible(`//*[@class="WalletSummaryCurrency_currencyRate" and text()="${ticker}"]`); +}); + +When(/^I toggle the button (on|off) to change if I want to see my ada balance in other currency's$/, function(switchStatus) { + const selector = switchStatus === 'on' + ? DISPLAY_BALANCE_OTHER_CURRENCY_TOGGLE_STATUS_OFF + : DISPLAY_BALANCE_OTHER_CURRENCY_TOGGLE_STATUS_ON; + return this.waitAndClick(selector); +}); + +Then(/^the currency selection box is (hidden|visible)$/, function(state) { + const invisibility:boolean = state !== 'visible' + return this.client.waitForVisible(SELECT_CURRENCY_DROPDOWN, null, invisibility); +}); + +Then(/^The wallet summary screen (does|does not) show ada balance in other currency's placeholder$/, function(status) { + const invisible:boolean = status !== 'does' + return this.client.waitForVisible(CONVERTED_CURRENCY_WALLET_DISPLAY_GENERAL, null, invisible); +}); diff --git a/tests/settings/e2e/steps/custom-formats.js b/tests/settings/e2e/steps/custom-formats.ts similarity index 98% rename from tests/settings/e2e/steps/custom-formats.js rename to tests/settings/e2e/steps/custom-formats.ts index f4a68e7a1b..ebc66b9b5d 100644 --- a/tests/settings/e2e/steps/custom-formats.js +++ b/tests/settings/e2e/steps/custom-formats.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { chooseCustomOptionsByValue, diff --git a/tests/settings/e2e/steps/general-settings.js b/tests/settings/e2e/steps/general-settings.ts similarity index 96% rename from tests/settings/e2e/steps/general-settings.js rename to tests/settings/e2e/steps/general-settings.ts index a56f911080..57e694091c 100644 --- a/tests/settings/e2e/steps/general-settings.js +++ b/tests/settings/e2e/steps/general-settings.ts @@ -1,5 +1,5 @@ // @flow -import { When, Then } from 'cucumber'; +import { When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { camelCase } from 'lodash'; diff --git a/tests/settings/e2e/steps/helpers.js b/tests/settings/e2e/steps/helpers.ts similarity index 100% rename from tests/settings/e2e/steps/helpers.js rename to tests/settings/e2e/steps/helpers.ts diff --git a/tests/settings/e2e/steps/select-language.js b/tests/settings/e2e/steps/select-language.ts similarity index 96% rename from tests/settings/e2e/steps/select-language.js rename to tests/settings/e2e/steps/select-language.ts index ab3bb07eef..9691ca59b2 100644 --- a/tests/settings/e2e/steps/select-language.js +++ b/tests/settings/e2e/steps/select-language.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { initialSettingsHelpers } from './helpers'; import type { Daedalus } from '../../../types'; diff --git a/tests/settings/e2e/steps/settings.js b/tests/settings/e2e/steps/settings.ts similarity index 98% rename from tests/settings/e2e/steps/settings.js rename to tests/settings/e2e/steps/settings.ts index e2208c3b9f..21cc1141e4 100644 --- a/tests/settings/e2e/steps/settings.js +++ b/tests/settings/e2e/steps/settings.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { navigateTo } from '../../../navigation/e2e/steps/helpers'; import { waitUntilWaletNamesEqual } from '../../../wallets/e2e/steps/helpers'; diff --git a/tests/settings/e2e/steps/stakepool-settings.ts b/tests/settings/e2e/steps/stakepool-settings.ts new file mode 100644 index 0000000000..c5d490c4fd --- /dev/null +++ b/tests/settings/e2e/steps/stakepool-settings.ts @@ -0,0 +1,89 @@ +import { When, Then } from '@cucumber/cucumber'; +import enCopy from '../../../../source/renderer/app/i18n/locales/en-US.json'; +import { environment } from '../../../../source/main/environment'; + +const { IsTestnet } = environment; + +const CUSTOM_SERVER_TEXT = enCopy['settings.stakePools.smash.select.customServer']; +const INVALID_SMASH_SERVER_TEXT = enCopy['api.errors.invalidSmashServer']; +const OFF_CHAIN_METADATA_SERVER_TEXT = enCopy['settings.stakePools.smash.select.label']; +const SMASH_SERVER_URL_TEXT = enCopy['settings.stakePools.smashUrl.input.label']; +const STAKE_POOL_TEXT = enCopy['settings.menu.stakePools.link.label']; +const YOUR_CHANGES_HAVE_BEEN_SAVED_SUCCESS_MESSAGE = enCopy['inline.editing.input.changesSaved']; + +const CUSTOM_SERVER_DROPDOWN_OPTION = `//*[@class="SimpleInput_customValueWrapper"]//*[@value="${CUSTOM_SERVER_TEXT}"]`; +const DAEDALUS_TOP_BAR_LOGO = '//*[@class="TopBar_topBar TopBar_withoutWallet"]'; +const NOT_A_VALID_SMASH_SERVER_ERROR_MESSAGE_ACTIVATED = `//*[@class="InlineEditingInput_errorMessage" and text()="${INVALID_SMASH_SERVER_TEXT}"]`; +const OFF_CHAIN_METADATA_SERVER_SMASH_LABEL = `//*[contains(text(), "${OFF_CHAIN_METADATA_SERVER_TEXT}")]`; +const SMASH_SERVER_URL_INPUT_BOX = `//*[@label="${SMASH_SERVER_URL_TEXT}"]`; +const STAKE_POOL_CUSTOM_SERVER_INPUT_BOX_SUBMIT_BUTTON = '//*[@class="InlineEditingInput_button InlineEditingInput_okButton SimpleButton_root ButtonOverrides_root"]'; +const STAKE_POOL_CUSTOM_SERVER_INPUT_BOX_X_BUTTON = '//*[@class="InlineEditingInput_button InlineEditingInput_cancelButton SimpleButton_root ButtonOverrides_root"]'; +const STAKE_POOL_SERVER_DROPDOWN = '//*[@class="SimpleFormField_inputWrapper"]'; +const STAKE_POOL_SERVER_DROPDOWN_CUSTOM_OPTION = `//*[@class="ScrollbarsCustom-Content"]//span[text()="${CUSTOM_SERVER_TEXT}"]`; +const STAKE_POOLS_SUBMENU_SETTINGS = `//*[@class="SettingsMenu_component"]//button[text()="${STAKE_POOL_TEXT}"]`; + +When(/^I select custom server$/, function() { + return this.waitAndClick(CUSTOM_SERVER_DROPDOWN_OPTION); +}); + +Then(/^The custom server I chose earlier is visible on stake-pool screen above stake-pool list and is clickable$/, function() { + return this.waitAndClick(`//*[@class="StakePools_smashSettings"]//span[text()="Moderated by ${SERVER_URL}"]`); +}); + +Then(/^I am brought back to the stake-pool server settings screen$/, function() { + return this.client.waitForVisible(OFF_CHAIN_METADATA_SERVER_SMASH_LABEL); +}); + +When(/^I select custom server option$/, function() { + return this.waitAndClick(STAKE_POOL_SERVER_DROPDOWN_CUSTOM_OPTION); +}); + +When(/^I open stake pool server dropdown$/, function() { + return this.waitAndClick(STAKE_POOL_SERVER_DROPDOWN); +}); + +Then(/^The smash server input textBox is visible$/, function() { + return this.client.waitForVisible(SMASH_SERVER_URL_INPUT_BOX); +}); + +When(/^And I enter a custom server URL as custom server option$/, function() { + let SERVER_URL = "https://smash.cardano-testnet.iohkdev.io/"; + if (IsTestnet) { + SERVER_URL = "https://smash.cardano-mainnet.iohk.io"; + } + this.client.setValue(SMASH_SERVER_URL_INPUT_BOX, SERVER_URL); +}); + +When(/^I enter invalid url "([^"]*)" in to the custom server input-box$/, function(invalidUrl) { + this.client.setValue(SMASH_SERVER_URL_INPUT_BOX, invalidUrl); +}); + +Then(/^Stake-pool custom input box error message "([^"]*)" is displayed$/, function(message) { + return this.client.waitForVisible(`//div[contains(text(), "${message}")]`); +}); + +When(/^I enter invalid server "([^"]*)" containing https$/, function(value) { + this.client.setValue(SMASH_SERVER_URL_INPUT_BOX, value); +}); + +When(/^I delete values in smash server custom url input box$/, function() { + return this.waitAndClick(STAKE_POOL_CUSTOM_SERVER_INPUT_BOX_X_BUTTON); +}); + +When(/^I focus the stake-pool custom server input box submit button and then click it$/, async function() { + // This step is necessary as otherwise the error message receives the click + await this.waitAndClick(DAEDALUS_TOP_BAR_LOGO); + return this.waitAndClick(STAKE_POOL_CUSTOM_SERVER_INPUT_BOX_SUBMIT_BUTTON); +}); + +Then(/^I see the "This url is not a valid SMASH server" error message displayed$/, function() { + return this.client.waitForVisible(NOT_A_VALID_SMASH_SERVER_ERROR_MESSAGE_ACTIVATED); +}); + +When(/^I click on stakepool subtab$/, function() { + return this.waitAndClick(STAKE_POOLS_SUBMENU_SETTINGS); +}); + +Then(/^I see the 'Your changes have been saved' success message$/, function() { + return this.client.waitForVisible(`//*[@class="StakePoolsSettings_savingResultLabel" and text()="${YOUR_CHANGES_HAVE_BEEN_SAVED_SUCCESS_MESSAGE}"]`); +}); diff --git a/tests/settings/e2e/steps/terms-of-use.js b/tests/settings/e2e/steps/terms-of-use.ts similarity index 96% rename from tests/settings/e2e/steps/terms-of-use.js rename to tests/settings/e2e/steps/terms-of-use.ts index 40b5f7b33d..7895f9e58c 100644 --- a/tests/settings/e2e/steps/terms-of-use.js +++ b/tests/settings/e2e/steps/terms-of-use.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { termsOfUseHelpers } from './helpers'; import type { Daedalus } from '../../../types'; diff --git a/tests/settings/unit/steps/file-names.js b/tests/settings/unit/steps/file-names.ts similarity index 97% rename from tests/settings/unit/steps/file-names.js rename to tests/settings/unit/steps/file-names.ts index 74307084cb..6fe4bac03a 100644 --- a/tests/settings/unit/steps/file-names.js +++ b/tests/settings/unit/steps/file-names.ts @@ -1,4 +1,4 @@ -import { Given, Then } from 'cucumber'; +import { Given, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { pickBy, identity } from 'lodash'; import { diff --git a/tests/setup-common.js b/tests/setup-common.ts similarity index 83% rename from tests/setup-common.js rename to tests/setup-common.ts index f7387e106d..88bf5fd2e7 100644 --- a/tests/setup-common.js +++ b/tests/setup-common.ts @@ -1,4 +1,4 @@ -import { After, Before } from 'cucumber'; +import { After, Before } from '@cucumber/cucumber'; import sinon from 'sinon'; import { environment } from '../source/main/environment'; diff --git a/tests/setup-e2e.js b/tests/setup-e2e.ts similarity index 85% rename from tests/setup-e2e.js rename to tests/setup-e2e.ts index fb925ae7f4..4573270c95 100644 --- a/tests/setup-e2e.js +++ b/tests/setup-e2e.ts @@ -8,7 +8,7 @@ import { After, AfterAll, setDefaultTimeout, -} from 'cucumber'; +} from '@cucumber/cucumber'; import electronPath from 'electron'; import fakeDialog from 'spectron-fake-dialog'; import { includes } from 'lodash'; @@ -33,11 +33,29 @@ global.environment = environment; /* eslint-disable consistent-return */ declare var daedalus: Daedalus; -const context = {}; + +const application = new Application({ + path: electronPath, + args: [path.join(__dirname, '..')], + requireName: 'spectronRequire', + env: Object.assign({}, process.env, { + NODE_ENV: TEST, + }), + startTimeout: DEFAULT_TIMEOUT, + waitTimeout: DEFAULT_TIMEOUT, + chromeDriverArgs: ["--verbose"], + + chromeDriverLogPath: path.join( + __dirname, + '../logs/chrome-driver.log' + ), + webdriverLogPath: path.join(__dirname, '../logs/webdriver'), +}); + let scenariosCount = 0; const printMainProcessLogs = () => - context.app.client.getMainProcessLogs().then(logs => { + application.client.getMainProcessLogs().then(logs => { // eslint-disable-next-line no-console console.log('========= DAEDALUS LOGS ========='); // eslint-disable-next-line no-console @@ -52,32 +70,6 @@ const defaultWalletKeyFilePath = path.resolve( './wallets/e2e/documents/default-wallet.key' ); -const startApp = async () => { - const app = new Application({ - path: electronPath, - args: ['./dist/main/index.js'], - requireName: 'spectronRequire', - env: Object.assign({}, process.env, { - NODE_ENV: TEST, - }), - startTimeout: DEFAULT_TIMEOUT, - waitTimeout: DEFAULT_TIMEOUT, - chromeDriverLogPath: path.join( - __dirname, - '../logs/chrome-driver.log' - ), - webdriverLogPath: path.join(__dirname, '../logs/webdriver'), - }); - fakeDialog.apply(app); - await app.start(); - // TODO: develop mock that accept custom value to return - fakeDialog.mock([ - { method: 'showOpenDialog', value: [defaultWalletKeyFilePath] }, - ]); - await app.client.waitUntilWindowLoaded(); - return app; -}; - // The cucumber timeout should be high (and never reached in best case) // because the errors thrown by webdriver.io timeouts are more descriptive // and helpful than "this step timed out after 5 seconds" messages @@ -89,7 +81,14 @@ function getTagNames(testCase) { // Boot up the electron app before all features BeforeAll({ timeout: 5 * 60 * 1000 }, async () => { - context.app = await startApp(); + await application.start(); + fakeDialog.apply(application); + // TODO: develop mock that accept custom value to return + fakeDialog.mock([ + { method: 'showOpenDialog', value: [defaultWalletKeyFilePath] }, + ]); + await application.client.waitUntilWindowLoaded(); + return true; }); // Skip / Execute test depending on node integration @@ -102,9 +101,9 @@ Before(async function(testCase) { // Make the electron app accessible in each scenario context Before({ tags: '@e2e', timeout: DEFAULT_TIMEOUT * 2 }, async function(testCase) { const tags = getTagNames(testCase); - this.app = context.app; - this.client = context.app.client; - this.browserWindow = context.app.browserWindow; + this.app = application; + this.client = application.client; + this.browserWindow = application.browserWindow; // Set timeouts of various operations: @@ -194,8 +193,8 @@ Before({ tags: '@e2e' }, function() { // this ensures that the spectron instance of the app restarts // after the node update acceptance test shuts it down via 'kill-process' // eslint-disable-next-line prefer-arrow-callback -After({ tags: '@restartApp' }, async function() { - context.app = await startApp(); +After({ tags: '@restartApp' }, () => { + return application.stop(); }); // this ensures that the reset-backend call successfully executes @@ -217,7 +216,7 @@ After({ tags: '@e2e' }, async function({ sourceLocation, result }) { if (result.status === 'failed') { const testName = getTestNameFromTestFile(sourceLocation.uri); const file = generateScreenshotFilePath(testName); - await saveScreenshot(context.app, file); + await saveScreenshot(application, file); await printMainProcessLogs(); } }); @@ -232,13 +231,13 @@ After({ tags: '@rewardsCsv' }, async function() { // eslint-disable-next-line prefer-arrow-callback AfterAll(async function() { - const allWindowsClosed = (await context.app.client.getWindowCount()) === 0; - if (allWindowsClosed || !context.app.running) return; + const allWindowsClosed = (await application.client.getWindowCount()) === 0; + if (allWindowsClosed || !application.running) return; if (scenariosCount === 0) { await printMainProcessLogs(); } if (process.env.KEEP_APP_AFTER_TESTS === 'true') { return; } - return context.app.stop(); + return application.stop(); }); diff --git a/tests/transactions/e2e/steps/transactions.js b/tests/transactions/e2e/steps/transactions.ts similarity index 99% rename from tests/transactions/e2e/steps/transactions.js rename to tests/transactions/e2e/steps/transactions.ts index dedb408c12..021ae57424 100644 --- a/tests/transactions/e2e/steps/transactions.js +++ b/tests/transactions/e2e/steps/transactions.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import BigNumber from 'bignumber.js/bignumber'; import { DECIMAL_PLACES_IN_ADA, LOVELACES_PER_ADA } from '../../../../source/renderer/app/config/numbersConfig'; diff --git a/tests/transactions/e2e/steps/utxos.js b/tests/transactions/e2e/steps/utxos.ts similarity index 98% rename from tests/transactions/e2e/steps/utxos.js rename to tests/transactions/e2e/steps/utxos.ts index 2da0c7963b..162f24d6f7 100644 --- a/tests/transactions/e2e/steps/utxos.js +++ b/tests/transactions/e2e/steps/utxos.ts @@ -1,5 +1,5 @@ // @flow -import { Then } from 'cucumber'; +import { Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { getVisibleTextsForSelector } from '../../../common/e2e/steps/helpers'; import { getWalletUtxosTotalAmount } from '../../../../source/renderer/app/utils/utxoUtils'; diff --git a/tests/transactions/unit/steps/helpers.js b/tests/transactions/unit/steps/helpers.ts similarity index 100% rename from tests/transactions/unit/steps/helpers.js rename to tests/transactions/unit/steps/helpers.ts diff --git a/tests/transactions/unit/steps/utxos-chart.js b/tests/transactions/unit/steps/utxos-chart.ts similarity index 98% rename from tests/transactions/unit/steps/utxos-chart.js rename to tests/transactions/unit/steps/utxos-chart.ts index d588a86ccd..0dde7d9084 100644 --- a/tests/transactions/unit/steps/utxos-chart.js +++ b/tests/transactions/unit/steps/utxos-chart.ts @@ -1,4 +1,4 @@ -import { Given, Then } from 'cucumber'; +import { Given, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { formattedAmountToLovelace, diff --git a/tests/types.js b/tests/types.ts similarity index 95% rename from tests/types.js rename to tests/types.ts index cc09c76a2d..41e1384ffc 100644 --- a/tests/types.js +++ b/tests/types.ts @@ -1,5 +1,5 @@ // @flow -import { defineParameterType } from 'cucumber'; +import { defineParameterType } from '@cucumber/cucumber'; import type { Api } from '../source/renderer/app/api'; import type { ActionsMap } from '../source/renderer/app/actions'; import type { StoresMap } from '../source/renderer/app/stores'; diff --git a/tests/wallets/e2e/steps/balance-wallets-notification.js b/tests/wallets/e2e/steps/balance-wallets-notification.ts similarity index 93% rename from tests/wallets/e2e/steps/balance-wallets-notification.js rename to tests/wallets/e2e/steps/balance-wallets-notification.ts index 64e61a55c8..6eb5244b06 100644 --- a/tests/wallets/e2e/steps/balance-wallets-notification.js +++ b/tests/wallets/e2e/steps/balance-wallets-notification.ts @@ -1,5 +1,5 @@ // @flow -import { Then } from 'cucumber'; +import { Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import type { Daedalus } from '../../../types'; diff --git a/tests/wallets/e2e/steps/create-wallet.js b/tests/wallets/e2e/steps/create-wallet.ts similarity index 98% rename from tests/wallets/e2e/steps/create-wallet.js rename to tests/wallets/e2e/steps/create-wallet.ts index 18ed3c4f6b..f7dc7422c4 100644 --- a/tests/wallets/e2e/steps/create-wallet.js +++ b/tests/wallets/e2e/steps/create-wallet.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { addWalletPage } from './helpers'; import type { Daedalus } from '../../../types'; diff --git a/tests/wallets/e2e/steps/delete-wallet.js b/tests/wallets/e2e/steps/delete-wallet.ts similarity index 95% rename from tests/wallets/e2e/steps/delete-wallet.js rename to tests/wallets/e2e/steps/delete-wallet.ts index a75d135640..ae2409901a 100644 --- a/tests/wallets/e2e/steps/delete-wallet.js +++ b/tests/wallets/e2e/steps/delete-wallet.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import type { Daedalus } from '../../../types'; declare var daedalus: Daedalus; diff --git a/tests/wallets/e2e/steps/helpers.js b/tests/wallets/e2e/steps/helpers.ts similarity index 100% rename from tests/wallets/e2e/steps/helpers.js rename to tests/wallets/e2e/steps/helpers.ts diff --git a/tests/wallets/e2e/steps/import-and-migrate-wallets.js b/tests/wallets/e2e/steps/import-and-migrate-wallets.ts similarity index 99% rename from tests/wallets/e2e/steps/import-and-migrate-wallets.js rename to tests/wallets/e2e/steps/import-and-migrate-wallets.ts index 0f8a6f852a..c7ba4a887e 100644 --- a/tests/wallets/e2e/steps/import-and-migrate-wallets.js +++ b/tests/wallets/e2e/steps/import-and-migrate-wallets.ts @@ -1,7 +1,7 @@ // @flow import fs from 'fs'; import path from 'path'; -import { When, Then, Given } from 'cucumber'; +import { When, Then, Given } from '@cucumber/cucumber'; import { expect } from 'chai'; import { difference } from 'lodash'; import { MAX_ADA_WALLETS_COUNT } from '../../../../source/renderer/app/config/numbersConfig'; diff --git a/tests/wallets/e2e/steps/recovery-phrase-verification-steps.js b/tests/wallets/e2e/steps/recovery-phrase-verification-steps.ts similarity index 98% rename from tests/wallets/e2e/steps/recovery-phrase-verification-steps.js rename to tests/wallets/e2e/steps/recovery-phrase-verification-steps.ts index 59a1ac12d6..3f06c0e911 100644 --- a/tests/wallets/e2e/steps/recovery-phrase-verification-steps.js +++ b/tests/wallets/e2e/steps/recovery-phrase-verification-steps.ts @@ -1,4 +1,4 @@ -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; const SETTINGS_PAGE_STATUS_SELECTOR = '.WalletRecoveryPhraseVerificationWidget_status'; const SETTINGS_PAGE_BUTTON_SELECTOR = `${SETTINGS_PAGE_STATUS_SELECTOR} .WalletRecoveryPhraseVerificationWidget_statusButton`; diff --git a/tests/wallets/e2e/steps/restore-wallet.js b/tests/wallets/e2e/steps/restore-wallet.ts similarity index 98% rename from tests/wallets/e2e/steps/restore-wallet.js rename to tests/wallets/e2e/steps/restore-wallet.ts index 54b69ef708..26c00c0958 100644 --- a/tests/wallets/e2e/steps/restore-wallet.js +++ b/tests/wallets/e2e/steps/restore-wallet.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { isActiveWalletBeingRestored, diff --git a/tests/wallets/e2e/steps/transfer-funds-wizard.js b/tests/wallets/e2e/steps/transfer-funds-wizard.ts similarity index 99% rename from tests/wallets/e2e/steps/transfer-funds-wizard.js rename to tests/wallets/e2e/steps/transfer-funds-wizard.ts index 1965b0020d..c180a37b76 100644 --- a/tests/wallets/e2e/steps/transfer-funds-wizard.js +++ b/tests/wallets/e2e/steps/transfer-funds-wizard.ts @@ -1,5 +1,5 @@ // @flow -import { When, Then } from 'cucumber'; +import { When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import BigNumber from 'bignumber.js/bignumber'; import { formattedWalletAmount } from '../../../../source/renderer/app/utils/formatters'; diff --git a/tests/wallets/e2e/steps/wallet-not-responding.js b/tests/wallets/e2e/steps/wallet-not-responding.ts similarity index 95% rename from tests/wallets/e2e/steps/wallet-not-responding.js rename to tests/wallets/e2e/steps/wallet-not-responding.ts index d285a6a621..1d66a65cac 100644 --- a/tests/wallets/e2e/steps/wallet-not-responding.js +++ b/tests/wallets/e2e/steps/wallet-not-responding.ts @@ -1,5 +1,5 @@ // @flow -import { When, Then } from 'cucumber'; +import { When, Then } from '@cucumber/cucumber'; import type { Daedalus } from '../../../types'; import { WalletSyncStateStatuses } from '../../../../source/renderer/app/domains/Wallet.js'; diff --git a/tests/wallets/e2e/steps/wallets-limit.js b/tests/wallets/e2e/steps/wallets-limit.ts similarity index 97% rename from tests/wallets/e2e/steps/wallets-limit.js rename to tests/wallets/e2e/steps/wallets-limit.ts index 688d0b3ece..8e95d95c67 100644 --- a/tests/wallets/e2e/steps/wallets-limit.js +++ b/tests/wallets/e2e/steps/wallets-limit.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { createWallets, getWalletByName } from './helpers'; import { MAX_ADA_WALLETS_COUNT } from '../../../../source/renderer/app/config/numbersConfig'; diff --git a/tests/wallets/e2e/steps/wallets-ordering.js b/tests/wallets/e2e/steps/wallets-ordering.ts similarity index 90% rename from tests/wallets/e2e/steps/wallets-ordering.js rename to tests/wallets/e2e/steps/wallets-ordering.ts index 5c87cc5901..0a8a06d1f4 100644 --- a/tests/wallets/e2e/steps/wallets-ordering.js +++ b/tests/wallets/e2e/steps/wallets-ordering.ts @@ -1,5 +1,5 @@ // @flow -import { Then } from 'cucumber'; +import { Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import type { Daedalus } from '../../../types'; diff --git a/tests/wallets/e2e/steps/wallets.js b/tests/wallets/e2e/steps/wallets.ts similarity index 99% rename from tests/wallets/e2e/steps/wallets.js rename to tests/wallets/e2e/steps/wallets.ts index bbdcd35dcd..d71dc601f0 100644 --- a/tests/wallets/e2e/steps/wallets.js +++ b/tests/wallets/e2e/steps/wallets.ts @@ -1,5 +1,5 @@ // @flow -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { createWallets, diff --git a/tests/wallets/unit/steps/mnemonics.js b/tests/wallets/unit/steps/mnemonics.ts similarity index 98% rename from tests/wallets/unit/steps/mnemonics.js rename to tests/wallets/unit/steps/mnemonics.ts index 89e590b614..40f8a3a6b8 100644 --- a/tests/wallets/unit/steps/mnemonics.js +++ b/tests/wallets/unit/steps/mnemonics.ts @@ -1,7 +1,7 @@ // @flow import readline from 'readline'; import { expect } from 'chai'; -import { Given, When, Then } from 'cucumber'; +import { Given, When, Then } from '@cucumber/cucumber'; import { range, concat } from 'lodash'; import { generateAccountMnemonics, generateAdditionalMnemonics, scrambleMnemonics, unscrambleMnemonics } from '../../../../source/renderer/app/api/utils/mnemonics'; import { mnemonicToSeedHex, getScrambledInput, generateMnemonic } from '../../../../source/renderer/app/utils/crypto'; diff --git a/tests/wallets/unit/steps/spending-password.js b/tests/wallets/unit/steps/spending-password.ts similarity index 92% rename from tests/wallets/unit/steps/spending-password.js rename to tests/wallets/unit/steps/spending-password.ts index e34bc6a772..88b4f30972 100644 --- a/tests/wallets/unit/steps/spending-password.js +++ b/tests/wallets/unit/steps/spending-password.ts @@ -1,4 +1,4 @@ -import { Given, Then } from 'cucumber'; +import { Given, Then } from '@cucumber/cucumber'; import { expect } from 'chai'; import { isValidSpendingPassword } from '../../../../source/renderer/app/utils/validations'; diff --git a/tests/wallets/unit/wallet-utils.spec.js b/tests/wallets/unit/wallet-utils.spec.ts similarity index 100% rename from tests/wallets/unit/wallet-utils.spec.js rename to tests/wallets/unit/wallet-utils.spec.ts diff --git a/yarn.lock b/yarn.lock index b82fb6c08e..cba7416863 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1617,13 +1617,6 @@ core-js-pure "^3.19.0" regenerator-runtime "^0.13.4" -"@babel/runtime-corejs3@^7.8.3": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.11.2.tgz#02c3029743150188edeb66541195f54600278419" - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" - "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" @@ -1716,6 +1709,109 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@cucumber/create-meta@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@cucumber/create-meta/-/create-meta-5.0.0.tgz#baea1a40ec823881eeefc29a523d6c87d13f4016" + dependencies: + "@cucumber/messages" "^16.0.0" + +"@cucumber/cucumber-expressions@^12.1.1": + version "12.1.3" + resolved "https://registry.yarnpkg.com/@cucumber/cucumber-expressions/-/cucumber-expressions-12.1.3.tgz#e7549fb63a815796a9f9ab96baf0c338f84540d3" + dependencies: + regexp-match-indices "1.0.2" + +"@cucumber/cucumber@7.3.1": + version "7.3.1" + resolved "https://registry.npmjs.org/@cucumber/cucumber/-/cucumber-7.3.1.tgz#1339abc92044f865043eceb2993da15cee0cd255" + dependencies: + "@cucumber/create-meta" "^5.0.0" + "@cucumber/cucumber-expressions" "^12.1.1" + "@cucumber/gherkin" "^19.0.3" + "@cucumber/gherkin-streams" "^2.0.2" + "@cucumber/html-formatter" "^15.0.2" + "@cucumber/messages" "^16.0.1" + "@cucumber/tag-expressions" "^3.0.1" + assertion-error-formatter "^3.0.0" + bluebird "^3.7.2" + capital-case "^1.0.4" + cli-table3 "^0.6.0" + colors "^1.4.0" + commander "^7.0.0" + create-require "^1.1.1" + duration "^0.2.2" + durations "^3.4.2" + figures "^3.2.0" + glob "^7.1.6" + indent-string "^4.0.0" + is-generator "^1.0.3" + is-stream "^2.0.0" + knuth-shuffle-seeded "^1.0.6" + lodash "^4.17.21" + mz "^2.7.0" + progress "^2.0.3" + resolve "^1.19.0" + resolve-pkg "^2.0.0" + stack-chain "^2.0.0" + stacktrace-js "^2.0.2" + string-argv "^0.3.1" + tmp "^0.2.1" + util-arity "^1.1.0" + verror "^1.10.0" + +"@cucumber/gherkin-streams@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@cucumber/gherkin-streams/-/gherkin-streams-2.0.2.tgz#de09e279fe793e93ee83606376df291954fef83b" + dependencies: + "@cucumber/gherkin" "^19.0.1" + "@cucumber/message-streams" "^2.0.0" + "@cucumber/messages" "^16.0.0" + commander "7.2.0" + source-map-support "0.5.19" + +"@cucumber/gherkin@^19.0.1", "@cucumber/gherkin@^19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@cucumber/gherkin/-/gherkin-19.0.3.tgz#61036ca4940e66f8a787be5f92ce229ae3815ebf" + dependencies: + "@cucumber/message-streams" "^2.0.0" + "@cucumber/messages" "^16.0.1" + +"@cucumber/html-formatter@^15.0.2": + version "15.0.2" + resolved "https://registry.yarnpkg.com/@cucumber/html-formatter/-/html-formatter-15.0.2.tgz#0a4c7d3c5de7de0a1b87a8a9af9eca54280175aa" + dependencies: + "@cucumber/messages" "^16.0.1" + commander "7.2.0" + source-map-support "0.5.19" + +"@cucumber/message-streams@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@cucumber/message-streams/-/message-streams-2.1.0.tgz#07a7a814ee7c39386a939d5afec2902f5199ffd2" + dependencies: + "@cucumber/messages" "^16.0.1" + +"@cucumber/messages@^16.0.0", "@cucumber/messages@^16.0.1": + version "16.0.1" + resolved "https://registry.yarnpkg.com/@cucumber/messages/-/messages-16.0.1.tgz#8a9f9bb6ad0430d8ddd044dd49cb45ef37ee67b7" + dependencies: + "@types/uuid" "8.3.0" + class-transformer "0.4.0" + reflect-metadata "0.1.13" + uuid "8.3.2" + +"@cucumber/pretty-formatter@1.0.0-alpha.1": + version "1.0.0-alpha.1" + resolved "https://registry.npmjs.org/@cucumber/pretty-formatter/-/pretty-formatter-1.0.0-alpha.1.tgz#361eb972036c6cf114f2978b42c79c48ea800f0e" + dependencies: + ansi-styles "^5.0.0" + cli-table3 "^0.6.0" + figures "^3.2.0" + ts-dedent "^2.0.0" + +"@cucumber/tag-expressions@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@cucumber/tag-expressions/-/tag-expressions-3.0.1.tgz#ca0702342bc4234ad73d9de3f1bf97461c3b5eb7" + "@dump247/storybook-state@1.6.1": version "1.6.1" resolved "https://registry.yarnpkg.com/@dump247/storybook-state/-/storybook-state-1.6.1.tgz#ac805dbad22bba380ae4f74e741189ec6c68cd4a" @@ -1753,9 +1849,9 @@ global-agent "^2.0.2" global-tunnel-ng "^2.7.1" -"@electron/remote@^1.0.4": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-1.2.0.tgz#772eb4c3ac17aaba5a9cf05a09092f6277f5671f" +"@electron/remote@^1.1.0": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-1.2.2.tgz#4c390a2e669df47af973c09eec106162a296c323" "@emotion/cache@^10.0.27", "@emotion/cache@^10.0.9": version "10.0.29" @@ -2402,6 +2498,7 @@ dependencies: "@storybook/client-logger" "5.3.14" "@storybook/theming" "5.3.14" + "@types/react-syntax-highlighter" "11.0.2" "@types/react-textarea-autosize" "^4.3.3" core-js "^3.0.1" global "^4.3.2" @@ -2515,6 +2612,7 @@ version "5.3.14" resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.3.14.tgz#5e4e02585b37754bbebb8810ffb17c8ce706a1f8" dependencies: + "@types/npmlog" "^4.1.2" chalk "^3.0.0" core-js "^3.0.1" npmlog "^4.1.2" @@ -2737,6 +2835,7 @@ dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" aria-query "^5.0.0" chalk "^4.1.0" dom-accessibility-api "^0.5.9" @@ -2901,7 +3000,7 @@ version "3.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" dependencies: - + "@types/istanbul-lib-report" "*" "@types/jest@*": version "27.0.3" @@ -3006,6 +3105,7 @@ resolved "https://registry.yarnpkg.com/@types/react-color/-/react-color-3.0.4.tgz#c63daf012ad067ac0127bdd86725f079d02082bd" dependencies: "@types/react" "*" + "@types/reactcss" "*" "@types/react-textarea-autosize@^4.3.3": version "4.3.5" @@ -3048,6 +3148,10 @@ version "2.0.3" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" +"@types/uuid@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f" + "@types/webpack-env@^1.15.0": version "1.15.3" resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.3.tgz#fb602cd4c2f0b7c0fb857e922075fdf677d25d84" @@ -3067,6 +3171,7 @@ "@types/anymatch" "*" "@types/node" "*" "@types/tapable" "*" + "@types/uglify-js" "*" "@types/webpack-sources" "*" source-map "^0.6.0" @@ -4636,10 +4741,6 @@ bech32@^1.1.3, bech32@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" -becke-ch--regex--s0-0-v1--base--pl--lib@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz#429ceebbfa5f7e936e78d73fbdc7da7162b20e20" - beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" @@ -4728,7 +4829,7 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.1.1, bluebird@^3.3.5, bluebird@^3.4.1, bluebird@^3.5.0, bluebird@^3.5.5: +bluebird@^3.1.1, bluebird@^3.3.5, bluebird@^3.5.0, bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -5253,6 +5354,14 @@ caniuse-lite@^1.0.30001280: version "1.0.30001283" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz#8573685bdae4d733ef18f78d44ba0ca5fe9e896b" +capital-case@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -5511,6 +5620,10 @@ cjs-module-lexer@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" +class-transformer@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.4.0.tgz#b52144117b423c516afb44cc1c76dbad31c2165b" + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -5560,7 +5673,7 @@ cli-spinners@^2.5.0: version "2.6.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" -cli-table3@0.5.1, cli-table3@^0.5.1: +cli-table3@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" dependencies: @@ -5569,6 +5682,15 @@ cli-table3@0.5.1, cli-table3@^0.5.1: optionalDependencies: colors "^1.1.2" +cli-table3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" + dependencies: + object-assign "^4.1.0" + string-width "^4.2.0" + optionalDependencies: + colors "^1.1.2" + cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" @@ -5769,11 +5891,15 @@ commander@2.17.x: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" +commander@7.2.0, commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + commander@^2.15.0, commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" -commander@^3.0.0, commander@^3.0.1: +commander@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" @@ -5975,7 +6101,7 @@ core-js-compat@^3.6.2: browserslist "^4.8.5" semver "7.0.0" -core-js-pure@^3.0.0, core-js-pure@^3.0.1: +core-js-pure@^3.0.1: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" @@ -6019,6 +6145,7 @@ cosmiconfig@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" dependencies: + "@types/parse-json" "^4.0.0" import-fresh "^3.1.0" parse-json "^5.0.0" path-type "^4.0.0" @@ -6028,6 +6155,7 @@ cosmiconfig@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" dependencies: + "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" parse-json "^5.0.0" path-type "^4.0.0" @@ -6102,6 +6230,10 @@ create-react-context@0.3.0, create-react-context@^0.3.0: gud "^1.0.0" warning "^4.0.3" +create-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + cross-env@7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.2.tgz#bd5ed31339a93a3418ac4f3ca9ca3403082ae5f9" @@ -6338,13 +6470,6 @@ csv-stringify@5.5.1: version "5.5.1" resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.5.1.tgz#f42cdd379b0f7f142933a11f674b1a91ebd0fcd0" -cucumber-expressions@^8.1.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/cucumber-expressions/-/cucumber-expressions-8.3.0.tgz#67f48307dc8f53540c7f3530ad7b744aa918dd5c" - dependencies: - becke-ch--regex--s0-0-v1--base--pl--lib "^1.4.0" - xregexp "^4.2.4" - cucumber-html-reporter@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/cucumber-html-reporter/-/cucumber-html-reporter-5.2.0.tgz#2094a6b73880fd11beab64f1bd3b2bfb1dfe27c2" @@ -6359,50 +6484,6 @@ cucumber-html-reporter@5.2.0: open "^6.4.0" uuid "^3.3.3" -cucumber-pretty@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cucumber-pretty/-/cucumber-pretty-6.0.0.tgz#1331deae9663020f6835d60c0aa3a84637baaa4d" - dependencies: - cli-table3 "^0.5.1" - colors "^1.4.0" - figures "^3.0.0" - -cucumber-tag-expressions@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/cucumber-tag-expressions/-/cucumber-tag-expressions-2.0.3.tgz#5525d60fbecb3fa2707051ace27004e0512e700e" - -cucumber@6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cucumber/-/cucumber-6.0.5.tgz#cdc752ad18b551bcf7bc92774c925302f4408714" - dependencies: - assertion-error-formatter "^3.0.0" - bluebird "^3.4.1" - cli-table3 "^0.5.1" - colors "^1.1.2" - commander "^3.0.1" - cucumber-expressions "^8.1.0" - cucumber-tag-expressions "^2.0.2" - duration "^0.2.1" - escape-string-regexp "^2.0.0" - figures "^3.0.0" - gherkin "5.0.0" - glob "^7.1.3" - indent-string "^4.0.0" - is-generator "^1.0.2" - is-stream "^2.0.0" - knuth-shuffle-seeded "^1.0.6" - lodash "^4.17.14" - mz "^2.4.0" - progress "^2.0.0" - resolve "^1.3.3" - serialize-error "^4.1.0" - stack-chain "^2.0.0" - stacktrace-js "^2.0.0" - string-argv "^0.3.0" - title-case "^2.1.1" - util-arity "^1.0.2" - verror "^1.9.0" - cuint@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" @@ -7034,13 +7115,17 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -duration@^0.2.1: +duration@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/duration/-/duration-0.2.2.tgz#ddf149bc3bc6901150fe9017111d016b3357f529" dependencies: d "1" es5-ext "~0.10.46" +durations@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/durations/-/durations-3.4.2.tgz#1de230454373cccfecab927de0bebae2295301db" + each-props@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" @@ -7077,9 +7162,9 @@ electron-chromedriver@16.0.0: "@electron/get" "^1.12.4" extract-zip "^2.0.0" -electron-chromedriver@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/electron-chromedriver/-/electron-chromedriver-12.0.0.tgz#55bdc451b938b384642d613a05eadacb1fe476ee" +electron-chromedriver@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/electron-chromedriver/-/electron-chromedriver-13.0.0.tgz#a553af7743215ac463e1e40e0db14d4a542ef762" dependencies: "@electron/get" "^1.12.4" extract-zip "^2.0.0" @@ -7490,6 +7575,7 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escape-string-regexp@^4.0.0: version "4.0.0" @@ -7581,7 +7667,7 @@ eslint-import-resolver-node@^0.3.4: eslint-import-resolver-webpack@0.13.1: version "0.13.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.1.tgz#6d2fb928091daf2da46efa1e568055555b2de902" + resolved "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.1.tgz#6d2fb928091daf2da46efa1e568055555b2de902" dependencies: array-find "^1.0.0" debug "^3.2.7" @@ -8222,7 +8308,7 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.0.0: +figures@^3.0.0, figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" dependencies: @@ -8856,10 +8942,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -gherkin@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gherkin/-/gherkin-5.0.0.tgz#96def41198ec3908258b511af74f655a2764d2a1" - github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" @@ -9598,6 +9680,7 @@ html-webpack-plugin@^4.0.0-beta.2: version "4.5.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" dependencies: + "@types/html-minifier-terser" "^5.0.0" "@types/tapable" "^1.0.5" "@types/webpack" "^4.41.8" html-minifier-terser "^5.0.1" @@ -10197,7 +10280,7 @@ is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" -is-generator@^1.0.2: +is-generator@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz#c14c21057ed36e328db80347966c693f886389f3" @@ -11992,6 +12075,12 @@ lower-case@^2.0.1: dependencies: tslib "^1.10.0" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + dependencies: + tslib "^2.0.3" + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -12246,6 +12335,7 @@ meow@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306" dependencies: + "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" decamelize-keys "^1.1.0" hard-rejection "^2.1.0" @@ -12609,7 +12699,7 @@ mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" -mz@^2.4.0: +mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" dependencies: @@ -12700,6 +12790,13 @@ no-case@^3.0.3: lower-case "^2.0.1" tslib "^1.10.0" +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-abi@^2.19.1: version "2.30.1" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" @@ -15189,6 +15286,10 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^1.0.0" +reflect-metadata@0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + refractor@^2.4.1: version "2.10.1" resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e" @@ -15252,6 +15353,16 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp-match-indices@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz#cf20054a6f7d5b3e116a701a7b00f82889d10da6" + dependencies: + regexp-tree "^0.1.11" + +regexp-tree@^0.1.11: + version "0.1.24" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" + regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" @@ -15542,6 +15653,12 @@ resolve-pathname@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" +resolve-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg/-/resolve-pkg-2.0.0.tgz#ac06991418a7623edc119084edc98b0e6bf05a41" + dependencies: + resolve-from "^5.0.0" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -15550,13 +15667,13 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.5, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.8.1: +resolve@^1.1.5, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" dependencies: path-parse "^1.0.6" -resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20.0: +resolve@^1.14.2, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" dependencies: @@ -15971,12 +16088,6 @@ sequencify@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" -serialize-error@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-4.1.0.tgz#63e1e33ede20bcd89d9f0528ea4c15fbf0f2b78a" - dependencies: - type-fest "^0.3.0" - serialize-error@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-5.0.0.tgz#a7ebbcdb03a5d71a6ed8461ffe0fc1a1afed62ac" @@ -16384,13 +16495,13 @@ spectron-fake-dialog@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/spectron-fake-dialog/-/spectron-fake-dialog-0.0.1.tgz#ffd5cfadcac64eb957340389f047529c4a68e23a" -spectron@14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/spectron/-/spectron-14.0.0.tgz#c8160e38c30dcda39734f3e8e809162dc0805d14" +spectron@15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/spectron/-/spectron-15.0.0.tgz#9c0e254b2be3f0725a81b8343092b9d0108439c7" dependencies: - "@electron/remote" "^1.0.4" + "@electron/remote" "^1.1.0" dev-null "^0.1.1" - electron-chromedriver "^12.0.0" + electron-chromedriver "^13.0.0" got "^11.8.0" split "^1.0.1" webdriverio "^6.9.1" @@ -16477,7 +16588,7 @@ stacktrace-gps@^3.0.4: source-map "0.5.6" stackframe "^1.1.1" -stacktrace-js@^2.0.0: +stacktrace-js@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" dependencies: @@ -16601,7 +16712,7 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" -string-argv@^0.3.0: +string-argv@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" @@ -17282,13 +17393,6 @@ tippy.js@^6.3.0: dependencies: "@popperjs/core" "^2.8.3" -title-case@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" - dependencies: - no-case "^2.2.0" - upper-case "^1.0.3" - tmp-promise@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.1.0.tgz#bb924d239029157b9bc1d506a6aa341f8b13e64c" @@ -17308,6 +17412,12 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + dependencies: + rimraf "^3.0.0" + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -17505,6 +17615,10 @@ ts-dedent@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-1.2.0.tgz#6aa2229d837159bb6d635b6b233002423b91e0b0" +ts-dedent@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" + ts-essentials@^2.0.3: version "2.0.12" resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" @@ -17540,6 +17654,10 @@ tslib@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" +tslib@^2.0.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + tslib@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" @@ -17596,10 +17714,6 @@ type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -17968,7 +18082,13 @@ update-notifier@^4.0.0: semver-diff "^3.1.1" xdg-basedir "^4.0.0" -upper-case@^1.0.3, upper-case@^1.1.1: +upper-case-first@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + dependencies: + tslib "^2.0.3" + +upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" @@ -18071,7 +18191,7 @@ utf8-byte-length@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" -util-arity@^1.0.2: +util-arity@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/util-arity/-/util-arity-1.1.0.tgz#59d01af1fdb3fede0ac4e632b0ab5f6ce97c9330" @@ -18115,14 +18235,14 @@ utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" +uuid@8.3.2, uuid@^8.0.0, uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" -uuid@^8.0.0, uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" @@ -18176,7 +18296,7 @@ vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" -verror@1.10.0, verror@^1.9.0: +verror@1.10.0, verror@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: @@ -18755,12 +18875,6 @@ xmldom@0.1.x: version "0.1.31" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" -xregexp@^4.2.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" - dependencies: - "@babel/runtime-corejs3" "^7.8.3" - "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"