@c-rex/services 0.0.6 → 0.0.7
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.mts +47 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.js +358 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +318 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +7 -13
- package/src/__tests__/baseService.test.ts +0 -98
- package/src/__tests__/directoryNodes.test.ts +0 -84
- package/src/__tests__/documentTypes.test.ts +0 -75
- package/src/__tests__/informationUnits.test.ts +0 -161
- package/src/__tests__/renditions.test.ts +0 -7
- package/src/baseService.ts +0 -57
- package/src/directoryNodes.ts +0 -15
- package/src/documentTypes.ts +0 -23
- package/src/index.ts +0 -4
- package/src/informationUnits.ts +0 -75
- package/src/renditions.ts +0 -38
- package/src/transforms/__tests__/documentTypes.test.ts +0 -28
- package/src/transforms/__tests__/information.test.ts +0 -34
- package/src/transforms/documentTypes.ts +0 -16
- package/src/transforms/information.ts +0 -14
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
// ../core/src/requests.ts
|
|
2
|
+
import axios from "axios";
|
|
3
|
+
|
|
4
|
+
// ../constants/src/index.ts
|
|
5
|
+
var API = {
|
|
6
|
+
MAX_RETRY: 3,
|
|
7
|
+
API_TIMEOUT: 1e4,
|
|
8
|
+
API_HEADERS: {
|
|
9
|
+
"content-Type": "application/json"
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// ../core/src/requests.ts
|
|
14
|
+
var CrexApi = class {
|
|
15
|
+
apiClient;
|
|
16
|
+
logger;
|
|
17
|
+
constructor(baseUrl, logger) {
|
|
18
|
+
this.apiClient = axios.create({
|
|
19
|
+
baseURL: baseUrl,
|
|
20
|
+
headers: {
|
|
21
|
+
"content-Type": "application/json"
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
this.logger = logger;
|
|
25
|
+
}
|
|
26
|
+
async execute({
|
|
27
|
+
url,
|
|
28
|
+
method,
|
|
29
|
+
params,
|
|
30
|
+
body,
|
|
31
|
+
headers
|
|
32
|
+
}) {
|
|
33
|
+
let response = void 0;
|
|
34
|
+
for (let retry = 0; retry < API.MAX_RETRY; retry++) {
|
|
35
|
+
try {
|
|
36
|
+
response = await this.apiClient.request({
|
|
37
|
+
url,
|
|
38
|
+
method,
|
|
39
|
+
data: body,
|
|
40
|
+
params,
|
|
41
|
+
headers
|
|
42
|
+
});
|
|
43
|
+
} catch (error) {
|
|
44
|
+
this.logger.log("error", `API.execute error when request ${url}. Error: ${error}`);
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (response) {
|
|
49
|
+
return response.data;
|
|
50
|
+
}
|
|
51
|
+
throw new Error("API.execute error: Failed to retrieve a valid response");
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// ../core/src/cookies.ts
|
|
56
|
+
var GLOBAL_KEY = "__CREX_INITIAL_CONFIG__";
|
|
57
|
+
var CONFIG_COOKIE_KEY = "crex_config";
|
|
58
|
+
function isBrowser() {
|
|
59
|
+
return typeof window !== "undefined" && typeof document !== "undefined";
|
|
60
|
+
}
|
|
61
|
+
function parseCookies() {
|
|
62
|
+
const cookies = {};
|
|
63
|
+
if (typeof document === "undefined") {
|
|
64
|
+
return cookies;
|
|
65
|
+
}
|
|
66
|
+
document.cookie.split(";").forEach((cookie) => {
|
|
67
|
+
const [key, value] = cookie.split("=");
|
|
68
|
+
if (key && value) {
|
|
69
|
+
cookies[key.trim()] = decodeURIComponent(value.trim());
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return cookies;
|
|
73
|
+
}
|
|
74
|
+
function setCookie(name, value, days = 30) {
|
|
75
|
+
if (typeof document === "undefined") return;
|
|
76
|
+
const expires = new Date(Date.now() + days * 86400 * 1e3).toUTCString();
|
|
77
|
+
document.cookie = `${name}=${encodeURIComponent(value)}; path=/; expires=${expires}; SameSite=Lax`;
|
|
78
|
+
}
|
|
79
|
+
function setConfig(config) {
|
|
80
|
+
if (isBrowser()) {
|
|
81
|
+
setCookie(CONFIG_COOKIE_KEY, JSON.stringify(config));
|
|
82
|
+
} else {
|
|
83
|
+
if (typeof global !== "undefined" && !(GLOBAL_KEY in global)) {
|
|
84
|
+
global[GLOBAL_KEY] = null;
|
|
85
|
+
}
|
|
86
|
+
const globalConfig = global[GLOBAL_KEY];
|
|
87
|
+
if (globalConfig === null) {
|
|
88
|
+
global[GLOBAL_KEY] = config;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function getConfig() {
|
|
93
|
+
let returnValue;
|
|
94
|
+
if (isBrowser()) {
|
|
95
|
+
const cookies = parseCookies();
|
|
96
|
+
const configStr = cookies[CONFIG_COOKIE_KEY];
|
|
97
|
+
if (configStr) {
|
|
98
|
+
try {
|
|
99
|
+
return JSON.parse(configStr);
|
|
100
|
+
} catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
} else {
|
|
106
|
+
returnValue = global[GLOBAL_KEY];
|
|
107
|
+
}
|
|
108
|
+
return returnValue;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// ../core/src/sdk.ts
|
|
112
|
+
var CrexSDK = class {
|
|
113
|
+
customerConfig;
|
|
114
|
+
logger;
|
|
115
|
+
api;
|
|
116
|
+
constructor() {
|
|
117
|
+
const config = getConfig();
|
|
118
|
+
this.customerConfig = config;
|
|
119
|
+
this.api = new CrexApi(this.customerConfig.baseUrl, null);
|
|
120
|
+
}
|
|
121
|
+
static setConfig(config) {
|
|
122
|
+
setConfig(config);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// ../utils/src/utils.ts
|
|
127
|
+
var createParams = (fieldsList, key = "Fields") => fieldsList.map((item) => ({
|
|
128
|
+
key,
|
|
129
|
+
value: item
|
|
130
|
+
}));
|
|
131
|
+
var generateQueryParams = (params) => {
|
|
132
|
+
const queryParams = params.map(
|
|
133
|
+
(param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`
|
|
134
|
+
).join("&");
|
|
135
|
+
return queryParams;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
// ../utils/src/classMerge.ts
|
|
139
|
+
import { clsx } from "clsx";
|
|
140
|
+
import { twMerge } from "tailwind-merge";
|
|
141
|
+
|
|
142
|
+
// src/baseService.ts
|
|
143
|
+
var BaseService = class {
|
|
144
|
+
api;
|
|
145
|
+
//private log: (level: LogLevelType, message: string, category?: LogCategoriesType) => void;
|
|
146
|
+
endpoint;
|
|
147
|
+
SDK;
|
|
148
|
+
constructor(endpoint) {
|
|
149
|
+
this.SDK = new CrexSDK();
|
|
150
|
+
this.api = this.SDK.api;
|
|
151
|
+
this.endpoint = endpoint;
|
|
152
|
+
}
|
|
153
|
+
async request({
|
|
154
|
+
path = "",
|
|
155
|
+
method = "get",
|
|
156
|
+
params = [],
|
|
157
|
+
headers = {},
|
|
158
|
+
transformer = (response) => response
|
|
159
|
+
}) {
|
|
160
|
+
try {
|
|
161
|
+
let url = `${this.endpoint}${path}`;
|
|
162
|
+
const queryParams = generateQueryParams(params);
|
|
163
|
+
if (queryParams.length > 0) {
|
|
164
|
+
url += `?${queryParams}`;
|
|
165
|
+
}
|
|
166
|
+
const response = await this.api.execute({
|
|
167
|
+
url,
|
|
168
|
+
method,
|
|
169
|
+
headers
|
|
170
|
+
});
|
|
171
|
+
return await transformer(response);
|
|
172
|
+
} catch (error) {
|
|
173
|
+
console.log("error", `BaseService.request error when request ${path}. Error: ${error}`);
|
|
174
|
+
throw error;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// src/renditions.ts
|
|
180
|
+
var RenditionsService = class extends BaseService {
|
|
181
|
+
constructor() {
|
|
182
|
+
super("Renditions/");
|
|
183
|
+
}
|
|
184
|
+
async getHTMLRendition(renditions) {
|
|
185
|
+
const filteredRenditions = renditions.filter(
|
|
186
|
+
(item2) => item2.format == "application/xhtml+xml"
|
|
187
|
+
);
|
|
188
|
+
if (filteredRenditions.length == 0) return "";
|
|
189
|
+
if (filteredRenditions[0] == void 0) return "";
|
|
190
|
+
const item = filteredRenditions[0];
|
|
191
|
+
const filteredLinks = item.links.filter((item2) => item2.rel == "view");
|
|
192
|
+
if (filteredLinks.length == 0) return "";
|
|
193
|
+
if (filteredLinks[0] == void 0) return "";
|
|
194
|
+
const url = filteredLinks[0].href;
|
|
195
|
+
const response = await this.api.execute({
|
|
196
|
+
url,
|
|
197
|
+
method: "get",
|
|
198
|
+
headers: {
|
|
199
|
+
Accept: "application/xhtml+xml"
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
return response;
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
// src/directoryNodes.ts
|
|
207
|
+
var DirectoryNodesService = class extends BaseService {
|
|
208
|
+
constructor() {
|
|
209
|
+
super("DirectoryNodes/");
|
|
210
|
+
}
|
|
211
|
+
async getItem(id) {
|
|
212
|
+
return await this.request({
|
|
213
|
+
path: id
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
// src/transforms/documentTypes.ts
|
|
219
|
+
var transformDocumentTypes = (data) => {
|
|
220
|
+
const labels = [];
|
|
221
|
+
data.items.forEach((documentItem) => {
|
|
222
|
+
const aux = documentItem.labels.flatMap((item) => item);
|
|
223
|
+
aux.forEach((item) => {
|
|
224
|
+
if (item.language == "en") labels.push(item.value);
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
return labels;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
// src/documentTypes.ts
|
|
231
|
+
var DocumentTypesService = class extends BaseService {
|
|
232
|
+
constructor() {
|
|
233
|
+
super("DocumentTypes/");
|
|
234
|
+
}
|
|
235
|
+
async getLabels(fields) {
|
|
236
|
+
const params = [
|
|
237
|
+
{
|
|
238
|
+
key: "Restrict",
|
|
239
|
+
value: `languages~EN-us`
|
|
240
|
+
},
|
|
241
|
+
...createParams(fields, "Fields")
|
|
242
|
+
];
|
|
243
|
+
return await this.request({
|
|
244
|
+
params,
|
|
245
|
+
transformer: transformDocumentTypes
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
// src/transforms/information.ts
|
|
251
|
+
var transformInformationUnits = (data) => {
|
|
252
|
+
return {
|
|
253
|
+
items: data.items.map((item) => item),
|
|
254
|
+
pageInfo: data.pageInfo
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
// src/informationUnits.ts
|
|
259
|
+
var InformationUnitsService = class extends BaseService {
|
|
260
|
+
constructor() {
|
|
261
|
+
super("InformationUnits/");
|
|
262
|
+
}
|
|
263
|
+
async getList(queries, page, fields, language) {
|
|
264
|
+
const remainFields = createParams(fields, "Fields");
|
|
265
|
+
const params = [
|
|
266
|
+
{ key: "pageSize", value: "8" },
|
|
267
|
+
{ key: "PageNumber", value: (page - 1).toString() },
|
|
268
|
+
{ key: "Query", value: queries },
|
|
269
|
+
...remainFields
|
|
270
|
+
];
|
|
271
|
+
if (language != null) {
|
|
272
|
+
language.forEach((item) => {
|
|
273
|
+
params.push({
|
|
274
|
+
key: "Restrict",
|
|
275
|
+
value: `languages~${item}`
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
return await this.request({
|
|
280
|
+
params,
|
|
281
|
+
transformer: transformInformationUnits
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
async getItem(id) {
|
|
285
|
+
const params = [
|
|
286
|
+
{ key: "Fields", value: "renditions" },
|
|
287
|
+
{ key: "Fields", value: "directoryNodes" }
|
|
288
|
+
];
|
|
289
|
+
return await this.request({
|
|
290
|
+
path: id,
|
|
291
|
+
params
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
async getLanguages() {
|
|
295
|
+
return await this.request({
|
|
296
|
+
path: `Languages`,
|
|
297
|
+
transformer: (data) => {
|
|
298
|
+
return data.map((item) => item.value);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
async getSuggestions(query) {
|
|
303
|
+
return await this.request({
|
|
304
|
+
path: `Suggestions`,
|
|
305
|
+
params: [{ key: "prefix", value: query }],
|
|
306
|
+
transformer: (data) => {
|
|
307
|
+
return data.suggestions.map((item) => item.value);
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
export {
|
|
313
|
+
DirectoryNodesService,
|
|
314
|
+
DocumentTypesService,
|
|
315
|
+
InformationUnitsService,
|
|
316
|
+
RenditionsService
|
|
317
|
+
};
|
|
318
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../core/src/requests.ts","../../constants/src/index.ts","../../core/src/cookies.ts","../../core/src/sdk.ts","../../utils/src/utils.ts","../../utils/src/classMerge.ts","../src/baseService.ts","../src/renditions.ts","../src/directoryNodes.ts","../src/transforms/documentTypes.ts","../src/documentTypes.ts","../src/transforms/information.ts","../src/informationUnits.ts"],"sourcesContent":["import axios, { AxiosResponse, Method, AxiosInstance } from \"axios\";\nimport { API } from \"@c-rex/constants\";\n\ninterface APIGenericResponse<T> extends AxiosResponse {\n data: T;\n statusCode: number;\n}\n\ninterface CallParams {\n url: string;\n method: Method;\n body?: any;\n headers?: any;\n params?: any;\n}\n\nexport class CrexApi {\n private apiClient: AxiosInstance;\n private logger: any;\n\n public constructor(baseUrl: string, logger: any) {\n this.apiClient = axios.create({\n baseURL: baseUrl,\n headers: {\n \"content-Type\": \"application/json\",\n },\n });\n this.logger = logger;\n }\n\n async execute<T>({\n url,\n method,\n params,\n body,\n headers,\n }: CallParams): Promise<any> {\n let response: APIGenericResponse<T> | undefined = undefined;\n\n for (let retry = 0; retry < API.MAX_RETRY; retry++) {\n try {\n response = await this.apiClient.request({\n url,\n method,\n data: body,\n params,\n headers,\n });\n } catch (error) {\n this.logger.log(\"error\", `API.execute error when request ${url}. Error: ${error}`);\n throw error;\n }\n }\n\n if (response) {\n return response.data\n }\n\n throw new Error(\"API.execute error: Failed to retrieve a valid response\");\n }\n}\n","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};","const GLOBAL_KEY = '__CREX_INITIAL_CONFIG__';\nconst CONFIG_COOKIE_KEY = 'crex_config';\n\nfunction isBrowser() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nfunction parseCookies(): Record<string, string> {\n const cookies: Record<string, string> = {};\n\n if (typeof document === 'undefined') {\n return cookies;\n }\n\n document.cookie.split(';').forEach(cookie => {\n const [key, value] = cookie.split('=');\n if (key && value) {\n cookies[key.trim()] = decodeURIComponent(value.trim());\n }\n });\n\n return cookies;\n}\n\nfunction setCookie(name: string, value: string, days = 30) {\n if (typeof document === 'undefined') return;\n\n const expires = new Date(Date.now() + days * 86400 * 1000).toUTCString();\n document.cookie = `${name}=${encodeURIComponent(value)}; path=/; expires=${expires}; SameSite=Lax`;\n}\n\nexport function setConfig(config: Record<string, any>) {\n\n if (isBrowser()) {\n setCookie(CONFIG_COOKIE_KEY, JSON.stringify(config));\n } else {\n if (typeof global !== 'undefined' && !(GLOBAL_KEY in global)) {\n (global as any)[GLOBAL_KEY] = null;\n }\n\n const globalConfig = (global as any)[GLOBAL_KEY] as any;\n\n if (globalConfig === null) {\n (global as any)[GLOBAL_KEY] = config;\n }\n }\n}\n\nexport function getConfig(): Record<string, any> | null {\n let returnValue\n\n if (isBrowser()) {\n const cookies = parseCookies();\n const configStr = cookies[CONFIG_COOKIE_KEY];\n if (configStr) {\n try {\n return JSON.parse(configStr);\n } catch {\n return null;\n }\n }\n return null;\n\n } else {\n returnValue = (global as any)[GLOBAL_KEY];\n }\n\n return returnValue\n}\n","import { CrexApi } from \"./requests\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { getConfig, setConfig } from \"./cookies\";\n\nexport class CrexSDK {\n public customerConfig!: ConfigInterface;\n public logger!: any;\n public api!: CrexApi;\n\n public constructor() {\n const config = getConfig();\n\n this.customerConfig = config as ConfigInterface;\n this.api = new CrexApi(this.customerConfig.baseUrl, null);\n }\n\n public static setConfig(config: ConfigInterface) {\n setConfig(config);\n }\n}","\nimport { QueryParams } from '@c-rex/types';\n//import * as Flags from 'country-flag-icons/react/3x2';\n//import { AppRouterInstance } from 'next/dist/shared/lib/app-router-context.shared-runtime';\n\nexport const createParams = (fieldsList: string[], key: string = \"Fields\") =>\n fieldsList.map((item) => ({\n key: key,\n value: item,\n }));\n\nexport const updateUrlWithParams = (\n //router: AppRouterInstance,\n router: any,\n params: QueryParams[],\n) => {\n const searchParams = new URLSearchParams(window.location.search);\n\n params.forEach((param) => {\n searchParams.set(param.key, param.value.toString());\n });\n\n const queryString = searchParams.toString();\n router.push(`${window.location.pathname}?${queryString}`);\n};\n\nexport const generateQueryParams = (params: QueryParams[]): string => {\n const queryParams = params\n .map(\n (param) =>\n `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`,\n )\n .join(\"&\");\n return queryParams;\n};\n\n/*\nexport const getFlagIcon = (countryCode: string): JSX.Element | null => {\n if (countryCode === undefined) return null;\n \n return Flags[countryCode] || null;\n};\n\n\n*/","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { CrexSDK, CrexApi } from \"@c-rex/core\";\nimport { LogCategoriesType, LogLevelType, QueryParams } from \"@c-rex/types\";\nimport { generateQueryParams } from \"@c-rex/utils\";\nimport { Method } from \"axios\";\n\nexport class BaseService {\n protected api: CrexApi;\n //private log: (level: LogLevelType, message: string, category?: LogCategoriesType) => void;\n private endpoint: string;\n private SDK: CrexSDK;\n\n constructor(endpoint: string) {\n this.SDK = new CrexSDK();\n this.api = this.SDK.api;\n //this.log = this.SDK.logger.log;\n this.endpoint = endpoint;\n }\n\n protected async request<T>(\n {\n path = \"\",\n method = \"get\",\n params = [],\n headers = {},\n transformer = (response: any) => response,\n }: {\n path?: string,\n method?: Method,\n params?: QueryParams[],\n headers?: any,\n transformer?: (data: any) => T,\n }\n ): Promise<T> {\n try {\n let url = `${this.endpoint}${path}`;\n\n const queryParams = generateQueryParams(params);\n if (queryParams.length > 0) {\n url += `?${queryParams}`;\n }\n\n const response = await this.api.execute({\n url,\n method,\n headers,\n })\n\n return await transformer(response);\n\n } catch (error) {\n console.log(\"error\", `BaseService.request error when request ${path}. Error: ${error}`);\n\n throw error;\n }\n }\n}\n\n","import { BaseService } from \"./baseService\";\nimport { informationUnitsRenditions } from \"@c-rex/interfaces\";\n\n\nexport class RenditionsService extends BaseService {\n constructor() {\n super(\"Renditions/\");\n }\n\n public async getHTMLRendition(renditions: informationUnitsRenditions[]): Promise<string> {\n const filteredRenditions = renditions.filter(\n (item) => item.format == \"application/xhtml+xml\",\n );\n\n if (filteredRenditions.length == 0) return \"\";\n if (filteredRenditions[0] == undefined) return \"\";\n\n const item = filteredRenditions[0];\n\n const filteredLinks = item.links.filter((item) => item.rel == \"view\");\n\n if (filteredLinks.length == 0) return \"\";\n if (filteredLinks[0] == undefined) return \"\";\n\n\n const url = filteredLinks[0].href;\n\n const response = await this.api.execute({\n url,\n method: \"get\",\n headers: {\n Accept: \"application/xhtml+xml\",\n },\n })\n\n return response;\n }\n}","import { BaseService } from \"./baseService\";\nimport { DirectoryNodes } from \"@c-rex/interfaces\";\n\n\nexport class DirectoryNodesService extends BaseService {\n constructor() {\n super(\"DirectoryNodes/\");\n }\n\n public async getItem(id: string): Promise<DirectoryNodes> {\n return await this.request({\n path: id,\n });\n }\n}\n","import { DefaultRequest } from \"@c-rex/interfaces\";\nimport { DocumentTypesItem } from \"@c-rex/interfaces\";\n\nexport const transformDocumentTypes = (data: DefaultRequest<DocumentTypesItem>) => {\n const labels: string[] = [];\n\n data.items.forEach((documentItem: DocumentTypesItem) => {\n const aux = documentItem.labels.flatMap((item) => item);\n\n aux.forEach((item) => {\n if (item.language == \"en\") labels.push(item.value);\n });\n });\n\n return labels;\n};\n","import { createParams } from \"@c-rex/utils\";\nimport { transformDocumentTypes } from \"./transforms/documentTypes\";\nimport { BaseService } from \"./baseService\";\n\nexport class DocumentTypesService extends BaseService {\n constructor() {\n super(\"DocumentTypes/\");\n }\n public async getLabels(fields: string[]): Promise<string[]> {\n const params = [\n {\n key: \"Restrict\",\n value: `languages~EN-us`,\n },\n ...createParams(fields, \"Fields\"),\n ];\n\n return await this.request({\n params,\n transformer: transformDocumentTypes,\n });\n }\n}\n","import { DefaultRequest } from \"@c-rex/interfaces\";\nimport {\n informationUnits,\n informationUnitsItems,\n} from \"@c-rex/interfaces\";\n\nexport const transformInformationUnits = (\n data: DefaultRequest<informationUnitsItems>,\n): informationUnits => {\n return {\n items: data.items.map((item) => item),\n pageInfo: data.pageInfo,\n };\n};\n","import {\n AutocompleteSuggestion,\n informationUnits,\n informationUnitsItems,\n} from \"@c-rex/interfaces\";\nimport { transformInformationUnits } from \"./transforms/information\";\nimport { createParams } from \"@c-rex/utils\";\nimport { BaseService } from \"./baseService\";\n\nexport class InformationUnitsService extends BaseService {\n constructor() {\n super(\"InformationUnits/\");\n }\n\n public async getList(\n queries: string,\n page: number,\n fields: string[],\n language: string[] | null,\n ): Promise<informationUnits> {\n const remainFields = createParams(fields, \"Fields\");\n\n const params = [\n { key: \"pageSize\", value: \"8\" },\n { key: \"PageNumber\", value: (page - 1).toString() },\n { key: \"Query\", value: queries },\n ...remainFields,\n ];\n\n if (language != null) {\n language.forEach((item) => {\n params.push({\n key: \"Restrict\",\n value: `languages~${item}`,\n });\n });\n }\n\n return await this.request({\n params: params,\n transformer: transformInformationUnits\n });\n }\n\n public async getItem(id: string): Promise<informationUnitsItems> {\n const params = [\n { key: \"Fields\", value: \"renditions\" },\n { key: \"Fields\", value: \"directoryNodes\" },\n ];\n\n return await this.request({\n path: id,\n params,\n });\n }\n\n public async getLanguages(): Promise<string[]> {\n return await this.request({\n path: `Languages`,\n transformer: (data: { value: string; score: number }[]) => {\n return data.map((item) => item.value);\n },\n });\n }\n\n public async getSuggestions(query: string): Promise<string[]> {\n return await this.request({\n path: `Suggestions`,\n params: [{ key: \"prefix\", value: query }],\n transformer: (data: AutocompleteSuggestion) => {\n return data.suggestions.map((item) => item.value);\n },\n });\n }\n}\n"],"mappings":";AAAA,OAAO,WAAqD;;;ACuBrD,IAAM,MAAM;AAAA,EACf,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,IACT,gBAAgB;AAAA,EACpB;AACJ;;;ADbO,IAAM,UAAN,MAAc;AAAA,EACT;AAAA,EACA;AAAA,EAED,YAAY,SAAiB,QAAa;AAC7C,SAAK,YAAY,MAAM,OAAO;AAAA,MAC1B,SAAS;AAAA,MACT,SAAS;AAAA,QACL,gBAAgB;AAAA,MACpB;AAAA,IACJ,CAAC;AACD,SAAK,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,QAAW;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAA6B;AACzB,QAAI,WAA8C;AAElD,aAAS,QAAQ,GAAG,QAAQ,IAAI,WAAW,SAAS;AAChD,UAAI;AACA,mBAAW,MAAM,KAAK,UAAU,QAAQ;AAAA,UACpC;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL,SAAS,OAAO;AACZ,aAAK,OAAO,IAAI,SAAS,kCAAkC,GAAG,YAAY,KAAK,EAAE;AACjF,cAAM;AAAA,MACV;AAAA,IACJ;AAEA,QAAI,UAAU;AACV,aAAO,SAAS;AAAA,IACpB;AAEA,UAAM,IAAI,MAAM,wDAAwD;AAAA,EAC5E;AACJ;;;AE5DA,IAAM,aAAa;AACnB,IAAM,oBAAoB;AAE1B,SAAS,YAAY;AACjB,SAAO,OAAO,WAAW,eAAe,OAAO,aAAa;AAChE;AAEA,SAAS,eAAuC;AAC5C,QAAM,UAAkC,CAAC;AAEzC,MAAI,OAAO,aAAa,aAAa;AACjC,WAAO;AAAA,EACX;AAEA,WAAS,OAAO,MAAM,GAAG,EAAE,QAAQ,YAAU;AACzC,UAAM,CAAC,KAAK,KAAK,IAAI,OAAO,MAAM,GAAG;AACrC,QAAI,OAAO,OAAO;AACd,cAAQ,IAAI,KAAK,CAAC,IAAI,mBAAmB,MAAM,KAAK,CAAC;AAAA,IACzD;AAAA,EACJ,CAAC;AAED,SAAO;AACX;AAEA,SAAS,UAAU,MAAc,OAAe,OAAO,IAAI;AACvD,MAAI,OAAO,aAAa,YAAa;AAErC,QAAM,UAAU,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,QAAQ,GAAI,EAAE,YAAY;AACvE,WAAS,SAAS,GAAG,IAAI,IAAI,mBAAmB,KAAK,CAAC,qBAAqB,OAAO;AACtF;AAEO,SAAS,UAAU,QAA6B;AAEnD,MAAI,UAAU,GAAG;AACb,cAAU,mBAAmB,KAAK,UAAU,MAAM,CAAC;AAAA,EACvD,OAAO;AACH,QAAI,OAAO,WAAW,eAAe,EAAE,cAAc,SAAS;AAC1D,MAAC,OAAe,UAAU,IAAI;AAAA,IAClC;AAEA,UAAM,eAAgB,OAAe,UAAU;AAE/C,QAAI,iBAAiB,MAAM;AACvB,MAAC,OAAe,UAAU,IAAI;AAAA,IAClC;AAAA,EACJ;AACJ;AAEO,SAAS,YAAwC;AACpD,MAAI;AAEJ,MAAI,UAAU,GAAG;AACb,UAAM,UAAU,aAAa;AAC7B,UAAM,YAAY,QAAQ,iBAAiB;AAC3C,QAAI,WAAW;AACX,UAAI;AACA,eAAO,KAAK,MAAM,SAAS;AAAA,MAC/B,QAAQ;AACJ,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EAEX,OAAO;AACH,kBAAe,OAAe,UAAU;AAAA,EAC5C;AAEA,SAAO;AACX;;;AChEO,IAAM,UAAN,MAAc;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EAEA,cAAc;AACjB,UAAM,SAAS,UAAU;AAEzB,SAAK,iBAAiB;AACtB,SAAK,MAAM,IAAI,QAAQ,KAAK,eAAe,SAAS,IAAI;AAAA,EAC5D;AAAA,EAEA,OAAc,UAAU,QAAyB;AAC7C,cAAU,MAAM;AAAA,EACpB;AACJ;;;ACdO,IAAM,eAAe,CAAC,YAAsB,MAAc,aAC7D,WAAW,IAAI,CAAC,UAAU;AAAA,EACtB;AAAA,EACA,OAAO;AACX,EAAE;AAiBC,IAAM,sBAAsB,CAAC,WAAkC;AAClE,QAAM,cAAc,OACf;AAAA,IACG,CAAC,UACG,GAAG,mBAAmB,MAAM,GAAG,CAAC,IAAI,mBAAmB,MAAM,KAAK,CAAC;AAAA,EAC3E,EACC,KAAK,GAAG;AACb,SAAO;AACX;;;AClCA,SAAS,YAA6B;AACtC,SAAS,eAAe;;;ACIjB,IAAM,cAAN,MAAkB;AAAA,EACX;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,EAER,YAAY,UAAkB;AAC1B,SAAK,MAAM,IAAI,QAAQ;AACvB,SAAK,MAAM,KAAK,IAAI;AAEpB,SAAK,WAAW;AAAA,EACpB;AAAA,EAEA,MAAgB,QACZ;AAAA,IACI,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS,CAAC;AAAA,IACV,UAAU,CAAC;AAAA,IACX,cAAc,CAAC,aAAkB;AAAA,EACrC,GAOU;AACV,QAAI;AACA,UAAI,MAAM,GAAG,KAAK,QAAQ,GAAG,IAAI;AAEjC,YAAM,cAAc,oBAAoB,MAAM;AAC9C,UAAI,YAAY,SAAS,GAAG;AACxB,eAAO,IAAI,WAAW;AAAA,MAC1B;AAEA,YAAM,WAAW,MAAM,KAAK,IAAI,QAAQ;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAED,aAAO,MAAM,YAAY,QAAQ;AAAA,IAErC,SAAS,OAAO;AACZ,cAAQ,IAAI,SAAS,0CAA0C,IAAI,YAAY,KAAK,EAAE;AAEtF,YAAM;AAAA,IACV;AAAA,EACJ;AACJ;;;ACnDO,IAAM,oBAAN,cAAgC,YAAY;AAAA,EAC/C,cAAc;AACV,UAAM,aAAa;AAAA,EACvB;AAAA,EAEA,MAAa,iBAAiB,YAA2D;AACrF,UAAM,qBAAqB,WAAW;AAAA,MAClC,CAACA,UAASA,MAAK,UAAU;AAAA,IAC7B;AAEA,QAAI,mBAAmB,UAAU,EAAG,QAAO;AAC3C,QAAI,mBAAmB,CAAC,KAAK,OAAW,QAAO;AAE/C,UAAM,OAAO,mBAAmB,CAAC;AAEjC,UAAM,gBAAgB,KAAK,MAAM,OAAO,CAACA,UAASA,MAAK,OAAO,MAAM;AAEpE,QAAI,cAAc,UAAU,EAAG,QAAO;AACtC,QAAI,cAAc,CAAC,KAAK,OAAW,QAAO;AAG1C,UAAM,MAAM,cAAc,CAAC,EAAE;AAE7B,UAAM,WAAW,MAAM,KAAK,IAAI,QAAQ;AAAA,MACpC;AAAA,MACA,QAAQ;AAAA,MACR,SAAS;AAAA,QACL,QAAQ;AAAA,MACZ;AAAA,IACJ,CAAC;AAED,WAAO;AAAA,EACX;AACJ;;;ACjCO,IAAM,wBAAN,cAAoC,YAAY;AAAA,EACnD,cAAc;AACV,UAAM,iBAAiB;AAAA,EAC3B;AAAA,EAEA,MAAa,QAAQ,IAAqC;AACtD,WAAO,MAAM,KAAK,QAAQ;AAAA,MACtB,MAAM;AAAA,IACV,CAAC;AAAA,EACL;AACJ;;;ACXO,IAAM,yBAAyB,CAAC,SAA4C;AAC/E,QAAM,SAAmB,CAAC;AAE1B,OAAK,MAAM,QAAQ,CAAC,iBAAoC;AACpD,UAAM,MAAM,aAAa,OAAO,QAAQ,CAAC,SAAS,IAAI;AAEtD,QAAI,QAAQ,CAAC,SAAS;AAClB,UAAI,KAAK,YAAY,KAAM,QAAO,KAAK,KAAK,KAAK;AAAA,IACrD,CAAC;AAAA,EACL,CAAC;AAED,SAAO;AACX;;;ACXO,IAAM,uBAAN,cAAmC,YAAY;AAAA,EAClD,cAAc;AACV,UAAM,gBAAgB;AAAA,EAC1B;AAAA,EACA,MAAa,UAAU,QAAqC;AACxD,UAAM,SAAS;AAAA,MACX;AAAA,QACI,KAAK;AAAA,QACL,OAAO;AAAA,MACX;AAAA,MACA,GAAG,aAAa,QAAQ,QAAQ;AAAA,IACpC;AAEA,WAAO,MAAM,KAAK,QAAQ;AAAA,MACtB;AAAA,MACA,aAAa;AAAA,IACjB,CAAC;AAAA,EACL;AACJ;;;AChBO,IAAM,4BAA4B,CACrC,SACmB;AACnB,SAAO;AAAA,IACH,OAAO,KAAK,MAAM,IAAI,CAAC,SAAS,IAAI;AAAA,IACpC,UAAU,KAAK;AAAA,EACnB;AACJ;;;ACJO,IAAM,0BAAN,cAAsC,YAAY;AAAA,EACrD,cAAc;AACV,UAAM,mBAAmB;AAAA,EAC7B;AAAA,EAEA,MAAa,QACT,SACA,MACA,QACA,UACyB;AACzB,UAAM,eAAe,aAAa,QAAQ,QAAQ;AAElD,UAAM,SAAS;AAAA,MACX,EAAE,KAAK,YAAY,OAAO,IAAI;AAAA,MAC9B,EAAE,KAAK,cAAc,QAAQ,OAAO,GAAG,SAAS,EAAE;AAAA,MAClD,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,MAC/B,GAAG;AAAA,IACP;AAEA,QAAI,YAAY,MAAM;AAClB,eAAS,QAAQ,CAAC,SAAS;AACvB,eAAO,KAAK;AAAA,UACR,KAAK;AAAA,UACL,OAAO,aAAa,IAAI;AAAA,QAC5B,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AAEA,WAAO,MAAM,KAAK,QAAQ;AAAA,MACtB;AAAA,MACA,aAAa;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EAEA,MAAa,QAAQ,IAA4C;AAC7D,UAAM,SAAS;AAAA,MACX,EAAE,KAAK,UAAU,OAAO,aAAa;AAAA,MACrC,EAAE,KAAK,UAAU,OAAO,iBAAiB;AAAA,IAC7C;AAEA,WAAO,MAAM,KAAK,QAAQ;AAAA,MACtB,MAAM;AAAA,MACN;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,MAAa,eAAkC;AAC3C,WAAO,MAAM,KAAK,QAAQ;AAAA,MACtB,MAAM;AAAA,MACN,aAAa,CAAC,SAA6C;AACvD,eAAO,KAAK,IAAI,CAAC,SAAS,KAAK,KAAK;AAAA,MACxC;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,MAAa,eAAe,OAAkC;AAC1D,WAAO,MAAM,KAAK,QAAQ;AAAA,MACtB,MAAM;AAAA,MACN,QAAQ,CAAC,EAAE,KAAK,UAAU,OAAO,MAAM,CAAC;AAAA,MACxC,aAAa,CAAC,SAAiC;AAC3C,eAAO,KAAK,YAAY,IAAI,CAAC,SAAS,KAAK,KAAK;AAAA,MACpD;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;","names":["item"]}
|
package/package.json
CHANGED
|
@@ -1,24 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@c-rex/services",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
|
+
"main": "./dist/index.js",
|
|
5
|
+
"types": "./dist/index.d.ts",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
4
7
|
"files": [
|
|
5
|
-
"
|
|
8
|
+
"dist"
|
|
6
9
|
],
|
|
7
10
|
"publishConfig": {
|
|
8
11
|
"access": "public"
|
|
9
12
|
},
|
|
10
|
-
"exports": {
|
|
11
|
-
".": {
|
|
12
|
-
"types": "./src/index.ts",
|
|
13
|
-
"import": "./src/index.ts",
|
|
14
|
-
"require": "./src/index.ts",
|
|
15
|
-
"default": "./src/index.ts"
|
|
16
|
-
},
|
|
17
|
-
"./package.json": "./package.json"
|
|
18
|
-
},
|
|
19
13
|
"scripts": {
|
|
20
|
-
"dev": "
|
|
21
|
-
"build": "
|
|
14
|
+
"dev": "tsup --watch",
|
|
15
|
+
"build": "tsup",
|
|
22
16
|
"test:watch": "jest --watch",
|
|
23
17
|
"test": "jest"
|
|
24
18
|
},
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { BaseService } from '../baseService';
|
|
2
|
-
import { CrexSDK } from '@c-rex/core';
|
|
3
|
-
import { QueryParams } from '@c-rex/types';
|
|
4
|
-
|
|
5
|
-
// Mock CrexSDK
|
|
6
|
-
jest.mock('@c-rex/core', () => ({
|
|
7
|
-
CrexSDK: {
|
|
8
|
-
getInstance: jest.fn().mockReturnValue({
|
|
9
|
-
api: {
|
|
10
|
-
execute: jest.fn()
|
|
11
|
-
},
|
|
12
|
-
logger: {
|
|
13
|
-
log: jest.fn()
|
|
14
|
-
}
|
|
15
|
-
})
|
|
16
|
-
}
|
|
17
|
-
}));
|
|
18
|
-
|
|
19
|
-
describe('BaseService', () => {
|
|
20
|
-
let service: BaseService;
|
|
21
|
-
const mockEndpoint = '/api/test';
|
|
22
|
-
|
|
23
|
-
beforeEach(() => {
|
|
24
|
-
jest.clearAllMocks();
|
|
25
|
-
service = new BaseService(mockEndpoint);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
describe('request', () => {
|
|
29
|
-
it('should make a basic GET request', async () => {
|
|
30
|
-
const mockResponse = { data: { id: 1 } };
|
|
31
|
-
const sdk = CrexSDK.getInstance();
|
|
32
|
-
(sdk.api.execute as jest.Mock).mockResolvedValue(mockResponse);
|
|
33
|
-
|
|
34
|
-
const result = await service['request']({});
|
|
35
|
-
|
|
36
|
-
expect(sdk.api.execute).toHaveBeenCalledWith({
|
|
37
|
-
url: mockEndpoint,
|
|
38
|
-
method: 'get',
|
|
39
|
-
headers: {}
|
|
40
|
-
});
|
|
41
|
-
expect(result).toEqual(mockResponse.data);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('should handle query parameters', async () => {
|
|
45
|
-
const params: QueryParams[] = [
|
|
46
|
-
{ key: 'search', value: 'test' }
|
|
47
|
-
];
|
|
48
|
-
const mockResponse = { data: { id: 1 } };
|
|
49
|
-
const sdk = CrexSDK.getInstance();
|
|
50
|
-
(sdk.api.execute as jest.Mock).mockResolvedValue(mockResponse);
|
|
51
|
-
|
|
52
|
-
await service['request']({ params });
|
|
53
|
-
|
|
54
|
-
expect(sdk.api.execute).toHaveBeenCalledWith({
|
|
55
|
-
url: `${mockEndpoint}?search=test`,
|
|
56
|
-
method: 'get',
|
|
57
|
-
headers: {}
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it('should use custom transformer', async () => {
|
|
62
|
-
const mockResponse = { data: { id: 1 } };
|
|
63
|
-
const transformer = (response: any) => ({ transformed: response.data });
|
|
64
|
-
const sdk = CrexSDK.getInstance();
|
|
65
|
-
(sdk.api.execute as jest.Mock).mockResolvedValue(mockResponse);
|
|
66
|
-
|
|
67
|
-
const result = await service['request']({ transformer });
|
|
68
|
-
|
|
69
|
-
expect(result).toEqual({ transformed: mockResponse.data });
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('should handle errors', async () => {
|
|
73
|
-
const error = new Error('API Error');
|
|
74
|
-
const sdk = CrexSDK.getInstance();
|
|
75
|
-
(sdk.api.execute as jest.Mock).mockRejectedValue(error);
|
|
76
|
-
|
|
77
|
-
await expect(service['request']({})).rejects.toThrow('API Error');
|
|
78
|
-
expect(sdk.logger.log).toHaveBeenCalledWith(
|
|
79
|
-
'error',
|
|
80
|
-
expect.stringContaining('API Error')
|
|
81
|
-
);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it('should support different HTTP methods', async () => {
|
|
85
|
-
const mockResponse = { data: { id: 1 } };
|
|
86
|
-
const sdk = CrexSDK.getInstance();
|
|
87
|
-
(sdk.api.execute as jest.Mock).mockResolvedValue(mockResponse);
|
|
88
|
-
|
|
89
|
-
await service['request']({ method: 'post' });
|
|
90
|
-
|
|
91
|
-
expect(sdk.api.execute).toHaveBeenCalledWith({
|
|
92
|
-
url: mockEndpoint,
|
|
93
|
-
method: 'post',
|
|
94
|
-
headers: {}
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
});
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { DirectoryNodesService } from '../';
|
|
2
|
-
import { CrexSDK } from '@c-rex/core';
|
|
3
|
-
import { informationUnitsDirectories } from '@c-rex/interfaces';
|
|
4
|
-
|
|
5
|
-
jest.mock('@c-rex/core', () => ({
|
|
6
|
-
CrexSDK: {
|
|
7
|
-
getInstance: jest.fn().mockReturnValue({
|
|
8
|
-
api: {
|
|
9
|
-
execute: jest.fn()
|
|
10
|
-
},
|
|
11
|
-
logger: {
|
|
12
|
-
log: jest.fn()
|
|
13
|
-
}
|
|
14
|
-
})
|
|
15
|
-
}
|
|
16
|
-
}));
|
|
17
|
-
|
|
18
|
-
describe('DirectoryNodesService', () => {
|
|
19
|
-
let service: DirectoryNodesService;
|
|
20
|
-
|
|
21
|
-
const LABELS = {
|
|
22
|
-
language: "en",
|
|
23
|
-
value: "test",
|
|
24
|
-
}
|
|
25
|
-
const idShortID = {
|
|
26
|
-
id: "123",
|
|
27
|
-
shortId: "123"
|
|
28
|
-
}
|
|
29
|
-
const DefaultLinksRequest = {
|
|
30
|
-
rel: "rel",
|
|
31
|
-
href: "href",
|
|
32
|
-
method: "method",
|
|
33
|
-
}
|
|
34
|
-
const ITEM: informationUnitsDirectories = {
|
|
35
|
-
labels: [LABELS],
|
|
36
|
-
links: [DefaultLinksRequest],
|
|
37
|
-
class: {
|
|
38
|
-
labels: [LABELS],
|
|
39
|
-
...idShortID
|
|
40
|
-
},
|
|
41
|
-
...idShortID
|
|
42
|
-
};
|
|
43
|
-
const mockDirectoryNode = {
|
|
44
|
-
childNodes: [ITEM],
|
|
45
|
-
parents: [idShortID],
|
|
46
|
-
informationUnits: [idShortID],
|
|
47
|
-
...ITEM,
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
beforeEach(() => {
|
|
51
|
-
jest.clearAllMocks();
|
|
52
|
-
service = new DirectoryNodesService();
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
describe('getItem', () => {
|
|
56
|
-
it('should fetch a directory node by id', async () => {
|
|
57
|
-
const nodeId = '123';
|
|
58
|
-
const sdk = CrexSDK.getInstance();
|
|
59
|
-
(sdk.api.execute as jest.Mock).mockResolvedValue({ data: mockDirectoryNode });
|
|
60
|
-
|
|
61
|
-
const result = await service.getItem(nodeId);
|
|
62
|
-
|
|
63
|
-
expect(sdk.api.execute).toHaveBeenCalledWith({
|
|
64
|
-
url: `DirectoryNodes/${nodeId}`,
|
|
65
|
-
method: 'get',
|
|
66
|
-
headers: {}
|
|
67
|
-
});
|
|
68
|
-
expect(result).toEqual(mockDirectoryNode);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it('should handle errors when fetching directory node', async () => {
|
|
72
|
-
const nodeId = '123';
|
|
73
|
-
const error = new Error('Failed to fetch directory node');
|
|
74
|
-
const sdk = CrexSDK.getInstance();
|
|
75
|
-
(sdk.api.execute as jest.Mock).mockRejectedValue(error);
|
|
76
|
-
|
|
77
|
-
await expect(service.getItem(nodeId)).rejects.toThrow('Failed to fetch directory node');
|
|
78
|
-
expect(sdk.logger.log).toHaveBeenCalledWith(
|
|
79
|
-
'error',
|
|
80
|
-
expect.stringContaining('Failed to fetch directory node')
|
|
81
|
-
);
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
});
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { DocumentTypesService } from '../';
|
|
2
|
-
import { CrexSDK } from '@c-rex/core';
|
|
3
|
-
import { createParams, generateQueryParams } from '@c-rex/utils';
|
|
4
|
-
import { transformDocumentTypes } from '../transforms/documentTypes';
|
|
5
|
-
|
|
6
|
-
jest.mock('@c-rex/core', () => ({
|
|
7
|
-
CrexSDK: {
|
|
8
|
-
getInstance: jest.fn().mockReturnValue({
|
|
9
|
-
api: {
|
|
10
|
-
execute: jest.fn()
|
|
11
|
-
},
|
|
12
|
-
logger: {
|
|
13
|
-
log: jest.fn()
|
|
14
|
-
}
|
|
15
|
-
})
|
|
16
|
-
}
|
|
17
|
-
}));
|
|
18
|
-
|
|
19
|
-
jest.mock('@c-rex/utils', () => ({
|
|
20
|
-
createParams: jest.fn(),
|
|
21
|
-
generateQueryParams: jest.fn()
|
|
22
|
-
}));
|
|
23
|
-
|
|
24
|
-
jest.mock('../transforms/documentTypes', () => ({
|
|
25
|
-
transformDocumentTypes: jest.fn()
|
|
26
|
-
}));
|
|
27
|
-
|
|
28
|
-
describe('DocumentTypesService', () => {
|
|
29
|
-
let service: DocumentTypesService;
|
|
30
|
-
const mockLabels = ['label1', 'label2'];
|
|
31
|
-
|
|
32
|
-
beforeEach(() => {
|
|
33
|
-
jest.clearAllMocks();
|
|
34
|
-
service = new DocumentTypesService();
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
describe('getLabels', () => {
|
|
38
|
-
it('should fetch document type labels with correct parameters', async () => {
|
|
39
|
-
const fields = ['field1', 'field2'];
|
|
40
|
-
const sdk = CrexSDK.getInstance();
|
|
41
|
-
|
|
42
|
-
(createParams as jest.Mock).mockReturnValue([]);
|
|
43
|
-
(generateQueryParams as jest.Mock).mockReturnValue("mockedParams=true");
|
|
44
|
-
(transformDocumentTypes as jest.Mock).mockReturnValue(mockLabels);
|
|
45
|
-
(sdk.api.execute as jest.Mock).mockResolvedValue({ data: mockLabels });
|
|
46
|
-
|
|
47
|
-
const result = await service.getLabels(fields);
|
|
48
|
-
|
|
49
|
-
expect(createParams).toHaveBeenCalledWith(fields, 'Fields');
|
|
50
|
-
|
|
51
|
-
expect(sdk.api.execute).toHaveBeenCalledWith({
|
|
52
|
-
url: 'DocumentTypes/?mockedParams=true',
|
|
53
|
-
method: 'get',
|
|
54
|
-
headers: {},
|
|
55
|
-
});
|
|
56
|
-
expect(transformDocumentTypes).toHaveBeenCalledWith({ data: mockLabels });
|
|
57
|
-
expect(result).toEqual(mockLabels);
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it('should handle errors when fetching labels', async () => {
|
|
61
|
-
const fields = ['field1'];
|
|
62
|
-
const error = new Error('Failed to fetch labels');
|
|
63
|
-
const sdk = CrexSDK.getInstance();
|
|
64
|
-
|
|
65
|
-
(createParams as jest.Mock).mockReturnValue([]);
|
|
66
|
-
(sdk.api.execute as jest.Mock).mockRejectedValue(error);
|
|
67
|
-
|
|
68
|
-
await expect(service.getLabels(fields)).rejects.toThrow('Failed to fetch labels');
|
|
69
|
-
expect(sdk.logger.log).toHaveBeenCalledWith(
|
|
70
|
-
'error',
|
|
71
|
-
expect.stringContaining('Failed to fetch labels')
|
|
72
|
-
);
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
});
|