@memberstack/dom 2.0.0 → 2.0.2-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +356 -3
- package/lib/auth/index.d.mts +58 -4
- package/lib/auth/index.d.ts +58 -4
- package/lib/auth/index.js +5 -2
- package/lib/auth/index.mjs +4 -2
- package/lib/constants/endpoints.js +2 -1
- package/lib/constants/endpoints.mjs +1 -1
- package/lib/index.d.mts +1874 -61
- package/lib/index.d.ts +1874 -61
- package/lib/index.js +1548 -30626
- package/lib/index.mjs +1534 -30626
- package/lib/methods/dom/index.js +1 -0
- package/lib/methods/dom/main-dom.d.mts +1 -13
- package/lib/methods/dom/main-dom.d.ts +1 -13
- package/lib/methods/dom/main-dom.js +14545 -29552
- package/lib/methods/dom/main-dom.mjs +14544 -29552
- package/lib/methods/dom/methods.d.mts +88 -6
- package/lib/methods/dom/methods.d.ts +88 -6
- package/lib/methods/dom/methods.js +137 -30637
- package/lib/methods/dom/methods.mjs +135 -30639
- package/lib/methods/index.d.mts +111 -29
- package/lib/methods/index.d.ts +111 -29
- package/lib/methods/index.js +1024 -30617
- package/lib/methods/index.mjs +1023 -30617
- package/lib/methods/requests/index.d.mts +843 -23
- package/lib/methods/requests/index.d.ts +843 -23
- package/lib/methods/requests/index.js +867 -42
- package/lib/methods/requests/index.mjs +866 -42
- package/lib/methods/requests/requests.d.mts +9 -8
- package/lib/methods/requests/requests.d.ts +9 -8
- package/lib/methods/requests/requests.js +5 -3
- package/lib/methods/requests/requests.mjs +4 -3
- package/lib/models-BmZS-mc4.d.ts +193 -0
- package/lib/models-CTRKogoR.d.ts +487 -0
- package/lib/models-le7xaT4H.d.ts +193 -0
- package/lib/testing/index.d.mts +272 -0
- package/lib/testing/index.d.ts +272 -0
- package/lib/testing/index.js +313 -0
- package/lib/testing/index.mjs +284 -0
- package/lib/types/index.d.mts +1 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.js +1 -0
- package/lib/types/params.d.mts +634 -10
- package/lib/types/params.d.ts +634 -10
- package/lib/types/params.js +1 -0
- package/lib/types/payloads.d.mts +200 -1
- package/lib/types/payloads.d.ts +200 -1
- package/lib/types/payloads.js +1 -0
- package/lib/types/translations.d.mts +58 -0
- package/lib/types/translations.d.ts +58 -0
- package/lib/types/translations.js +1 -0
- package/lib/types/utils/payloads.d.mts +1 -3
- package/lib/types/utils/payloads.d.ts +1 -3
- package/lib/types/utils/payloads.js +1 -0
- package/lib/utils/cookies.d.mts +5 -5
- package/lib/utils/cookies.d.ts +5 -5
- package/lib/utils/cookies.js +14 -3
- package/lib/utils/cookies.mjs +13 -3
- package/lib/utils/defaultMessageBox.js +1 -0
- package/package.json +23 -12
- package/lib/index.global.js +0 -46364
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { M as Member, a as Plan, c as PlanConnection, g as MemberCard, A as App, C as ContentGroup } from '../models-CTRKogoR.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Test utilities for Memberstack SDK.
|
|
5
|
+
* Provides mock factories and helpers for testing applications that use Memberstack.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createMockMemberstack, mockMember, mockPlan } from '@memberstack/dom/testing';
|
|
10
|
+
*
|
|
11
|
+
* // Create a mock SDK instance
|
|
12
|
+
* const mockMs = createMockMemberstack({
|
|
13
|
+
* member: mockMember({ email: 'test@example.com' }),
|
|
14
|
+
* plans: [mockPlan({ name: 'Pro' })]
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // Use in tests
|
|
18
|
+
* const { data: member } = await mockMs.getCurrentMember();
|
|
19
|
+
* expect(member?.auth.email).toBe('test@example.com');
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @packageDocumentation
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Creates a mock member object with sensible defaults.
|
|
27
|
+
* Override any property by passing it in the options.
|
|
28
|
+
*
|
|
29
|
+
* @param overrides - Partial member data to override defaults
|
|
30
|
+
* @returns A complete mock Member object
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* // Basic usage
|
|
35
|
+
* const member = mockMember();
|
|
36
|
+
*
|
|
37
|
+
* // With custom email
|
|
38
|
+
* const member = mockMember({ auth: { email: 'custom@test.com' } });
|
|
39
|
+
*
|
|
40
|
+
* // With plans
|
|
41
|
+
* const member = mockMember({
|
|
42
|
+
* planConnections: [mockPlanConnection({ planId: 'pln_abc123' })]
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
declare function mockMember(overrides?: DeepPartial<Member>): Member;
|
|
47
|
+
/**
|
|
48
|
+
* Creates a mock plan object.
|
|
49
|
+
*
|
|
50
|
+
* @param overrides - Partial plan data to override defaults
|
|
51
|
+
* @returns A complete mock Plan object
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const freePlan = mockPlan({ name: 'Free', prices: [] });
|
|
56
|
+
* const proPlan = mockPlan({
|
|
57
|
+
* name: 'Pro',
|
|
58
|
+
* prices: [mockPrice({ amount: '9.99' })]
|
|
59
|
+
* });
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
declare function mockPlan(overrides?: DeepPartial<Plan>): Plan;
|
|
63
|
+
/**
|
|
64
|
+
* Creates a mock plan connection (member's subscription to a plan).
|
|
65
|
+
*
|
|
66
|
+
* @param overrides - Partial connection data to override defaults
|
|
67
|
+
* @returns A complete mock PlanConnection object
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* // Active subscription
|
|
72
|
+
* const conn = mockPlanConnection({ active: true, status: 'ACTIVE' });
|
|
73
|
+
*
|
|
74
|
+
* // Canceled subscription
|
|
75
|
+
* const conn = mockPlanConnection({
|
|
76
|
+
* active: false,
|
|
77
|
+
* status: 'CANCELED',
|
|
78
|
+
* payment: { cancelAtDate: Date.now() + 86400000 }
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
declare function mockPlanConnection(overrides?: DeepPartial<PlanConnection>): PlanConnection;
|
|
83
|
+
/**
|
|
84
|
+
* Creates a mock payment card.
|
|
85
|
+
*
|
|
86
|
+
* @param overrides - Partial card data to override defaults
|
|
87
|
+
* @returns A complete mock MemberCard object
|
|
88
|
+
*/
|
|
89
|
+
declare function mockCard(overrides?: DeepPartial<MemberCard>): MemberCard;
|
|
90
|
+
/**
|
|
91
|
+
* Creates a mock app configuration.
|
|
92
|
+
*
|
|
93
|
+
* @param overrides - Partial app data to override defaults
|
|
94
|
+
* @returns A complete mock App object
|
|
95
|
+
*/
|
|
96
|
+
declare function mockApp(overrides?: DeepPartial<App>): App;
|
|
97
|
+
/**
|
|
98
|
+
* Creates a mock content group (restricted URL group).
|
|
99
|
+
*
|
|
100
|
+
* @param overrides - Partial group data to override defaults
|
|
101
|
+
* @returns A complete mock ContentGroup object
|
|
102
|
+
*/
|
|
103
|
+
declare function mockContentGroup(overrides?: DeepPartial<ContentGroup>): ContentGroup;
|
|
104
|
+
/**
|
|
105
|
+
* Options for creating a mock Memberstack instance.
|
|
106
|
+
*/
|
|
107
|
+
interface MockMemberstackOptions {
|
|
108
|
+
/** The currently logged-in member, or null if logged out */
|
|
109
|
+
member?: Member | null;
|
|
110
|
+
/** Available plans in the app */
|
|
111
|
+
plans?: Plan[];
|
|
112
|
+
/** App configuration */
|
|
113
|
+
app?: App;
|
|
114
|
+
/** Content groups */
|
|
115
|
+
contentGroups?: ContentGroup[];
|
|
116
|
+
/** Member's saved cards */
|
|
117
|
+
cards?: MemberCard[];
|
|
118
|
+
/** Custom method overrides */
|
|
119
|
+
overrides?: Partial<MockMemberstackInstance>;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Mock implementation of the Memberstack SDK.
|
|
123
|
+
* Implements the most commonly used methods for testing.
|
|
124
|
+
*/
|
|
125
|
+
interface MockMemberstackInstance {
|
|
126
|
+
getCurrentMember: () => Promise<{
|
|
127
|
+
data: Member | null;
|
|
128
|
+
}>;
|
|
129
|
+
getPlans: () => Promise<{
|
|
130
|
+
data: Plan[];
|
|
131
|
+
}>;
|
|
132
|
+
getPlan: (params: {
|
|
133
|
+
planId: string;
|
|
134
|
+
}) => Promise<{
|
|
135
|
+
data: Plan | null;
|
|
136
|
+
}>;
|
|
137
|
+
getApp: () => Promise<{
|
|
138
|
+
data: App;
|
|
139
|
+
}>;
|
|
140
|
+
getRestrictedUrlGroups: () => Promise<{
|
|
141
|
+
data: ContentGroup[];
|
|
142
|
+
}>;
|
|
143
|
+
getMemberCards: () => Promise<{
|
|
144
|
+
data: MemberCard[];
|
|
145
|
+
}>;
|
|
146
|
+
loginMemberEmailPassword: (params: {
|
|
147
|
+
email: string;
|
|
148
|
+
password: string;
|
|
149
|
+
}) => Promise<{
|
|
150
|
+
data: {
|
|
151
|
+
member: Member;
|
|
152
|
+
tokens: {
|
|
153
|
+
accessToken: string;
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
}>;
|
|
157
|
+
signupMemberEmailPassword: (params: {
|
|
158
|
+
email: string;
|
|
159
|
+
password: string;
|
|
160
|
+
}) => Promise<{
|
|
161
|
+
data: {
|
|
162
|
+
member: Member;
|
|
163
|
+
tokens: {
|
|
164
|
+
accessToken: string;
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
}>;
|
|
168
|
+
logout: () => Promise<{
|
|
169
|
+
data: {
|
|
170
|
+
redirect?: string;
|
|
171
|
+
};
|
|
172
|
+
}>;
|
|
173
|
+
updateMember: (params: {
|
|
174
|
+
customFields?: object;
|
|
175
|
+
}) => Promise<{
|
|
176
|
+
data: Member;
|
|
177
|
+
}>;
|
|
178
|
+
onAuthChange: (callback: (payload: {
|
|
179
|
+
member: Member | null;
|
|
180
|
+
}) => void) => () => void;
|
|
181
|
+
_setMember: (member: Member | null) => void;
|
|
182
|
+
_getMockState: () => {
|
|
183
|
+
member: Member | null;
|
|
184
|
+
plans: Plan[];
|
|
185
|
+
app: App;
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Creates a mock Memberstack SDK instance for testing.
|
|
190
|
+
* All methods return promises with mock data based on the provided options.
|
|
191
|
+
*
|
|
192
|
+
* @param options - Configuration for the mock instance
|
|
193
|
+
* @returns A mock Memberstack instance with common methods
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```typescript
|
|
197
|
+
* // Basic setup
|
|
198
|
+
* const mockMs = createMockMemberstack({
|
|
199
|
+
* member: mockMember({ auth: { email: 'test@test.com' } }),
|
|
200
|
+
* plans: [mockPlan({ name: 'Free' }), mockPlan({ name: 'Pro' })]
|
|
201
|
+
* });
|
|
202
|
+
*
|
|
203
|
+
* // Use in component tests
|
|
204
|
+
* const { data: member } = await mockMs.getCurrentMember();
|
|
205
|
+
* expect(member).not.toBeNull();
|
|
206
|
+
*
|
|
207
|
+
* // Test logout flow
|
|
208
|
+
* await mockMs.logout();
|
|
209
|
+
* const { data: afterLogout } = await mockMs.getCurrentMember();
|
|
210
|
+
* expect(afterLogout).toBeNull();
|
|
211
|
+
*
|
|
212
|
+
* // Subscribe to auth changes
|
|
213
|
+
* const authCallback = jest.fn();
|
|
214
|
+
* mockMs.onAuthChange(authCallback);
|
|
215
|
+
* mockMs._setMember(null); // Simulate logout
|
|
216
|
+
* expect(authCallback).toHaveBeenCalledWith({ member: null });
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
declare function createMockMemberstack(options?: MockMemberstackOptions): MockMemberstackInstance;
|
|
220
|
+
/** Deep partial type for nested object overrides */
|
|
221
|
+
type DeepPartial<T> = {
|
|
222
|
+
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
223
|
+
};
|
|
224
|
+
/**
|
|
225
|
+
* Custom matchers for testing Memberstack data.
|
|
226
|
+
* These can be extended with Jest's expect.extend() or Vitest's expect.extend().
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```typescript
|
|
230
|
+
* // In your test setup file:
|
|
231
|
+
* import { memberstackMatchers } from '@memberstack/dom/testing';
|
|
232
|
+
* expect.extend(memberstackMatchers);
|
|
233
|
+
*
|
|
234
|
+
* // In tests:
|
|
235
|
+
* expect(member).toBeLoggedIn();
|
|
236
|
+
* expect(member).toHavePlan('pln_abc123');
|
|
237
|
+
* ```
|
|
238
|
+
*/
|
|
239
|
+
declare const memberstackMatchers: {
|
|
240
|
+
/**
|
|
241
|
+
* Assert that a member is logged in (not null and has an email).
|
|
242
|
+
*/
|
|
243
|
+
toBeLoggedIn(received: Member | null): {
|
|
244
|
+
pass: boolean;
|
|
245
|
+
message: () => string;
|
|
246
|
+
};
|
|
247
|
+
/**
|
|
248
|
+
* Assert that a member has a specific plan.
|
|
249
|
+
*/
|
|
250
|
+
toHavePlan(received: Member | null, planId: string): {
|
|
251
|
+
pass: boolean;
|
|
252
|
+
message: () => string;
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* Assert that a member's email is verified.
|
|
256
|
+
*/
|
|
257
|
+
toBeVerified(received: Member | null): {
|
|
258
|
+
pass: boolean;
|
|
259
|
+
message: () => "Expected member not to be verified" | "Expected member to be verified";
|
|
260
|
+
};
|
|
261
|
+
};
|
|
262
|
+
declare global {
|
|
263
|
+
namespace jest {
|
|
264
|
+
interface Matchers<R> {
|
|
265
|
+
toBeLoggedIn(): R;
|
|
266
|
+
toHavePlan(planId: string): R;
|
|
267
|
+
toBeVerified(): R;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
export { type MockMemberstackInstance, type MockMemberstackOptions, createMockMemberstack, memberstackMatchers, mockApp, mockCard, mockContentGroup, mockMember, mockPlan, mockPlanConnection };
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { M as Member, a as Plan, c as PlanConnection, g as MemberCard, A as App, C as ContentGroup } from '../models-CTRKogoR.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Test utilities for Memberstack SDK.
|
|
5
|
+
* Provides mock factories and helpers for testing applications that use Memberstack.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createMockMemberstack, mockMember, mockPlan } from '@memberstack/dom/testing';
|
|
10
|
+
*
|
|
11
|
+
* // Create a mock SDK instance
|
|
12
|
+
* const mockMs = createMockMemberstack({
|
|
13
|
+
* member: mockMember({ email: 'test@example.com' }),
|
|
14
|
+
* plans: [mockPlan({ name: 'Pro' })]
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // Use in tests
|
|
18
|
+
* const { data: member } = await mockMs.getCurrentMember();
|
|
19
|
+
* expect(member?.auth.email).toBe('test@example.com');
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @packageDocumentation
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Creates a mock member object with sensible defaults.
|
|
27
|
+
* Override any property by passing it in the options.
|
|
28
|
+
*
|
|
29
|
+
* @param overrides - Partial member data to override defaults
|
|
30
|
+
* @returns A complete mock Member object
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* // Basic usage
|
|
35
|
+
* const member = mockMember();
|
|
36
|
+
*
|
|
37
|
+
* // With custom email
|
|
38
|
+
* const member = mockMember({ auth: { email: 'custom@test.com' } });
|
|
39
|
+
*
|
|
40
|
+
* // With plans
|
|
41
|
+
* const member = mockMember({
|
|
42
|
+
* planConnections: [mockPlanConnection({ planId: 'pln_abc123' })]
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
declare function mockMember(overrides?: DeepPartial<Member>): Member;
|
|
47
|
+
/**
|
|
48
|
+
* Creates a mock plan object.
|
|
49
|
+
*
|
|
50
|
+
* @param overrides - Partial plan data to override defaults
|
|
51
|
+
* @returns A complete mock Plan object
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const freePlan = mockPlan({ name: 'Free', prices: [] });
|
|
56
|
+
* const proPlan = mockPlan({
|
|
57
|
+
* name: 'Pro',
|
|
58
|
+
* prices: [mockPrice({ amount: '9.99' })]
|
|
59
|
+
* });
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
declare function mockPlan(overrides?: DeepPartial<Plan>): Plan;
|
|
63
|
+
/**
|
|
64
|
+
* Creates a mock plan connection (member's subscription to a plan).
|
|
65
|
+
*
|
|
66
|
+
* @param overrides - Partial connection data to override defaults
|
|
67
|
+
* @returns A complete mock PlanConnection object
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* // Active subscription
|
|
72
|
+
* const conn = mockPlanConnection({ active: true, status: 'ACTIVE' });
|
|
73
|
+
*
|
|
74
|
+
* // Canceled subscription
|
|
75
|
+
* const conn = mockPlanConnection({
|
|
76
|
+
* active: false,
|
|
77
|
+
* status: 'CANCELED',
|
|
78
|
+
* payment: { cancelAtDate: Date.now() + 86400000 }
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
declare function mockPlanConnection(overrides?: DeepPartial<PlanConnection>): PlanConnection;
|
|
83
|
+
/**
|
|
84
|
+
* Creates a mock payment card.
|
|
85
|
+
*
|
|
86
|
+
* @param overrides - Partial card data to override defaults
|
|
87
|
+
* @returns A complete mock MemberCard object
|
|
88
|
+
*/
|
|
89
|
+
declare function mockCard(overrides?: DeepPartial<MemberCard>): MemberCard;
|
|
90
|
+
/**
|
|
91
|
+
* Creates a mock app configuration.
|
|
92
|
+
*
|
|
93
|
+
* @param overrides - Partial app data to override defaults
|
|
94
|
+
* @returns A complete mock App object
|
|
95
|
+
*/
|
|
96
|
+
declare function mockApp(overrides?: DeepPartial<App>): App;
|
|
97
|
+
/**
|
|
98
|
+
* Creates a mock content group (restricted URL group).
|
|
99
|
+
*
|
|
100
|
+
* @param overrides - Partial group data to override defaults
|
|
101
|
+
* @returns A complete mock ContentGroup object
|
|
102
|
+
*/
|
|
103
|
+
declare function mockContentGroup(overrides?: DeepPartial<ContentGroup>): ContentGroup;
|
|
104
|
+
/**
|
|
105
|
+
* Options for creating a mock Memberstack instance.
|
|
106
|
+
*/
|
|
107
|
+
interface MockMemberstackOptions {
|
|
108
|
+
/** The currently logged-in member, or null if logged out */
|
|
109
|
+
member?: Member | null;
|
|
110
|
+
/** Available plans in the app */
|
|
111
|
+
plans?: Plan[];
|
|
112
|
+
/** App configuration */
|
|
113
|
+
app?: App;
|
|
114
|
+
/** Content groups */
|
|
115
|
+
contentGroups?: ContentGroup[];
|
|
116
|
+
/** Member's saved cards */
|
|
117
|
+
cards?: MemberCard[];
|
|
118
|
+
/** Custom method overrides */
|
|
119
|
+
overrides?: Partial<MockMemberstackInstance>;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Mock implementation of the Memberstack SDK.
|
|
123
|
+
* Implements the most commonly used methods for testing.
|
|
124
|
+
*/
|
|
125
|
+
interface MockMemberstackInstance {
|
|
126
|
+
getCurrentMember: () => Promise<{
|
|
127
|
+
data: Member | null;
|
|
128
|
+
}>;
|
|
129
|
+
getPlans: () => Promise<{
|
|
130
|
+
data: Plan[];
|
|
131
|
+
}>;
|
|
132
|
+
getPlan: (params: {
|
|
133
|
+
planId: string;
|
|
134
|
+
}) => Promise<{
|
|
135
|
+
data: Plan | null;
|
|
136
|
+
}>;
|
|
137
|
+
getApp: () => Promise<{
|
|
138
|
+
data: App;
|
|
139
|
+
}>;
|
|
140
|
+
getRestrictedUrlGroups: () => Promise<{
|
|
141
|
+
data: ContentGroup[];
|
|
142
|
+
}>;
|
|
143
|
+
getMemberCards: () => Promise<{
|
|
144
|
+
data: MemberCard[];
|
|
145
|
+
}>;
|
|
146
|
+
loginMemberEmailPassword: (params: {
|
|
147
|
+
email: string;
|
|
148
|
+
password: string;
|
|
149
|
+
}) => Promise<{
|
|
150
|
+
data: {
|
|
151
|
+
member: Member;
|
|
152
|
+
tokens: {
|
|
153
|
+
accessToken: string;
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
}>;
|
|
157
|
+
signupMemberEmailPassword: (params: {
|
|
158
|
+
email: string;
|
|
159
|
+
password: string;
|
|
160
|
+
}) => Promise<{
|
|
161
|
+
data: {
|
|
162
|
+
member: Member;
|
|
163
|
+
tokens: {
|
|
164
|
+
accessToken: string;
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
}>;
|
|
168
|
+
logout: () => Promise<{
|
|
169
|
+
data: {
|
|
170
|
+
redirect?: string;
|
|
171
|
+
};
|
|
172
|
+
}>;
|
|
173
|
+
updateMember: (params: {
|
|
174
|
+
customFields?: object;
|
|
175
|
+
}) => Promise<{
|
|
176
|
+
data: Member;
|
|
177
|
+
}>;
|
|
178
|
+
onAuthChange: (callback: (payload: {
|
|
179
|
+
member: Member | null;
|
|
180
|
+
}) => void) => () => void;
|
|
181
|
+
_setMember: (member: Member | null) => void;
|
|
182
|
+
_getMockState: () => {
|
|
183
|
+
member: Member | null;
|
|
184
|
+
plans: Plan[];
|
|
185
|
+
app: App;
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Creates a mock Memberstack SDK instance for testing.
|
|
190
|
+
* All methods return promises with mock data based on the provided options.
|
|
191
|
+
*
|
|
192
|
+
* @param options - Configuration for the mock instance
|
|
193
|
+
* @returns A mock Memberstack instance with common methods
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```typescript
|
|
197
|
+
* // Basic setup
|
|
198
|
+
* const mockMs = createMockMemberstack({
|
|
199
|
+
* member: mockMember({ auth: { email: 'test@test.com' } }),
|
|
200
|
+
* plans: [mockPlan({ name: 'Free' }), mockPlan({ name: 'Pro' })]
|
|
201
|
+
* });
|
|
202
|
+
*
|
|
203
|
+
* // Use in component tests
|
|
204
|
+
* const { data: member } = await mockMs.getCurrentMember();
|
|
205
|
+
* expect(member).not.toBeNull();
|
|
206
|
+
*
|
|
207
|
+
* // Test logout flow
|
|
208
|
+
* await mockMs.logout();
|
|
209
|
+
* const { data: afterLogout } = await mockMs.getCurrentMember();
|
|
210
|
+
* expect(afterLogout).toBeNull();
|
|
211
|
+
*
|
|
212
|
+
* // Subscribe to auth changes
|
|
213
|
+
* const authCallback = jest.fn();
|
|
214
|
+
* mockMs.onAuthChange(authCallback);
|
|
215
|
+
* mockMs._setMember(null); // Simulate logout
|
|
216
|
+
* expect(authCallback).toHaveBeenCalledWith({ member: null });
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
declare function createMockMemberstack(options?: MockMemberstackOptions): MockMemberstackInstance;
|
|
220
|
+
/** Deep partial type for nested object overrides */
|
|
221
|
+
type DeepPartial<T> = {
|
|
222
|
+
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
223
|
+
};
|
|
224
|
+
/**
|
|
225
|
+
* Custom matchers for testing Memberstack data.
|
|
226
|
+
* These can be extended with Jest's expect.extend() or Vitest's expect.extend().
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```typescript
|
|
230
|
+
* // In your test setup file:
|
|
231
|
+
* import { memberstackMatchers } from '@memberstack/dom/testing';
|
|
232
|
+
* expect.extend(memberstackMatchers);
|
|
233
|
+
*
|
|
234
|
+
* // In tests:
|
|
235
|
+
* expect(member).toBeLoggedIn();
|
|
236
|
+
* expect(member).toHavePlan('pln_abc123');
|
|
237
|
+
* ```
|
|
238
|
+
*/
|
|
239
|
+
declare const memberstackMatchers: {
|
|
240
|
+
/**
|
|
241
|
+
* Assert that a member is logged in (not null and has an email).
|
|
242
|
+
*/
|
|
243
|
+
toBeLoggedIn(received: Member | null): {
|
|
244
|
+
pass: boolean;
|
|
245
|
+
message: () => string;
|
|
246
|
+
};
|
|
247
|
+
/**
|
|
248
|
+
* Assert that a member has a specific plan.
|
|
249
|
+
*/
|
|
250
|
+
toHavePlan(received: Member | null, planId: string): {
|
|
251
|
+
pass: boolean;
|
|
252
|
+
message: () => string;
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* Assert that a member's email is verified.
|
|
256
|
+
*/
|
|
257
|
+
toBeVerified(received: Member | null): {
|
|
258
|
+
pass: boolean;
|
|
259
|
+
message: () => "Expected member not to be verified" | "Expected member to be verified";
|
|
260
|
+
};
|
|
261
|
+
};
|
|
262
|
+
declare global {
|
|
263
|
+
namespace jest {
|
|
264
|
+
interface Matchers<R> {
|
|
265
|
+
toBeLoggedIn(): R;
|
|
266
|
+
toHavePlan(planId: string): R;
|
|
267
|
+
toBeVerified(): R;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
export { type MockMemberstackInstance, type MockMemberstackOptions, createMockMemberstack, memberstackMatchers, mockApp, mockCard, mockContentGroup, mockMember, mockPlan, mockPlanConnection };
|