@smess/networking 1.0.25 → 1.0.28
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/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/services/customer.service.d.ts +157 -1
- package/dist/services/customer.service.js +35 -0
- package/dist/services/customer.service.test.js +330 -0
- package/dist/services/store.product.service.d.ts +1 -0
- package/package.json +1 -1
- package/dist/scripts/dev-test.d.ts +0 -1
- package/dist/scripts/dev-test.js +0 -803
- package/dist/scripts/real-test.d.ts +0 -1
- package/dist/scripts/real-test.js +0 -341
- package/dist/src/core/axios.d.ts +0 -51
- package/dist/src/core/axios.js +0 -65
- package/dist/src/core/axios.observable.d.ts +0 -11
- package/dist/src/core/axios.observable.js +0 -58
- package/dist/src/core/base.provider.advanced.test.d.ts +0 -1
- package/dist/src/core/base.provider.advanced.test.js +0 -29
- package/dist/src/core/base.provider.d.ts +0 -15
- package/dist/src/core/base.provider.js +0 -13
- package/dist/src/core/base.provider.test.d.ts +0 -1
- package/dist/src/core/base.provider.test.js +0 -36
- package/dist/src/core/base.service.wrapper.advanced.test.d.ts +0 -1
- package/dist/src/core/base.service.wrapper.advanced.test.js +0 -39
- package/dist/src/core/base.service.wrapper.d.ts +0 -7
- package/dist/src/core/base.service.wrapper.js +0 -11
- package/dist/src/core/base.service.wrapper.test.d.ts +0 -1
- package/dist/src/core/base.service.wrapper.test.js +0 -25
- package/dist/src/core/rx.http.service.d.ts +0 -51
- package/dist/src/core/rx.http.service.js +0 -65
- package/dist/src/index.d.ts +0 -19
- package/dist/src/index.js +0 -23
- package/dist/src/services/auth.service.d.ts +0 -65
- package/dist/src/services/auth.service.js +0 -197
- package/dist/src/services/auth.service.test.d.ts +0 -1
- package/dist/src/services/auth.service.test.js +0 -334
- package/dist/src/services/cache.service.d.ts +0 -31
- package/dist/src/services/cache.service.js +0 -77
- package/dist/src/services/cache.service.test.d.ts +0 -1
- package/dist/src/services/cache.service.test.js +0 -88
- package/dist/src/services/customer.service.d.ts +0 -71
- package/dist/src/services/customer.service.js +0 -114
- package/dist/src/services/customer.service.test.d.ts +0 -1
- package/dist/src/services/customer.service.test.js +0 -274
- package/dist/src/services/logger.service.d.ts +0 -31
- package/dist/src/services/logger.service.js +0 -93
- package/dist/src/services/logger.service.test.d.ts +0 -1
- package/dist/src/services/logger.service.test.js +0 -31
- package/dist/src/services/order.service.d.ts +0 -73
- package/dist/src/services/order.service.js +0 -97
- package/dist/src/services/order.service.test.d.ts +0 -1
- package/dist/src/services/order.service.test.js +0 -163
- package/dist/src/services/product.service.d.ts +0 -21
- package/dist/src/services/product.service.js +0 -42
- package/dist/src/services/product.service.test.d.ts +0 -1
- package/dist/src/services/product.service.test.js +0 -61
- package/dist/src/services/smess.service.d.ts +0 -36
- package/dist/src/services/smess.service.js +0 -128
- package/dist/src/services/smess.service.test.d.ts +0 -1
- package/dist/src/services/smess.service.test.js +0 -103
- package/dist/src/services/store.cart.service.d.ts +0 -158
- package/dist/src/services/store.cart.service.js +0 -177
- package/dist/src/services/store.cart.service.test.d.ts +0 -1
- package/dist/src/services/store.cart.service.test.js +0 -394
- package/dist/src/services/store.product.service.d.ts +0 -123
- package/dist/src/services/store.product.service.js +0 -102
- package/dist/src/services/store.product.service.test.d.ts +0 -1
- package/dist/src/services/store.product.service.test.js +0 -319
- package/dist/src/services/store.service.d.ts +0 -79
- package/dist/src/services/store.service.js +0 -235
- package/dist/src/services/store.service.test.d.ts +0 -1
- package/dist/src/services/store.service.test.js +0 -274
- package/dist/src/services/user.service.d.ts +0 -16
- package/dist/src/services/user.service.js +0 -37
- package/dist/src/services/user.service.test.d.ts +0 -1
- package/dist/src/services/user.service.test.js +0 -52
- package/dist/src/types/types.d.ts +0 -93
- package/dist/src/types/types.js +0 -82
- package/dist/src/types/types.test.d.ts +0 -1
- package/dist/src/types/types.test.js +0 -25
- package/dist/src/utils/cache-import.d.ts +0 -3
- package/dist/src/utils/cache-import.js +0 -2
- package/dist/src/utils/networking-import.d.ts +0 -4
- package/dist/src/utils/networking-import.js +0 -3
- package/dist/src/utils/rxjs-import.d.ts +0 -5
- package/dist/src/utils/rxjs-import.js +0 -5
- /package/dist/{src/services → services}/employee.service.d.ts +0 -0
- /package/dist/{src/services → services}/employee.service.js +0 -0
- /package/dist/{src/services → services}/employee.service.test.d.ts +0 -0
- /package/dist/{src/services → services}/employee.service.test.js +0 -0
- /package/dist/{src/services → services}/utils/withAuthReset.d.ts +0 -0
- /package/dist/{src/services → services}/utils/withAuthReset.js +0 -0
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
import "fake-indexeddb/auto";
|
|
2
|
-
import { StoreService, } from "./store.service";
|
|
3
|
-
import { NetworkingUIEventWrapped, AlertModel, } from "../types/types";
|
|
4
|
-
import { of } from "rxjs";
|
|
5
|
-
describe("StoreService", () => {
|
|
6
|
-
const config = {
|
|
7
|
-
baseUrl: "https://api.example.com",
|
|
8
|
-
isProd: false,
|
|
9
|
-
clientId: "test-client-id",
|
|
10
|
-
apiKey: "test-api-key",
|
|
11
|
-
};
|
|
12
|
-
let service;
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
service = new StoreService(config);
|
|
15
|
-
});
|
|
16
|
-
afterEach(async () => {
|
|
17
|
-
await service.clearCache();
|
|
18
|
-
});
|
|
19
|
-
it("should create service instance", () => {
|
|
20
|
-
expect(service).toBeDefined();
|
|
21
|
-
});
|
|
22
|
-
it("should get store from network when no cache", async () => {
|
|
23
|
-
const response = { data: { id: "1", name: "Store" } };
|
|
24
|
-
const mockProvider = {
|
|
25
|
-
request: jest
|
|
26
|
-
.fn()
|
|
27
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
28
|
-
};
|
|
29
|
-
jest
|
|
30
|
-
.spyOn(service, "provider")
|
|
31
|
-
.mockReturnValue(mockProvider);
|
|
32
|
-
const result = await service.get("1").toPromise();
|
|
33
|
-
expect(result?.hasSuccess).toBe(true);
|
|
34
|
-
expect(result?.response).toEqual(response);
|
|
35
|
-
});
|
|
36
|
-
it("should get store from cache when available", async () => {
|
|
37
|
-
const response = { data: { id: "1", name: "Store" } };
|
|
38
|
-
// First call to populate cache
|
|
39
|
-
const mockProvider1 = {
|
|
40
|
-
request: jest
|
|
41
|
-
.fn()
|
|
42
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
43
|
-
};
|
|
44
|
-
jest
|
|
45
|
-
.spyOn(service, "provider")
|
|
46
|
-
.mockReturnValue(mockProvider1);
|
|
47
|
-
await service.get("1").toPromise();
|
|
48
|
-
// Second call should use cache (even if network fails)
|
|
49
|
-
const mockProvider2 = {
|
|
50
|
-
request: jest
|
|
51
|
-
.fn()
|
|
52
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
|
|
53
|
-
};
|
|
54
|
-
jest
|
|
55
|
-
.spyOn(service, "provider")
|
|
56
|
-
.mockReturnValue(mockProvider2);
|
|
57
|
-
const result = await service.get("1").toPromise();
|
|
58
|
-
expect(result?.hasSuccess).toBe(true);
|
|
59
|
-
expect(result?.response).toEqual(response);
|
|
60
|
-
});
|
|
61
|
-
it("should handle network error when no cache", async () => {
|
|
62
|
-
const mockProvider = {
|
|
63
|
-
request: jest
|
|
64
|
-
.fn()
|
|
65
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
|
|
66
|
-
};
|
|
67
|
-
jest
|
|
68
|
-
.spyOn(service, "provider")
|
|
69
|
-
.mockReturnValue(mockProvider);
|
|
70
|
-
const result = await service.get("1").toPromise();
|
|
71
|
-
expect(result?.hasFailed).toBe(true);
|
|
72
|
-
expect(result?.alertModel).toBeInstanceOf(AlertModel);
|
|
73
|
-
});
|
|
74
|
-
it("should get store list from network when no cache", async () => {
|
|
75
|
-
const response = { data: [{ id: "1", name: "Store" }] };
|
|
76
|
-
const mockProvider = {
|
|
77
|
-
request: jest
|
|
78
|
-
.fn()
|
|
79
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
80
|
-
};
|
|
81
|
-
jest
|
|
82
|
-
.spyOn(service, "provider")
|
|
83
|
-
.mockReturnValue(mockProvider);
|
|
84
|
-
const result = await service.list().toPromise();
|
|
85
|
-
expect(result?.hasSuccess).toBe(true);
|
|
86
|
-
expect(result?.response).toEqual(response);
|
|
87
|
-
});
|
|
88
|
-
it("should get store list from cache when available", async () => {
|
|
89
|
-
const response = { data: [{ id: "1", name: "Store" }] };
|
|
90
|
-
// First call to populate cache
|
|
91
|
-
const mockProvider1 = {
|
|
92
|
-
request: jest
|
|
93
|
-
.fn()
|
|
94
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
95
|
-
};
|
|
96
|
-
jest
|
|
97
|
-
.spyOn(service, "provider")
|
|
98
|
-
.mockReturnValue(mockProvider1);
|
|
99
|
-
await service.list().toPromise();
|
|
100
|
-
// Second call should use cache
|
|
101
|
-
const mockProvider2 = {
|
|
102
|
-
request: jest
|
|
103
|
-
.fn()
|
|
104
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
|
|
105
|
-
};
|
|
106
|
-
jest
|
|
107
|
-
.spyOn(service, "provider")
|
|
108
|
-
.mockReturnValue(mockProvider2);
|
|
109
|
-
const result = await service.list().toPromise();
|
|
110
|
-
expect(result?.hasSuccess).toBe(true);
|
|
111
|
-
expect(result?.response).toEqual(response);
|
|
112
|
-
});
|
|
113
|
-
it("should get product category list from network when no cache", async () => {
|
|
114
|
-
const response = { data: [{ id: "cat1", name: "Category" }] };
|
|
115
|
-
const mockProvider = {
|
|
116
|
-
request: jest
|
|
117
|
-
.fn()
|
|
118
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
119
|
-
};
|
|
120
|
-
jest
|
|
121
|
-
.spyOn(service, "provider")
|
|
122
|
-
.mockReturnValue(mockProvider);
|
|
123
|
-
const result = await service.productCategoryList().toPromise();
|
|
124
|
-
expect(result?.hasSuccess).toBe(true);
|
|
125
|
-
expect(result?.response).toEqual(response);
|
|
126
|
-
});
|
|
127
|
-
it("should get product category list from cache when available", async () => {
|
|
128
|
-
const response = { data: [{ id: "cat1", name: "Category" }] };
|
|
129
|
-
// First call to populate cache
|
|
130
|
-
const mockProvider1 = {
|
|
131
|
-
request: jest
|
|
132
|
-
.fn()
|
|
133
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
134
|
-
};
|
|
135
|
-
jest
|
|
136
|
-
.spyOn(service, "provider")
|
|
137
|
-
.mockReturnValue(mockProvider1);
|
|
138
|
-
await service.productCategoryList().toPromise();
|
|
139
|
-
// Second call should use cache
|
|
140
|
-
const mockProvider2 = {
|
|
141
|
-
request: jest
|
|
142
|
-
.fn()
|
|
143
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
|
|
144
|
-
};
|
|
145
|
-
jest
|
|
146
|
-
.spyOn(service, "provider")
|
|
147
|
-
.mockReturnValue(mockProvider2);
|
|
148
|
-
const result = await service.productCategoryList().toPromise();
|
|
149
|
-
expect(result?.hasSuccess).toBe(true);
|
|
150
|
-
expect(result?.response).toEqual(response);
|
|
151
|
-
});
|
|
152
|
-
it("should get product collection from network when no cache", async () => {
|
|
153
|
-
const response = { data: [{ id: "prod1", name: "Product" }] };
|
|
154
|
-
const payload = { page: 1, per_page: 10 };
|
|
155
|
-
const mockProvider = {
|
|
156
|
-
request: jest
|
|
157
|
-
.fn()
|
|
158
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
159
|
-
};
|
|
160
|
-
jest
|
|
161
|
-
.spyOn(service, "provider")
|
|
162
|
-
.mockReturnValue(mockProvider);
|
|
163
|
-
const result = await service.productCollection("1", payload).toPromise();
|
|
164
|
-
expect(result?.hasSuccess).toBe(true);
|
|
165
|
-
expect(result?.response).toEqual(response);
|
|
166
|
-
});
|
|
167
|
-
it("should get product collection from cache when available", async () => {
|
|
168
|
-
const response = { data: [{ id: "prod1", name: "Product" }] };
|
|
169
|
-
const payload = { page: 1, per_page: 10 };
|
|
170
|
-
// First call to populate cache
|
|
171
|
-
const mockProvider1 = {
|
|
172
|
-
request: jest
|
|
173
|
-
.fn()
|
|
174
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
175
|
-
};
|
|
176
|
-
jest
|
|
177
|
-
.spyOn(service, "provider")
|
|
178
|
-
.mockReturnValue(mockProvider1);
|
|
179
|
-
await service.productCollection("1", payload).toPromise();
|
|
180
|
-
// Second call should use cache
|
|
181
|
-
const mockProvider2 = {
|
|
182
|
-
request: jest
|
|
183
|
-
.fn()
|
|
184
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
|
|
185
|
-
};
|
|
186
|
-
jest
|
|
187
|
-
.spyOn(service, "provider")
|
|
188
|
-
.mockReturnValue(mockProvider2);
|
|
189
|
-
const result = await service.productCollection("1", payload).toPromise();
|
|
190
|
-
expect(result?.hasSuccess).toBe(true);
|
|
191
|
-
expect(result?.response).toEqual(response);
|
|
192
|
-
});
|
|
193
|
-
it("should get featured product list from network when no cache", async () => {
|
|
194
|
-
const response = {
|
|
195
|
-
data: [{ id: "feat1", name: "Featured" }],
|
|
196
|
-
};
|
|
197
|
-
const mockProvider = {
|
|
198
|
-
request: jest
|
|
199
|
-
.fn()
|
|
200
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
201
|
-
};
|
|
202
|
-
jest
|
|
203
|
-
.spyOn(service, "provider")
|
|
204
|
-
.mockReturnValue(mockProvider);
|
|
205
|
-
const result = await service.featuredProductList("1").toPromise();
|
|
206
|
-
expect(result?.hasSuccess).toBe(true);
|
|
207
|
-
expect(result?.response).toEqual(response);
|
|
208
|
-
});
|
|
209
|
-
it("should get featured product list from cache when available", async () => {
|
|
210
|
-
const response = {
|
|
211
|
-
data: [{ id: "feat1", name: "Featured" }],
|
|
212
|
-
};
|
|
213
|
-
// First call to populate cache
|
|
214
|
-
const mockProvider1 = {
|
|
215
|
-
request: jest
|
|
216
|
-
.fn()
|
|
217
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
218
|
-
};
|
|
219
|
-
jest
|
|
220
|
-
.spyOn(service, "provider")
|
|
221
|
-
.mockReturnValue(mockProvider1);
|
|
222
|
-
await service.featuredProductList("1").toPromise();
|
|
223
|
-
// Second call should use cache
|
|
224
|
-
const mockProvider2 = {
|
|
225
|
-
request: jest
|
|
226
|
-
.fn()
|
|
227
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
|
|
228
|
-
};
|
|
229
|
-
jest
|
|
230
|
-
.spyOn(service, "provider")
|
|
231
|
-
.mockReturnValue(mockProvider2);
|
|
232
|
-
const result = await service.featuredProductList("1").toPromise();
|
|
233
|
-
expect(result?.hasSuccess).toBe(true);
|
|
234
|
-
expect(result?.response).toEqual(response);
|
|
235
|
-
});
|
|
236
|
-
it("should clear cache successfully", async () => {
|
|
237
|
-
const response = { data: { id: "1", name: "Store" } };
|
|
238
|
-
const mockProvider = {
|
|
239
|
-
request: jest
|
|
240
|
-
.fn()
|
|
241
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
242
|
-
};
|
|
243
|
-
jest
|
|
244
|
-
.spyOn(service, "provider")
|
|
245
|
-
.mockReturnValue(mockProvider);
|
|
246
|
-
// Populate cache
|
|
247
|
-
await service.get("1").toPromise();
|
|
248
|
-
// Clear cache
|
|
249
|
-
await service.clearCache();
|
|
250
|
-
// Should call network again after cache clear
|
|
251
|
-
const result = await service.get("1").toPromise();
|
|
252
|
-
expect(result?.hasSuccess).toBe(true);
|
|
253
|
-
expect(mockProvider.request).toHaveBeenCalledTimes(2); // Once before clear, once after
|
|
254
|
-
});
|
|
255
|
-
it("should clear specific store cache", async () => {
|
|
256
|
-
const response = { data: { id: "1", name: "Store" } };
|
|
257
|
-
const mockProvider = {
|
|
258
|
-
request: jest
|
|
259
|
-
.fn()
|
|
260
|
-
.mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
|
|
261
|
-
};
|
|
262
|
-
jest
|
|
263
|
-
.spyOn(service, "provider")
|
|
264
|
-
.mockReturnValue(mockProvider);
|
|
265
|
-
// Populate cache for store '1'
|
|
266
|
-
await service.get("1").toPromise();
|
|
267
|
-
// Clear specific store cache
|
|
268
|
-
await service.clearStoreCache("1");
|
|
269
|
-
// Should call network again after cache clear
|
|
270
|
-
const result = await service.get("1").toPromise();
|
|
271
|
-
expect(result?.hasSuccess).toBe(true);
|
|
272
|
-
expect(mockProvider.request).toHaveBeenCalledTimes(2);
|
|
273
|
-
});
|
|
274
|
-
});
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { BaseProvider } from "../core/base.provider";
|
|
2
|
-
import { BaseServiceWrapper } from "../core/base.service.wrapper";
|
|
3
|
-
import { NetworkingConfig } from "../types/types";
|
|
4
|
-
export interface User {
|
|
5
|
-
id: number;
|
|
6
|
-
name: string;
|
|
7
|
-
email: string;
|
|
8
|
-
}
|
|
9
|
-
export declare class UserProvider extends BaseProvider {
|
|
10
|
-
constructor(config: NetworkingConfig, userId?: number);
|
|
11
|
-
}
|
|
12
|
-
export declare class UserService extends BaseServiceWrapper<UserProvider> {
|
|
13
|
-
constructor(config: NetworkingConfig, userId?: number);
|
|
14
|
-
fetchUserById(id: number): import("rxjs").Observable<import("../types/types").NetworkingUIEventWrapped<User>>;
|
|
15
|
-
fetchAllUsers(): import("rxjs").Observable<import("../types/types").NetworkingUIEventWrapped<User[]>>;
|
|
16
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { BaseProvider } from "../core/base.provider";
|
|
2
|
-
import { BaseServiceWrapper } from "../core/base.service.wrapper";
|
|
3
|
-
// UserProvider implements ProviderType for user endpoints
|
|
4
|
-
export class UserProvider extends BaseProvider {
|
|
5
|
-
constructor(config, userId) {
|
|
6
|
-
super({
|
|
7
|
-
config,
|
|
8
|
-
path: userId ? `/users/${userId}` : "/users",
|
|
9
|
-
method: "GET",
|
|
10
|
-
headers: {},
|
|
11
|
-
getPath: () => (userId ? `/users/${userId}` : "/users"),
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
// UserService provides high-level methods for user API
|
|
16
|
-
export class UserService extends BaseServiceWrapper {
|
|
17
|
-
constructor(config, userId) {
|
|
18
|
-
super(new UserProvider(config, userId));
|
|
19
|
-
}
|
|
20
|
-
// Fetch a user by ID
|
|
21
|
-
fetchUserById(id) {
|
|
22
|
-
this.provider = new UserProvider({ baseUrl: "https://jsonplaceholder.typicode.com", isProd: false }, id);
|
|
23
|
-
return this.request();
|
|
24
|
-
}
|
|
25
|
-
// Fetch all users
|
|
26
|
-
fetchAllUsers() {
|
|
27
|
-
this.provider = new UserProvider({
|
|
28
|
-
baseUrl: "https://jsonplaceholder.typicode.com",
|
|
29
|
-
isProd: false,
|
|
30
|
-
});
|
|
31
|
-
return this.request();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
// Example usage:
|
|
35
|
-
// setNetworkingConfig({ baseUrl: 'https://jsonplaceholder.typicode.com', isProd: false });
|
|
36
|
-
// const userService = new UserService();
|
|
37
|
-
// userService.fetchUserById(1).subscribe(result => console.log(result));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { UserService } from "./user.service";
|
|
2
|
-
import { NetworkingUIEventWrapped } from "../types/types";
|
|
3
|
-
import { of, throwError } from "rxjs";
|
|
4
|
-
import { BaseServiceWrapper } from "../core/base.service.wrapper";
|
|
5
|
-
describe("UserService", () => {
|
|
6
|
-
const config = {
|
|
7
|
-
baseUrl: "https://jsonplaceholder.typicode.com",
|
|
8
|
-
isProd: false,
|
|
9
|
-
clientId: "test-client",
|
|
10
|
-
apiKey: "test-key",
|
|
11
|
-
};
|
|
12
|
-
const user = { id: 1, name: "Test", email: "test@example.com" };
|
|
13
|
-
let requestSpy;
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
requestSpy = jest
|
|
16
|
-
.spyOn(BaseServiceWrapper.prototype, "request")
|
|
17
|
-
.mockImplementation(() => of(NetworkingUIEventWrapped.succeeded(user)));
|
|
18
|
-
});
|
|
19
|
-
afterEach(() => {
|
|
20
|
-
requestSpy.mockRestore();
|
|
21
|
-
});
|
|
22
|
-
it("fetchUserById should return user (success)", (done) => {
|
|
23
|
-
const service = new UserService(config);
|
|
24
|
-
service
|
|
25
|
-
.fetchUserById(1)
|
|
26
|
-
.subscribe((result) => {
|
|
27
|
-
expect(result.response).toEqual(user);
|
|
28
|
-
done();
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
it("fetchAllUsers should return users (success)", (done) => {
|
|
32
|
-
const service = new UserService(config);
|
|
33
|
-
service
|
|
34
|
-
.fetchAllUsers()
|
|
35
|
-
.subscribe((result) => {
|
|
36
|
-
expect(result.response).toEqual(user);
|
|
37
|
-
done();
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
it("request should handle error", (done) => {
|
|
41
|
-
requestSpy.mockImplementationOnce(() => throwError(() => new Error("Test error")));
|
|
42
|
-
const service = new UserService(config);
|
|
43
|
-
// Simulate error by calling a method that uses request
|
|
44
|
-
service.fetchUserById(1).subscribe({
|
|
45
|
-
error: (err) => {
|
|
46
|
-
expect(err).toBeInstanceOf(Error);
|
|
47
|
-
expect(err.message).toBe("Test error");
|
|
48
|
-
done();
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
});
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
export type CallbackHandler = () => void;
|
|
2
|
-
interface AlertModelable {
|
|
3
|
-
isUnauthenticated: boolean;
|
|
4
|
-
isNetworkingError: boolean;
|
|
5
|
-
}
|
|
6
|
-
interface AlertButtonModelable {
|
|
7
|
-
title: string;
|
|
8
|
-
handler?: CallbackHandler;
|
|
9
|
-
}
|
|
10
|
-
export declare class AlertButtonModel implements AlertButtonModelable {
|
|
11
|
-
title: string;
|
|
12
|
-
handler?: CallbackHandler | undefined;
|
|
13
|
-
constructor(title: string, handler?: CallbackHandler | undefined);
|
|
14
|
-
static buttonYes(handler?: CallbackHandler): AlertButtonModelable;
|
|
15
|
-
static buttonNo(handler?: CallbackHandler): AlertButtonModelable;
|
|
16
|
-
}
|
|
17
|
-
export declare class AlertModel implements AlertModelable {
|
|
18
|
-
message: string;
|
|
19
|
-
httpErrorCode: number;
|
|
20
|
-
isDisplayable: boolean;
|
|
21
|
-
title?: string | undefined;
|
|
22
|
-
data?: unknown | undefined;
|
|
23
|
-
buttons?: AlertButtonModelable[] | undefined;
|
|
24
|
-
constructor(message: string, httpErrorCode: number, isDisplayable?: boolean, title?: string | undefined, data?: unknown | undefined, buttons?: AlertButtonModelable[] | undefined);
|
|
25
|
-
get isUnauthenticated(): boolean;
|
|
26
|
-
get isNetworkingError(): boolean;
|
|
27
|
-
static default(): AlertModel;
|
|
28
|
-
}
|
|
29
|
-
export declare class ValidationErrorMessage {
|
|
30
|
-
message: string;
|
|
31
|
-
constructor(message: string);
|
|
32
|
-
}
|
|
33
|
-
export type NetworkingFailed = {
|
|
34
|
-
alertModel: AlertModel;
|
|
35
|
-
};
|
|
36
|
-
export type NetworkingSucceeded<ResponseType> = {
|
|
37
|
-
responseBody: ResponseType;
|
|
38
|
-
};
|
|
39
|
-
export declare enum NetworkingUIEvent {
|
|
40
|
-
waiting = "waiting",
|
|
41
|
-
succeeded = "succeeded",
|
|
42
|
-
failed = "failed"
|
|
43
|
-
}
|
|
44
|
-
export declare class NetworkingUIEventWrapped<JSONResponse> {
|
|
45
|
-
private event;
|
|
46
|
-
private succeeded?;
|
|
47
|
-
private failed?;
|
|
48
|
-
constructor(event: NetworkingUIEvent, succeeded?: NetworkingSucceeded<JSONResponse> | undefined, failed?: NetworkingFailed | undefined);
|
|
49
|
-
get response(): JSONResponse | null;
|
|
50
|
-
get alertModel(): AlertModel | null;
|
|
51
|
-
get isWaiting(): boolean;
|
|
52
|
-
get hasSuccess(): boolean;
|
|
53
|
-
get hasFailed(): boolean;
|
|
54
|
-
get isUnauthenticated(): boolean;
|
|
55
|
-
static waiting<JSONResponse>(): NetworkingUIEventWrapped<JSONResponse>;
|
|
56
|
-
static succeeded<JSONResponse>(data: JSONResponse): NetworkingUIEventWrapped<JSONResponse>;
|
|
57
|
-
static failed<JSONResponse>(alertModel: AlertModel): NetworkingUIEventWrapped<JSONResponse>;
|
|
58
|
-
}
|
|
59
|
-
export interface ProviderType {
|
|
60
|
-
baseURL: string;
|
|
61
|
-
path: string;
|
|
62
|
-
method: string;
|
|
63
|
-
headers: Record<string, string | undefined>;
|
|
64
|
-
getPath(...queryParams: unknown[]): string;
|
|
65
|
-
}
|
|
66
|
-
export interface HeaderType {
|
|
67
|
-
shouldAddEncryptionHeader?: boolean;
|
|
68
|
-
shouldAddClientIdHeader?: boolean;
|
|
69
|
-
}
|
|
70
|
-
export interface HttpResponse {
|
|
71
|
-
data: unknown;
|
|
72
|
-
}
|
|
73
|
-
export interface ServerValidationErrorMessage {
|
|
74
|
-
message: string;
|
|
75
|
-
parameters?: {
|
|
76
|
-
error_code?: string;
|
|
77
|
-
field?: string;
|
|
78
|
-
[key: string]: unknown;
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
export interface ServerErrorResponse {
|
|
82
|
-
errors?: {
|
|
83
|
-
[field: string]: ServerValidationErrorMessage[];
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
export interface NetworkingConfig {
|
|
87
|
-
baseUrl: string;
|
|
88
|
-
version?: string;
|
|
89
|
-
isProd: boolean;
|
|
90
|
-
clientId?: string;
|
|
91
|
-
apiKey?: string;
|
|
92
|
-
}
|
|
93
|
-
export {};
|
package/dist/src/types/types.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
export class AlertButtonModel {
|
|
2
|
-
constructor(title, handler) {
|
|
3
|
-
this.title = title;
|
|
4
|
-
this.handler = handler;
|
|
5
|
-
}
|
|
6
|
-
static buttonYes(handler) {
|
|
7
|
-
return new AlertButtonModel("Yes", handler);
|
|
8
|
-
}
|
|
9
|
-
static buttonNo(handler) {
|
|
10
|
-
return new AlertButtonModel("No", handler);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
export class AlertModel {
|
|
14
|
-
constructor(message, httpErrorCode, isDisplayable = false, title, data, buttons) {
|
|
15
|
-
this.message = message;
|
|
16
|
-
this.httpErrorCode = httpErrorCode;
|
|
17
|
-
this.isDisplayable = isDisplayable;
|
|
18
|
-
this.title = title;
|
|
19
|
-
this.data = data;
|
|
20
|
-
this.buttons = buttons;
|
|
21
|
-
}
|
|
22
|
-
get isUnauthenticated() {
|
|
23
|
-
return this.httpErrorCode == 401;
|
|
24
|
-
}
|
|
25
|
-
get isNetworkingError() {
|
|
26
|
-
return this.httpErrorCode == 0;
|
|
27
|
-
}
|
|
28
|
-
static default() {
|
|
29
|
-
return new AlertModel("Generic Error", 0, true, "", null, [
|
|
30
|
-
AlertButtonModel.buttonYes(),
|
|
31
|
-
]);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
export class ValidationErrorMessage {
|
|
35
|
-
constructor(message) {
|
|
36
|
-
this.message = message;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
export var NetworkingUIEvent;
|
|
40
|
-
(function (NetworkingUIEvent) {
|
|
41
|
-
NetworkingUIEvent["waiting"] = "waiting";
|
|
42
|
-
NetworkingUIEvent["succeeded"] = "succeeded";
|
|
43
|
-
NetworkingUIEvent["failed"] = "failed";
|
|
44
|
-
})(NetworkingUIEvent || (NetworkingUIEvent = {}));
|
|
45
|
-
export class NetworkingUIEventWrapped {
|
|
46
|
-
constructor(event, succeeded, failed) {
|
|
47
|
-
this.event = event;
|
|
48
|
-
this.succeeded = succeeded;
|
|
49
|
-
this.failed = failed;
|
|
50
|
-
}
|
|
51
|
-
get response() {
|
|
52
|
-
return this.succeeded ? this.succeeded.responseBody : null;
|
|
53
|
-
}
|
|
54
|
-
get alertModel() {
|
|
55
|
-
return this.failed ? this.failed.alertModel : null;
|
|
56
|
-
}
|
|
57
|
-
get isWaiting() {
|
|
58
|
-
return this.event == NetworkingUIEvent.waiting;
|
|
59
|
-
}
|
|
60
|
-
get hasSuccess() {
|
|
61
|
-
return this.event == NetworkingUIEvent.succeeded;
|
|
62
|
-
}
|
|
63
|
-
get hasFailed() {
|
|
64
|
-
return this.event == NetworkingUIEvent.failed;
|
|
65
|
-
}
|
|
66
|
-
get isUnauthenticated() {
|
|
67
|
-
return this.alertModel ? this.alertModel.isUnauthenticated : false;
|
|
68
|
-
}
|
|
69
|
-
static waiting() {
|
|
70
|
-
return new NetworkingUIEventWrapped(NetworkingUIEvent.waiting);
|
|
71
|
-
}
|
|
72
|
-
static succeeded(data) {
|
|
73
|
-
return new NetworkingUIEventWrapped(NetworkingUIEvent.succeeded, {
|
|
74
|
-
responseBody: data,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
static failed(alertModel) {
|
|
78
|
-
return new NetworkingUIEventWrapped(NetworkingUIEvent.failed, undefined, {
|
|
79
|
-
alertModel: alertModel,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { NetworkingUIEventWrapped, AlertModel } from "./types";
|
|
2
|
-
describe("NetworkingUIEventWrapped", () => {
|
|
3
|
-
it("should wrap succeeded response", () => {
|
|
4
|
-
const wrap = NetworkingUIEventWrapped.succeeded({ foo: "bar" });
|
|
5
|
-
expect(wrap.response).toEqual({ foo: "bar" });
|
|
6
|
-
expect(wrap.hasSuccess).toBe(true);
|
|
7
|
-
expect(wrap.hasFailed).toBe(false);
|
|
8
|
-
expect(wrap.isWaiting).toBe(false);
|
|
9
|
-
});
|
|
10
|
-
it("should wrap failed response and set alertModel", () => {
|
|
11
|
-
const alert = new AlertModel("err", 500, true, "Error", { detail: "fail" });
|
|
12
|
-
const wrap = NetworkingUIEventWrapped.failed(alert);
|
|
13
|
-
expect(wrap.response).toBeNull();
|
|
14
|
-
expect(wrap.hasSuccess).toBe(false);
|
|
15
|
-
expect(wrap.hasFailed).toBe(true);
|
|
16
|
-
expect(wrap.isWaiting).toBe(false);
|
|
17
|
-
expect(wrap.alertModel).toBe(alert);
|
|
18
|
-
});
|
|
19
|
-
it("should wrap waiting state", () => {
|
|
20
|
-
const wrap = NetworkingUIEventWrapped.waiting();
|
|
21
|
-
expect(wrap.isWaiting).toBe(true);
|
|
22
|
-
expect(wrap.hasSuccess).toBe(false);
|
|
23
|
-
expect(wrap.hasFailed).toBe(false);
|
|
24
|
-
});
|
|
25
|
-
});
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { BehaviorSubject, Observable, Subject, Subscription, Subscriber, catchError, combineLatest, concatMap, distinctUntilChanged, filter, firstValueFrom, from, fromEvent, merge, NEVER, interval, map, mergeMap, of, pipe, shareReplay, startWith, tap, timeout, retry, throwError, combineLatestWith, debounceTime, delay, takeUntil } from "rxjs";
|
|
2
|
-
export { Observable, Subject, BehaviorSubject, Subscription, Subscriber };
|
|
3
|
-
export { startWith, firstValueFrom, from, fromEvent, tap, pipe, distinctUntilChanged, of, mergeMap, interval, map, concatMap, combineLatest, merge, combineLatestWith, debounceTime, delay, timeout, retry, takeUntil, NEVER, };
|
|
4
|
-
export { shareReplay, filter };
|
|
5
|
-
export { catchError, throwError };
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { BehaviorSubject, Observable, Subject, Subscription, Subscriber, catchError, combineLatest, concatMap, distinctUntilChanged, filter, firstValueFrom, from, fromEvent, merge, NEVER, interval, map, mergeMap, of, pipe, shareReplay, startWith, tap, timeout, retry, throwError, combineLatestWith, debounceTime, delay, takeUntil, } from "rxjs";
|
|
2
|
-
export { Observable, Subject, BehaviorSubject, Subscription, Subscriber };
|
|
3
|
-
export { startWith, firstValueFrom, from, fromEvent, tap, pipe, distinctUntilChanged, of, mergeMap, interval, map, concatMap, combineLatest, merge, combineLatestWith, debounceTime, delay, timeout, retry, takeUntil, NEVER, };
|
|
4
|
-
export { shareReplay, filter };
|
|
5
|
-
export { catchError, throwError };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|