Skip to content

Commit d3360c2

Browse files
committed
test: unit tests for inferInvitationStatus function
1 parent 0128fd0 commit d3360c2

File tree

2 files changed

+291
-0
lines changed

2 files changed

+291
-0
lines changed

src/lib/wallet.test.js

+288
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,288 @@
1+
import '../../src/installSesLockdown';
2+
import { test, expect, describe, vi } from 'vitest';
3+
4+
vi.stubGlobal('window', {
5+
location: { search: '' },
6+
alert: vi.fn(),
7+
keplr: {
8+
experimentalSuggestChain: vi.fn(),
9+
enable: vi.fn(),
10+
getKey: () => ({ isNanoLedger: true }),
11+
getOfflineSignerOnlyAmino: () => ({
12+
getAccounts: () => [{ address: 1 }],
13+
}),
14+
},
15+
});
16+
17+
import { inferInvitationStatus } from './wallet';
18+
import { LoadStatus } from './rpc';
19+
20+
const createMockWallet = ({
21+
usedCharterInviations = 0,
22+
charterInvitations = 0,
23+
usedCommitteeInvitations = 0,
24+
committeeInvitations = 0,
25+
}) => ({
26+
brands: [],
27+
liveOffers: [],
28+
offerToPublicSubscriberPaths: [],
29+
offerToUsedInvitation: [
30+
...[...Array(usedCharterInviations)].map((_, idx) => [
31+
`econgov-${1_000_000 + idx}`,
32+
{
33+
brand: 'Zoe Invitation Brand',
34+
value: [
35+
{
36+
description: 'charter member invitation',
37+
handle: null,
38+
installation: null,
39+
instance: `instance${idx}`,
40+
},
41+
],
42+
},
43+
]),
44+
...[...Array(usedCommitteeInvitations)].map((_, idx) => [
45+
`econgov-${2_000_000 + idx}`,
46+
{
47+
brand: 'Zoe Invitation Brand',
48+
value: [
49+
{
50+
description: 'Voter0',
51+
handle: null,
52+
installation: null,
53+
instance: `instance${idx}`,
54+
},
55+
],
56+
},
57+
]),
58+
],
59+
purses: [
60+
{
61+
balance: {
62+
brand: 'Zoe Invitation Brand',
63+
value: [
64+
...[...Array(charterInvitations)].map((_, idx) => ({
65+
description: 'charter member invitation',
66+
handle: null,
67+
installation: null,
68+
instance: `instance${idx}`,
69+
})),
70+
...[...Array(committeeInvitations)].map((_, idx) => ({
71+
description: 'Voter0',
72+
handle: null,
73+
installation: null,
74+
instance: `instance${idx}`,
75+
})),
76+
],
77+
},
78+
brand: 'Zoe Invitation Brand',
79+
},
80+
],
81+
});
82+
83+
describe('inferInvitationStatus', () => {
84+
test('should find one accepted charter and committee invitation', () => {
85+
const mockWallet = createMockWallet({
86+
usedCharterInviations: 1,
87+
usedCommitteeInvitations: 1,
88+
});
89+
90+
const charterInvitationStatus = inferInvitationStatus(
91+
LoadStatus.Received,
92+
mockWallet,
93+
'charter member invitation',
94+
'instance0',
95+
);
96+
97+
const voterInvitationStatus = inferInvitationStatus(
98+
LoadStatus.Received,
99+
mockWallet,
100+
'Voter',
101+
'instance0',
102+
);
103+
104+
expect(charterInvitationStatus).toStrictEqual({
105+
acceptedIn: 'econgov-1000000',
106+
status: 'accepted',
107+
});
108+
109+
expect(voterInvitationStatus).toStrictEqual({
110+
acceptedIn: 'econgov-2000000',
111+
status: 'accepted',
112+
});
113+
});
114+
115+
test('should not find any accepted charter and committee invitation', () => {
116+
const mockWallet = createMockWallet({});
117+
118+
const charterInvitationStatus = inferInvitationStatus(
119+
LoadStatus.Received,
120+
mockWallet,
121+
'charter member invitation',
122+
'instance0',
123+
);
124+
125+
const voterInvitationStatus = inferInvitationStatus(
126+
LoadStatus.Received,
127+
mockWallet,
128+
'Voter',
129+
'instance0',
130+
);
131+
132+
expect(charterInvitationStatus).toStrictEqual({
133+
status: 'missing',
134+
});
135+
136+
expect(voterInvitationStatus).toStrictEqual({
137+
status: 'missing',
138+
});
139+
});
140+
141+
test('should find unused charter and committee invitation', () => {
142+
const mockWallet = createMockWallet({
143+
charterInvitations: 1,
144+
committeeInvitations: 1,
145+
});
146+
147+
const charterInvitationStatus = inferInvitationStatus(
148+
LoadStatus.Received,
149+
mockWallet,
150+
'charter member invitation',
151+
'instance0',
152+
);
153+
154+
const voterInvitationStatus = inferInvitationStatus(
155+
LoadStatus.Received,
156+
mockWallet,
157+
'Voter',
158+
'instance0',
159+
);
160+
161+
expect(charterInvitationStatus).toStrictEqual({
162+
invitation: {
163+
description: 'charter member invitation',
164+
handle: null,
165+
installation: null,
166+
instance: 'instance0',
167+
},
168+
status: 'available',
169+
});
170+
171+
expect(voterInvitationStatus).toStrictEqual({
172+
invitation: {
173+
description: 'Voter0',
174+
handle: null,
175+
installation: null,
176+
instance: 'instance0',
177+
},
178+
status: 'available',
179+
});
180+
});
181+
182+
test('should find new unused invitations before old used ones', () => {
183+
const mockWallet = createMockWallet({
184+
charterInvitations: 2,
185+
committeeInvitations: 2,
186+
usedCharterInviations: 1,
187+
usedCommitteeInvitations: 1,
188+
});
189+
190+
const charterInvitationStatus = inferInvitationStatus(
191+
LoadStatus.Received,
192+
mockWallet,
193+
'charter member invitation',
194+
'instance1',
195+
);
196+
197+
const voterInvitationStatus = inferInvitationStatus(
198+
LoadStatus.Received,
199+
mockWallet,
200+
'Voter',
201+
'instance1',
202+
);
203+
204+
expect(charterInvitationStatus).toStrictEqual({
205+
invitation: {
206+
description: 'charter member invitation',
207+
handle: null,
208+
installation: null,
209+
instance: 'instance1',
210+
},
211+
status: 'available',
212+
});
213+
214+
expect(voterInvitationStatus).toStrictEqual({
215+
invitation: {
216+
description: 'Voter0',
217+
handle: null,
218+
installation: null,
219+
instance: 'instance1',
220+
},
221+
status: 'available',
222+
});
223+
});
224+
225+
test('should find newer used charter and committee invitation before old ones', () => {
226+
const mockWallet = createMockWallet({
227+
usedCharterInviations: 2,
228+
usedCommitteeInvitations: 2,
229+
});
230+
231+
const charterInvitationStatus = inferInvitationStatus(
232+
LoadStatus.Received,
233+
mockWallet,
234+
'charter member invitation',
235+
'instance1',
236+
);
237+
238+
const voterInvitationStatus = inferInvitationStatus(
239+
LoadStatus.Received,
240+
mockWallet,
241+
'Voter',
242+
'instance1',
243+
);
244+
245+
// newer invitations will have the last digit as 1
246+
expect(charterInvitationStatus).toStrictEqual({
247+
acceptedIn: 'econgov-1000001',
248+
status: 'accepted',
249+
});
250+
251+
expect(voterInvitationStatus).toStrictEqual({
252+
acceptedIn: 'econgov-2000001',
253+
status: 'accepted',
254+
});
255+
});
256+
257+
test('should not find old charter and committee invitation (used or unused) when new instance is available', () => {
258+
const mockWallet = createMockWallet({
259+
charterInvitations: 1,
260+
committeeInvitations: 1,
261+
usedCharterInviations: 1,
262+
usedCommitteeInvitations: 1,
263+
});
264+
265+
const charterInvitationStatus = inferInvitationStatus(
266+
LoadStatus.Received,
267+
mockWallet,
268+
'charter member invitation',
269+
'instance1',
270+
);
271+
272+
const voterInvitationStatus = inferInvitationStatus(
273+
LoadStatus.Received,
274+
mockWallet,
275+
'Voter',
276+
'instance1',
277+
);
278+
279+
// newer invitations will have the last digit as 1
280+
expect(charterInvitationStatus).toStrictEqual({
281+
status: 'missing',
282+
});
283+
284+
expect(voterInvitationStatus).toStrictEqual({
285+
status: 'missing',
286+
});
287+
});
288+
});

vitest.config.ts

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ export default mergeConfig(
66
viteConfig,
77
defineConfig({
88
test: {
9+
deps: {
10+
inline: ['@agoric/rpc'],
11+
},
912
setupFiles: ['src/installSesLockdown.ts'],
1013
exclude: [...configDefaults.exclude, 'tests/e2e/**'],
1114
},

0 commit comments

Comments
 (0)