Skip to content

Commit

Permalink
1171 refresh show only valid stamps check endpoint (passportxyz#1205)
Browse files Browse the repository at this point in the history
* fix(api): filtering providers in fetchPossibleEvmnStamps

* feat(app): updating refresh steps with time interval. show refresh steps for new user

* feat(iam,app): added /check endpoint for verifying stamp eligibility

* refactor(app,iam): removed rpcUrl param which is no longer necessary
  • Loading branch information
lucianHymer authored Apr 28, 2023
1 parent 5719da6 commit 927cfe5
Show file tree
Hide file tree
Showing 24 changed files with 398 additions and 308 deletions.
4 changes: 1 addition & 3 deletions app/.env-example.env
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@ NEXT_PUBLIC_DATADOG_ENV=someenvname

NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID=my_gtm_id

NEXT_ETHERSCAN_API_KEY=ASAADASDA

#feature flags
NEXT_PUBLIC_FF_MULTI_EVM_SIGNER=on
NEXT_PUBLIC_FF_COINBASE_STAMP=on
Expand All @@ -43,4 +41,4 @@ NEXT_PUBLIC_INTERCOM_APP_ID=YOUR_INTERCOM_APP_ID

NEXT_PUBLIC_ALLO_SCORER_ID=ALLO_SCORER_ID
NEXT_PUBLIC_ALLO_SCORER_API_KEY=SCORER_API_KEY
NEXT_PUBLIC_SCORER_ENDPOINT=http://localhost:8002/registry
NEXT_PUBLIC_SCORER_ENDPOINT=http://localhost:8002/ceramic-cache
8 changes: 4 additions & 4 deletions app/__tests__/components/RefreshMyStampsModal.test.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { render, screen } from "@testing-library/react";
import "@testing-library/jest-dom/extend-expect";
import { RefreshMyStampsModal, RefreshMyStampsModalProps } from "../../components/RefreshMyStampsModal";
import { PossibleEVMProvider } from "../../signer/utils";
import { ValidatedPlatform } from "../../signer/utils";

const defaultProps: RefreshMyStampsModalProps = {
isOpen: true,
onClose: jest.fn(),
steps: [],
fetchedPossibleEVMStamps: undefined,
validPlatforms: undefined,
resetStampsAndProgressState: jest.fn(),
};

Expand Down Expand Up @@ -45,8 +45,8 @@ describe("RefreshMyStampsModal", () => {
});

it("renders the component with RefreshMyStampsModalContent when fetchedPossibleEVMStamps is not undefined", () => {
const fetchedPossibleEVMStamps = [{ provider: "ethereum", platform_id: "1" }] as unknown as PossibleEVMProvider[];
render(<RefreshMyStampsModal {...defaultProps} fetchedPossibleEVMStamps={fetchedPossibleEVMStamps} />);
const validPlatforms = [{ provider: "ethereum", platform_id: "1" }] as unknown as ValidatedPlatform[];
render(<RefreshMyStampsModal {...defaultProps} validPlatforms={validPlatforms} />);

expect(screen.getByTestId("refresh-my-stamps-modal-content")).toBeInTheDocument();
});
Expand Down
46 changes: 21 additions & 25 deletions app/__tests__/components/RefreshMyStampsModalContent.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
} from "../../__test-fixtures__/contextTestHelpers";

import { useNavigate } from "react-router-dom";
import { PossibleEVMProvider } from "../../signer/utils";
import { ValidatedPlatform } from "../../signer/utils";

import { fetchVerifiableCredential } from "@gitcoin/passport-identity/dist/commonjs/src/credentials";
import { reduceStampResponse } from "../../utils/helpers";
Expand All @@ -27,7 +27,6 @@ const navigateMock = jest.fn();
(useNavigate as jest.Mock).mockReturnValue(navigateMock);

const iamUrl = process.env.NEXT_PUBLIC_PASSPORT_IAM_URL || "";
const rpcUrl = process.env.NEXT_PUBLIC_PASSPORT_MAINNET_RPC_URL;

const mockOnClose = jest.fn();
const mockResetStampsAndProgressState = jest.fn();
Expand All @@ -46,31 +45,28 @@ jest.mock("../../components/RefreshMyStampsModalContentCardList.tsx", () => ({
RefreshMyStampsModalContentCardList: () => <div>RefreshMyStampsModalContentCardList</div>,
}));

const fetchedPossibleEVMStamps: PossibleEVMProvider[] = [
const validPlatforms: ValidatedPlatform[] = [
{
validatedPlatformGroups: [
[
{
payload: {
valid: true,
record: {
address: "0xc79abb54e4824cdb65c71f2eeb2d7f2db5da1fb8",
hasGTE30DaysSinceFirstTxnOnTheMainnet: "true",
},
groups: [
{
name: "Eth",
providers: [
{
name: "FirstEthTxnProvider",
title: "First Eth Txn",
},
providerType: "FirstEthTxnProvider",
},
],
],
},
],
platformProps: {
platform: {} as any,
platFormGroupSpec: [
{
platformGroup: "Possessions",
platformGroup: "Eth",
providers: [
{
title: "At least 1 ETH",
name: "ethPossessionsGte#1",
name: "FirstEthTxnProvider",
title: "First Eth Txn",
},
],
},
Expand All @@ -80,25 +76,26 @@ const fetchedPossibleEVMStamps: PossibleEVMProvider[] = [
];

describe("RefreshMyStampsModalContent", () => {
it("renders the Stamps Found title when fetchedPossibleEVMStamps are provided", () => {
it("renders the Stamps Found title when validPlatforms are provided", () => {
renderWithContext(
mockUserContext,
mockCeramicContext,
<RefreshMyStampsModalContent
onClose={mockOnClose}
fetchedPossibleEVMStamps={[]}
validPlatforms={validPlatforms}
resetStampsAndProgressState={mockResetStampsAndProgressState}
/>
);
expect(screen.getByText(/No Eligible Web3 Stamps Found/i)).toBeInTheDocument();
expect(screen.getByText(/Stamps Found/i)).toBeInTheDocument();
});

it("calls handleRefreshSelectedStamps when the 'Confirm Stamps' button is clicked", async () => {
renderWithContext(
mockUserContext,
mockCeramicContext,
<RefreshMyStampsModalContent
onClose={mockOnClose}
fetchedPossibleEVMStamps={fetchedPossibleEVMStamps}
validPlatforms={validPlatforms}
resetStampsAndProgressState={mockResetStampsAndProgressState}
/>
);
Expand All @@ -109,11 +106,10 @@ describe("RefreshMyStampsModalContent", () => {
iamUrl,
{
type: "EVMBulkVerify",
types: ["ethPossessionsGte#1"],
types: ["FirstEthTxnProvider"],
version: "0.0.0",
address: "0xmyAddress",
proofs: {},
rpcUrl,
},
undefined
)
Expand All @@ -126,7 +122,7 @@ describe("RefreshMyStampsModalContent", () => {
mockCeramicContext,
<RefreshMyStampsModalContent
onClose={mockOnClose}
fetchedPossibleEVMStamps={fetchedPossibleEVMStamps}
validPlatforms={validPlatforms}
resetStampsAndProgressState={mockResetStampsAndProgressState}
/>
);
Expand Down
19 changes: 9 additions & 10 deletions app/__tests__/components/RefreshMyStampsModalContentCard.test.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
import { render, screen, fireEvent } from "@testing-library/react";
import { RefreshMyStampsModalContentCard } from "../../components/RefreshMyStampsModalContentCard";
import { PlatformGroupSpec, PlatformSpec, PROVIDER_ID } from "@gitcoin/passport-platforms/src/types";
import { PlatformSpec, PROVIDER_ID } from "@gitcoin/passport-platforms/src/types";
import { PLATFORM_ID } from "@gitcoin/passport-types";
import { ValidatedProviderGroup } from "../../signer/utils";

beforeAll(() => {
window.scrollTo = jest.fn();
});

const mockSetSelectedProviders = jest.fn();
const platformGroup: PlatformGroupSpec[] = [
const platformGroups: ValidatedProviderGroup[] = [
{
name: "Platform Group",
providers: [
{
title: "Provider Title",
name: "Ens" as PROVIDER_ID,
icon: "provider-icon.png",
description: "Provider description",
name: "FirstEthTxnProvider",
title: "First Eth Txn",
},
],
platformGroup: "Platform Group",
},
];

Expand All @@ -32,13 +31,13 @@ const currentPlatform: PlatformSpec = {
enablePlatformCardUpdate: false,
};

const selectedProviders: PROVIDER_ID[] = ["Ens"];
const selectedProviders: PROVIDER_ID[] = ["FirstEthTxnProvider"];

describe("RefreshMyStampsModalContentCard", () => {
it("renders the component and handles switch change", () => {
render(
<RefreshMyStampsModalContentCard
platformGroup={platformGroup}
platformGroups={platformGroups}
currentPlatform={currentPlatform}
selectedProviders={selectedProviders}
setSelectedProviders={mockSetSelectedProviders}
Expand All @@ -55,7 +54,7 @@ describe("RefreshMyStampsModalContentCard", () => {
it("should mark switch as checked if selectedProviders are passed as props", () => {
render(
<RefreshMyStampsModalContentCard
platformGroup={platformGroup}
platformGroups={platformGroups}
currentPlatform={currentPlatform}
selectedProviders={selectedProviders}
setSelectedProviders={mockSetSelectedProviders}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,30 @@ import {
renderWithContext,
} from "../../__test-fixtures__/contextTestHelpers";
import { CeramicContextState } from "../../context/ceramicContext";
import { PossibleEVMProvider } from "../../signer/utils";
import { ValidatedPlatform } from "../../signer/utils";

const defaultProps: RefreshMyStampsModalCardListProps = {
fetchedPossibleEVMStamps: undefined,
validPlatforms: [],
selectedProviders: [],
setSelectedProviders: jest.fn(),
};

const fetchedPossibleEVMStamps = [
const validPlatforms = [
{
platformProps: {
platform: {
path: "ethereum",
platform_id: "1",
},
},
groups: [],
},
] as unknown as PossibleEVMProvider[];
] as unknown as ValidatedPlatform[];

const RefreshMyStampsModalContentPropsList: RefreshMyStampsModalContentProps = {
resetStampsAndProgressState: jest.fn(),
onClose: jest.fn(),
fetchedPossibleEVMStamps: fetchedPossibleEVMStamps,
validPlatforms,
};

jest.mock("../../utils/onboard.ts");
Expand Down Expand Up @@ -84,7 +85,7 @@ describe("RefreshMyStampsModalContentCardList", () => {
const RefreshMyStampsModalContentPropsList: RefreshMyStampsModalContentProps = {
resetStampsAndProgressState: jest.fn(),
onClose: jest.fn(),
fetchedPossibleEVMStamps: [],
validPlatforms: [],
};

const refreshModal = () => {
Expand Down
27 changes: 13 additions & 14 deletions app/__tests__/components/RefreshMyStampsSelector.test.tsx
Original file line number Diff line number Diff line change
@@ -1,37 +1,36 @@
import { render, screen, fireEvent } from "@testing-library/react";
import { RefreshMyStampsSelector } from "../../components/RefreshMyStampsSelector";
import { PlatformGroupSpec, PlatformSpec, PROVIDER_ID } from "@gitcoin/passport-platforms/src/types";
import { PROVIDER_ID } from "@gitcoin/passport-platforms/src/types";
import { ValidatedProviderGroup } from "../../signer/utils";

const mockSetSelectedProviders = jest.fn();

const currentProviders: PlatformGroupSpec[] = [
const validPlatformGroups: ValidatedProviderGroup[] = [
{
platformGroup: "Platform Group",
name: "Platform Group",
providers: [
{
title: "Provider Title",
name: "Ens" as PROVIDER_ID,
icon: "provider-icon.png",
description: "Provider description",
name: "FirstEthTxnProvider",
title: "First Eth Txn",
},
],
},
];

const selectedProviders: PROVIDER_ID[] = ["Ens"];
const selectedProviders: PROVIDER_ID[] = ["FirstEthTxnProvider"];

describe("RefreshMyStampsSelector", () => {
it("renders the component and handles checkbox change", () => {
render(
<RefreshMyStampsSelector
currentProviders={currentProviders}
validPlatformGroups={validPlatformGroups}
selectedProviders={selectedProviders}
setSelectedProviders={mockSetSelectedProviders}
platformChecked={true}
/>
);

const checkboxElement = screen.getByTestId(`checkbox-${currentProviders[0].providers[0].name}`);
const checkboxElement = screen.getByTestId(`checkbox-${validPlatformGroups[0].providers[0].name}`);
expect(checkboxElement).toBeInTheDocument();

fireEvent.click(checkboxElement);
Expand All @@ -41,28 +40,28 @@ describe("RefreshMyStampsSelector", () => {
it("should mark checkbox as checked if selectedProviders are passed as props", () => {
render(
<RefreshMyStampsSelector
currentProviders={currentProviders}
validPlatformGroups={validPlatformGroups}
selectedProviders={selectedProviders}
setSelectedProviders={mockSetSelectedProviders}
platformChecked={true}
/>
);

const checkboxElement = screen.getByTestId(`checkbox-${currentProviders[0].providers[0].name}`);
const checkboxElement = screen.getByTestId(`checkbox-${validPlatformGroups[0].providers[0].name}`);
expect(checkboxElement).toHaveAttribute("data-checked");
});

it("should disable checkboxes if platformChecked is false", () => {
render(
<RefreshMyStampsSelector
currentProviders={currentProviders}
validPlatformGroups={validPlatformGroups}
selectedProviders={selectedProviders}
setSelectedProviders={mockSetSelectedProviders}
platformChecked={false}
/>
);

const checkboxElement = screen.getByTestId(`checkbox-${currentProviders[0].providers[0].name}`);
const checkboxElement = screen.getByTestId(`checkbox-${validPlatformGroups[0].providers[0].name}`);
expect(checkboxElement).toHaveAttribute("disabled");
});
});
Loading

0 comments on commit 927cfe5

Please sign in to comment.