From ea53bdeb8bc659cf8d0daa268c4dba3cbf839146 Mon Sep 17 00:00:00 2001 From: Megha <100185149+Megha-Dev-19@users.noreply.github.com> Date: Tue, 24 Sep 2024 01:37:19 +0530 Subject: [PATCH] Fix linked rfp on proposal feed page (#934) * fix linked rfp on proposal feed page * add test --- .../widget/devhub/entity/proposal/Feed.jsx | 32 ++++++++++--- .../tests/infrastructure/proposal.spec.js | 45 +++++++++++++++++++ 2 files changed, 70 insertions(+), 7 deletions(-) diff --git a/instances/devhub.near/widget/devhub/entity/proposal/Feed.jsx b/instances/devhub.near/widget/devhub/entity/proposal/Feed.jsx index 3700d139d..a10e52241 100644 --- a/instances/devhub.near/widget/devhub/entity/proposal/Feed.jsx +++ b/instances/devhub.near/widget/devhub/entity/proposal/Feed.jsx @@ -190,7 +190,13 @@ const FeedItem = ({ proposal, index }) => { )} {isLinked && rfpData && ( -
+
In response to RFP : { } }`; + const rfpQuery = `query GetLatestSnapshot($offset: Int = 0, $limit: Int = 10, $where: ${rfpFeedIndexerQueryName}_bool_exp = {}) { + ${rfpFeedIndexerQueryName}( + offset: $offset + limit: $limit + order_by: {rfp_id: desc} + where: $where + ) { + name + rfp_id + } + }`; + function fetchGraphQL(operationsDoc, operationName, variables) { return asyncFetch(QUERYAPI_ENDPOINT, { method: "POST", @@ -401,12 +419,12 @@ const FeedPage = () => { result.body.data[`${proposalFeedIndexerQueryName}_aggregate`]; const promises = data.map((item) => { if (isNumber(item.linked_rfp)) { - return fetchGraphQL(rfpQuery, "GetLatestSnapshot", {}).then( - (result) => { - const rfpData = result.body.data?.[rfpQueryName]; - return { ...item, rfpData: rfpData[0] }; - } - ); + return fetchGraphQL(rfpQuery, "GetLatestSnapshot", { + where: { rfp_id: { _eq: item.linked_rfp } }, + }).then((result) => { + const rfpData = result.body.data?.[rfpFeedIndexerQueryName]; + return { ...item, rfpData: rfpData[0] }; + }); } else { return Promise.resolve(item); } diff --git a/playwright-tests/tests/infrastructure/proposal.spec.js b/playwright-tests/tests/infrastructure/proposal.spec.js index 9aac27769..dfa7d25a0 100644 --- a/playwright-tests/tests/infrastructure/proposal.spec.js +++ b/playwright-tests/tests/infrastructure/proposal.spec.js @@ -19,6 +19,51 @@ test.describe("Wallet is connected as admin", () => { timeout: 10000, }); }); + + test("should show correct linked RFP to a proposal in feed page", async ({ + page, + }) => { + test.setTimeout(120000); + await page.goto("/infrastructure-committee.near/widget/app?page=proposals"); + let proposalId; + const linkedRfpId = 0; + // add linked RFP to latest proposal + await page.route( + "https://near-queryapi.api.pagoda.co/v1/graphql", + async (route) => { + const response = await route.fetch(); + const json = await response.json(); + if ( + json?.data?.[ + "polyprogrammist_near_devhub_ic_v1_proposals_with_latest_snapshot" + ] + ) { + json.data[ + "polyprogrammist_near_devhub_ic_v1_proposals_with_latest_snapshot" + ] = json.data[ + "polyprogrammist_near_devhub_ic_v1_proposals_with_latest_snapshot" + ].map((i, index) => { + if (index === 0) { + proposalId = i.proposal_id; + return { + ...i, + linked_rfp: linkedRfpId, + }; + } + return i; + }); + } + await route.fulfill({ response, json }); + } + ); + await page.waitForTimeout(10_000); + await expect( + page.getByTestId(`proposalId_${proposalId}_rfpId_${linkedRfpId}`) + ).toBeVisible({ + timeout: 10000, + }); + }); + test("should create proposal", async ({ page }) => { await page.goto("/infrastructure-committee.near/widget/app?page=proposals");