Skip to content

Commit

Permalink
Merge pull request #2074 from IntersectMBO/feat/dRep-faucet-teardown
Browse files Browse the repository at this point in the history
Feat/dRep-faucet teardown
  • Loading branch information
kneerose authored Sep 24, 2024
2 parents 90fd2c6 + d74fbe2 commit d15549b
Show file tree
Hide file tree
Showing 11 changed files with 125 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const environments = {
process.env.FAUCET_API_URL ||
"https://faucet.sanchonet.world.dev.cardano.org",
apiKey: process.env.FAUCET_API_KEY || "",
address: process.env.FAUCET_ADDRESS || "addr_test1vz0ua2vyk7r4vufmpqh5v44awg8xff26hxlwyrt3uc67maqtql3kl",
},
kuber: {
apiUrl: process.env.KUBER_API_URL || "https://kuber-govtool.cardanoapi.io",
Expand Down
18 changes: 18 additions & 0 deletions tests/govtool-frontend/playwright/lib/services/kuberService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,24 @@ const kuberService = {
return kuber.signAndSubmitTx(req);
},

multipleDRepDeRegistration: (wallets: StaticWallet[]) => {
const kuber = new Kuber(faucetWallet.address, faucetWallet.payment.private);
const req = {
certificates: wallets.map((wallet) =>
Kuber.generateCert("deregisterdrep", wallet.stake.pkh)
),
selections: wallets.map((wallet) => {
return {
type: "PaymentSigningKeyShelley_ed25519",
description: "Stake Signing Key",
cborHex: `5820${wallet.stake.private}`,
};
}),
inputs: faucetWallet.address,
};
return kuber.signAndSubmitTx(req);
},

stakeDelegation: (
addr: string,
signingKey: string,
Expand Down
17 changes: 15 additions & 2 deletions tests/govtool-frontend/playwright/lib/walletManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@ const path = require("path");

const baseFilePath = path.resolve(__dirname, "./_mock");

export type Purpose = "registerDRep" | "registeredDRep" | "proposalSubmission";
export type Purpose =
| "registerDRep"
| "registeredDRep"
| "proposalSubmission"
| "registerDRepCopy"
| "registeredDRepCopy";

/**
* WalletManager class is responsible for managing a list of temporary wallets.
Expand Down Expand Up @@ -37,7 +42,7 @@ class WalletManager {
);
}

private async readWallets(purpose: Purpose): Promise<StaticWallet[]> {
async readWallets(purpose: Purpose): Promise<StaticWallet[]> {
const data: string = await new Promise((resolve, reject) =>
fs.readFile(
`${baseFilePath}/${purpose}Wallets.json`,
Expand All @@ -54,6 +59,14 @@ class WalletManager {
return JSON.parse(data);
}

async removeCopyWallet(walletToRemove: StaticWallet, purpose: Purpose) {
const currentWallets = await this.readWallets(purpose);
const updatedWallets = currentWallets.filter(
(wallet) => wallet.address !== walletToRemove.address
);
await this.writeWallets(updatedWallets, purpose);
}

async popWallet(purpose: Purpose): Promise<StaticWallet> {
const popCb = async () => {
const wallets = await this.readWallets(purpose);
Expand Down
10 changes: 10 additions & 0 deletions tests/govtool-frontend/playwright/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ export default defineConfig({
{
name: "faucet setup",
testMatch: "**/faucet.setup.ts",
teardown: environments.ci && "cleanup faucet"
},
{
name: "dRep setup",
Expand Down Expand Up @@ -91,6 +92,7 @@ export default defineConfig({
use: { ...devices["Desktop Chrome"] },
testMatch: "**/*.dRep.spec.ts",
dependencies: environments.ci ? ["auth setup", "dRep setup","wallet bootstrap"] : [],
teardown: environments.ci && "cleanup dRep"
},
{
name: "delegation",
Expand Down Expand Up @@ -128,5 +130,13 @@ export default defineConfig({
name: "cleanup delegation",
testMatch: "delegation.teardown.ts",
},
{
name: "cleanup dRep",
testMatch: "dRep.teardown.ts",
},
{
name: "cleanup faucet",
testMatch: "faucet.teardown.ts",
},
],
});
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ test.describe("Register DRep state", () => {

test.beforeEach(async ({ page, browser }) => {
wallet = await walletManager.popWallet("registerDRep");
await walletManager.removeCopyWallet(wallet, "registerDRepCopy");

const dRepAuth = await createTempDRepAuth(page, wallet);
dRepPage = await createNewPageWithWallet(browser, {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ test.describe("Temporary DReps", () => {
test.slow(); // Due to queue in pop wallets

const wallet = await walletManager.popWallet("registeredDRep");
await walletManager.removeCopyWallet(wallet, "registeredDRepCopy");

const tempDRepAuth = await createTempDRepAuth(page, wallet);
const dRepPage = await createNewPageWithWallet(browser, {
Expand All @@ -171,6 +172,7 @@ test.describe("Temporary DReps", () => {
test.setTimeout(testInfo.timeout + environments.txTimeOut);

const wallet = await walletManager.popWallet("registeredDRep");
await walletManager.removeCopyWallet(wallet, "registeredDRepCopy");

const dRepAuth = await createTempDRepAuth(page, wallet);
const dRepPage = await createNewPageWithWallet(browser, {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ test.describe("Check voting power", () => {
test.setTimeout(testInfo.timeout + environments.txTimeOut);

const wallet = await walletManager.popWallet("registeredDRep");
await walletManager.removeCopyWallet(wallet,"registeredDRepCopy");

const tempDRepAuth = await createTempDRepAuth(page, wallet);

Expand Down
2 changes: 2 additions & 0 deletions tests/govtool-frontend/playwright/tests/dRep.setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,6 @@ setup("Setup temporary DRep wallets", async () => {
// save to file
await walletManager.writeWallets(dRepWallets, "registeredDRep");
await walletManager.writeWallets(registerDRepWallets, "registerDRep");
await walletManager.writeWallets(dRepWallets, "registeredDRepCopy");
await walletManager.writeWallets(registerDRepWallets, "registerDRepCopy");
});
40 changes: 40 additions & 0 deletions tests/govtool-frontend/playwright/tests/dRep.teardown.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import environments from "@constants/environments";
import { dRepWallets } from "@constants/staticWallets";
import { setAllureEpic, setAllureStory } from "@helpers/allure";
import { pollTransaction } from "@helpers/transaction";
import { test as cleanup, expect } from "@playwright/test";
import kuberService from "@services/kuberService";
import { StaticWallet } from "@types";
import walletManager from "lib/walletManager";

cleanup.describe.configure({ timeout: environments.txTimeOut });
cleanup.beforeEach(async () => {
await setAllureEpic("Setup");
await setAllureStory("Cleanup");
});

cleanup("DRep de-registration", async () => {
const registerDRep: StaticWallet[] =
await walletManager.readWallets("registerDRepCopy");
const registeredDRep: StaticWallet[] =
await walletManager.readWallets("registeredDRepCopy");

const registeredDRepWallets = [
...dRepWallets,
...registerDRep,
...registeredDRep,
];
try {
const { txId, lockInfo } = await kuberService.multipleDRepDeRegistration(
registeredDRepWallets
);
await pollTransaction(txId, lockInfo);
} catch (err) {
console.log(err);
if (err.status === 400) {
expect(true, "DRep not registered").toBeTruthy();
} else {
throw Error(err);
}
}
});
34 changes: 34 additions & 0 deletions tests/govtool-frontend/playwright/tests/faucet.teardown.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import environments from "@constants/environments";
import { faucetWallet } from "@constants/staticWallets";
import { setAllureEpic, setAllureStory } from "@helpers/allure";
import { pollTransaction } from "@helpers/transaction";
import { test as cleanup, expect } from "@playwright/test";
import kuberService from "@services/kuberService";

cleanup.describe.configure({ timeout: environments.txTimeOut });
cleanup.beforeEach(async () => {
await setAllureEpic("Setup");
await setAllureStory("Cleanup");
});

cleanup("Refund faucet", async () => {
try {
const faucetRemainingBalance = await kuberService.getBalance(
faucetWallet.address
);

const transferBalance = Math.floor(faucetRemainingBalance) - 3;
const { txId, lockInfo } = await kuberService.transferADA(
[environments.faucet.address],
transferBalance
);
await pollTransaction(txId, lockInfo);
} catch (err) {
console.log(err);
if (err.status === 400) {
expect(true, "Failed to trasfer Ada").toBeTruthy();
} else {
throw Error(err);
}
}
});
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ setup("Setup temporary proposal wallets", async () => {
]);
await pollTransaction(initializeRes.txId, initializeRes.lockInfo);

// transfer 51_000 ADA for dRep registration
// transfer 51_000 ADA for proposal submission
const amountOutputs = proposalSubmissionsWallets.map((wallet) => {
return { address: wallet.address, value: `${51_000}A` };
});
Expand Down

0 comments on commit d15549b

Please sign in to comment.