diff --git a/.github/ISSUE_TEMPLATE/feature_idea.yml b/.github/ISSUE_TEMPLATE/feature_idea.yml index 956ceb95f..8a744a07f 100644 --- a/.github/ISSUE_TEMPLATE/feature_idea.yml +++ b/.github/ISSUE_TEMPLATE/feature_idea.yml @@ -85,4 +85,4 @@ body: placeholder: | As a [ada holder | DRep | Direct voter], I want [some goal] so that [some reason]. validations: - required: false \ No newline at end of file + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_idea_2.yml b/.github/ISSUE_TEMPLATE/feature_idea_2.yml new file mode 100644 index 000000000..596584fc7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_idea_2.yml @@ -0,0 +1,40 @@ +name: Feature Suggestion +description: Suggest a new feature or enhancement for GovTool. +labels: ["Feature Request", "Needs UX Review"] +body: + - type: markdown + attributes: + value: + Please fill out the following details. + - type: textarea + id: problem-statement + attributes: + label: "💡 Suggestion or feature" + description: "Please describe the user need, idea, or pain point." + placeholder: "Example: Users would benefit from having X functionality, so they can do Y..." + validations: + required: true + - type: textarea + id: user-impact + attributes: + label: "Who does this help?" + description: "Which users will benefit from this feature? How does it improve their experience?" + placeholder: "Example: This feature will help first-time users onboard faster..." + validations: + required: true + - type: textarea + id: dependencies + attributes: + label: "How might we do this?" + description: "Suggestions on implementation" + placeholder: "Example: Add a button that says GO to the home page" + validations: + required: false + - type: textarea + id: other-info + attributes: + label: "Anything else you might want to add?" + description: "Free text box for any comments" + placeholder: "I love GovTool, and so does my dog!" + validations: + required: false \ No newline at end of file diff --git a/govtool/frontend/package-lock.json b/govtool/frontend/package-lock.json index ab58512a4..aacb7a78e 100644 --- a/govtool/frontend/package-lock.json +++ b/govtool/frontend/package-lock.json @@ -15,7 +15,7 @@ "@hookform/resolvers": "^3.3.1", "@intersect.mbo/govtool-outcomes-pillar-ui": "1.3.0", "@intersect.mbo/intersectmbo.org-icons-set": "^1.0.8", - "@intersect.mbo/pdf-ui": "0.7.0-beta-8", + "@intersect.mbo/pdf-ui": "0.7.0-beta-11", "@mui/icons-material": "^5.14.3", "@mui/material": "^5.14.4", "@rollup/plugin-babel": "^6.0.4", @@ -3423,9 +3423,9 @@ "license": "ISC" }, "node_modules/@intersect.mbo/pdf-ui": { - "version": "0.7.0-beta-8", - "resolved": "https://registry.npmjs.org/@intersect.mbo/pdf-ui/-/pdf-ui-0.7.0-beta-8.tgz", - "integrity": "sha512-xBd8rl2qC+T5/rHAkDYdD63FoZi84E3LoiVkUZceRzlUcu3/6Ycia8BOzMszS+S9eLPHzYHO6HXy9dOqTObysg==", + "version": "0.7.0-beta-11", + "resolved": "https://registry.npmjs.org/@intersect.mbo/pdf-ui/-/pdf-ui-0.7.0-beta-11.tgz", + "integrity": "sha512-amFT8stsOFMeFZjoTsCpUguUi2d/tlMZ4G/ARud1ewrRfjDvu6PJhGYlGl2gZBGa75GgvNM27hfEbzv7MDOInA==", "dependencies": { "@emurgo/cardano-serialization-lib-asmjs": "^12.0.0-beta.2", "@fontsource/poppins": "^5.0.14", diff --git a/govtool/frontend/package.json b/govtool/frontend/package.json index b6b1cb7da..0a39a2d85 100644 --- a/govtool/frontend/package.json +++ b/govtool/frontend/package.json @@ -29,7 +29,7 @@ "@hookform/resolvers": "^3.3.1", "@intersect.mbo/govtool-outcomes-pillar-ui": "1.3.0", "@intersect.mbo/intersectmbo.org-icons-set": "^1.0.8", - "@intersect.mbo/pdf-ui": "0.7.0-beta-8", + "@intersect.mbo/pdf-ui": "0.7.0-beta-11", "@mui/icons-material": "^5.14.3", "@mui/material": "^5.14.4", "@rollup/plugin-babel": "^6.0.4", diff --git a/govtool/frontend/src/hooks/queries/useGetDRepVotingPowerList.ts b/govtool/frontend/src/hooks/queries/useGetDRepVotingPowerList.ts index 3c40d6ca9..c1c180f8a 100644 --- a/govtool/frontend/src/hooks/queries/useGetDRepVotingPowerList.ts +++ b/govtool/frontend/src/hooks/queries/useGetDRepVotingPowerList.ts @@ -16,9 +16,9 @@ export const useGetDRepVotingPowerList = () => { enabled: false, }); - const fetchDRepVotingPowerList = async (identifiers: string[]) => + const fetchDRepVotingPowerList = async (identifiers: string[] = []) => queryClient.fetchQuery({ - queryKey: [QUERY_KEYS.useGetDRepVotingPowerListKey], + queryKey: [QUERY_KEYS.useGetDRepVotingPowerListKey, ...identifiers], queryFn: () => getDRepVotingPowerList(identifiers), }); diff --git a/govtool/frontend/yarn.lock b/govtool/frontend/yarn.lock index 7474a7038..5af6913b4 100644 --- a/govtool/frontend/yarn.lock +++ b/govtool/frontend/yarn.lock @@ -1512,10 +1512,10 @@ resolved "https://registry.npmjs.org/@intersect.mbo/intersectmbo.org-icons-set/-/intersectmbo.org-icons-set-1.1.0.tgz" integrity sha512-sjKEtnK9eLYH/8kCD0YRQCms3byFA/tnSsei9NHTZbBYX9sBpeX6ErfR0sKYjOSxQOxl4FumX9D0X+vHIqxo8g== -"@intersect.mbo/pdf-ui@0.7.0-beta-8": - version "0.7.0-beta-8" - resolved "https://registry.npmjs.org/@intersect.mbo/pdf-ui/-/pdf-ui-0.7.0-beta-8.tgz" - integrity sha512-xBd8rl2qC+T5/rHAkDYdD63FoZi84E3LoiVkUZceRzlUcu3/6Ycia8BOzMszS+S9eLPHzYHO6HXy9dOqTObysg== +"@intersect.mbo/pdf-ui@0.7.0-beta-11": + version "0.7.0-beta-11" + resolved "https://registry.npmjs.org/@intersect.mbo/pdf-ui/-/pdf-ui-0.7.0-beta-11.tgz" + integrity sha512-amFT8stsOFMeFZjoTsCpUguUi2d/tlMZ4G/ARud1ewrRfjDvu6PJhGYlGl2gZBGa75GgvNM27hfEbzv7MDOInA== dependencies: "@emurgo/cardano-serialization-lib-asmjs" "^12.0.0-beta.2" "@fontsource/poppins" "^5.0.14" diff --git a/tests/govtool-frontend/playwright/lib/_mock/proposalComments.json b/tests/govtool-frontend/playwright/lib/_mock/proposalComments.json index 12f0415e2..8fb83e3e2 100644 --- a/tests/govtool-frontend/playwright/lib/_mock/proposalComments.json +++ b/tests/govtool-frontend/playwright/lib/_mock/proposalComments.json @@ -9,6 +9,10 @@ "comment_text": "Hello", "createdAt": "2024-06-14T13:38:35.830Z", "updatedAt": "2024-06-14T13:38:35.830Z", + "bd_proposal_id": null, + "comments_reports": { + "data": [] + }, "user_govtool_username": "Anonymous", "subcommens_number": 0 } @@ -22,6 +26,10 @@ "comment_text": "Nice proposal", "createdAt": "2024-06-14T13:38:31.279Z", "updatedAt": "2024-06-14T13:38:31.279Z", + "bd_proposal_id": null, + "comments_reports": { + "data": [] + }, "user_govtool_username": "Anonymous", "subcommens_number": 0 } @@ -35,6 +43,10 @@ "comment_text": "Go Ahead", "createdAt": "2024-06-14T13:38:27.286Z", "updatedAt": "2024-06-14T13:38:27.286Z", + "bd_proposal_id": null, + "comments_reports": { + "data": [] + }, "user_govtool_username": "Anonymous", "subcommens_number": 0 } diff --git a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts index 29aad363e..41fd994dc 100644 --- a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts @@ -33,7 +33,7 @@ test.describe("Proposal created logged state", () => { await page.goto("/"); await page.getByTestId("proposal-discussion-link").click(); - await expect(page.getByText(/proposals/i)).toHaveCount(2); + await expect(page.getByText("Proposals", { exact: true })).toHaveCount(2); }); test.describe("Accept valid data", () => { diff --git a/tests/govtool-frontend/playwright/tests/8-proposal-discussion/proposalDiscussion.spec.ts b/tests/govtool-frontend/playwright/tests/8-proposal-discussion/proposalDiscussion.spec.ts index 769405e84..84d6b408e 100644 --- a/tests/govtool-frontend/playwright/tests/8-proposal-discussion/proposalDiscussion.spec.ts +++ b/tests/govtool-frontend/playwright/tests/8-proposal-discussion/proposalDiscussion.spec.ts @@ -8,6 +8,7 @@ import { test } from "@fixtures/proposal"; import { setAllureEpic } from "@helpers/allure"; import { isBootStrapingPhase, skipIfNotHardFork } from "@helpers/cardano"; import { injectLogger } from "@helpers/page"; +import { extractProposalIdFromUrl } from "@helpers/string"; import { functionWaitedAssert } from "@helpers/waitedLoop"; import ProposalDiscussionDetailsPage from "@pages/proposalDiscussionDetailsPage"; import ProposalDiscussionPage from "@pages/proposalDiscussionPage"; @@ -195,6 +196,31 @@ test("8S. Should restrict proposal creation on disconnected state", async ({ await expect(proposalDiscussionPage.proposalCreateBtn).not.toBeVisible(); }); +test("8E. Should share proposed governance action", async ({ + page, + context, +}) => { + await context.grantPermissions(["clipboard-read", "clipboard-write"]); + const proposalDiscussionPage = new ProposalDiscussionPage(page); + await proposalDiscussionPage.goto(); + + await proposalDiscussionPage.viewFirstProposal(); + + const currentPageUrl = page.url(); + const proposalId = extractProposalIdFromUrl(currentPageUrl); + + await page.getByTestId("share-button").click(); + await page.getByTestId("copy-link").click(); + await expect(page.getByTestId("copy-link-text")).toBeVisible(); + + const copiedTextDRepDirectory = await page.evaluate(() => + navigator.clipboard.readText() + ); + const expectedCopyUrl = `${environments.frontendUrl}/proposal_discussion/${proposalId}`; + + expect(copiedTextDRepDirectory).toEqual(expectedCopyUrl); +}); + test.describe("Mocked proposal", () => { let proposalDiscussionDetailsPage: ProposalDiscussionDetailsPage; @@ -221,24 +247,6 @@ test.describe("Mocked proposal", () => { await proposalDiscussionDetailsPage.goto(mockProposal.data.id); }); - test("8E. Should share proposed governance action", async ({ - page, - context, - }) => { - await context.grantPermissions(["clipboard-read", "clipboard-write"]); - - await page.getByTestId("share-button").click(); - await page.getByTestId("copy-link").click(); - await expect(page.getByTestId("copy-link-text")).toBeVisible(); - - const copiedTextDRepDirectory = await page.evaluate(() => - navigator.clipboard.readText() - ); - const expectedCopyUrl = `${environments.frontendUrl}/proposal_discussion/${mockProposal.data.id}`; - - expect(copiedTextDRepDirectory).toEqual(expectedCopyUrl); - }); - test("8I. Should disable poll voting functionality.", async () => { await expect(proposalDiscussionDetailsPage.pollVoteCard).not.toBeVisible(); await expect(proposalDiscussionDetailsPage.pollYesBtn).not.toBeVisible();