diff --git a/packages/e2e-tests/src/assert/onboarding/ConfigureMidnightPageAssert.ts b/packages/e2e-tests/src/assert/onboarding/ConfigureMidnightPageAssert.ts new file mode 100644 index 0000000000..2236dde0ce --- /dev/null +++ b/packages/e2e-tests/src/assert/onboarding/ConfigureMidnightPageAssert.ts @@ -0,0 +1,75 @@ +import { expect } from 'chai'; + +import ConfigureMidnightPage from '../../elements/onboarding/ConfigureMidnightPage'; +import { Constants } from '../../setup/Constants'; +import { t } from '../../utils/translationService'; + +import OnboardingCommonAssert from './onboardingCommonAssert'; + +class ConfigureMidnightPageAssert extends OnboardingCommonAssert { + async assertSeeNetworkSection() { + await ConfigureMidnightPage.networkSectionLabel.waitForDisplayed(); + // TODO: update translation keys when LW-13474 is merged + expect(await ConfigureMidnightPage.networkSectionLabel.getText()).to.equal( + await t('midnight.network-config.network-label') + ); + await ConfigureMidnightPage.networkOptionTestnet.waitForDisplayed(); + expect(await ConfigureMidnightPage.networkOptionTestnet.getText()).to.equal( + await t('midnight.network-config.network-option.2') + ); + await ConfigureMidnightPage.networkOptionUndeployed.waitForDisplayed(); + expect(await ConfigureMidnightPage.networkOptionUndeployed.getText()).to.equal( + await t('midnight.network-config.network-option.0') + ); + } + + async assertSeeEnterWalletButton() { + await ConfigureMidnightPage.enterWalletButton.waitForDisplayed(); + expect(await ConfigureMidnightPage.enterWalletButton.getText()).to.equal(await t('onboarding.steps.enter-wallet')); + } + + async assertSeeProofServerSection(midnightNetwork: 'testnet' | 'undeployed' = 'testnet') { + await ConfigureMidnightPage.proofServerSectionLabel.waitForDisplayed(); + expect(await ConfigureMidnightPage.proofServerSectionLabel.getText()).to.equal( + await t('midnight.network-config.proof-server-label') + ); + + await ConfigureMidnightPage.proofServerOptionLocal.waitForDisplayed(); + const proofServerValue = await ConfigureMidnightPage.proofServerOptionLocal.getText(); + expect(proofServerValue).to.include(Constants.MIDNIGHT_PROOF_SERVER_ADDRESS); + expect(proofServerValue).to.include(await t('midnight.network-config.proof-server-option.local')); + + await ConfigureMidnightPage.nodeAddressInputLabel.waitForDisplayed(); + expect(await ConfigureMidnightPage.nodeAddressInputLabel.getText()).to.equal( + await t('midnight.network-config.node-address') + ); + await ConfigureMidnightPage.nodeAddressInput.waitForDisplayed(); + const expectedNodeAddress = + midnightNetwork === 'undeployed' ? Constants.NODE_ADDRESS_UNDEPLOYED : Constants.NODE_ADDRESS_TESTNET; + expect(await ConfigureMidnightPage.nodeAddressInput.getValue()).to.equal(expectedNodeAddress); + + await ConfigureMidnightPage.indexerAddressInputLabel.waitForDisplayed(); + expect(await ConfigureMidnightPage.indexerAddressInputLabel.getText()).to.equal( + await t('midnight.network-config.indexer-address') + ); + await ConfigureMidnightPage.indexerAddressInput.waitForDisplayed(); + const expectedIndexerAddress = + midnightNetwork === 'undeployed' ? Constants.INDEXER_ADDRESS_UNDEPLOYED : Constants.INDEXER_ADDRESS_TESTNET; + expect(await ConfigureMidnightPage.indexerAddressInput.getValue()).to.equal(expectedIndexerAddress); + } + + async assertSeeConfigureMidnightPage() { + await this.assertSeeTopLaceLogo(); + await this.assertSeeHelpAndSupportButton(); + await this.assertSeeStepTitle(await t('onboarding.midnight.settings.title')); + await this.assertSeeStepSubtitle(await t('onboarding.midnight.settings.description')); + await this.assertSeeNetworkSection(); + await this.assertSeeProofServerSection(); + await this.assertSeeBackButton(); + await this.assertSeeEnterWalletButton(); + await this.assertSeeMidnightCompatibilityInfo(); + await this.assertSeeLegalLinks(); + } +} + +export default new ConfigureMidnightPageAssert(); diff --git a/packages/e2e-tests/src/assert/onboarding/onboardingCommonAssert.ts b/packages/e2e-tests/src/assert/onboarding/onboardingCommonAssert.ts index 60255b1834..795f282f00 100644 --- a/packages/e2e-tests/src/assert/onboarding/onboardingCommonAssert.ts +++ b/packages/e2e-tests/src/assert/onboarding/onboardingCommonAssert.ts @@ -10,6 +10,10 @@ class OnboardingCommonAssert { this.commonOnboardingElements = new CommonOnboardingElements(); } + async assertSeeTopLaceLogo(): Promise { + await this.commonOnboardingElements.laceLogo.waitForDisplayed(); + } + async assertSeeStepTitle(expectedTitle: string): Promise { await this.commonOnboardingElements.stepTitle.waitForStable(); expect(await this.commonOnboardingElements.stepTitle.getText()).to.equal(expectedTitle); @@ -81,6 +85,16 @@ class OnboardingCommonAssert { } expect(await this.commonOnboardingElements.activeStepIndicator.getText()).to.equal(expectedStepTitle); } + + async assertSeeMidnightCompatibilityInfo(): Promise { + await this.commonOnboardingElements.compatibilityLabel.waitForDisplayed(); + expect(await this.commonOnboardingElements.compatibilityLabel.getText()).to.equal( + await t('onboarding.compatible-with') + ); + await this.commonOnboardingElements.midnightSymbol.waitForDisplayed(); + await this.commonOnboardingElements.midnightLabel.waitForDisplayed(); + expect(await this.commonOnboardingElements.midnightLabel.getText()).to.equal(await t('onboarding.midnight.label')); + } } export default OnboardingCommonAssert; diff --git a/packages/e2e-tests/src/assert/onboarding/onboardingMainPageAssert.ts b/packages/e2e-tests/src/assert/onboarding/onboardingMainPageAssert.ts index c50e4bbc16..e562be91e9 100644 --- a/packages/e2e-tests/src/assert/onboarding/onboardingMainPageAssert.ts +++ b/packages/e2e-tests/src/assert/onboarding/onboardingMainPageAssert.ts @@ -94,19 +94,22 @@ class OnboardingMainPageAssert extends OnboardingCommonAssert { await OnboardingMainPage.restoreWalletButton.waitForClickable(); } - async assertSeeMainPage() { + async assertSeeMainPage(walletType: 'Cardano' | 'Midnight' = 'Cardano') { await this.assertSeeLogo(); await this.assertSeeTitle(); await this.assertSeeSubtitle(); await this.assertSeeCreateWalletOption(); - // Lack of support for hardware wallets on Firefox - await this.assertSeeHardwareWalletOption(!browser.isFirefox); + // Lack of support for hardware wallets on Firefox and on Midnight + await this.assertSeeHardwareWalletOption(!browser.isFirefox && walletType === 'Cardano'); await this.assertSeeRestoreWalletOption(); await this.assertSeeLegalLinks(); await this.assertSeeHelpAndSupportButton(); await this.assertSeeAgreementText(); await this.assertSeeTermsOfServiceLink(); await this.assertSeePrivacyPolicyLink(); + if (walletType === 'Midnight') { + await this.assertSeeMidnightCompatibilityInfo(); + } } } diff --git a/packages/e2e-tests/src/assert/tokensPageAssert.ts b/packages/e2e-tests/src/assert/tokensPageAssert.ts index 6051a3a3a6..a86a6506ae 100644 --- a/packages/e2e-tests/src/assert/tokensPageAssert.ts +++ b/packages/e2e-tests/src/assert/tokensPageAssert.ts @@ -276,6 +276,18 @@ class TokensPageAssert { await t('general.warnings.cannotFetchPrice') ); } + + async assertSendButtonEnabled(shouldBeEnabled: boolean): Promise { + await MenuHeader.sendButton.waitForEnabled({ reverse: !shouldBeEnabled }); + } + + async assertSeeMidnightTokensPage() { + await TokensPage.title.waitForDisplayed(); + expect(await TokensPage.title.getText()).to.contain(await t('app.tokens')); + + await TokensPage.counter.waitForDisplayed(); + expect(await TokensPage.counter.getText()).to.to.match(TestnetPatterns.COUNTER_REGEX); + } } export default new TokensPageAssert(); diff --git a/packages/e2e-tests/src/assert/topNavigationAssert.ts b/packages/e2e-tests/src/assert/topNavigationAssert.ts index e423e8cccf..15651db3bc 100644 --- a/packages/e2e-tests/src/assert/topNavigationAssert.ts +++ b/packages/e2e-tests/src/assert/topNavigationAssert.ts @@ -88,6 +88,11 @@ class TopNavigationAssert { await t('browserView.sideMenu.links.addSharedWallet') ); } + // TODO: uncomment when LW-13474 is merged + // await MenuHeader.menuAddMidnightWalletButton.waitForDisplayed(); + // expect(await MenuHeader.menuAddMidnightWalletButton.getText()).to.equal( + // await t('browserView.sideMenu.links.addMidnightWallet') + // ); await MenuHeader.menuAddressBookButton.waitForDisplayed(); expect(await MenuHeader.menuAddressBookButton.getText()).to.equal( await t('browserView.sideMenu.links.addressBook') @@ -259,6 +264,23 @@ class TopNavigationAssert { async assertSeeAddSharedWalletOption(shouldBeDisplayed: boolean) { await MenuHeader.menuAddSharedWalletButton.waitForDisplayed({ reverse: !shouldBeDisplayed }); } + + async assertMidnightWalletIsInSyncedStatus() { + await MenuHeader.midnightLogo.waitForDisplayed(); + await MenuHeader.midnightTitle.waitForDisplayed(); + await MenuHeader.midnightSyncStatus.waitForDisplayed(); + await this.assertMidnightSyncStatus('app.sync-status.synced'); + await MenuHeader.midnightResyncIcon.waitForEnabled(); + } + + async assertMidnightSyncStatus(status: string) { + const expectedStatus = (await t(status)) ?? status; + await browser.waitUntil(async () => (await MenuHeader.getWalletSyncStatusText()) === expectedStatus, { + timeout: 180_000, + interval: 500, + timeoutMsg: `expected sync status "${expectedStatus}" was not displayed` + }); + } } export default new TopNavigationAssert(); diff --git a/packages/e2e-tests/src/elements/menuHeader.ts b/packages/e2e-tests/src/elements/menuHeader.ts index 3aae033d41..e05e9424de 100644 --- a/packages/e2e-tests/src/elements/menuHeader.ts +++ b/packages/e2e-tests/src/elements/menuHeader.ts @@ -17,6 +17,7 @@ export class MenuHeader { private MENU_ADD_NEW_WALLET_BUTTON = '[data-testid="header-menu-new-wallet"]'; private MENU_ADD_BITCOIN_WALLET_BUTTON = '[data-testid="header-menu-add-bitcoin-wallet"]'; private MENU_ADD_SHARED_WALLET_BUTTON = '[data-testid="header-menu-add-shared-wallet"]'; + private MENU_ADD_MIDNIGHT_WALLET_BUTTON = '[data-testid="header-menu-add-midnight-wallet"]'; private MENU_SETTINGS_BUTTON = '//li[@data-testid="header-menu-settings"]'; private MENU_SIGN_MESSAGE_BUTTON = '//li[@data-testid="header-menu-sign-message"]'; private MENU_LOCK_BUTTON = '//li[@data-testid="header-menu-lock"]'; @@ -36,6 +37,10 @@ export class MenuHeader { private readonly RECEIVE_BUTTON = 'aside [data-testid="receive-button"]'; private readonly SEND_BUTTON = 'aside [data-testid="send-button"]'; private readonly CO_SIGN_BUTTON = '[data-testid="co-sign-button"]'; + private readonly MIDNIGHT_LOGO = '[data-testid="midnight-logo"]'; + private readonly MIDNIGHT_TITLE = '[data-testid="midnight-title"]'; + private readonly MIDNIGHT_MENU_SYNC_STATUS = '[data-testid="menu-sync-status"]'; + private readonly MIDNIGHT_RESYNC_ICON = '[data-testid="resync-icon"]'; get avatarOnButton(): ChainablePromiseElement { return $(this.AVATAR_ON_BUTTON); @@ -117,6 +122,10 @@ export class MenuHeader { return $(this.MENU_ADD_SHARED_WALLET_BUTTON); } + get menuAddMidnightWalletButton(): ChainablePromiseElement { + return $(this.MENU_ADD_MIDNIGHT_WALLET_BUTTON); + } + get menuSettingsButton(): ChainablePromiseElement { return $(this.MENU_SETTINGS_BUTTON); } @@ -169,6 +178,22 @@ export class MenuHeader { return $(this.RIGHT_SIDE_PANEL_BUTTON); } + get midnightLogo(): ChainablePromiseElement { + return $(this.MIDNIGHT_LOGO); + } + + get midnightTitle(): ChainablePromiseElement { + return $(this.MIDNIGHT_TITLE); + } + + get midnightSyncStatus(): ChainablePromiseElement { + return $(this.MIDNIGHT_MENU_SYNC_STATUS); + } + + get midnightResyncIcon(): ChainablePromiseElement { + return $(this.MIDNIGHT_RESYNC_ICON); + } + async clickOnExpandButton(): Promise { await this.expandButton.click(); } @@ -204,6 +229,11 @@ export class MenuHeader { await this.menuAddSharedWalletButton.click(); } + async clickOnAddMidnightWalletOption(): Promise { + await this.menuAddMidnightWalletButton.waitForClickable(); + await this.menuAddMidnightWalletButton.click(); + } + async clickMenuButton(): Promise { await this.menuButton.waitForClickable({ timeout: 15_000 }); await this.menuButton.click(); @@ -272,6 +302,10 @@ export class MenuHeader { async clickRightSidePanelButton(): Promise { await this.rightSidePanelButton.click(); } + + async getWalletSyncStatusText(): Promise { + return await this.midnightSyncStatus.getText(); + } } export default new MenuHeader(); diff --git a/packages/e2e-tests/src/elements/midnight/PasswordAuthPrompt.ts b/packages/e2e-tests/src/elements/midnight/PasswordAuthPrompt.ts new file mode 100644 index 0000000000..0ab1e9f59c --- /dev/null +++ b/packages/e2e-tests/src/elements/midnight/PasswordAuthPrompt.ts @@ -0,0 +1,23 @@ +/* global WebdriverIO */ +import { ChainablePromiseElement } from 'webdriverio'; + +class PasswordAuthPrompt { + private readonly PASSWORD_INPUT = '[data-testid="authentication-prompt-input"]'; + private readonly CONFIRM_BUTTON = '[data-testid="authentication-prompt-button-confirm"]'; + + get passwordInput(): ChainablePromiseElement { + return $(this.PASSWORD_INPUT); + } + + get confirmButton(): ChainablePromiseElement { + return $(this.CONFIRM_BUTTON); + } + + async enterPasswordAndConfirm(password: string) { + await this.passwordInput.waitForDisplayed(); + await this.passwordInput.setValue(password); + await this.confirmButton.click(); + } +} + +export default new PasswordAuthPrompt(); diff --git a/packages/e2e-tests/src/elements/onboarding/ConfigureMidnightPage.ts b/packages/e2e-tests/src/elements/onboarding/ConfigureMidnightPage.ts new file mode 100644 index 0000000000..f83304d2dc --- /dev/null +++ b/packages/e2e-tests/src/elements/onboarding/ConfigureMidnightPage.ts @@ -0,0 +1,58 @@ +/* global WebdriverIO */ +import CommonOnboardingElements from './commonOnboardingElements'; +import { ChainablePromiseElement } from 'webdriverio'; + +class ConfigureMidnightPage extends CommonOnboardingElements { + private readonly NODE_ADDRESS_INPUT = '[data-testid="node-address-input"]'; + private readonly NODE_ADDRESS_INPUT_LAEBL = '[data-testid="node-address-input"] + label'; + private readonly PUB_SUB_INDEXER_ADDRESS_INPUT = '[data-testid="indexer-address-input"]'; + private readonly PUB_SUB_INDEXER_ADDRESS_INPUT_LABEL = '[data-testid="indexer-address-input"] + label'; + private readonly PROOF_SERVER_ADDRESS_OPTION_LOCAL = + '[data-testid="configure-midnight-proof-server-section-option-local"] label'; + private readonly PROOF_SERVER_ADDRESS_LABEL = '[data-testid="configure-midnight-proof-server-section-label"]'; + private readonly NETWORK_LABEL = '[data-testid="configure-midnight-network-section-label"]'; + private readonly NETWORK_OPTION_UNDEPLOYED = '[data-testid="configure-midnight-network-section-option-0"] label'; + private readonly NETWORK_OPTION_TESTNET = '[data-testid="configure-midnight-network-section-option-2"] label'; + + get enterWalletButton(): ChainablePromiseElement { + return this.nextButton; + } + + get nodeAddressInput(): ChainablePromiseElement { + return $(this.NODE_ADDRESS_INPUT); + } + + get indexerAddressInput(): ChainablePromiseElement { + return $(this.PUB_SUB_INDEXER_ADDRESS_INPUT); + } + + get proofServerOptionLocal(): ChainablePromiseElement { + return $(this.PROOF_SERVER_ADDRESS_OPTION_LOCAL); + } + + get nodeAddressInputLabel(): ChainablePromiseElement { + return $(this.NODE_ADDRESS_INPUT_LAEBL); + } + + get indexerAddressInputLabel(): ChainablePromiseElement { + return $(this.PUB_SUB_INDEXER_ADDRESS_INPUT_LABEL); + } + + get proofServerSectionLabel(): ChainablePromiseElement { + return $(this.PROOF_SERVER_ADDRESS_LABEL); + } + + get networkSectionLabel(): ChainablePromiseElement { + return $(this.NETWORK_LABEL); + } + + get networkOptionUndeployed(): ChainablePromiseElement { + return $(this.NETWORK_OPTION_UNDEPLOYED); + } + + get networkOptionTestnet(): ChainablePromiseElement { + return $(this.NETWORK_OPTION_TESTNET); + } +} + +export default new ConfigureMidnightPage(); diff --git a/packages/e2e-tests/src/elements/onboarding/commonOnboardingElements.ts b/packages/e2e-tests/src/elements/onboarding/commonOnboardingElements.ts index 25ed728f25..c729f10739 100644 --- a/packages/e2e-tests/src/elements/onboarding/commonOnboardingElements.ts +++ b/packages/e2e-tests/src/elements/onboarding/commonOnboardingElements.ts @@ -2,16 +2,24 @@ import { ChainablePromiseElement } from 'webdriverio'; export default class CommonOnboardingElements { - private STEP_HEADER = '[data-testid="wallet-setup-step-header"]'; - private STEP_HEADER_TITLE = '[data-testid="wallet-setup-step-title"]'; - private STEP_HEADER_SUBTITLE = '[data-testid="wallet-setup-step-subtitle"]'; - private BACK_BUTTON = '[data-testid="wallet-setup-step-btn-back"]'; - private NEXT_BUTTON = '[data-testid="wallet-setup-step-btn-next"]'; - private HELP_AND_SUPPORT_BUTTON = '[data-testid="help-and-support-button"]'; - private COOKIE_POLICY_LINK = '[data-testid="cookie-policy-link"]'; - private PRIVACY_POLICY_LINK = '[data-testid="privacy-policy-link"]'; - private TERMS_OF_SERVICE_LINK = '[data-testid="terms-of-service-link"]'; - private ACTIVE_STEP_INDICATOR = '[data-testid="active-onboarding-step"]'; + private readonly LACE_LOGO = '[data-testid="lace-logo"]'; + private readonly STEP_HEADER = '[data-testid="wallet-setup-step-header"]'; + private readonly STEP_HEADER_TITLE = '[data-testid="wallet-setup-step-title"]'; + private readonly STEP_HEADER_SUBTITLE = '[data-testid="wallet-setup-step-subtitle"]'; + private readonly BACK_BUTTON = '[data-testid="wallet-setup-step-btn-back"]'; + private readonly NEXT_BUTTON = '[data-testid="wallet-setup-step-btn-next"]'; + private readonly HELP_AND_SUPPORT_BUTTON = '[data-testid="help-and-support-button"]'; + private readonly COOKIE_POLICY_LINK = '[data-testid="cookie-policy-link"]'; + private readonly PRIVACY_POLICY_LINK = '[data-testid="privacy-policy-link"]'; + private readonly TERMS_OF_SERVICE_LINK = '[data-testid="terms-of-service-link"]'; + private readonly ACTIVE_STEP_INDICATOR = '[data-testid="active-onboarding-step"]'; + private readonly COMPATIBILITY_LABEL = '[data-testid="compatibility-label"]'; + private readonly MIDNIGHT_SYMBOL = '[data-testid="midnight-symbol"]'; + private readonly MIDNIGHT_LABEL = '[data-testid="midnight-label"]'; + + get laceLogo(): ChainablePromiseElement { + return $(this.LACE_LOGO); + } get stepHeader(): ChainablePromiseElement { return $(this.STEP_HEADER); @@ -53,6 +61,18 @@ export default class CommonOnboardingElements { return $(this.ACTIVE_STEP_INDICATOR); } + get compatibilityLabel(): ChainablePromiseElement { + return $(this.COMPATIBILITY_LABEL); + } + + get midnightSymbol(): ChainablePromiseElement { + return $(this.MIDNIGHT_SYMBOL); + } + + get midnightLabel(): ChainablePromiseElement { + return $(this.MIDNIGHT_LABEL); + } + async clickOnNextButton(): Promise { await this.nextButton.waitForClickable({ timeout: 12_000 }); await this.nextButton.click(); diff --git a/packages/e2e-tests/src/features/midnight/AddMidnightWalletCreate.feature b/packages/e2e-tests/src/features/midnight/AddMidnightWalletCreate.feature new file mode 100644 index 0000000000..da231840fd --- /dev/null +++ b/packages/e2e-tests/src/features/midnight/AddMidnightWalletCreate.feature @@ -0,0 +1,25 @@ +# Enable and re-check when LW-13474 is merged +@AddMidnightWalletCreate @Testnet @Mainnet @pending +Feature: Add Midnight wallet - Create wallet + + Background: + Given Lace is ready for test + + @LW-13634 + Scenario: Add Midnight wallet - Create wallet - Testnet - Remote + When I open header menu + And I click on "Add Midnight wallet" option + Then I see "Let's explore Web3 together" page for Midnight wallet onboarding + When I click "Create" button on wallet setup page + And I click on "Copy to clipboard" button + And I click "Next" button during wallet setup + And I click on "Paste from clipboard" button + And I click "Next" button during wallet setup + And I enter wallet name: "wallet", password: "N_8J@bne87A" and password confirmation: "N_8J@bne87A" + And I click "Next" button during wallet setup + Then "Configure Midnight" page is displayed + And I click "Enter wallet" button during wallet setup + When I enter wallet password and accept password prompt + Then Midnight wallet is synced + And I see main elements of "Tokens" page for Midnight wallet + And "Send" button is disabled on page header diff --git a/packages/e2e-tests/src/hooks/beforeTagHooks.ts b/packages/e2e-tests/src/hooks/beforeTagHooks.ts index bd4f2f365f..b4e16279da 100644 --- a/packages/e2e-tests/src/hooks/beforeTagHooks.ts +++ b/packages/e2e-tests/src/hooks/beforeTagHooks.ts @@ -271,7 +271,9 @@ Before( ); Before( - { tags: '@AddNewWalletCreate or @AddNewWalletRestore or @AddNewWalletConnect or @AddNewWalletCreatePaperWallet' }, + { + tags: '@AddNewWalletCreate or @AddNewWalletRestore or @AddNewWalletConnect or @AddNewWalletCreatePaperWallet or @AddMidnightWalletCreate' + }, async () => { await extendedViewRepositoryWalletInitialization([TestWalletName.AddNewWallet]); await localStorageInitializer.disableShowingMultidelegationBetaBanner(); diff --git a/packages/e2e-tests/src/setup/Constants.ts b/packages/e2e-tests/src/setup/Constants.ts new file mode 100644 index 0000000000..30019097ca --- /dev/null +++ b/packages/e2e-tests/src/setup/Constants.ts @@ -0,0 +1,18 @@ +export class Constants { + static readonly EXTENSION_ID = 'hgeekaiplokcnmakghbdfbgnlfheichg'; + static readonly EXTENSION_URL = `chrome-extension://${this.EXTENSION_ID}/tab.html`; + static readonly EXTENSION_URL_ONBOARDING = `${this.EXTENSION_URL}#/onboarding`; + static readonly EXTENSION_POPUP_URL = `chrome-extension://${this.EXTENSION_ID}/popup.html`; + + static readonly MIDNIGHT_PROOF_SERVER_ADDRESS = 'http://localhost:6300'; + static readonly MIDNIGHT_PROOF_SERVER_VARIANT_LOCAL = 'Local'; + static readonly MIDNIGHT_PROOF_SERVER_EXPOSED_PORT = 6300; + + static readonly NODE_ADDRESS_UNDEPLOYED = 'http://localhost:9944'; + static readonly INDEXER_ADDRESS_UNDEPLOYED = 'http://localhost:8088/api/v1/graphql'; + + static readonly NODE_ADDRESS_TESTNET = 'https://rpc.testnet-02.midnight.network'; + static readonly INDEXER_ADDRESS_TESTNET = 'https://indexer.testnet-02.midnight.network/api/v1/graphql'; + + static readonly NETWORK_VARIANT_TESTNET = 'Testnet'; +} diff --git a/packages/e2e-tests/src/steps/MidnightSteps.ts b/packages/e2e-tests/src/steps/MidnightSteps.ts new file mode 100644 index 0000000000..fee9cbafb9 --- /dev/null +++ b/packages/e2e-tests/src/steps/MidnightSteps.ts @@ -0,0 +1,26 @@ +import { Then, When } from '@wdio/cucumber-framework'; +import OnboardingMainPageAssert from '../assert/onboarding/onboardingMainPageAssert'; +import ConfigureMidnightPageAssert from '../assert/onboarding/ConfigureMidnightPageAssert'; +import PasswordAuthPrompt from '../elements/midnight/PasswordAuthPrompt'; +import topNavigationAssert from '../assert/topNavigationAssert'; +import TokensPageAssert from '../assert/tokensPageAssert'; + +Then(/^I see "Let's explore Web3 together" page for Midnight wallet onboarding$/, async () => { + await OnboardingMainPageAssert.assertSeeMainPage('Midnight'); +}); + +Then(/^"Configure Midnight" page is displayed$/, async () => { + await ConfigureMidnightPageAssert.assertSeeConfigureMidnightPage(); +}); + +When(/^I enter wallet password and accept password prompt$/, async () => { + await PasswordAuthPrompt.enterPasswordAndConfirm('N_8J@bne87A'); +}); + +Then(/^Midnight wallet is synced$/, async () => { + await topNavigationAssert.assertMidnightWalletIsInSyncedStatus(); +}); + +Then(/^I see main elements of "Tokens" page for Midnight wallet$/, async () => { + await TokensPageAssert.assertSeeMidnightTokensPage(); +}); diff --git a/packages/e2e-tests/src/steps/navigationTopSteps.ts b/packages/e2e-tests/src/steps/navigationTopSteps.ts index da973a9508..3d0f5cde3b 100644 --- a/packages/e2e-tests/src/steps/navigationTopSteps.ts +++ b/packages/e2e-tests/src/steps/navigationTopSteps.ts @@ -119,6 +119,10 @@ When(/^I click on "Add shared wallet" option$/, async () => { await MenuHeader.clickOnAddSharedWalletOption(); }); +When(/^I click on "Add Midnight wallet" option$/, async () => { + await MenuHeader.clickOnAddMidnightWalletOption(); +}); + When(/^I click on then network sub-menu back button$/, async () => { await menuHeaderNetwork.backButton.click(); }); diff --git a/packages/e2e-tests/src/steps/onboardingSteps.ts b/packages/e2e-tests/src/steps/onboardingSteps.ts index 313c913d0f..13be465288 100644 --- a/packages/e2e-tests/src/steps/onboardingSteps.ts +++ b/packages/e2e-tests/src/steps/onboardingSteps.ts @@ -50,19 +50,23 @@ When( } ); -When(/^I click "(Back|Next)" button during wallet setup$/, async (button: 'Back' | 'Next') => { - const commonOnboardingElements = new CommonOnboardingElements(); - switch (button) { - case 'Back': - await commonOnboardingElements.clickOnBackButton(); - break; - case 'Next': - await commonOnboardingElements.clickOnNextButton(); - break; - default: - throw new Error(`Unsupported button name: ${button}`); +When( + /^I click "(Back|Next|Enter wallet)" button during wallet setup$/, + async (button: 'Back' | 'Next' | 'Enter wallet') => { + const commonOnboardingElements = new CommonOnboardingElements(); + switch (button) { + case 'Back': + await commonOnboardingElements.clickOnBackButton(); + break; + case 'Next': + case 'Enter wallet': + await commonOnboardingElements.clickOnNextButton(); + break; + default: + throw new Error(`Unsupported button name: ${button}`); + } } -}); +); Then(/^I (see|do not see) "Are you sure you want to start again\?" modal$/, async (state: 'see' | 'do not see') => { await ModalAssert.assertSeeOnboardingStartAgainModal(state === 'see'); diff --git a/packages/e2e-tests/src/steps/tokensPageSteps.ts b/packages/e2e-tests/src/steps/tokensPageSteps.ts index 7d9683da10..595f036f0c 100644 --- a/packages/e2e-tests/src/steps/tokensPageSteps.ts +++ b/packages/e2e-tests/src/steps/tokensPageSteps.ts @@ -227,3 +227,7 @@ When(/^I search for token: "([^"]*)"$/, async (tokenName: string) => { Then(/^I see only token with name: "([^"]*)"$/, async (tokenName: string) => { await tokensPageAssert.assertSeeOnlyFilteredToken(tokenName); }); + +Then(/^"Send" button is (enabled|disabled) on page header$/, async (state: 'disabled' | 'enabled') => { + await tokensPageAssert.assertSendButtonEnabled(state === 'enabled'); +});