@smess/networking 1.0.10 → 1.0.12
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 +26 -20
- package/dist/core/axios.d.ts +3 -3
- package/dist/core/axios.js +2 -2
- package/dist/core/axios.observable.d.ts +3 -3
- package/dist/core/axios.observable.js +7 -7
- package/dist/core/base.provider.advanced.test.js +15 -15
- package/dist/core/base.provider.d.ts +1 -1
- package/dist/core/base.provider.js +2 -2
- package/dist/core/base.provider.test.js +22 -18
- package/dist/core/base.service.wrapper.advanced.test.js +16 -13
- package/dist/core/base.service.wrapper.d.ts +2 -2
- package/dist/core/base.service.wrapper.js +1 -1
- package/dist/core/base.service.wrapper.test.js +14 -14
- package/dist/core/rx.http.service.d.ts +3 -3
- package/dist/core/rx.http.service.js +2 -2
- package/dist/index.d.ts +13 -13
- package/dist/index.js +15 -15
- package/dist/services/auth.service.d.ts +6 -5
- package/dist/services/auth.service.js +50 -28
- package/dist/services/auth.service.test.js +67 -51
- package/dist/services/cache.service.d.ts +1 -1
- package/dist/services/cache.service.js +7 -7
- package/dist/services/cache.service.test.d.ts +1 -1
- package/dist/services/cache.service.test.js +37 -37
- package/dist/services/customer.service.d.ts +4 -4
- package/dist/services/customer.service.js +19 -17
- package/dist/services/customer.service.test.js +38 -34
- package/dist/services/logger.service.js +11 -11
- package/dist/services/logger.service.test.js +12 -12
- package/dist/services/order.service.d.ts +4 -4
- package/dist/services/order.service.js +32 -30
- package/dist/services/order.service.test.js +47 -47
- package/dist/services/product.service.d.ts +4 -4
- package/dist/services/product.service.js +8 -8
- package/dist/services/product.service.test.js +27 -19
- package/dist/services/smess.service.d.ts +2 -2
- package/dist/services/smess.service.js +19 -19
- package/dist/services/smess.service.test.js +36 -32
- package/dist/services/store.service.d.ts +4 -4
- package/dist/services/store.service.js +70 -50
- package/dist/services/store.service.test.d.ts +1 -1
- package/dist/services/store.service.test.js +161 -85
- package/dist/services/user.service.d.ts +3 -3
- package/dist/services/user.service.js +11 -8
- package/dist/services/user.service.test.js +23 -17
- package/dist/types/types.js +3 -3
- package/dist/types/types.test.js +8 -8
- package/dist/utils/cache-import.d.ts +1 -1
- package/dist/utils/cache-import.js +1 -1
- package/dist/utils/networking-import.d.ts +3 -3
- package/dist/utils/networking-import.js +2 -2
- package/dist/utils/rxjs-import.d.ts +2 -2
- package/dist/utils/rxjs-import.js +2 -2
- package/package.json +1 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { Accept, SMESSHeader, SmessService } from
|
|
1
|
+
import { Accept, SMESSHeader, SmessService } from "./smess.service";
|
|
2
|
+
import { BehaviorSubject } from "rxjs";
|
|
3
|
+
import { tap } from "rxjs/operators";
|
|
2
4
|
export class AuthProvider {
|
|
3
5
|
constructor(config, target, $authToken) {
|
|
4
6
|
this.config = config;
|
|
@@ -6,39 +8,41 @@ export class AuthProvider {
|
|
|
6
8
|
this.$authToken = $authToken;
|
|
7
9
|
}
|
|
8
10
|
get baseURL() {
|
|
9
|
-
return this.config.version
|
|
11
|
+
return this.config.version
|
|
12
|
+
? `${this.config.baseUrl}/${this.config.version}`
|
|
13
|
+
: this.config.baseUrl;
|
|
10
14
|
}
|
|
11
15
|
get path() {
|
|
12
16
|
switch (this.target) {
|
|
13
|
-
case
|
|
14
|
-
return
|
|
15
|
-
case
|
|
16
|
-
return
|
|
17
|
-
case
|
|
18
|
-
return
|
|
19
|
-
case
|
|
20
|
-
return
|
|
21
|
-
case
|
|
22
|
-
return
|
|
23
|
-
case
|
|
24
|
-
return
|
|
17
|
+
case "login":
|
|
18
|
+
return "/authentication/login_check";
|
|
19
|
+
case "password-forgot":
|
|
20
|
+
return "/authentication/forgot-password";
|
|
21
|
+
case "reset-password":
|
|
22
|
+
return "/authentication/reset-password";
|
|
23
|
+
case "verify-reset-password-token":
|
|
24
|
+
return "/authentication/verify-reset-password-token";
|
|
25
|
+
case "logout":
|
|
26
|
+
return "/authentication/logout";
|
|
27
|
+
case "change-password":
|
|
28
|
+
return "/authentication/change-password";
|
|
25
29
|
default:
|
|
26
|
-
return
|
|
30
|
+
return "/authentication";
|
|
27
31
|
}
|
|
28
32
|
}
|
|
29
33
|
get method() {
|
|
30
34
|
switch (this.target) {
|
|
31
35
|
default:
|
|
32
|
-
return
|
|
36
|
+
return "POST";
|
|
33
37
|
}
|
|
34
38
|
}
|
|
35
39
|
get headers() {
|
|
36
40
|
let authHeaders = {};
|
|
37
41
|
switch (this.target) {
|
|
38
|
-
case
|
|
39
|
-
case
|
|
40
|
-
case
|
|
41
|
-
case
|
|
42
|
+
case "login":
|
|
43
|
+
case "password-forgot":
|
|
44
|
+
case "reset-password":
|
|
45
|
+
case "verify-reset-password-token":
|
|
42
46
|
authHeaders = SmessService.getHeaders(Accept.V1);
|
|
43
47
|
break;
|
|
44
48
|
default:
|
|
@@ -62,30 +66,48 @@ export class AuthProvider {
|
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
export class AuthService {
|
|
65
|
-
constructor(config
|
|
69
|
+
constructor(config) {
|
|
66
70
|
this.config = config;
|
|
67
|
-
this.$authToken =
|
|
71
|
+
this.$authToken = new BehaviorSubject(null);
|
|
72
|
+
}
|
|
73
|
+
// Get current auth token value
|
|
74
|
+
get currentAuthToken() {
|
|
75
|
+
return this.$authToken.value;
|
|
68
76
|
}
|
|
69
77
|
provider(target) {
|
|
70
78
|
const targetWrapper = new AuthProvider(this.config, target, this.$authToken);
|
|
71
79
|
return new SmessService(targetWrapper);
|
|
72
80
|
}
|
|
73
81
|
login(payload) {
|
|
74
|
-
return this.provider(
|
|
82
|
+
return this.provider("login")
|
|
83
|
+
.request(payload)
|
|
84
|
+
.pipe(tap((result) => {
|
|
85
|
+
if (result.hasSuccess && result.response?.token) {
|
|
86
|
+
// Set the auth token when login is successful
|
|
87
|
+
this.$authToken.next(String(result.response.token));
|
|
88
|
+
}
|
|
89
|
+
}));
|
|
75
90
|
}
|
|
76
91
|
logout() {
|
|
77
|
-
return this.provider(
|
|
92
|
+
return this.provider("logout")
|
|
93
|
+
.request()
|
|
94
|
+
.pipe(tap((result) => {
|
|
95
|
+
if (result.hasSuccess) {
|
|
96
|
+
// Clear the auth token when logout is successful
|
|
97
|
+
this.$authToken.next(null);
|
|
98
|
+
}
|
|
99
|
+
}));
|
|
78
100
|
}
|
|
79
101
|
forgotPassword(payload) {
|
|
80
|
-
return this.provider(
|
|
102
|
+
return this.provider("password-forgot").request(payload);
|
|
81
103
|
}
|
|
82
104
|
changePassword(payload) {
|
|
83
|
-
return this.provider(
|
|
105
|
+
return this.provider("change-password").request(payload);
|
|
84
106
|
}
|
|
85
107
|
resetPassword(payload) {
|
|
86
|
-
return this.provider(
|
|
108
|
+
return this.provider("reset-password").request(payload);
|
|
87
109
|
}
|
|
88
110
|
verifyResetPasswordToken(token) {
|
|
89
|
-
return this.provider(
|
|
111
|
+
return this.provider("verify-reset-password-token").request({ token });
|
|
90
112
|
}
|
|
91
113
|
}
|
|
@@ -1,125 +1,141 @@
|
|
|
1
|
-
import { AuthService } from
|
|
2
|
-
import { NetworkingUIEventWrapped, AlertModel } from
|
|
3
|
-
import { of
|
|
4
|
-
describe(
|
|
1
|
+
import { AuthService, } from "./auth.service";
|
|
2
|
+
import { NetworkingUIEventWrapped, AlertModel, } from "../types/types";
|
|
3
|
+
import { of } from "rxjs";
|
|
4
|
+
describe("AuthService", () => {
|
|
5
5
|
const config = {
|
|
6
|
-
baseUrl:
|
|
6
|
+
baseUrl: "https://api.example.com",
|
|
7
7
|
isProd: false,
|
|
8
|
-
clientId:
|
|
9
|
-
apiKey:
|
|
8
|
+
clientId: "test-client-id",
|
|
9
|
+
apiKey: "test-api-key",
|
|
10
10
|
};
|
|
11
11
|
let service;
|
|
12
|
-
let $authToken;
|
|
13
12
|
beforeEach(() => {
|
|
14
|
-
|
|
15
|
-
service = new AuthService(config, $authToken);
|
|
13
|
+
service = new AuthService(config);
|
|
16
14
|
});
|
|
17
|
-
it(
|
|
18
|
-
const payload = { identifier:
|
|
15
|
+
it("login success", async () => {
|
|
16
|
+
const payload = { identifier: "user", password: "pass" };
|
|
19
17
|
const response = {
|
|
20
|
-
token_type:
|
|
18
|
+
token_type: "Bearer",
|
|
21
19
|
expires_in: 3600,
|
|
22
|
-
token:
|
|
23
|
-
refresh_token:
|
|
20
|
+
token: "token",
|
|
21
|
+
refresh_token: "refresh",
|
|
24
22
|
};
|
|
25
|
-
jest.spyOn(service,
|
|
23
|
+
jest.spyOn(service, "provider").mockReturnValue({
|
|
26
24
|
request: () => of(NetworkingUIEventWrapped.succeeded(response)),
|
|
27
25
|
});
|
|
28
26
|
const result = await service.login(payload).toPromise();
|
|
29
27
|
expect(result?.hasSuccess).toBe(true);
|
|
30
28
|
expect(result?.response).toEqual(response);
|
|
29
|
+
// Verify that auth token is set after successful login
|
|
30
|
+
expect(service.currentAuthToken).toBe("token");
|
|
31
|
+
expect(service.$authToken.value).toBe("token");
|
|
31
32
|
});
|
|
32
|
-
it(
|
|
33
|
-
const payload = { identifier:
|
|
34
|
-
jest.spyOn(service,
|
|
33
|
+
it("login error", async () => {
|
|
34
|
+
const payload = { identifier: "user", password: "wrong" };
|
|
35
|
+
jest.spyOn(service, "provider").mockReturnValue({
|
|
35
36
|
request: () => of(NetworkingUIEventWrapped.failed(AlertModel.default())),
|
|
36
37
|
});
|
|
37
38
|
const result = await service.login(payload).toPromise();
|
|
38
39
|
expect(result?.hasFailed).toBe(true);
|
|
39
40
|
expect(result?.alertModel).toBeInstanceOf(AlertModel);
|
|
40
41
|
});
|
|
41
|
-
it(
|
|
42
|
-
|
|
42
|
+
it("logout success", async () => {
|
|
43
|
+
// First set a token to test clearing it
|
|
44
|
+
service.$authToken.next("test-token");
|
|
45
|
+
expect(service.currentAuthToken).toBe("test-token");
|
|
46
|
+
jest.spyOn(service, "provider").mockReturnValue({
|
|
43
47
|
request: () => of(NetworkingUIEventWrapped.succeeded(undefined)),
|
|
44
48
|
});
|
|
45
49
|
const result = await service.logout().toPromise();
|
|
46
50
|
expect(result?.hasSuccess).toBe(true);
|
|
51
|
+
// Verify that auth token is cleared after successful logout
|
|
52
|
+
expect(service.currentAuthToken).toBe(null);
|
|
53
|
+
expect(service.$authToken.value).toBe(null);
|
|
47
54
|
});
|
|
48
|
-
it(
|
|
49
|
-
const payload = { identifier:
|
|
50
|
-
const response = { data:
|
|
51
|
-
jest.spyOn(service,
|
|
55
|
+
it("forgotPassword success", async () => {
|
|
56
|
+
const payload = { identifier: "user" };
|
|
57
|
+
const response = { data: "ok" };
|
|
58
|
+
jest.spyOn(service, "provider").mockReturnValue({
|
|
52
59
|
request: () => of(NetworkingUIEventWrapped.succeeded(response)),
|
|
53
60
|
});
|
|
54
61
|
const result = await service.forgotPassword(payload).toPromise();
|
|
55
62
|
expect(result?.hasSuccess).toBe(true);
|
|
56
63
|
expect(result?.response).toEqual(response);
|
|
57
64
|
});
|
|
58
|
-
it(
|
|
59
|
-
const payload = {
|
|
60
|
-
|
|
61
|
-
|
|
65
|
+
it("changePassword success", async () => {
|
|
66
|
+
const payload = {
|
|
67
|
+
old_password: "old",
|
|
68
|
+
password: "new",
|
|
69
|
+
};
|
|
70
|
+
const response = { data: "changed" };
|
|
71
|
+
jest.spyOn(service, "provider").mockReturnValue({
|
|
62
72
|
request: () => of(NetworkingUIEventWrapped.succeeded(response)),
|
|
63
73
|
});
|
|
64
74
|
const result = await service.changePassword(payload).toPromise();
|
|
65
75
|
expect(result?.hasSuccess).toBe(true);
|
|
66
76
|
expect(result?.response).toEqual(response);
|
|
67
77
|
});
|
|
68
|
-
it(
|
|
69
|
-
const payload = {
|
|
70
|
-
|
|
71
|
-
|
|
78
|
+
it("resetPassword success", async () => {
|
|
79
|
+
const payload = {
|
|
80
|
+
token: "token",
|
|
81
|
+
password: "newpass",
|
|
82
|
+
};
|
|
83
|
+
const response = { data: "reset" };
|
|
84
|
+
jest.spyOn(service, "provider").mockReturnValue({
|
|
72
85
|
request: () => of(NetworkingUIEventWrapped.succeeded(response)),
|
|
73
86
|
});
|
|
74
87
|
const result = await service.resetPassword(payload).toPromise();
|
|
75
88
|
expect(result?.hasSuccess).toBe(true);
|
|
76
89
|
expect(result?.response).toEqual(response);
|
|
77
90
|
});
|
|
78
|
-
it(
|
|
79
|
-
const token =
|
|
91
|
+
it("verifyResetPasswordToken success", async () => {
|
|
92
|
+
const token = "token";
|
|
80
93
|
const response = {
|
|
81
|
-
token_type:
|
|
94
|
+
token_type: "Bearer",
|
|
82
95
|
expires_in: 3600,
|
|
83
|
-
token:
|
|
84
|
-
refresh_token:
|
|
96
|
+
token: "token",
|
|
97
|
+
refresh_token: "refresh",
|
|
85
98
|
};
|
|
86
|
-
jest.spyOn(service,
|
|
99
|
+
jest.spyOn(service, "provider").mockReturnValue({
|
|
87
100
|
request: () => of(NetworkingUIEventWrapped.succeeded(response)),
|
|
88
101
|
});
|
|
89
102
|
const result = await service.verifyResetPasswordToken(token).toPromise();
|
|
90
103
|
expect(result?.hasSuccess).toBe(true);
|
|
91
104
|
expect(result?.response).toEqual(response);
|
|
92
105
|
});
|
|
93
|
-
it(
|
|
94
|
-
const payload = { identifier:
|
|
95
|
-
jest.spyOn(service,
|
|
106
|
+
it("forgotPassword error", async () => {
|
|
107
|
+
const payload = { identifier: "user" };
|
|
108
|
+
jest.spyOn(service, "provider").mockReturnValue({
|
|
96
109
|
request: () => of(NetworkingUIEventWrapped.failed(AlertModel.default())),
|
|
97
110
|
});
|
|
98
111
|
const result = await service.forgotPassword(payload).toPromise();
|
|
99
112
|
expect(result?.hasFailed).toBe(true);
|
|
100
113
|
expect(result?.alertModel).toBeInstanceOf(AlertModel);
|
|
101
114
|
});
|
|
102
|
-
it(
|
|
103
|
-
const payload = {
|
|
104
|
-
|
|
115
|
+
it("changePassword error", async () => {
|
|
116
|
+
const payload = {
|
|
117
|
+
old_password: "old",
|
|
118
|
+
password: "bad",
|
|
119
|
+
};
|
|
120
|
+
jest.spyOn(service, "provider").mockReturnValue({
|
|
105
121
|
request: () => of(NetworkingUIEventWrapped.failed(AlertModel.default())),
|
|
106
122
|
});
|
|
107
123
|
const result = await service.changePassword(payload).toPromise();
|
|
108
124
|
expect(result?.hasFailed).toBe(true);
|
|
109
125
|
expect(result?.alertModel).toBeInstanceOf(AlertModel);
|
|
110
126
|
});
|
|
111
|
-
it(
|
|
112
|
-
const payload = { token:
|
|
113
|
-
jest.spyOn(service,
|
|
127
|
+
it("resetPassword error", async () => {
|
|
128
|
+
const payload = { token: "bad", password: "bad" };
|
|
129
|
+
jest.spyOn(service, "provider").mockReturnValue({
|
|
114
130
|
request: () => of(NetworkingUIEventWrapped.failed(AlertModel.default())),
|
|
115
131
|
});
|
|
116
132
|
const result = await service.resetPassword(payload).toPromise();
|
|
117
133
|
expect(result?.hasFailed).toBe(true);
|
|
118
134
|
expect(result?.alertModel).toBeInstanceOf(AlertModel);
|
|
119
135
|
});
|
|
120
|
-
it(
|
|
121
|
-
const token =
|
|
122
|
-
jest.spyOn(service,
|
|
136
|
+
it("verifyResetPasswordToken error", async () => {
|
|
137
|
+
const token = "bad";
|
|
138
|
+
jest.spyOn(service, "provider").mockReturnValue({
|
|
123
139
|
request: () => of(NetworkingUIEventWrapped.failed(AlertModel.default())),
|
|
124
140
|
});
|
|
125
141
|
const result = await service.verifyResetPasswordToken(token).toPromise();
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Dexie } from
|
|
1
|
+
import { Dexie } from "../utils/cache-import";
|
|
2
2
|
export class GenericDB extends Dexie {
|
|
3
3
|
constructor(name, dataStoreSchema) {
|
|
4
4
|
super(name);
|
|
5
5
|
this.version(1).stores({
|
|
6
6
|
data: dataStoreSchema,
|
|
7
|
-
cache:
|
|
7
|
+
cache: "key, cachedAt, expiresAt",
|
|
8
8
|
});
|
|
9
9
|
}
|
|
10
10
|
}
|
|
@@ -17,14 +17,14 @@ export class GenericIndexedDBService {
|
|
|
17
17
|
}
|
|
18
18
|
async saveAll(items, cacheKey) {
|
|
19
19
|
const cachedItems = items.map(this.toCached);
|
|
20
|
-
await this.db.transaction(
|
|
20
|
+
await this.db.transaction("rw", this.db.data, this.db.cache, async () => {
|
|
21
21
|
await this.db.data.clear();
|
|
22
22
|
await this.db.data.bulkAdd(cachedItems);
|
|
23
23
|
await this.db.cache.put({
|
|
24
24
|
key: cacheKey,
|
|
25
25
|
cachedAt: Date.now(),
|
|
26
26
|
expiresAt: Date.now() + this.CACHE_DURATION,
|
|
27
|
-
version:
|
|
27
|
+
version: "1.0",
|
|
28
28
|
});
|
|
29
29
|
});
|
|
30
30
|
}
|
|
@@ -47,7 +47,7 @@ export class GenericIndexedDBService {
|
|
|
47
47
|
await this.db.data.delete(id);
|
|
48
48
|
}
|
|
49
49
|
async clearAll() {
|
|
50
|
-
await this.db.transaction(
|
|
50
|
+
await this.db.transaction("rw", this.db.data, this.db.cache, async () => {
|
|
51
51
|
await this.db.data.clear();
|
|
52
52
|
await this.db.cache.clear();
|
|
53
53
|
});
|
|
@@ -57,7 +57,7 @@ export class GenericIndexedDBService {
|
|
|
57
57
|
const cacheInfo = await this.db.cache.get(key);
|
|
58
58
|
return {
|
|
59
59
|
count,
|
|
60
|
-
lastUpdated: cacheInfo ? new Date(cacheInfo.cachedAt) : undefined
|
|
60
|
+
lastUpdated: cacheInfo ? new Date(cacheInfo.cachedAt) : undefined,
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
63
|
async setStats(key, stats) {
|
|
@@ -65,7 +65,7 @@ export class GenericIndexedDBService {
|
|
|
65
65
|
key,
|
|
66
66
|
cachedAt: Date.now(),
|
|
67
67
|
expiresAt: Date.now() + this.CACHE_DURATION,
|
|
68
|
-
version: JSON.stringify(stats)
|
|
68
|
+
version: JSON.stringify(stats),
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
async getStats(key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "fake-indexeddb/auto";
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { GenericIndexedDBService } from
|
|
1
|
+
import "fake-indexeddb/auto";
|
|
2
|
+
import { GenericIndexedDBService } from "./cache.service";
|
|
3
3
|
const toCached = (entity) => ({
|
|
4
4
|
id: entity.id,
|
|
5
5
|
name: entity.name,
|
|
6
6
|
createdAt: entity.createdAt.toISOString(),
|
|
7
|
-
cachedAt: Date.now()
|
|
7
|
+
cachedAt: Date.now(),
|
|
8
8
|
});
|
|
9
9
|
const fromCached = (cached) => ({
|
|
10
10
|
id: cached.id,
|
|
11
11
|
name: cached.name,
|
|
12
|
-
createdAt: new Date(cached.createdAt)
|
|
12
|
+
createdAt: new Date(cached.createdAt),
|
|
13
13
|
});
|
|
14
|
-
describe(
|
|
14
|
+
describe("GenericIndexedDBService", () => {
|
|
15
15
|
let service;
|
|
16
16
|
beforeEach(() => {
|
|
17
|
-
service = new GenericIndexedDBService(
|
|
17
|
+
service = new GenericIndexedDBService("TestDB", "id, name", toCached, fromCached);
|
|
18
18
|
});
|
|
19
19
|
afterEach(async () => {
|
|
20
20
|
await service.db.delete();
|
|
21
21
|
});
|
|
22
|
-
it(
|
|
22
|
+
it("should save and retrieve one item", async () => {
|
|
23
23
|
const item = {
|
|
24
|
-
id:
|
|
25
|
-
name:
|
|
26
|
-
createdAt: new Date()
|
|
24
|
+
id: "1",
|
|
25
|
+
name: "Test Item",
|
|
26
|
+
createdAt: new Date(),
|
|
27
27
|
};
|
|
28
28
|
await service.saveOne(item);
|
|
29
|
-
const result = await service.getOne(
|
|
29
|
+
const result = await service.getOne("1");
|
|
30
30
|
expect(result).not.toBeNull();
|
|
31
|
-
expect(result?.id).toBe(
|
|
31
|
+
expect(result?.id).toBe("1");
|
|
32
32
|
});
|
|
33
|
-
it(
|
|
33
|
+
it("should save and retrieve all items", async () => {
|
|
34
34
|
const now = new Date();
|
|
35
35
|
const items = [
|
|
36
|
-
{ id:
|
|
37
|
-
{ id:
|
|
36
|
+
{ id: "1", name: "One", createdAt: now },
|
|
37
|
+
{ id: "2", name: "Two", createdAt: now },
|
|
38
38
|
];
|
|
39
|
-
await service.saveAll(items,
|
|
40
|
-
const results = await service.getAll(
|
|
39
|
+
await service.saveAll(items, "all");
|
|
40
|
+
const results = await service.getAll("all");
|
|
41
41
|
expect(results).not.toBeNull();
|
|
42
42
|
expect(results.length).toBe(2);
|
|
43
43
|
});
|
|
44
|
-
it(
|
|
44
|
+
it("should return null when cache is expired", async () => {
|
|
45
45
|
const cacheTable = service.db.cache;
|
|
46
46
|
await cacheTable.put({
|
|
47
|
-
key:
|
|
47
|
+
key: "expired",
|
|
48
48
|
cachedAt: Date.now() - 10000,
|
|
49
49
|
expiresAt: Date.now() - 5000,
|
|
50
|
-
version:
|
|
50
|
+
version: "1.0",
|
|
51
51
|
});
|
|
52
|
-
const result = await service.getAll(
|
|
52
|
+
const result = await service.getAll("expired");
|
|
53
53
|
expect(result).toBeNull();
|
|
54
54
|
});
|
|
55
|
-
it(
|
|
55
|
+
it("should delete one item", async () => {
|
|
56
56
|
const item = {
|
|
57
|
-
id:
|
|
58
|
-
name:
|
|
59
|
-
createdAt: new Date()
|
|
57
|
+
id: "1",
|
|
58
|
+
name: "Delete Me",
|
|
59
|
+
createdAt: new Date(),
|
|
60
60
|
};
|
|
61
61
|
await service.saveOne(item);
|
|
62
|
-
await service.delete(
|
|
63
|
-
const result = await service.getOne(
|
|
62
|
+
await service.delete("1");
|
|
63
|
+
const result = await service.getOne("1");
|
|
64
64
|
expect(result).toBeNull();
|
|
65
65
|
});
|
|
66
|
-
it(
|
|
66
|
+
it("should set and retrieve stats", async () => {
|
|
67
67
|
const stats = { total: 99 };
|
|
68
|
-
await service.setStats(
|
|
69
|
-
const result = await service.getStats(
|
|
68
|
+
await service.setStats("mystats", stats);
|
|
69
|
+
const result = await service.getStats("mystats");
|
|
70
70
|
expect(result).toEqual(stats);
|
|
71
71
|
});
|
|
72
|
-
it(
|
|
72
|
+
it("should get cache info", async () => {
|
|
73
73
|
await service.saveOne({
|
|
74
|
-
id:
|
|
75
|
-
name:
|
|
76
|
-
createdAt: new Date()
|
|
74
|
+
id: "123",
|
|
75
|
+
name: "Info Item",
|
|
76
|
+
createdAt: new Date(),
|
|
77
77
|
});
|
|
78
78
|
await service.db.cache.put({
|
|
79
|
-
key:
|
|
79
|
+
key: "info",
|
|
80
80
|
cachedAt: Date.now(),
|
|
81
81
|
expiresAt: Date.now() + 10000,
|
|
82
|
-
version:
|
|
82
|
+
version: "1.0",
|
|
83
83
|
});
|
|
84
|
-
const info = await service.getCacheInfo(
|
|
84
|
+
const info = await service.getCacheInfo("info");
|
|
85
85
|
expect(info.count).toBeGreaterThanOrEqual(1);
|
|
86
86
|
expect(info.lastUpdated).toBeInstanceOf(Date);
|
|
87
87
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ProviderType, NetworkingConfig, NetworkingUIEventWrapped, HttpResponse } from
|
|
2
|
-
import { SmessService } from
|
|
3
|
-
import { BehaviorSubject, Observable } from
|
|
4
|
-
export type CustomerTarget =
|
|
1
|
+
import { ProviderType, NetworkingConfig, NetworkingUIEventWrapped, HttpResponse } from "../types/types";
|
|
2
|
+
import { SmessService } from "./smess.service";
|
|
3
|
+
import { BehaviorSubject, Observable } from "rxjs";
|
|
4
|
+
export type CustomerTarget = "register" | "get-profile" | "update-profile";
|
|
5
5
|
export interface CustomerRegisterRequest {
|
|
6
6
|
client_id?: string;
|
|
7
7
|
email: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Accept, SMESSHeader, SmessService } from
|
|
1
|
+
import { Accept, SMESSHeader, SmessService } from "./smess.service";
|
|
2
2
|
export class CustomerProvider {
|
|
3
3
|
constructor(config, target, $authToken) {
|
|
4
4
|
this.config = config;
|
|
@@ -6,28 +6,30 @@ export class CustomerProvider {
|
|
|
6
6
|
this.$authToken = $authToken;
|
|
7
7
|
}
|
|
8
8
|
get baseURL() {
|
|
9
|
-
return this.config.version
|
|
9
|
+
return this.config.version
|
|
10
|
+
? `${this.config.baseUrl}/${this.config.version}`
|
|
11
|
+
: this.config.baseUrl;
|
|
10
12
|
}
|
|
11
13
|
get path() {
|
|
12
14
|
switch (this.target) {
|
|
13
|
-
case
|
|
14
|
-
return
|
|
15
|
-
case
|
|
16
|
-
return
|
|
17
|
-
case
|
|
18
|
-
return
|
|
15
|
+
case "register":
|
|
16
|
+
return "/authentication/customer/register";
|
|
17
|
+
case "get-profile":
|
|
18
|
+
return "/authentication/customer/get-profile";
|
|
19
|
+
case "update-profile":
|
|
20
|
+
return "/authentication/customer/update";
|
|
19
21
|
default:
|
|
20
|
-
return
|
|
22
|
+
return "/authentication/customer";
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
get method() {
|
|
24
26
|
switch (this.target) {
|
|
25
|
-
case
|
|
26
|
-
return
|
|
27
|
-
case
|
|
28
|
-
return
|
|
27
|
+
case "get-profile":
|
|
28
|
+
return "GET";
|
|
29
|
+
case "update-profile":
|
|
30
|
+
return "PUT";
|
|
29
31
|
default:
|
|
30
|
-
return
|
|
32
|
+
return "POST";
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
35
|
get headers() {
|
|
@@ -59,12 +61,12 @@ export class CustomerService {
|
|
|
59
61
|
return new SmessService(targetWrapper);
|
|
60
62
|
}
|
|
61
63
|
register(payload) {
|
|
62
|
-
return this.provider(
|
|
64
|
+
return this.provider("register").request(payload);
|
|
63
65
|
}
|
|
64
66
|
getProfile() {
|
|
65
|
-
return this.provider(
|
|
67
|
+
return this.provider("get-profile").request();
|
|
66
68
|
}
|
|
67
69
|
updateProfile(payload) {
|
|
68
|
-
return this.provider(
|
|
70
|
+
return this.provider("update-profile").request(payload);
|
|
69
71
|
}
|
|
70
72
|
}
|