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();
});
});
});