forked from SmartDropLabs/smartdrop-frontend
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNetworkMismatchBanner.test.tsx
More file actions
107 lines (91 loc) · 3.27 KB
/
Copy pathNetworkMismatchBanner.test.tsx
File metadata and controls
107 lines (91 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
import { ChakraProvider } from "@chakra-ui/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import NetworkMismatchBanner from "./NetworkMismatchBanner";
import { ErrorProvider } from "@/context/ErrorContext";
import {
StellarWalletProvider,
useStellarWallet,
} from "@/context/StellarWalletContext";
const freighterMock = vi.hoisted(() => ({
getAddress: vi.fn(),
getNetworkDetails: vi.fn(),
isAllowed: vi.fn(),
isConnected: vi.fn(),
requestAccess: vi.fn(),
signTransaction: vi.fn(),
}));
vi.mock("@stellar/freighter-api", () => freighterMock);
const TEST_PUBLIC_KEY =
"GA3CD2PYXOQCXW7ZVQW3MOA3JFZCE4F4IG2FD66I55TQASPCNKYYEFRN";
function ConnectHarness() {
const { connect } = useStellarWallet();
return <button onClick={() => void connect()}>Connect</button>;
}
function renderBannerHarness() {
return render(
<ChakraProvider>
<ErrorProvider>
<StellarWalletProvider>
<NetworkMismatchBanner />
<ConnectHarness />
</StellarWalletProvider>
</ErrorProvider>
</ChakraProvider>,
);
}
describe("NetworkMismatchBanner", () => {
beforeEach(() => {
vi.clearAllMocks();
freighterMock.isConnected.mockResolvedValue({ isConnected: true });
freighterMock.isAllowed.mockResolvedValue({ isAllowed: true });
freighterMock.getAddress.mockResolvedValue({ address: TEST_PUBLIC_KEY });
freighterMock.requestAccess.mockResolvedValue({ address: TEST_PUBLIC_KEY });
freighterMock.getNetworkDetails.mockResolvedValue({
network: "PUBLIC",
networkUrl: "https://horizon.stellar.org",
networkPassphrase: "Public Global Stellar Network ; September 2015",
});
});
it("shows a warning when Freighter is connected to a mismatched network", async () => {
renderBannerHarness();
fireEvent.click(screen.getByRole("button", { name: "Connect" }));
expect(
await screen.findByText(
/Freighter is set to PUBLIC\. Switch to TESTNET to use SmartDrop\./,
),
).toBeTruthy();
expect(freighterMock.getNetworkDetails).toHaveBeenCalledTimes(1);
});
it("refreshes network details when the tab becomes visible again", async () => {
freighterMock.getNetworkDetails
.mockResolvedValueOnce({
network: "PUBLIC",
networkUrl: "https://horizon.stellar.org",
networkPassphrase: "Public Global Stellar Network ; September 2015",
})
.mockResolvedValueOnce({
network: "TESTNET",
networkUrl: "https://horizon-testnet.stellar.org",
networkPassphrase: "Test SDF Network ; September 2015",
});
renderBannerHarness();
fireEvent.click(screen.getByRole("button", { name: "Connect" }));
await screen.findByText(
/Freighter is set to PUBLIC\. Switch to TESTNET to use SmartDrop\./,
);
Object.defineProperty(document, "visibilityState", {
configurable: true,
value: "visible",
});
document.dispatchEvent(new Event("visibilitychange"));
await waitFor(() => {
expect(
screen.queryByText(
/Freighter is set to PUBLIC\. Switch to TESTNET to use SmartDrop\./,
),
).toBeNull();
});
expect(freighterMock.getNetworkDetails).toHaveBeenCalledTimes(2);
});
});