Skip to content

Commit 3073c1d

Browse files
authored
Merge pull request #3004 from IntersectMBO/fix/report-315-failing-tests
Fix: report 315 failing tests
2 parents d8d0f07 + 549d7a2 commit 3073c1d

File tree

11 files changed

+132
-2569
lines changed

11 files changed

+132
-2569
lines changed

tests/govtool-frontend/playwright/lib/_mock/infoProposedGAs.json

Lines changed: 0 additions & 1110 deletions
This file was deleted.

tests/govtool-frontend/playwright/lib/_mock/treasuryProposedGAs.json

Lines changed: 0 additions & 1362 deletions
This file was deleted.

tests/govtool-frontend/playwright/lib/constants/index.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,12 @@ export const PROPOSAL_TYPE_FILTERS = [
1919
export const BOOTSTRAP_PROPOSAL_TYPE_FILTERS = ["Info Action"];
2020

2121
export const PROPOSAL_STATUS_FILTER = ["Submitted for vote", "Active proposal"];
22+
23+
export const guardrailsScript = {
24+
type: "PlutusScriptV3",
25+
description: "",
26+
cborHex: "46450101004981",
27+
};
28+
29+
export const guardrailsScriptHash =
30+
"914d97d63e2b7113465739faddd82362b1deaeedbcc4d01016c35c6e";

tests/govtool-frontend/playwright/lib/helpers/metadata.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,12 @@ export async function uploadMetadataAndGetJsonHash() {
6262
);
6363
return { dataHash, url };
6464
}
65+
66+
export async function uploadScriptAndGenerateUrl(payload: Object) {
67+
const data = JSON.stringify(payload);
68+
const jsonData = JSON.parse(data);
69+
return await metadataBucketService.uploadMetadata(
70+
"guardrail-script",
71+
jsonData
72+
);
73+
}

tests/govtool-frontend/playwright/lib/pages/governanceActionDetailsPage.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,28 @@ export default class GovernanceActionDetailsPage {
124124
}
125125
}
126126

127+
async getDRepTotalAbstainVoted(
128+
proposal: IProposal,
129+
metricsResponsePromise: Promise<Response>
130+
): Promise<number | undefined> {
131+
const metricsResponses = await Promise.resolve(metricsResponsePromise);
132+
const alwaysAbstainVotingPower = await metricsResponses
133+
.json()
134+
.then((data) => data.alwaysAbstainVotingPower);
135+
136+
if (
137+
alwaysAbstainVotingPower &&
138+
typeof alwaysAbstainVotingPower === "number"
139+
) {
140+
const totalAbstainVoted =
141+
alwaysAbstainVotingPower + proposal.dRepAbstainVotes;
142+
143+
return totalAbstainVoted;
144+
} else {
145+
return proposal.dRepAbstainVotes;
146+
}
147+
}
148+
127149
async downloadVoteMetadata() {
128150
const download: Download = await this.page.waitForEvent("download");
129151
return downloadMetadata(download);

tests/govtool-frontend/playwright/lib/pages/proposalSubmissionPage.ts

Lines changed: 66 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import environments from "@constants/environments";
2+
import { guardrailsScript, guardrailsScriptHash } from "@constants/index";
23
import { proposal04Wallet } from "@constants/staticWallets";
34
import { faker } from "@faker-js/faker";
45
import { isBootStrapingPhase } from "@helpers/cardano";
56
import { ShelleyWallet } from "@helpers/crypto";
67
import { expectWithInfo } from "@helpers/exceptionHandler";
7-
import { calculateHash, downloadMetadata } from "@helpers/metadata";
8+
import {
9+
downloadMetadata,
10+
uploadScriptAndGenerateUrl,
11+
} from "@helpers/metadata";
812
import { extractProposalIdFromUrl } from "@helpers/string";
9-
import { invalid } from "@mock/index";
13+
import { invalid, valid } from "@mock/index";
1014
import { Download, Locator, Page, expect } from "@playwright/test";
1115
import metadataBucketService from "@services/metadataBucketService";
1216
import {
@@ -66,9 +70,9 @@ export default class ProposalSubmissionPage {
6670
readonly createNewProposalBtn = this.page.getByTestId(
6771
"create-new-proposal-button"
6872
);
69-
readonly guardrailsScriptCheckbox = this.page.getByLabel(
70-
"Do you want to provide new"
71-
); // BUG missing test id
73+
readonly guardrailsScriptCheckbox = this.page.getByTestId(
74+
"chb-prop-have-guardrails-script"
75+
);
7276

7377
// input fields
7478
readonly titleInput = this.page.getByTestId("title-input");
@@ -172,7 +176,9 @@ export default class ProposalSubmissionPage {
172176
await this.treasuryBtn.click();
173177
} else {
174178
await this.updateTheConstitutionBtn.click();
175-
await this.guardrailsScriptCheckbox.click();
179+
if (governanceProposal.has_guardrails) {
180+
await this.guardrailsScriptCheckbox.click();
181+
}
176182
}
177183

178184
await this.fillupFormWithTypeSelected(governanceProposal);
@@ -199,12 +205,14 @@ export default class ProposalSubmissionPage {
199205
governanceProposal.prop_constitution_url
200206
);
201207

202-
await this.guardrailsScriptUrlInput.fill(
203-
governanceProposal.prop_guardrails_script_url
204-
);
205-
await this.guardrailsScriptHashInput.fill(
206-
governanceProposal.prop_guardrails_script_hash
207-
);
208+
if (governanceProposal.has_guardrails) {
209+
await this.guardrailsScriptUrlInput.fill(
210+
governanceProposal.prop_guardrails_script_url
211+
);
212+
await this.guardrailsScriptHashInput.fill(
213+
governanceProposal.prop_guardrails_script_hash
214+
);
215+
}
208216
}
209217

210218
async fillProposalLinks(proposal_links: Array<ProposalLink>) {
@@ -358,11 +366,19 @@ export default class ProposalSubmissionPage {
358366
await expect(this.continueBtn).toBeDisabled();
359367
}
360368

361-
generateValidProposalFormFields(
362-
proposalType: ProposalType,
363-
is_draft?: boolean,
364-
receivingAddress?: string
365-
) {
369+
async generateValidProposalFormFields({
370+
proposalType,
371+
is_draft,
372+
receivingAddress,
373+
hasGuardrails = true,
374+
forValidation = false,
375+
}: {
376+
proposalType: ProposalType;
377+
is_draft?: boolean;
378+
receivingAddress?: string;
379+
hasGuardrails?: boolean;
380+
forValidation?: boolean;
381+
}) {
366382
const proposal: ProposalCreateRequest = {
367383
prop_name: faker.lorem.sentence(6),
368384
prop_abstract: faker.lorem.words(5),
@@ -376,6 +392,7 @@ export default class ProposalSubmissionPage {
376392
},
377393
],
378394
gov_action_type_id: Object.values(ProposalType).indexOf(proposalType),
395+
has_guardrails: hasGuardrails,
379396
is_draft: !!is_draft,
380397
};
381398

@@ -386,16 +403,28 @@ export default class ProposalSubmissionPage {
386403
.toString());
387404
}
388405
if (proposalType === ProposalType.updatesToTheConstitution) {
389-
proposal.prop_constitution_url = faker.internet.url();
390-
proposal.prop_guardrails_script_url = faker.internet.url();
391-
proposal.prop_guardrails_script_hash = calculateHash(
392-
faker.lorem.paragraph()
393-
);
406+
proposal.prop_constitution_url = forValidation
407+
? valid.url()
408+
: environments.metadataBucketUrl + "/data.jsonId";
409+
410+
if (hasGuardrails) {
411+
if (!forValidation) {
412+
const url = await uploadScriptAndGenerateUrl(guardrailsScript);
413+
proposal.prop_guardrails_script_url = url;
414+
proposal.prop_guardrails_script_hash = guardrailsScriptHash;
415+
} else {
416+
proposal.prop_guardrails_script_url = valid.url();
417+
proposal.prop_guardrails_script_hash = faker.string.alphanumeric(64);
418+
}
419+
}
394420
}
395421
return proposal;
396422
}
397423

398-
generateInValidProposalFormFields(proposalType: ProposalType) {
424+
generateInValidProposalFormFields(
425+
proposalType: ProposalType,
426+
hasGuardrails: boolean = true
427+
) {
399428
const proposal: ProposalCreateRequest = {
400429
prop_name: invalid.proposalTitle(),
401430
prop_abstract: invalid.paragraph(2510),
@@ -409,6 +438,7 @@ export default class ProposalSubmissionPage {
409438
},
410439
],
411440
gov_action_type_id: Object.values(ProposalType).indexOf(proposalType),
441+
has_guardrails: hasGuardrails,
412442
is_draft: false,
413443
};
414444

@@ -437,11 +467,12 @@ export default class ProposalSubmissionPage {
437467
);
438468

439469
const proposalRequest: ProposalCreateRequest =
440-
this.generateValidProposalFormFields(
441-
(await isBootStrapingPhase()) ? ProposalType.info : proposalType,
442-
false,
443-
receivingAddr
444-
);
470+
await this.generateValidProposalFormFields({
471+
proposalType: (await isBootStrapingPhase())
472+
? ProposalType.info
473+
: proposalType,
474+
receivingAddress: receivingAddr,
475+
});
445476
await this.fillupForm(proposalRequest);
446477
await this.continueBtn.click();
447478
await this.submitBtn.click();
@@ -457,13 +488,13 @@ export default class ProposalSubmissionPage {
457488
await this.goto();
458489
await this.addLinkBtn.click();
459490

460-
const proposalFormValue = this.generateValidProposalFormFields(
461-
proposalType,
462-
true,
463-
ShelleyWallet.fromJson(proposal04Wallet).rewardAddressBech32(
464-
environments.networkId
465-
)
466-
);
491+
const proposalFormValue = await this.generateValidProposalFormFields({
492+
proposalType: proposalType,
493+
is_draft: true,
494+
receivingAddress: ShelleyWallet.fromJson(
495+
proposal04Wallet
496+
).rewardAddressBech32(environments.networkId),
497+
});
467498
await this.fillupForm(proposalFormValue);
468499

469500
await this.saveDraftBtn.click();

tests/govtool-frontend/playwright/lib/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ export type ProposalCreateRequest = {
163163
prop_constitution_url?: string;
164164
prop_guardrails_script_url?: string;
165165
prop_guardrails_script_hash?: string;
166+
has_guardrails?: boolean;
166167
is_draft: boolean;
167168
};
168169

tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.dRep.spec.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -184,10 +184,11 @@ test.describe("Check vote count", () => {
184184
`${proposalToCheck.txHash}#${proposalToCheck.index}`
185185
);
186186

187-
const dRepNotVoted = await govActionDetailsPage.getDRepNotVoted(
188-
proposalToCheck,
189-
metricsResponsePromise
190-
);
187+
const dRepTotalAbstainVote =
188+
await govActionDetailsPage.getDRepTotalAbstainVoted(
189+
proposalToCheck,
190+
metricsResponsePromise
191+
);
191192

192193
await govActionDetailsPage.showVotesBtn.click();
193194

@@ -197,17 +198,11 @@ test.describe("Check vote count", () => {
197198
`₳ ${correctVoteAdaFormat(proposalToCheck.dRepYesVotes)}`
198199
);
199200
await expect(govActionDetailsPage.dRepAbstainVotes).toHaveText(
200-
`₳ ${correctVoteAdaFormat(proposalToCheck.dRepAbstainVotes)}`
201+
`₳ ${correctVoteAdaFormat(dRepTotalAbstainVote)}`
201202
);
202203
await expect(govActionDetailsPage.dRepNoVotes).toHaveText(
203204
`₳ ${correctVoteAdaFormat(proposalToCheck.dRepNoVotes)}`
204205
);
205-
206-
if (dRepNotVoted) {
207-
await expect(govActionDetailsPage.dRepNotVoted).toHaveText(
208-
`₳ ${correctVoteAdaFormat(dRepNotVoted)}`
209-
);
210-
}
211206
}
212207

213208
// check sPos votes

tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.spec.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,6 @@ test("4K. Should display correct vote counts on governance details page for disc
7575
`${proposalToCheck.txHash}#${proposalToCheck.index}`
7676
);
7777

78-
const dRepNotVoted = await govActionDetailsPage.getDRepNotVoted(
79-
proposalToCheck,
80-
metricsResponsePromise
81-
);
82-
8378
// check dRep votes
8479
if (await areDRepVoteTotalsDisplayed(proposalToCheck)) {
8580
await expect(govActionDetailsPage.dRepYesVotes).toHaveText(
@@ -91,12 +86,6 @@ test("4K. Should display correct vote counts on governance details page for disc
9186
await expect(govActionDetailsPage.dRepNoVotes).toHaveText(
9287
`₳ ${correctVoteAdaFormat(proposalToCheck.dRepNoVotes)}`
9388
);
94-
95-
if (dRepNotVoted) {
96-
await expect(govActionDetailsPage.dRepNotVoted).toHaveText(
97-
`₳ ${correctVoteAdaFormat(dRepNotVoted)}`
98-
);
99-
}
10089
}
10190
// check sPos votes
10291
if (await areSPOVoteTotalsDisplayed(proposalToCheck)) {

tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ test.describe("Proposal created logged state", () => {
6464
await ShelleyWallet.generate()
6565
).rewardAddressBech32(environments.networkId);
6666
const formFields: ProposalCreateRequest =
67-
proposalSubmissionPage.generateValidProposalFormFields(
68-
type,
69-
false,
70-
rewardAddressBech32
71-
);
67+
await proposalSubmissionPage.generateValidProposalFormFields({
68+
proposalType: type,
69+
receivingAddress: rewardAddressBech32,
70+
forValidation: true,
71+
});
7272
await proposalSubmissionPage.validateForm(formFields);
7373
}
7474

@@ -141,11 +141,10 @@ test.describe("Proposal created logged state", () => {
141141
wallet
142142
).rewardAddressBech32(environments.networkId);
143143
const proposal: ProposalCreateRequest =
144-
proposalSubmissionPage.generateValidProposalFormFields(
145-
type,
146-
false,
147-
stakeAddressBech32
148-
);
144+
await proposalSubmissionPage.generateValidProposalFormFields({
145+
proposalType: type,
146+
receivingAddress: stakeAddressBech32,
147+
});
149148

150149
await proposalSubmissionPage.fillupForm(proposal);
151150
await proposalSubmissionPage.continueBtn.click();
@@ -195,11 +194,10 @@ test.describe("Proposal created logged state", () => {
195194
proposal01Wallet
196195
).rewardAddressBech32(environments.networkId);
197196
const proposal: ProposalCreateRequest =
198-
proposalSubmissionPage.generateValidProposalFormFields(
199-
type,
200-
false,
201-
rewardAddressBech32
202-
);
197+
await proposalSubmissionPage.generateValidProposalFormFields({
198+
proposalType: type,
199+
receivingAddress: rewardAddressBech32,
200+
});
203201

204202
await proposalSubmissionPage.fillupForm(proposal);
205203
await proposalSubmissionPage.continueBtn.click();

0 commit comments

Comments
 (0)