Skip to content

Commit

Permalink
test(3615): add ability to check if chain permission is checked (#12762)
Browse files Browse the repository at this point in the history
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**
Needed a way to check if the permissions checkbox was checked.

Note: existing tests were already using an indirect method to test this:
Since we knew that the disconnect all button would should when
unchecking the checkboxes, we unchecked the expected checkbox and
confirmed the disconnect all button would show, this allowed to test
that all and only expected checkboxes were checked.

That being said, using this method new makes the test more specialized
and decoupled from the disconnect all button, which already has it's own
test. It aslo makes it shorter, which is also important.

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Related issues**

Contributes to:
MetaMask/MetaMask-planning#3615

## **Manual testing steps**


1. `yarn watch:clean` 
2. `yarn test:e2e:ios:debug:build`
3. `yarn test:e2e:ios:debug:run <path to test file>`


## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
  • Loading branch information
EtherWizard33 authored Dec 20, 2024
1 parent bde605f commit 4b09d48
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 26 deletions.
35 changes: 19 additions & 16 deletions app/components/UI/NetworkSelectorList/NetworkSelectorList.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Third party dependencies.
import React, { useCallback, useRef } from 'react';
import { ListRenderItem, ImageSourcePropType } from 'react-native';
import { ListRenderItem, ImageSourcePropType, View } from 'react-native';
import { FlatList } from 'react-native-gesture-handler';

// External dependencies.
Expand Down Expand Up @@ -53,23 +53,26 @@ const NetworkSelectorList = ({
if (selectedChainIds) {
isSelectedNetwork = selectedChainIds.includes(id);
}

return (
<Cell
variant={cellVariant}
isSelected={isSelectedNetwork}
title={name}
onPress={() => onSelectNetwork?.(id, isSelectedNetwork)}
avatarProps={{
variant: AvatarVariant.Network,
name,
imageSource: imageSource as ImageSourcePropType,
size: AvatarSize.Sm,
}}
disabled={isDisabled}
<View
testID={`${name}-${isSelectedNetwork ? 'selected' : 'not-selected'}`}
>
{renderRightAccessory?.(id, name)}
</Cell>
<Cell
variant={cellVariant}
isSelected={isSelectedNetwork}
title={name}
onPress={() => onSelectNetwork?.(id, isSelectedNetwork)}
avatarProps={{
variant: AvatarVariant.Network,
name,
imageSource: imageSource as ImageSourcePropType,
size: AvatarSize.Sm,
}}
disabled={isDisabled}
>
{renderRightAccessory?.(id, name)}
</Cell>
</View>
);
},
[
Expand Down
20 changes: 19 additions & 1 deletion e2e/pages/Browser/NetworkConnectMultiSelector.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { NetworkConnectMultiSelectorSelectorsIDs } from '../../selectors/Browser/NetworkConnectMultiSelector.selectors';
import Matchers from '../../utils/Matchers';
import Gestures from '../../utils/Gestures';

import { waitFor } from 'detox';
class NetworkConnectMultiSelector {
get updateButton() {
return Matchers.getElementByID(
Expand All @@ -22,6 +22,24 @@ class NetworkConnectMultiSelector {
async tapBackButton() {
await Gestures.waitAndTap(this.backButton);
}

async isNetworkChainPermissionSelected(chainName) {
const chainPermissionTestId = `${chainName}-selected`;

const element = await Matchers.getElementByID(chainPermissionTestId);
await waitFor(element).toBeVisible().withTimeout(10000);

return expect(element).toExist();
}

async isNetworkChainPermissionNotSelected(chainName) {
const chainPermissionTestId = `${chainName}-not-selected`;

const element = await Matchers.getElementByID(chainPermissionTestId);
await waitFor(element).toBeVisible().withTimeout(10000);

return expect(element).toExist();
}
}

export default new NetworkConnectMultiSelector();
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ describe(SmokeMultiChainPermissions('Account Permission Management'), () => {
await TestHelpers.reverseServerPort();
});

it('allows connecting multiple accounts and revoking all permissions simultaneously', async () => {
it('revokes all account permissions simultaneously', async () => {
await withFixtures(
{
dapp: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { CustomNetworks } from '../../../../resources/networks.e2e';
import WalletView from '../../../../pages/wallet/WalletView';
import NetworkEducationModal from '../../../../pages/Network/NetworkEducationModal';
import PermissionSummaryBottomSheet from '../../../../pages/Browser/PermissionSummaryBottomSheet';
import { NetworkNonPemittedBottomSheetSelectorsText } from '../../../../selectors/Network/NetworkNonPemittedBottomSheet.selectors';

describe(SmokeMultiChainPermissions('Chain Permission Management'), () => {
beforeAll(async () => {
Expand Down Expand Up @@ -54,14 +55,11 @@ describe(SmokeMultiChainPermissions('Chain Permission Management'), () => {

// Verify changes were saved by checking chain permissions again
await ConnectedAccountsModal.tapNavigateToEditNetworksPermissionsButton();

// Deselect both networks to verify they were the only ones selected
await NetworkNonPemittedBottomSheet.tapEthereumMainNetNetworkName();
await NetworkNonPemittedBottomSheet.tapLineaSepoliaNetworkName();

// Verify the disconnect all button appears (indicating no chains are selected)
await Assertions.checkIfVisible(
ConnectedAccountsModal.disconnectNetworksButton,
await NetworkConnectMultiSelector.isNetworkChainPermissionSelected(
NetworkNonPemittedBottomSheetSelectorsText.ETHEREUM_MAIN_NET_NETWORK_NAME,
);
await NetworkConnectMultiSelector.isNetworkChainPermissionSelected(
NetworkNonPemittedBottomSheetSelectorsText.LINEA_SEPOLIA_NETWORK_NAME,
);
},
);
Expand Down

0 comments on commit 4b09d48

Please sign in to comment.