diff --git a/.github/workflows/build-from-main.yml b/.github/workflows/build-from-main.yml index 6a71f6947..53e033180 100644 --- a/.github/workflows/build-from-main.yml +++ b/.github/workflows/build-from-main.yml @@ -243,7 +243,7 @@ jobs: uses: actions/cache@v3 with: path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} + key: ${{ runner.os }}-buildx-${{ github.sha }}-${{ github.run_number}} restore-keys: | ${{ runner.os }}-buildx- diff --git a/CHANGELOG.md b/CHANGELOG.md index 980512907..d239f4f08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,21 @@ changes. ### Removed +## [v2.0.19](https://github.com/IntersectMBO/govtool/releases/tag/v2.0.19) 2025-03-31 + + +### Added + +- Add budget discussion paths in the wrapper + +### Fixed + +- Fix missing redirect to outcomes on wallet disconnected state [Issue 3230](https://github.com/IntersectMBO/govtool/issues/3230) + +### Changed + +### Removed + ## [v2.0.18](https://github.com/IntersectMBO/govtool/releases/tag/v2.0.18) 2025-03-26 ### Added diff --git a/govtool/backend/Dockerfile b/govtool/backend/Dockerfile index cd0b1ac6c..86b27282b 100644 --- a/govtool/backend/Dockerfile +++ b/govtool/backend/Dockerfile @@ -4,4 +4,4 @@ FROM $BASE_IMAGE_REPO:$BASE_IMAGE_TAG WORKDIR /src COPY . . RUN cabal build -RUN cp dist-newstyle/build/x86_64-linux/ghc-9.2.7/vva-be-2.0.18/x/vva-be/build/vva-be/vva-be /usr/local/bin +RUN cp dist-newstyle/build/x86_64-linux/ghc-9.2.7/vva-be-2.0.19/x/vva-be/build/vva-be/vva-be /usr/local/bin diff --git a/govtool/backend/Dockerfile.qovery b/govtool/backend/Dockerfile.qovery index b698475e0..57d62b307 100644 --- a/govtool/backend/Dockerfile.qovery +++ b/govtool/backend/Dockerfile.qovery @@ -4,7 +4,7 @@ FROM $BASE_IMAGE_REPO:$BASE_IMAGE_TAG WORKDIR /src COPY . . RUN cabal build -RUN cp dist-newstyle/build/x86_64-linux/ghc-9.2.7/vva-be-2.0.18/x/vva-be/build/vva-be/vva-be /usr/local/bin +RUN cp dist-newstyle/build/x86_64-linux/ghc-9.2.7/vva-be-2.0.19/x/vva-be/build/vva-be/vva-be /usr/local/bin # Expose the necessary port EXPOSE 9876 diff --git a/govtool/backend/vva-be.cabal b/govtool/backend/vva-be.cabal index d9a25afbb..1c4e91fa6 100644 --- a/govtool/backend/vva-be.cabal +++ b/govtool/backend/vva-be.cabal @@ -1,6 +1,6 @@ cabal-version: 3.6 name: vva-be -version: 2.0.18 +version: 2.0.19 -- A short (one-line) description of the package. -- synopsis: diff --git a/govtool/frontend/package-lock.json b/govtool/frontend/package-lock.json index 1aa2694d7..b38b2e2ad 100644 --- a/govtool/frontend/package-lock.json +++ b/govtool/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "@govtool/frontend", - "version": "2.0.18", + "version": "2.0.19", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@govtool/frontend", - "version": "2.0.18", + "version": "2.0.19", "hasInstallScript": true, "dependencies": { "@emotion/react": "^11.11.1", @@ -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.6.4", + "@intersect.mbo/pdf-ui": "0.7.0-beta-2", "@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.6.4", - "resolved": "https://registry.npmjs.org/@intersect.mbo/pdf-ui/-/pdf-ui-0.6.4.tgz", - "integrity": "sha512-KWnbwn9VQwTuQ+POFX6VtA+e7zmotq/kBJmfXux5i2XPQz9PB1Ia/L6mPPr82Gf0x0R2MSU1nZLsSeSl6QE64A==", + "version": "0.7.0-beta-2", + "resolved": "https://registry.npmjs.org/@intersect.mbo/pdf-ui/-/pdf-ui-0.7.0-beta-2.tgz", + "integrity": "sha512-GDx7qpzs6kOc9DYPYnFCsTaSLyiQTqQulX9RKM1IsbS/fvaVR5/P9xRScfpVDbix98eyoXWsoOwBHrHDGlJ4GA==", "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 930773db3..4ff55736a 100644 --- a/govtool/frontend/package.json +++ b/govtool/frontend/package.json @@ -1,7 +1,7 @@ { "name": "@govtool/frontend", "private": true, - "version": "2.0.18", + "version": "2.0.19", "type": "module", "scripts": { "build": "vite build", @@ -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.6.4", + "@intersect.mbo/pdf-ui": "0.7.0-beta-2", "@mui/icons-material": "^5.14.3", "@mui/material": "^5.14.4", "@rollup/plugin-babel": "^6.0.4", diff --git a/govtool/frontend/src/App.tsx b/govtool/frontend/src/App.tsx index 4e72a1346..3ef7a5c0a 100644 --- a/govtool/frontend/src/App.tsx +++ b/govtool/frontend/src/App.tsx @@ -2,7 +2,13 @@ import { useCallback, useEffect } from "react"; import { Route, Routes, useNavigate } from "react-router-dom"; import { Modal, ScrollToTop } from "@atoms"; -import { PATHS, PDF_PATHS, OUTCOMES_PATHS, USER_PATHS } from "@consts"; +import { + PATHS, + PDF_PATHS, + OUTCOMES_PATHS, + USER_PATHS, + BUDGET_DISCUSSION_PATHS, +} from "@consts"; import { useCardano, useFeatureFlag, useModal } from "@context"; import { useWalletConnectionListener } from "@hooks"; import { @@ -102,10 +108,16 @@ export default () => { element={} /> {isProposalDiscussionForumEnabled && !isEnabled && ( - } - /> + <> + } + /> + } + /> + )} {isGovernanceOutcomesPillarEnabled && !isEnabled && ( <> @@ -122,10 +134,16 @@ export default () => { }> } /> {isProposalDiscussionForumEnabled && ( - } - /> + <> + } + /> + } + /> + )} {isGovernanceOutcomesPillarEnabled && ( <> diff --git a/govtool/frontend/src/consts/navItems.tsx b/govtool/frontend/src/consts/navItems.tsx index ca6319782..a72c2bd98 100644 --- a/govtool/frontend/src/consts/navItems.tsx +++ b/govtool/frontend/src/consts/navItems.tsx @@ -8,6 +8,7 @@ import { PATHS, PDF_PATHS, OUTCOMES_PATHS, + BUDGET_DISCUSSION_PATHS, // TODO: This will be uncommented when the page has been bootstrapped in the outcomes Pillar // USER_PATHS } from "./paths"; @@ -24,6 +25,12 @@ export const NAV_ITEMS = [ navTo: PATHS.dRepDirectory, label: i18n.t("dRepDirectory.title"), }, + { + dataTestId: "budget-discussion-link", + navTo: BUDGET_DISCUSSION_PATHS.budgetDiscussion, + label: i18n.t("budgetDiscussion.title"), + newTabLink: null, + }, { dataTestId: "proposed-governance-actions-link", navTo: PDF_PATHS.proposalDiscussion, @@ -73,6 +80,14 @@ export const CONNECTED_NAV_ITEMS = [ icon: ICONS.dRepDirectoryIcon, newTabLink: null, }, + { + dataTestId: "budget-discussion-link", + label: i18n.t("budgetDiscussion.title"), + navTo: BUDGET_DISCUSSION_PATHS.budgetDiscussion, + activeIcon: ICONS.dRepDirectoryActiveIcon, + icon: ICONS.dRepDirectoryIcon, + newTabLink: null, + }, { dataTestId: "governance-actions-link", label: i18n.t("govActions.title"), diff --git a/govtool/frontend/src/consts/paths.ts b/govtool/frontend/src/consts/paths.ts index 9862acefa..94e16e0a4 100644 --- a/govtool/frontend/src/consts/paths.ts +++ b/govtool/frontend/src/consts/paths.ts @@ -32,6 +32,16 @@ export const PDF_PATHS = { proposalDiscussionPropose: "/proposal_discussion/propose", }; +export const BUDGET_DISCUSSION_PATHS = { + budgetDiscussion: "/budget_discussion", + budgetDiscussionProposal: "/budget_discussion/:id", + budgetDiscussionPropose: "/budget_discussion/propose", + budgetDiscussionAction: "/budget_discussion/:proposalId", + budgetDiscussionCategory: "/budget_discussion/category/:category", + budgetDiscussionCategoryAction: + "/budget_discussion/category/:category/:proposalId", +}; + export const USER_PATHS = { governanceActionsVotedByMe: "/my/votes_and_favorites", }; diff --git a/govtool/frontend/src/i18n/locales/en.json b/govtool/frontend/src/i18n/locales/en.json index d861b7cca..a30ef20f0 100644 --- a/govtool/frontend/src/i18n/locales/en.json +++ b/govtool/frontend/src/i18n/locales/en.json @@ -395,6 +395,9 @@ "title": "Proposals", "proposeAGovernanceAction": "Propose a Governance Action" }, + "budgetDiscussion": { + "title": "Budget Discussion" + }, "govActions": { "about": "About", "abstract": "Abstract", diff --git a/govtool/frontend/src/pages/GovernanceActionDetails.tsx b/govtool/frontend/src/pages/GovernanceActionDetails.tsx index 50beb50b4..6718a175a 100644 --- a/govtool/frontend/src/pages/GovernanceActionDetails.tsx +++ b/govtool/frontend/src/pages/GovernanceActionDetails.tsx @@ -6,9 +6,10 @@ import { generatePath, } from "react-router-dom"; import { Box, CircularProgress, Link } from "@mui/material"; +import { AxiosError } from "axios"; import { Background, Typography } from "@atoms"; -import { ICONS, PATHS } from "@consts"; +import { ICONS, OUTCOMES_PATHS, PATHS } from "@consts"; import { useCardano } from "@context"; import { useGetProposalQuery, @@ -45,18 +46,28 @@ export const GovernanceActionDetails = () => { const fullProposalId = txHash && getFullGovActionId(txHash, index); const shortenedGovActionId = txHash && getShortenedGovActionId(txHash, index); - const { data, isLoading } = useGetProposalQuery( + const { data, isLoading, error } = useGetProposalQuery( fullProposalId ?? "", !state?.proposal, ); const proposal = (data ?? state)?.proposal; useEffect(() => { - if (isEnabled && getItemFromLocalStorage(`${WALLET_LS_KEY}_stake_key`)) { + const isProposalNotFound = + (error as AxiosError)?.response?.data === + `Proposal with id: ${fullProposalId} not found`; + if (isProposalNotFound && fullProposalId) { + navigate( + OUTCOMES_PATHS.governanceActionOutcomes.replace(":id", fullProposalId), + ); + } else if ( + isEnabled && + getItemFromLocalStorage(`${WALLET_LS_KEY}_stake_key`) + ) { const { pathname } = window.location; navigate(`/connected${pathname}`); } - }, [isEnabled]); + }, [isEnabled, error]); return ( diff --git a/govtool/frontend/yarn.lock b/govtool/frontend/yarn.lock index 1a9020e6a..e2572d6ab 100644 --- a/govtool/frontend/yarn.lock +++ b/govtool/frontend/yarn.lock @@ -1377,10 +1377,10 @@ resolved "https://registry.npmjs.org/@emurgo/cardano-serialization-lib-asmjs/-/cardano-serialization-lib-asmjs-14.1.1.tgz" integrity sha512-Q2HVpPRt417Quxv3qagGWbkJQU8SiQCl1K/344ZtQMwsLoqTfRlCNzmSWMBN7jyBxbtKoh+vdbSiLqwG1NAjYg== -"@esbuild/darwin-arm64@0.25.0": +"@esbuild/linux-x64@0.25.0": version "0.25.0" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz" - integrity sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw== + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz" + integrity sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.1" @@ -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.6.4": - version "0.6.4" - resolved "https://registry.npmjs.org/@intersect.mbo/pdf-ui/-/pdf-ui-0.6.4.tgz" - integrity sha512-KWnbwn9VQwTuQ+POFX6VtA+e7zmotq/kBJmfXux5i2XPQz9PB1Ia/L6mPPr82Gf0x0R2MSU1nZLsSeSl6QE64A== +"@intersect.mbo/pdf-ui@0.7.0-beta-2": + version "0.7.0-beta-2" + resolved "https://registry.npmjs.org/@intersect.mbo/pdf-ui/-/pdf-ui-0.7.0-beta-2.tgz" + integrity sha512-GDx7qpzs6kOc9DYPYnFCsTaSLyiQTqQulX9RKM1IsbS/fvaVR5/P9xRScfpVDbix98eyoXWsoOwBHrHDGlJ4GA== dependencies: "@emurgo/cardano-serialization-lib-asmjs" "^12.0.0-beta.2" "@fontsource/poppins" "^5.0.14" @@ -2173,10 +2173,15 @@ resolved "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz" integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== -"@parcel/watcher-darwin-arm64@2.5.0": +"@parcel/watcher-linux-x64-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz" + integrity sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw== + +"@parcel/watcher-linux-x64-musl@2.5.0": version "2.5.0" - resolved "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz" - integrity sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw== + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz" + integrity sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA== "@parcel/watcher@^2.4.1": version "2.5.0" @@ -2289,10 +2294,15 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-darwin-arm64@4.34.9": +"@rollup/rollup-linux-x64-gnu@4.34.9": + version "4.34.9" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz" + integrity sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A== + +"@rollup/rollup-linux-x64-musl@4.34.9": version "4.34.9" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz" - integrity sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ== + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz" + integrity sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA== "@rtsao/scc@^1.1.0": version "1.1.0" @@ -2895,10 +2905,15 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" -"@swc/core-darwin-arm64@1.9.3": +"@swc/core-linux-x64-gnu@1.9.3": version "1.9.3" - resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.9.3.tgz" - integrity sha512-hGfl/KTic/QY4tB9DkTbNuxy5cV4IeejpPD4zo+Lzt4iLlDWIeANL4Fkg67FiVceNJboqg48CUX+APhDHO5G1w== + resolved "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.9.3.tgz" + integrity sha512-ivXXBRDXDc9k4cdv10R21ccBmGebVOwKXT/UdH1PhxUn9m/h8erAWjz5pcELwjiMf27WokqPgaWVfaclDbgE+w== + +"@swc/core-linux-x64-musl@1.9.3": + version "1.9.3" + resolved "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.9.3.tgz" + integrity sha512-ILsGMgfnOz1HwdDz+ZgEuomIwkP1PHT6maigZxaCIuC6OPEhKE8uYna22uU63XvYcLQvZYDzpR3ms47WQPuNEg== "@swc/core@*", "@swc/core@^1.5.22", "@swc/core@^1.7.26": version "1.9.3" @@ -7201,16 +7216,6 @@ fs@^0.0.1-security: resolved "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz" integrity sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w== -fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -fsevents@2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" diff --git a/govtool/metadata-validation/package-lock.json b/govtool/metadata-validation/package-lock.json index 38b4d2ba5..83e662ff1 100644 --- a/govtool/metadata-validation/package-lock.json +++ b/govtool/metadata-validation/package-lock.json @@ -1,12 +1,12 @@ { "name": "@govtool/metadata-validation", - "version": "2.0.18", + "version": "2.0.19", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@govtool/metadata-validation", - "version": "2.0.18", + "version": "2.0.19", "license": "UNLICENSED", "dependencies": { "@nestjs/axios": "^3.0.2", diff --git a/govtool/metadata-validation/package.json b/govtool/metadata-validation/package.json index ac5a8ec96..c3b69cd67 100644 --- a/govtool/metadata-validation/package.json +++ b/govtool/metadata-validation/package.json @@ -1,6 +1,6 @@ { "name": "@govtool/metadata-validation", - "version": "2.0.18", + "version": "2.0.19", "description": "", "author": "", "private": true, diff --git a/govtool/metadata-validation/src/main.ts b/govtool/metadata-validation/src/main.ts index 5d1d15d80..627d3af87 100644 --- a/govtool/metadata-validation/src/main.ts +++ b/govtool/metadata-validation/src/main.ts @@ -13,7 +13,7 @@ async function bootstrap() { const config = new DocumentBuilder() .setTitle('Metadata Validation Tool') .setDescription('The Metadata Validation Tool API description') - .setVersion("2.0.18") + .setVersion("2.0.19") .build(); const document = SwaggerModule.createDocument(app, config); diff --git a/tests/govtool-frontend/playwright/.env.example b/tests/govtool-frontend/playwright/.env.example index acd2110aa..e007734f9 100644 --- a/tests/govtool-frontend/playwright/.env.example +++ b/tests/govtool-frontend/playwright/.env.example @@ -1,4 +1,4 @@ -FRONTEND_URL=http://localhost:3000 +HOST_URL=http://localhost:3000 API_URL=http://localhost:3000/api DOCS_URL=https://docs.gov.tools @@ -6,9 +6,6 @@ DOCS_URL=https://docs.gov.tools PDF_URL=https://dev.api.pdf.gov.tools -# 0 for testnet, 1 for mainnet -NETWORK_ID=0 - # Faucet FAUCET_API_KEY= @@ -19,13 +16,16 @@ BLOCKFROST_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXX KUBER_API_KEY= # Transaction timeout -TX_TIMEOUT=120000 # milliseconds +TX_TIMEOUT=240000 # milliseconds # Metadata Bucket -METADATA_BUCKET_URL=https://metadata.cardanoapi.io/data +METADATA_BUCKET_URL=https://metadata-govtool.cardanoapi.io FAUCET_ADDRESS=addr_test1vqeux7xwusdju9dvsj8h7mca9aup2k439kfmwy773xxc2hcu7zy99 PROPOSAL_FAUCET_PAYMENT_PRIVATE=********************************************** -PROPOSAL_FAUCET_STAKE_PRIVATE=********************************************** \ No newline at end of file +PROPOSAL_FAUCET_STAKE_PRIVATE=********************************************** + +CI=true +TEST_WORKERS=6 \ No newline at end of file diff --git a/tests/govtool-frontend/playwright/lib/_mock/outcome.json b/tests/govtool-frontend/playwright/lib/_mock/outcome.json index 37c973231..dee379508 100644 --- a/tests/govtool-frontend/playwright/lib/_mock/outcome.json +++ b/tests/govtool-frontend/playwright/lib/_mock/outcome.json @@ -36,6 +36,12 @@ "enacted_epoch": null, "dropped_epoch": 857, "expired_epoch": 856 + }, + "status_times": { + "ratified_time": null, + "enacted_time": null, + "dropped_time": "2025-03-25T23:59:10", + "expired_time": "2025-03-24T23:58:49" } } ] diff --git a/tests/govtool-frontend/playwright/lib/pages/outcomesPage.ts b/tests/govtool-frontend/playwright/lib/pages/outcomesPage.ts index 333b0d1b2..48f333ef6 100644 --- a/tests/govtool-frontend/playwright/lib/pages/outcomesPage.ts +++ b/tests/govtool-frontend/playwright/lib/pages/outcomesPage.ts @@ -11,10 +11,15 @@ export default class OutComesPage { readonly filterBtn = this.page.getByTestId("filters-button"); readonly sortBtn = this.page.getByTestId("sort-button"); readonly showMoreBtn = this.page.getByTestId("show-more-button"); + readonly metadataErrorLearnMoreBtn = this.page.getByTestId( + "metadata-error-learn-more" + ); //inputs readonly searchInput = this.page.getByTestId("search-input"); + readonly title = this.page.getByTestId("single-action-title"); + constructor(private readonly page: Page) {} async goto(params: { filter?: string; sort?: string } = {}): Promise { diff --git a/tests/govtool-frontend/playwright/package.json b/tests/govtool-frontend/playwright/package.json index 34cd3bb3b..dc24100b7 100644 --- a/tests/govtool-frontend/playwright/package.json +++ b/tests/govtool-frontend/playwright/package.json @@ -25,6 +25,7 @@ "allure:serve": "npx allure serve", "test": "npx playwright test", "format": "prettier . --write", + "test:outcomes": "npx playwright test outcomes.spec.ts --ui", "generate-wallets": "ts-node ./generate_wallets.ts 19" }, "dependencies": { diff --git a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.spec.ts b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.spec.ts index 999a38f2a..9447e2906 100644 --- a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.spec.ts +++ b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.spec.ts @@ -324,9 +324,15 @@ test.describe("Invalid Live voting Metadata", () => { await governanceActionPage.goto(); await governanceActionPage.viewFirstProposal(); - await expect(page.getByRole("heading", { name: type })).toBeVisible({ - timeout: 60_000, - }); + const governanceActionTitle = await page + .getByTestId("governance-action-details-card-header") + .textContent(); + + await expect( + page.getByTestId("governance-action-details-card-header"), + governanceActionTitle.toLowerCase() !== type.toLowerCase() && + `The URL "${url}" and hash "${hash}" do not match the expected properties for type "${type}".` + ).toHaveText(type, { timeout: 60_000, ignoreCase: true }); await expect(page.getByText("Learn more")).toBeVisible(); await expect(page.getByTestId("external-modal-button")).toBeVisible(); }); diff --git a/tests/govtool-frontend/playwright/tests/9-outcomes/outcomes.spec.ts b/tests/govtool-frontend/playwright/tests/9-outcomes/outcomes.spec.ts index 4c7c41841..9af13f8f5 100644 --- a/tests/govtool-frontend/playwright/tests/9-outcomes/outcomes.spec.ts +++ b/tests/govtool-frontend/playwright/tests/9-outcomes/outcomes.spec.ts @@ -152,7 +152,9 @@ test.describe("Outcome details dependent test", () => { const title = await outcomeCard .locator('[data-testid$="-card-title"]') .textContent(); - expect(title).toContain(governanceActionTitle); + expect(title.toLowerCase()).toContain( + governanceActionTitle.toLowerCase() + ); } }, { name: "search by title" } @@ -433,11 +435,17 @@ test.describe("Invalid Outcome Metadata", () => { const outcomePage = new OutComesPage(page); await outcomePage.goto(); await outcomePage.viewFirstOutcomes(); - - await expect(page.getByRole("heading", { name: type })).toBeVisible({ + const outcomeTitle = await outcomePage.title.textContent(); + + await expect( + outcomePage.title, + outcomeTitle.toLowerCase() !== type.toLowerCase() && + `The URL "${url}" and hash "${hash}" do not match the expected properties for type "${type}".` + ).toHaveText(type, { + ignoreCase: true, timeout: 60_000, }); - await expect(page.getByText("Learn more")).toBeVisible(); + await expect(outcomePage.metadataErrorLearnMoreBtn).toBeVisible(); }); }); });