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");