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

test: e2e tests for manage colony feature #4164

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
Next Next commit
test: e2e tests for mint token and fund transfer features
  • Loading branch information
olgapod committed Feb 6, 2025
commit 2d535a8db8650063292b1ba0f3326d5b029b73af
357 changes: 357 additions & 0 deletions playwright/e2e/manage-colony-funds.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,357 @@
import { type BrowserContext, expect, type Page, test } from '@playwright/test';

import { Extensions } from '../models/extensions.ts';
import { ManageColonyFunds } from '../models/manage-colony-funds.ts';
import {
setCookieConsent,
signInAndNavigateToColony,
} from '../utils/common.ts';

test.describe.configure({ mode: 'serial' });
test.describe('Manage Colony Funds', () => {
let page: Page;
let context: BrowserContext;
let manageColonyFunds: ManageColonyFunds;
let extensions: Extensions;
test.beforeAll(async ({ browser, baseURL }) => {
context = await browser.newContext();
page = await context.newPage();
manageColonyFunds = new ManageColonyFunds(page);
extensions = new Extensions(page);
await setCookieConsent(context, baseURL);
await signInAndNavigateToColony(page, {
colonyUrl: '/planex',
wallet: /dev wallet 1$/i,
});
await extensions.enableReputationWeightedExtension({
colonyPath: '/planex',
});
});

test.afterAll(async () => {
await context?.close();
});
test.describe('Mint tokens', () => {
test('Permissions decision method', async () => {
const [currentBalance] = await manageColonyFunds.getBalance('planex', [
{
token: 'CREDS',
},
]);
await manageColonyFunds.open('Mint tokens');

await manageColonyFunds.fillMintTokensForm({
amount: '1_000_000',
decisionMethod: 'Permissions',
title: 'Mint tokens',
});
await manageColonyFunds.mintTokensButton.click();
await manageColonyFunds.waitForTransaction();

await expect(
manageColonyFunds.completedAction.getByRole('heading', {
name: 'Mint tokens',
}),
).toBeVisible();

await expect(
manageColonyFunds.completedAction.getByText(/Mint \w+ CREDS by \w+/),
).toBeVisible();

await expect(
manageColonyFunds.completedAction.getByText('Mint Tokens', {
exact: true,
}),
).toBeVisible();

await expect(
manageColonyFunds.completedAction.getByText('1MCREDS', {
exact: true,
}),
).toBeVisible();

await expect(
manageColonyFunds.completedAction.getByText('Permissions', {
exact: true,
}),
).toBeVisible();

await expect(
manageColonyFunds.completedAction.getByText(
'Member used permissions to',
),
).toBeVisible();

await expect(
manageColonyFunds.completedAction.getByRole('heading', {
name: 'Overview',
}),
).toBeVisible();

const [newBalance] = await manageColonyFunds.getBalance('planex', [
{
token: 'CREDS',
},
]);

const initial = parseFloat(currentBalance);
const after = parseFloat(newBalance);

await expect(after).toBeGreaterThan(initial);
});

// eslint-disable-next-line playwright/no-skipped-test
test.skip('Reputation decision method', async () => {
await manageColonyFunds.open('Mint tokens');

await manageColonyFunds.fillMintTokensForm({
amount: '1',
decisionMethod: 'Reputation',
title: 'Mint tokens',
});

await manageColonyFunds.mintTokensButton.click();
await manageColonyFunds.waitForTransaction();

await expect(manageColonyFunds.stepper).toBeVisible();
await expect(manageColonyFunds.completedAction).toBeVisible();
await expect(
manageColonyFunds.stepper.getByText(/Total stake required: \d+/),
).toBeVisible();

await manageColonyFunds.support();

await expect(manageColonyFunds.stepper).toHaveText(/100% Supported/);

await manageColonyFunds.oppose();

await expect(manageColonyFunds.stepper).toHaveText(/100% Opposed/);

await manageColonyFunds.stepper
.getByText(/Vote to support or oppose?/)
.waitFor();
await manageColonyFunds.supportButton.click();
await manageColonyFunds.submitVoteButton.click();
await manageColonyFunds.revealVoteButton.click();
await manageColonyFunds.stepper.getByText('vote revealed').waitFor();
await expect(
manageColonyFunds.stepper.getByText(
'Finalize to execute the agreed transaction',
),
).toBeVisible();
await manageColonyFunds.finalizeButton.click();

await manageColonyFunds.waitForPending();
await manageColonyFunds.claimButton.click();
await manageColonyFunds.waitForPending();
await manageColonyFunds.completedAction
.getByRole('heading', { name: 'Your overview Claimed' })
.waitFor();

await manageColonyFunds.claimButton.waitFor({
state: 'hidden',
});
});

test('Form validation', async () => {
await manageColonyFunds.open('Mint tokens');
await manageColonyFunds.mintTokensButton.click();

for (const message of ManageColonyFunds.validationMessages.mintTokens
.allRequiredFields) {
await expect(manageColonyFunds.drawer.getByText(message)).toBeVisible();
}

await manageColonyFunds.fillMintTokensForm({
title:
'This is a test title that exceeds the maximum character limit of sixty.',
});

await manageColonyFunds.mintTokensButton.click();

await expect(
manageColonyFunds.drawer.getByText(
ManageColonyFunds.validationMessages.common.title.maxLengthExceeded,
),
).toBeVisible();
});
});

test.describe('Funds transfer', () => {
test('Permissions decision method', async () => {
const transferAmount = '1';
const [serenityBalance, andromedaBalance] =
await manageColonyFunds.getBalance('planex', [
{
token: 'CREDS',
team: 'Serenity',
},
{
token: 'CREDS',
team: 'Andromeda',
},
]);
await manageColonyFunds.open('Transfer funds');

await manageColonyFunds.fillTransferFundsForm({
title: 'Transfer funds',
amount: transferAmount,
decisionMethod: 'Permissions',
from: 'Serenity',
to: 'Andromeda',
});

await manageColonyFunds.transferFundsButton.click();
await manageColonyFunds.waitForTransaction();

await expect(
manageColonyFunds.completedAction.getByText(
`Move ${transferAmount} CREDS from Serenity to Andromeda`,
),
).toBeVisible();

const [newSerenityBalance, newAndromedaBalance] =
await manageColonyFunds.getBalance('planex', [
{
token: 'CREDS',
team: 'Serenity',
},
{
token: 'CREDS',
team: 'Andromeda',
},
]);

expect(parseFloat(newSerenityBalance)).toBe(
parseFloat(serenityBalance) - parseFloat(transferAmount),
);
expect(parseFloat(newAndromedaBalance)).toBe(
parseFloat(andromedaBalance) + parseFloat(transferAmount),
);
});

// eslint-disable-next-line playwright/no-skipped-test
test.skip('Reputation decision method', async () => {
await manageColonyFunds.open('Transfer funds');

await manageColonyFunds.fillTransferFundsForm({
title: 'Transfer funds',
amount: '1',
decisionMethod: 'Reputation',
from: 'General',
to: 'Andromeda',
});

await manageColonyFunds.transferFundsButton.click();
await manageColonyFunds.waitForTransaction();

await expect(manageColonyFunds.stepper).toBeVisible();
await expect(manageColonyFunds.completedAction).toBeVisible();
await expect(
manageColonyFunds.completedAction.getByText(
/Move 1 CREDS from General to Andromeda/,
),
).toBeVisible();
await expect(
manageColonyFunds.stepper.getByText(/Total stake required: \d+/),
).toBeVisible();

await manageColonyFunds.support();

await expect(manageColonyFunds.stepper).toHaveText(/100% Supported/);

await manageColonyFunds.oppose();

await expect(manageColonyFunds.stepper).toHaveText(/100% Opposed/);

await manageColonyFunds.stepper
.getByText(/Vote to support or oppose?/)
.waitFor();
await manageColonyFunds.supportButton.click();
await manageColonyFunds.submitVoteButton.click();
await expect(
manageColonyFunds.stepper.getByText(/You voted:Support/),
).toBeVisible();

await expect(
manageColonyFunds.stepper.getByText(/^0 votes revealed$/),
).toBeVisible();

await manageColonyFunds.revealVoteButton.click();

await manageColonyFunds.stepper
.getByRole('button', {
name: 'Support wins',
})
.waitFor();

await expect(
manageColonyFunds.stepper.getByText(
'Finalize to execute the agreed transaction',
),
).toBeVisible();
await manageColonyFunds.finalizeButton.click();

await manageColonyFunds.waitForPending();
await manageColonyFunds.claimButton.click();
await manageColonyFunds.waitForPending();

await manageColonyFunds.stepper
.getByRole('heading', {
name: 'Your overview Claimed',
})
.waitFor();
});

test('Form validation', async () => {
await manageColonyFunds.open('Transfer funds');
await manageColonyFunds.transferFundsButton.click();

for (const message of ManageColonyFunds.validationMessages.fundsTransfer
.allRequiredFields) {
await expect(manageColonyFunds.drawer.getByText(message)).toBeVisible();
}

await expect(
manageColonyFunds.drawer.getByText(
ManageColonyFunds.validationMessages.fundsTransfer.team.sameTeam,
),
).toBeHidden();

await manageColonyFunds.fillTransferFundsForm({
from: 'General',
to: 'General',
amount: '1',
title: 'Transfer funds',
decisionMethod: 'Permissions',
});

await expect(
manageColonyFunds.drawer.getByText(
ManageColonyFunds.validationMessages.fundsTransfer.team.sameTeam,
),
).toBeVisible();

await manageColonyFunds.fillTransferFundsForm({
amount: '999_999_999_999_999_999',
});

await expect(
manageColonyFunds.drawer.getByText(
ManageColonyFunds.validationMessages.fundsTransfer.amount
.notEnoughFunds,
),
).toBeVisible();

await manageColonyFunds.fillTransferFundsForm({
tokenSymbol: 'ƓƓƓ',
});

await expect(
manageColonyFunds.drawer.getByText(
ManageColonyFunds.validationMessages.fundsTransfer.token.locked,
),
).toBeVisible();
});
});
});
6 changes: 3 additions & 3 deletions playwright/e2e/staged-payment.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ test.describe('Staged Payment', () => {

test('Permission decision method', async () => {
await stagedPayment.fillForm({
title: 'Test Staged Payment with Permission Decision Method',
title: 'Test Staged Payment',
team: 'General',
recipient: recipientAddress,
decisionMethod: 'Permissions',
Expand Down Expand Up @@ -173,9 +173,9 @@ test.describe('Staged Payment', () => {
await verifyCompletedStagedPayment(stagedPayment);
});

test('Reputation decision method', async () => {
test('Reputation decision method | Voting', async () => {
await stagedPayment.fillForm({
title: 'Test Staged Payment with Reputation Decision Method',
title: 'Test Staged Payment',
team: 'General',
recipient: recipientAddress,
decisionMethod: 'Permissions',
Expand Down
Loading