Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: APP-2687 - Add e2e tests for all 4 DAO types (Wallet Based and 3 x Token Based) #1324

Merged
merged 38 commits into from
Apr 19, 2024
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
80328ef
updated to synpress alpha and installed playwright
Barukimang Mar 12, 2024
5a7fba7
added wallet setup file for caching
Barukimang Mar 12, 2024
36532b0
create playwright project in our app
Barukimang Mar 12, 2024
f5148e5
first working test with aragon app
Barukimang Mar 12, 2024
71ca173
added wallet setup fixture
Barukimang Mar 12, 2024
a9642ef
increase default test timeout and addition of successfull create dao …
Barukimang Mar 25, 2024
f429292
added tests folder with createdao test
Barukimang Mar 27, 2024
b14519a
add global metamask wallet setup
Barukimang Mar 29, 2024
6030ff4
merge develop into branch
Barukimang Mar 29, 2024
64b406f
fixing test
Barukimang Mar 29, 2024
e7c6945
adjusting e2e command to playwright
Barukimang Mar 29, 2024
78aaa14
cleanup of redundant synpress, cypress, and playwright folders and files
Barukimang Mar 29, 2024
82dc6e6
basic metamask setup to be used by all tests
Barukimang Mar 29, 2024
9f29cdb
add publishproposal test
Barukimang Mar 29, 2024
177819a
created new tests and renamed existing ones
Barukimang Mar 29, 2024
ae5b406
Merge branch 'develop' into chore/app-2687-tests-four-dao-types
Barukimang Apr 5, 2024
32800e3
created dao type folder structure and draft tests for new token dao
Barukimang Apr 5, 2024
cf0c05e
fixed test and edited proposal descriptions
Barukimang Apr 5, 2024
b7be4b9
edits to token plugin tests
Barukimang Apr 5, 2024
1138c6a
successfull new token dao creation test
Barukimang Apr 8, 2024
458c95c
successful test signalling proposal
Barukimang Apr 9, 2024
35b8286
all new token dao tests now successful
Barukimang Apr 9, 2024
099c244
added test setup governance incompatible token dao
Barukimang Apr 10, 2024
eb0e4ba
succesful create dao governance incompatible token test
Barukimang Apr 10, 2024
1beae33
edits of governance incompatible token tests
Barukimang Apr 10, 2024
8c687cc
added test framework for governance compatible token DAO
Barukimang Apr 10, 2024
ad807d4
all successful tests for governance compatible token DAO
Barukimang Apr 10, 2024
1da9c74
fixing tests
Barukimang Apr 12, 2024
3252943
Merge branch 'develop' into chore/app-2687-tests-four-dao-types
Barukimang Apr 12, 2024
ee57fb7
edits yarn.lock
Barukimang Apr 12, 2024
8f33981
delete duplicate tests
Barukimang Apr 12, 2024
46a1b08
removed playwright workflow and redundant package
Barukimang Apr 12, 2024
c544792
update yarn.lock
Barukimang Apr 12, 2024
6003179
added localhost constant
Barukimang Apr 19, 2024
e775c4f
replacing localhost urls with constant
Barukimang Apr 19, 2024
adce788
replacing localhost urls with constant #2
Barukimang Apr 19, 2024
fbc9f20
edit localhost constant
Barukimang Apr 19, 2024
1cc07db
added const imports
Barukimang Apr 19, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions e2e/basic.setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@ import {
} from '@synthetixio/synpress';
import 'dotenv/config';

const LOCALHOST_URL = process.env.LOCALHOST_URL;
const SEED_PHRASE = process.env.METAMASK_SEED_PHRASE!;
const PASSWORD = process.env.METAMASK_PASSWORD!;

export {LOCALHOST_URL};
cgero-eth marked this conversation as resolved.
Show resolved Hide resolved

export default defineWalletSetup(PASSWORD, async (context, walletPage) => {
// This is a workaround for the fact that the MetaMask extension ID changes, and this ID is required to detect the pop-ups.
// It won't be needed in the near future! 😇
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import {testWithMetaMask as test} from '../testWithMetaMask';
import {LOCALHOST_URL} from '../../basic.setup';
import {testWithMetaMask as test} from '../../testWithMetaMask';

// Test is creating a Multisig DAO and opens the DAO dashboard
test('Create Multisig DAO', async ({context, page, extensionId, metamask}) => {
await page.goto('http://localhost:5173/');
await page.goto(`${LOCALHOST_URL}/`);
await page.getByRole('button', {name: 'Accept all'}).click();
await page.getByRole('button', {name: 'Connect wallet'}).click();
await page.getByRole('button', {name: 'MetaMask MetaMask'}).nth(0).click();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {testWithMetaMask as test} from '../testWithMetaMask';
import {testWithMetaMask as test} from '../../testWithMetaMask';

// Test is publishing a signaling Proposal and voting on it
test('Publish signaling Proposal', async ({
Expand All @@ -7,7 +7,7 @@ test('Publish signaling Proposal', async ({
extensionId,
metamask,
}) => {
await page.goto('http://localhost:5173/');
await page.goto(`${LOCALHOST_URL}/`);
await page.getByRole('button', {name: 'Accept all'}).click();
cgero-eth marked this conversation as resolved.
Show resolved Hide resolved
await page.getByRole('button', {name: 'Connect wallet'}).click();
await page.getByRole('button', {name: 'MetaMask MetaMask'}).nth(0).click();
Expand All @@ -19,7 +19,9 @@ test('Publish signaling Proposal', async ({
.getByRole('link', {name: 'MD Multisig DAO DAO generated'})
.first()
.click();
await page.getByRole('button', {name: 'New proposal'}).click();
await page
.getByRole('button', {name: /New proposal|Create proposal/})
.click();
await page.getByRole('button', {name: 'Switch to Ethereum Sepolia'}).click();
await metamask.approveSwitchNetwork();
await page.waitForTimeout(1000);
Expand All @@ -42,5 +44,6 @@ test('Publish signaling Proposal', async ({
await page.getByRole('button', {name: 'Open your proposal'}).click();
await page.getByRole('button', {name: 'Approve'}).click();
await page.getByRole('button', {name: 'Approve'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Continue to proposal'}).click();
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {testWithMetaMask as test} from '../testWithMetaMask';
import {LOCALHOST_URL} from '../../basic.setup';
import {testWithMetaMask as test} from '../../testWithMetaMask';

// Test is publishing, approving, and executing a withdrawal of DAO funds
test('Withdraw DAO funds proposal', async ({
Expand All @@ -8,7 +9,7 @@ test('Withdraw DAO funds proposal', async ({
metamask,
}) => {
await page.goto(
'http://localhost:5173/#/daos/sepolia/0xc477632e39f44e19612611a0113d476f15ef0e84/dashboard'
`${LOCALHOST_URL}/#/daos/sepolia/0xc477632e39f44e19612611a0113d476f15ef0e84/dashboard`
);
await page.getByRole('button', {name: 'Accept all'}).click();
await page.getByRole('button', {name: 'Connect wallet'}).click();
Expand Down Expand Up @@ -48,5 +49,6 @@ test('Withdraw DAO funds proposal', async ({
await page.getByRole('button', {name: 'Open your proposal'}).click();
await page.getByRole('button', {name: 'Approve and execute'}).click();
await page.getByRole('button', {name: 'Approve and execute'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Continue to proposal'}).click();
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {testWithMetaMask as test} from '../testWithMetaMask';
import {testWithMetaMask as test} from '../../testWithMetaMask';

// // Test is publishing, approving, and executing a proposal to add a DAO member
test('Add DAO member Proposal', async ({
Expand All @@ -7,7 +7,7 @@ test('Add DAO member Proposal', async ({
extensionId,
metamask,
}) => {
await page.goto('http://localhost:5173/');
await page.goto(`${LOCALHOST_URL}/`);
await page.getByRole('button', {name: 'Accept all'}).click();
await page.getByRole('button', {name: 'Connect wallet'}).click();
await page.getByRole('button', {name: 'MetaMask MetaMask'}).nth(0).click();
Expand Down Expand Up @@ -47,5 +47,6 @@ test('Add DAO member Proposal', async ({
await page.getByRole('button', {name: 'Open your proposal'}).click();
await page.getByRole('button', {name: 'Approve and execute'}).click();
await page.getByRole('button', {name: 'Approve and execute'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Continue to proposal'}).click();
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {testWithMetaMask as test} from '../testWithMetaMask';
import {testWithMetaMask as test} from '../../testWithMetaMask';

// // Test is publishing, approving, and executing a proposal to edit a DAO settings
test('Edit DAO settings Proposal', async ({
Expand All @@ -7,7 +7,7 @@ test('Edit DAO settings Proposal', async ({
extensionId,
metamask,
}) => {
await page.goto('http://localhost:5173/');
await page.goto(`${LOCALHOST_URL}/`);
await page.getByRole('button', {name: 'Accept all'}).click();
await page.getByRole('button', {name: 'Connect wallet'}).click();
await page.getByRole('button', {name: 'MetaMask MetaMask'}).nth(0).click();
Expand Down Expand Up @@ -62,5 +62,6 @@ test('Edit DAO settings Proposal', async ({
await page.getByRole('button', {name: 'Open your proposal'}).click();
await page.getByRole('button', {name: 'Approve and execute'}).click();
await page.getByRole('button', {name: 'Approve and execute'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Continue to proposal'}).click();
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import {testWithMetaMask as test} from '../../../../testWithMetaMask';

// Test is creating a Token Based DAO (governance compatible token) and opens the DAO dashboard
test('Create Token Based DAO (governance compatible)', async ({
context,
page,
extensionId,
metamask,
}) => {
await page.goto(`${LOCALHOST_URL}/`);
await page.getByRole('button', {name: 'Accept all'}).click();
await page.getByRole('button', {name: 'Connect wallet'}).click();
await page.getByRole('button', {name: 'MetaMask MetaMask'}).nth(0).click();
await metamask.connectToDapp();
await page.getByRole('button', {name: 'Create a DAO'}).click();
await page.getByRole('button', {name: 'Build your DAO'}).click();
await page.getByRole('radio', {name: 'Testnet'}).click();
await page.getByText('Ethereum Sepolia').click();
await page.getByRole('button', {name: 'Next'}).click();
await page.getByPlaceholder("Type your DAO's name …").click();
await page
.getByPlaceholder("Type your DAO's name …")
.fill('Token Based DAO (governance compatible token)');
await page.getByPlaceholder('Type your summary …').click();
await page
.getByPlaceholder('Type your summary …')
.fill('DAO generated by automated E2E tests');
await page.getByRole('button', {name: 'Next'}).click();
await page.locator('div').filter({hasText: /^Yes$/}).nth(2).click();
await page.getByPlaceholder('0x…').click();
await page
.getByPlaceholder('0x…')
.fill('0x065A7AfA22FD8f7096254cd0E23eB1bafa2db984');
await page.getByRole('button', {name: 'Next'}).click();
await page.getByRole('button', {name: 'Next'}).click();
await page.locator('.sc-FjLsS > .w-4').first().click();
await page
.locator(
'div:nth-child(2) > .ml-auto > .md\\:flex > .sc-fbbsWf > .sc-FjLsS > .w-4'
)
.click();
await page
.locator(
'div:nth-child(3) > .ml-auto > .md\\:flex > .sc-fbbsWf > .sc-FjLsS > .w-4'
)
.click();
await page
.locator(
'div:nth-child(4) > .ml-auto > .md\\:flex > .sc-fbbsWf > .sc-FjLsS > .w-4'
)
.click();
await page.getByRole('button', {name: 'Deploy your DAO'}).click();
await page.getByRole('button', {name: 'Switch to Ethereum Sepolia'}).click();
await metamask.approveSwitchNetwork();
await page.waitForTimeout(1000);
await page.getByRole('button', {name: 'Deploy your DAO'}).click();
await page.getByRole('button', {name: 'Approve transaction'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Launch DAO Dashboard'}).click();
await page.getByRole('button', {name: 'Open your DAO'}).click();
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import {testWithMetaMask as test} from '../../../../testWithMetaMask';

// Test is publishing a signaling Proposal and voting on it
test('Publish signaling Proposal', async ({
context,
page,
extensionId,
metamask,
}) => {
await page.goto(`${LOCALHOST_URL}/`);
await page.getByRole('button', {name: 'Accept all'}).click();
await page.getByRole('button', {name: 'Connect wallet'}).click();
await page.getByRole('button', {name: 'MetaMask MetaMask'}).nth(0).click();
await metamask.connectToDapp();
await page.locator('[id="radix-\\:r16\\:"]').click();
await page.getByText('Sort by recently created').click();
await page.getByRole('button', {name: 'Show more'}).click();
await page
.getByRole('link', {
name: 'TB Token Based DAO (governance compatible token) DAO generated by automated E2E',
})
.first()
.click();
await page
.getByRole('button', {name: /New proposal|Create proposal/})
.click();
await page.getByRole('button', {name: 'Switch to Ethereum Sepolia'}).click();
await metamask.approveSwitchNetwork();
await page.waitForTimeout(1000);
await page.getByPlaceholder('Give your proposal a title').click();
await page
.getByPlaceholder('Give your proposal a title')
.fill('Create signaling proposal');
await page.getByPlaceholder('Describe your proposal in 2-3').click();
await page
.getByPlaceholder('Describe your proposal in 2-3')
.fill('Create signaling proposal');
await page.locator('.tiptap').click();
await page.locator('.tiptap').fill('Create signaling proposal');
await page.getByRole('button', {name: 'Next'}).click();
await page.getByRole('button', {name: 'Next'}).click();
await page.getByRole('button', {name: 'Next'}).click();
await page.getByRole('button', {name: 'Publish proposal'}).click();
await page.getByRole('button', {name: 'Create proposal now'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Open your proposal'}).click();
await page.getByRole('button', {name: 'Vote now'}).click();
await page.getByText('YesYour choice will be').click();
await page.getByRole('button', {name: 'Submit your vote'}).click();
await page.getByRole('button', {name: 'Vote now'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Open your proposal'}).click();
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import {LOCALHOST_URL} from '../../../../basic.setup';
import {testWithMetaMask as test} from '../../../../testWithMetaMask';

// Test is publishing, approving, and executing a withdrawal of DAO funds
test('Withdraw DAO funds proposal', async ({
context,
page,
extensionId,
metamask,
}) => {
await page.goto(
`${LOCALHOST_URL}/#/daos/sepolia/0xf4795943aa64031d6d32b6e76899dbb9bced91b6/dashboard`
);
await page.getByRole('button', {name: 'Accept all'}).click();
await page.getByRole('button', {name: 'Connect wallet'}).click();
await page.getByRole('button', {name: 'Connect wallet now'}).click();
await page.getByRole('button', {name: 'MetaMask MetaMask'}).nth(0).click();
await metamask.connectToDapp();
await page.getByRole('button', {name: 'New transfer'}).click();
await page.getByRole('button', {name: 'Withdraw assets Create a'}).click();
await page.getByRole('button', {name: 'Switch to Ethereum Sepolia'}).click();
await metamask.approveSwitchNetwork();
await page.waitForTimeout(1000);
await page.getByPlaceholder('0x…').click();
await page
.getByPlaceholder('0x…')
.fill('0xe3852100ff1a69c2cfdb7848cdd5953a63f86a6f');
await page.getByTestId('dropdown-input').click();
await page.getByText('Ether').click();
await page.getByTestId('input-value').getByPlaceholder('0').click();
await page
.getByTestId('input-value')
.getByPlaceholder('0')
.fill('0.00163632');
await page.getByRole('button', {name: 'Next'}).click();
await page.getByRole('button', {name: 'Next'}).click();
await page.getByPlaceholder('Give your proposal a title').click();
await page
.getByPlaceholder('Give your proposal a title')
.fill('Withdraw funds');
await page.getByPlaceholder('Describe your proposal in 2-3').click();
await page
.getByPlaceholder('Describe your proposal in 2-3')
.fill('Withdraw funds');
await page.getByRole('button', {name: 'Next'}).click();
await page.getByRole('button', {name: 'Publish proposal'}).click();
await page.getByRole('button', {name: 'Create proposal now'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Open your proposal'}).click();
await page.getByRole('button', {name: 'Vote now'}).click();
await page.getByText('YesYour choice will be').click();
await page.getByRole('button', {name: 'Submit your vote'}).click();
await page.getByRole('button', {name: 'Vote now'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Open your proposal'}).click();
await page.getByRole('button', {name: 'Execute now'}).click();
await page.getByRole('button', {name: 'Execute now'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Open your proposal'}).click();
});
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Test not relevant for DAO with governance compatible tokens, since not there is not in App feature to add members
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import {testWithMetaMask as test} from '../../../../testWithMetaMask';

// // Test is publishing, approving, and executing a proposal to edit a DAO settings
test('Edit DAO settings Proposal', async ({
context,
page,
extensionId,
metamask,
}) => {
await page.goto(`${LOCALHOST_URL}/`);
await page.getByRole('button', {name: 'Accept all'}).click();
await page.getByRole('button', {name: 'Connect wallet'}).click();
await page.getByRole('button', {name: 'MetaMask MetaMask'}).nth(0).click();
await metamask.connectToDapp();
await page.locator('[id="radix-\\:r16\\:"]').click();
await page.getByText('Sort by recently created').click();
await page.getByRole('button', {name: 'Show more'}).click();
await page
.getByRole('link', {
name: 'TB Token Based DAO (governance compatible token) DAO generated by automated E2E',
})
.first()
.click();
await page
.getByTestId('navLinks')
.getByRole('button', {name: 'Settings'})
.click();
await page
.getByTestId('header-page')
.getByRole('button', {name: 'Edit settings'})
.click();
await page.getByRole('button', {name: 'Switch to Ethereum Sepolia'}).click();
await metamask.approveSwitchNetwork();
await page.waitForTimeout(1000);
await page.getByRole('button', {name: 'Add link'}).click();
await page.getByPlaceholder('Lens').click();
await page.getByPlaceholder('Lens').fill('Token Based DAO');
await page.getByPlaceholder('Lens').click();
await page
.getByPlaceholder('https://')
.fill(
'https://app.aragon.org/#/daos/sepolia/0x0cbc9dd19f897ea3d3be69c7184c245461ebc191/dashboard'
);
await page.getByRole('button', {name: 'Review proposal'}).click();

await page.getByRole('button', {name: 'Next'}).click();
await page.getByPlaceholder('Give your proposal a title').click();
await page
.getByPlaceholder('Give your proposal a title')
.fill('Edit settings');
await page.getByPlaceholder('Describe your proposal in 2-3').click();
await page
.getByPlaceholder('Describe your proposal in 2-3')
.fill('Edit settings');
await page.getByRole('button', {name: 'Next'}).click();
await page.getByRole('button', {name: 'Next'}).click();
await page.getByRole('button', {name: 'Publish proposal'}).click();
await page.getByRole('button', {name: 'Create proposal now'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Open your proposal'}).click();
await page.getByRole('button', {name: 'Vote now'}).click();
await page.getByText('YesYour choice will be').click();
await page.getByRole('button', {name: 'Submit your vote'}).click();
await page.getByRole('button', {name: 'Vote now'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Open your proposal'}).click();
await page.getByRole('button', {name: 'Execute now'}).click();
await page.getByRole('button', {name: 'Execute now'}).click();
await metamask.confirmTransaction();
await page.getByRole('button', {name: 'Open your proposal'}).click();
});
Loading
Loading