Skip to content

Commit f282593

Browse files
authored
Merge pull request #3575 from IntersectMBO/feat/dRep-form-image-validation
feat: add image validation for dRep form
2 parents 588c66d + 58162bb commit f282593

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

tests/govtool-frontend/playwright/lib/forms/dRepForm.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const formErrors = {
1313
],
1414
linkDescription: "max-80-characters-error",
1515
email: "invalid-email-address-error",
16+
image: "invalid-image-url-error",
1617
links: {
1718
url: "link-reference-description-1-error",
1819
description: "link-reference-description-1-error",
@@ -59,6 +60,9 @@ export default class DRepForm {
5960
readonly motivationsInput = this.form.getByTestId("motivations-input");
6061
readonly qualificationsInput = this.form.getByTestId("qualifications-input");
6162
readonly paymentAddressInput = this.form.getByTestId("payment-address-input");
63+
readonly imageInput = this.form.locator(
64+
"div:nth-child(4) > div:nth-child(2) > input"
65+
); // BUG missing test id
6266
readonly doNotListCheckBox = this.form.getByRole("checkbox");
6367

6468
constructor(private readonly form: Page) {}
@@ -149,6 +153,7 @@ export default class DRepForm {
149153
await this.motivationsInput.fill(dRepInfo.motivations);
150154
await this.qualificationsInput.fill(dRepInfo.qualifications);
151155
await this.paymentAddressInput.fill(dRepInfo.paymentAddress);
156+
await this.imageInput.fill(dRepInfo.image);
152157
await this.linkRefrenceFirstUrlInput.fill(
153158
dRepInfo.linksReferenceLinks[0].url
154159
);
@@ -175,6 +180,9 @@ export default class DRepForm {
175180
const motivationsInputText = await this.motivationsInput.textContent();
176181
const qualificationsInputText =
177182
await this.qualificationsInput.textContent();
183+
const isImageErrorVisible = await this.form
184+
.getByTestId(formErrors.image)
185+
.isVisible();
178186
const isReferenceLinkErrorVisible = await this.form
179187
.getByTestId(formErrors.links.url)
180188
.isVisible();
@@ -202,6 +210,10 @@ export default class DRepForm {
202210
`${dRepInfo.qualifications} is not equal to ${qualificationsInputText}`,
203211
}).toEqual(dRepInfo.qualifications);
204212

213+
await expect(this.form.getByTestId(formErrors.image), {
214+
message: isImageErrorVisible && `${dRepInfo.image} is an invalid image`,
215+
}).toBeHidden();
216+
205217
await expect(this.form.getByTestId(formErrors.links.url), {
206218
message:
207219
isReferenceLinkErrorVisible &&
@@ -246,6 +258,9 @@ export default class DRepForm {
246258
const motivationsInputText = await this.motivationsInput.textContent();
247259
const qualificationsInputText =
248260
await this.qualificationsInput.textContent();
261+
const isImageErrorVisible = await this.form
262+
.getByTestId(formErrors.image)
263+
.isVisible();
249264
const isReferenceLinkErrorVisible = await this.form
250265
.getByTestId(formErrors.links.url)
251266
.isVisible();
@@ -284,6 +299,12 @@ export default class DRepForm {
284299
`${dRepInfo.qualifications} is equal to ${qualificationsInputText}`,
285300
}).not.toEqual(dRepInfo.qualifications);
286301

302+
await expect(this.form.getByTestId(formErrors.image), {
303+
message: !isImageErrorVisible && `${dRepInfo.image} is a valid image`,
304+
}).toBeVisible({
305+
timeout: 60_000,
306+
});
307+
287308
await expect(this.form.getByTestId(formErrors.links.url), {
288309
message:
289310
!isReferenceLinkErrorVisible &&

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
import DRepDirectoryPage from "@pages/dRepDirectoryPage";
22
import { expect, Page } from "@playwright/test";
3-
import { IDRep } from "@types";
3+
import { IDRep, IDRepInfo } from "@types";
44
import { bech32 } from "bech32";
55
import * as crypto from "crypto";
66
import { functionWaitedAssert } from "./waitedLoop";
7-
import { invalid as mockInvalid, valid as mockValid } from "@mock/index";
7+
import {
8+
invalid,
9+
invalid as mockInvalid,
10+
valid as mockValid,
11+
} from "@mock/index";
812
import { faker } from "@faker-js/faker";
913
import { ShelleyWallet } from "./crypto";
1014
import environments from "@constants/environments";
@@ -131,7 +135,7 @@ export function convertDRep(
131135
return { cip129: cip129DRep, cip105: cip105DRep };
132136
}
133137

134-
export async function generateValidDRepInfo() {
138+
export async function generateValidDRepInfo(): Promise<IDRepInfo> {
135139
return {
136140
name: mockValid.name(),
137141
objectives: faker.lorem.paragraph(2),
@@ -140,6 +144,7 @@ export async function generateValidDRepInfo() {
140144
paymentAddress: (await ShelleyWallet.generate()).addressBech32(
141145
environments.networkId
142146
),
147+
image: faker.image.avatarGitHub(),
143148
linksReferenceLinks: [
144149
{
145150
url: faker.internet.url(),
@@ -155,13 +160,14 @@ export async function generateValidDRepInfo() {
155160
};
156161
}
157162

158-
export function generateInvalidDRepInfo() {
163+
export function generateInvalidDRepInfo(): IDRepInfo {
159164
return {
160165
name: mockInvalid.name(),
161166
objectives: faker.lorem.paragraph(40),
162167
motivations: faker.lorem.paragraph(40),
163168
qualifications: faker.lorem.paragraph(40),
164169
paymentAddress: faker.string.alphanumeric(45),
170+
image: invalid.url(),
165171
linksReferenceLinks: [
166172
{
167173
url: mockInvalid.url(),

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export type IDRepInfo = {
6666
objectives?: string;
6767
motivations?: string;
6868
qualifications?: string;
69+
image?: string;
6970
paymentAddress?: string;
7071
identityReferenceLinks?: LinkType[];
7172
linksReferenceLinks?: LinkType[];

0 commit comments

Comments
 (0)