@orchesty/connector-heureka-feed 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +190 -0
  3. package/coverage/clover.xml +94 -0
  4. package/coverage/coverage-final.json +5 -0
  5. package/coverage/lcov-report/base.css +224 -0
  6. package/coverage/lcov-report/block-navigation.js +87 -0
  7. package/coverage/lcov-report/favicon.png +0 -0
  8. package/coverage/lcov-report/index.html +146 -0
  9. package/coverage/lcov-report/prettify.css +1 -0
  10. package/coverage/lcov-report/prettify.js +2 -0
  11. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  12. package/coverage/lcov-report/sorter.js +210 -0
  13. package/coverage/lcov-report/src/Connector/HeurekaAvailabilityFeedConnector.ts.html +286 -0
  14. package/coverage/lcov-report/src/Connector/HeurekaProductFeedConnector.ts.html +346 -0
  15. package/coverage/lcov-report/src/Connector/index.html +131 -0
  16. package/coverage/lcov-report/src/HeurekaFeedApplication.ts.html +295 -0
  17. package/coverage/lcov-report/src/index.html +116 -0
  18. package/coverage/lcov-report/test/dataProvider.ts.html +199 -0
  19. package/coverage/lcov-report/test/index.html +116 -0
  20. package/coverage/lcov.info +133 -0
  21. package/dist/Connector/HeurekaAvailabilityFeedConnector.d.ts +32 -0
  22. package/dist/Connector/HeurekaAvailabilityFeedConnector.js +27 -0
  23. package/dist/Connector/HeurekaProductFeedConnector.d.ts +52 -0
  24. package/dist/Connector/HeurekaProductFeedConnector.js +27 -0
  25. package/dist/HeurekaFeedApplication.d.ts +19 -0
  26. package/dist/HeurekaFeedApplication.js +54 -0
  27. package/dist/package.json +23 -0
  28. package/jest.config.js +13 -0
  29. package/package.json +23 -0
  30. package/src/Connector/HeurekaAvailabilityFeedConnector.ts +67 -0
  31. package/src/Connector/HeurekaProductFeedConnector.ts +87 -0
  32. package/src/Connector/__tests__/Data/HeurekaAvailabilityFeedConnector/heurekaAvailabilityResponseMock.xml +22 -0
  33. package/src/Connector/__tests__/Data/HeurekaAvailabilityFeedConnector/input.json +6 -0
  34. package/src/Connector/__tests__/Data/HeurekaAvailabilityFeedConnector/output.json +53 -0
  35. package/src/Connector/__tests__/Data/HeurekaProductFeedConnector/heurekaProductResponseMock.xml +88 -0
  36. package/src/Connector/__tests__/Data/HeurekaProductFeedConnector/input.json +6 -0
  37. package/src/Connector/__tests__/Data/HeurekaProductFeedConnector/output.json +101 -0
  38. package/src/Connector/__tests__/HeurekaAvailabilityFeedConnector.ts +32 -0
  39. package/src/Connector/__tests__/HeurekaProductFeedConnector.ts +32 -0
  40. package/src/HeurekaFeedApplication.ts +70 -0
  41. package/test/dataProvider.ts +38 -0
  42. package/tsconfig.json +8 -0
  43. package/tsconfig.prod.json +13 -0
  44. package/tsconfig.prod.tsbuildinfo +1 -0
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AVAILABILITY_FEED_URL = exports.PRODUCT_FEED_URL = exports.SETTINGS = exports.NAME = void 0;
7
+ const Field_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/Field"));
8
+ const FieldType_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/FieldType"));
9
+ const Form_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/Form"));
10
+ const FormStack_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/FormStack"));
11
+ const ABasicApplication_1 = require("@orchesty/nodejs-sdk/dist/lib/Authorization/Type/Basic/ABasicApplication");
12
+ const RequestDto_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Transport/Curl/RequestDto"));
13
+ const Headers_1 = require("@orchesty/nodejs-sdk/dist/lib/Utils/Headers");
14
+ exports.NAME = 'heureka-feed';
15
+ exports.SETTINGS = 'settings-form';
16
+ exports.PRODUCT_FEED_URL = 'product-feed';
17
+ exports.AVAILABILITY_FEED_URL = 'availability-feed';
18
+ class HeurekaFeedApplication extends ABasicApplication_1.ABasicApplication {
19
+ getName() {
20
+ return exports.NAME;
21
+ }
22
+ getPublicName() {
23
+ return 'Heureka feed';
24
+ }
25
+ getDescription() {
26
+ return 'Heureka is the largest shopping portal and price comparison site on the Czech Internet';
27
+ }
28
+ getLogo() {
29
+ return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK4AAACuCAYAAACvDDbuAAAEtmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjE3NCIKICAgZXhpZjpQaXhlbFlEaW1lbnNpb249IjE3NCIKICAgZXhpZjpDb2xvclNwYWNlPSIxIgogICB0aWZmOkltYWdlV2lkdGg9IjE3NCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTc0IgogICB0aWZmOlJlc29sdXRpb25Vbml0PSIyIgogICB0aWZmOlhSZXNvbHV0aW9uPSIzMDAvMSIKICAgdGlmZjpZUmVzb2x1dGlvbj0iMzAwLzEiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIw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';
30
+ }
31
+ getFormStack() {
32
+ const form = new Form_1.default(exports.SETTINGS, 'Feed settings')
33
+ .addField(new Field_1.default(FieldType_1.default.URL, exports.PRODUCT_FEED_URL, 'Product feed url', undefined, true))
34
+ .addField(new Field_1.default(FieldType_1.default.URL, exports.AVAILABILITY_FEED_URL, 'Availability feed url', undefined, true));
35
+ return new FormStack_1.default().addForm(form);
36
+ }
37
+ isAuthorized(applicationInstall) {
38
+ const productFeed = applicationInstall.getSettings()[exports.SETTINGS][exports.PRODUCT_FEED_URL];
39
+ const availabilityFeed = applicationInstall.getSettings()[exports.SETTINGS][exports.AVAILABILITY_FEED_URL];
40
+ return productFeed && availabilityFeed;
41
+ }
42
+ getRequestDto(dto, applicationInstall, method, url, data) {
43
+ const request = new RequestDto_1.default(url ?? '', method, dto);
44
+ request.setHeaders({
45
+ [Headers_1.CommonHeaders.CONTENT_TYPE]: 'application/xml',
46
+ [Headers_1.CommonHeaders.ACCEPT]: 'application/xml',
47
+ });
48
+ if (data) {
49
+ request.setJsonBody(data);
50
+ }
51
+ return request;
52
+ }
53
+ }
54
+ exports.default = HeurekaFeedApplication;
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@orchesty/connector-heureka-feed",
3
+ "description": "",
4
+ "version": "0.0.0",
5
+ "license": "Apache-2.0",
6
+ "url": "https://github.com/Orchesty/orchesty-nodejs-connectors",
7
+ "repository": "https://github.com/Orchesty/orchesty-nodejs-connectors",
8
+ "scripts": {
9
+ "build": "rm -rf dist && rm -rf tsconfig.prod.tsbuildinfo && tsc -d -p tsconfig.prod.json && cp package.json ./dist/package.json",
10
+ "test": "jest --coverage --forceExit --passWithNoTests",
11
+ "lint": "eslint src test --fix",
12
+ "lint-ci": "eslint src test"
13
+ },
14
+ "keywords": [],
15
+ "author": "info@hanaboso.com",
16
+ "dependencies": {
17
+ "@orchesty/nodejs-sdk": "^4.3.6",
18
+ "fast-xml-parser": "^5.3.3"
19
+ },
20
+ "engines": {
21
+ "node": ">=24"
22
+ }
23
+ }
package/jest.config.js ADDED
@@ -0,0 +1,13 @@
1
+ const baseConfig = require('../../jest.config.js');
2
+
3
+ module.exports = {
4
+ ...baseConfig,
5
+ roots: ["<rootDir>/src"],
6
+ setupFiles: ["<rootDir>/../../.jest/testEnvs.ts"],
7
+ setupFilesAfterEnv: ["<rootDir>/../../.jest/testLifecycle.ts"],
8
+ globalSetup: "<rootDir>/../../.jest/globalSetup.ts",
9
+ moduleNameMapper: {
10
+ "^@orchesty/nodejs-connectors/test/(.*)$": "<rootDir>/../../test/$1",
11
+ "^@orchesty/nodejs-connectors/lib/(.*)$": "<rootDir>/../../lib/$1",
12
+ },
13
+ }
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@orchesty/connector-heureka-feed",
3
+ "description": "",
4
+ "version": "1.0.0",
5
+ "license": "Apache-2.0",
6
+ "url": "https://github.com/Orchesty/orchesty-nodejs-connectors",
7
+ "repository": "https://github.com/Orchesty/orchesty-nodejs-connectors",
8
+ "keywords": [],
9
+ "author": "info@hanaboso.com",
10
+ "dependencies": {
11
+ "@orchesty/nodejs-sdk": "^4.3.6",
12
+ "fast-xml-parser": "^5.3.3"
13
+ },
14
+ "engines": {
15
+ "node": ">=24"
16
+ },
17
+ "scripts": {
18
+ "build": "rm -rf dist && rm -rf tsconfig.prod.tsbuildinfo && tsc -d -p tsconfig.prod.json && cp package.json ./dist/package.json",
19
+ "test": "jest --coverage --forceExit --passWithNoTests",
20
+ "lint": "eslint src test --fix",
21
+ "lint-ci": "eslint src test"
22
+ }
23
+ }
@@ -0,0 +1,67 @@
1
+ import AConnector from '@orchesty/nodejs-sdk/dist/lib/Connector/AConnector';
2
+ import { HttpMethods } from '@orchesty/nodejs-sdk/dist/lib/Transport/HttpMethods';
3
+ import ProcessDto from '@orchesty/nodejs-sdk/dist/lib/Utils/ProcessDto';
4
+ import { XMLParser } from 'fast-xml-parser';
5
+ import { AVAILABILITY_FEED_URL, SETTINGS } from '../HeurekaFeedApplication';
6
+
7
+ export const NAME = 'heureka-availability-feed-connector';
8
+
9
+ export default class HeurekaAvailabilityFeedConnector extends AConnector {
10
+
11
+ public getName(): string {
12
+ return NAME;
13
+ }
14
+
15
+ public async processAction(dto: ProcessDto): Promise<ProcessDto<IOutput>> {
16
+ const appInstall = await this.getApplicationInstallFromProcess(dto);
17
+ const req = await this.getApplication()
18
+ .getRequestDto(
19
+ dto,
20
+ appInstall,
21
+ HttpMethods.GET,
22
+ appInstall.getSettings()[SETTINGS][AVAILABILITY_FEED_URL],
23
+ );
24
+ const resp = await this.getSender()
25
+ .send(req, [200]);
26
+
27
+ const parser = new XMLParser({ attributeNamePrefix: '', ignoreAttributes: false, textNodeName: 'value' });
28
+ const shopItems = parser.parse(resp.getBody()) as IOutput;
29
+
30
+ return dto.setNewJsonData<IOutput>(shopItems);
31
+ }
32
+
33
+ }
34
+
35
+ /* eslint-disable @typescript-eslint/naming-convention */
36
+ export interface IOutput {
37
+ item_list: IList[];
38
+ }
39
+
40
+ export interface IList {
41
+ item: IItem[];
42
+ }
43
+
44
+ export interface IItem {
45
+ stock_quantity: number;
46
+ delivery_time: IDeliveryTime;
47
+ depot: IDepot[];
48
+ id: string;
49
+ }
50
+
51
+ export interface IDeliveryTime {
52
+ value?: string;
53
+ orderDeadline?: string;
54
+ }
55
+
56
+ export interface IDepot {
57
+ stock_quantity?: string;
58
+ id?: string;
59
+ pickup_time?: IPickupTime;
60
+ }
61
+
62
+ export interface IPickupTime {
63
+ value?: string;
64
+ orderDeadline?: string;
65
+ }
66
+
67
+ /* eslint-enable @typescript-eslint/naming-convention */
@@ -0,0 +1,87 @@
1
+ import AConnector from '@orchesty/nodejs-sdk/dist/lib/Connector/AConnector';
2
+ import { HttpMethods } from '@orchesty/nodejs-sdk/dist/lib/Transport/HttpMethods';
3
+ import ProcessDto from '@orchesty/nodejs-sdk/dist/lib/Utils/ProcessDto';
4
+ import { XMLParser } from 'fast-xml-parser';
5
+ import { PRODUCT_FEED_URL, SETTINGS } from '../HeurekaFeedApplication';
6
+
7
+ export const NAME = 'heureka-product-feed-connector';
8
+
9
+ export default class HeurekaProductFeedConnector extends AConnector {
10
+
11
+ public getName(): string {
12
+ return NAME;
13
+ }
14
+
15
+ public async processAction(dto: ProcessDto): Promise<ProcessDto<IOutput>> {
16
+ const appInstall = await this.getApplicationInstallFromProcess(dto);
17
+ const req = await this.getApplication()
18
+ .getRequestDto(
19
+ dto,
20
+ appInstall,
21
+ HttpMethods.GET,
22
+ appInstall.getSettings()[SETTINGS][PRODUCT_FEED_URL],
23
+ );
24
+ const resp = await this.getSender()
25
+ .send(req, [200]);
26
+
27
+ const parser = new XMLParser();
28
+ const shopItems = parser.parse(resp.getBody()) as IOutput;
29
+
30
+ return dto.setNewJsonData<IOutput>(shopItems);
31
+ }
32
+
33
+ }
34
+
35
+ /* eslint-disable @typescript-eslint/naming-convention */
36
+ export interface IOutput {
37
+ SHOPITEM: IShopItem[];
38
+ }
39
+
40
+ export interface IShopItem {
41
+ ITEM_ID: string;
42
+ PRODUCTNAME: string;
43
+ PRODUCT: string;
44
+ DESCRIPTION: string;
45
+ URL: string;
46
+ IMGURL: string;
47
+ IMGURL_ALTERNATIVE: string;
48
+ VIDEO_URL: string;
49
+ PRICE_VAT: number;
50
+ HEUREKA_CPC: number;
51
+ MANUFACTURER: string;
52
+ CATEGORYTEXT: string;
53
+ EAN: string;
54
+ PRODUCTNO: string;
55
+ PARAM: IParam[];
56
+ DELIVERY_DATE: number;
57
+ DELIVERY: IDelivery[];
58
+ ITEMGROUP_ID: string;
59
+ ACCESSORY: string;
60
+ GIFT: string;
61
+ EXTENDED_WARRANTY: IExtendedWarranty;
62
+ SPECIAL_SERVICE: string;
63
+ SALES_VOUCHER: ISalesVoucher;
64
+
65
+ }
66
+
67
+ export interface IParam {
68
+ PARAM_NAME: string;
69
+ VAL: string;
70
+ }
71
+
72
+ export interface IDelivery {
73
+ DELIVERY_ID: string;
74
+ DELIVERY_PRICE: string;
75
+ DELIVERY_PRICE_COD: string;
76
+ }
77
+
78
+ export interface IExtendedWarranty {
79
+ VAL: number;
80
+ DESC: string;
81
+ }
82
+
83
+ export interface ISalesVoucher {
84
+ CODE: string;
85
+ DESC: string;
86
+ }
87
+ /* eslint-enable @typescript-eslint/naming-convention */
@@ -0,0 +1,22 @@
1
+ <item_list>
2
+ <item id="536234275543">
3
+ <stock_quantity>13</stock_quantity>
4
+ <delivery_time orderDeadline="2011-09-10 12:00">2011-09-11 13:00</delivery_time>
5
+ <depot id="434">
6
+ <stock_quantity>2</stock_quantity>
7
+ </depot>
8
+ <depot id="437">
9
+ <pickup_time orderDeadline="2011-09-10 12:00">2011-09-11 18:00</pickup_time>
10
+ </depot>
11
+ </item>
12
+ <item id="536234275547">
13
+ <stock_quantity>15</stock_quantity>
14
+ <delivery_time orderDeadline="2011-09-10 12:00">2011-09-11 13:00</delivery_time>
15
+ <depot id="435">
16
+ <stock_quantity>8</stock_quantity>
17
+ </depot>
18
+ <depot id="438">
19
+ <pickup_time orderDeadline="2011-09-10 12:00">2011-09-11 18:00</pickup_time>
20
+ </depot>
21
+ </item>
22
+ </item_list>
@@ -0,0 +1,6 @@
1
+ {
2
+ "headers": {
3
+ "user": "TestUser"
4
+ },
5
+ "data": {}
6
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "headers": {
3
+ "user": "TestUser"
4
+ },
5
+ "data": {
6
+ "item_list": {
7
+ "item": [
8
+ {
9
+ "delivery_time": {
10
+ "orderDeadline": "2011-09-10 12:00",
11
+ "value": "2011-09-11 13:00"
12
+ },
13
+ "depot": [
14
+ {
15
+ "id": "434",
16
+ "stock_quantity": 2
17
+ },
18
+ {
19
+ "id": "437",
20
+ "pickup_time": {
21
+ "orderDeadline": "2011-09-10 12:00",
22
+ "value": "2011-09-11 18:00"
23
+ }
24
+ }
25
+ ],
26
+ "id": "536234275543",
27
+ "stock_quantity": 13
28
+ },
29
+ {
30
+ "delivery_time": {
31
+ "orderDeadline": "2011-09-10 12:00",
32
+ "value": "2011-09-11 13:00"
33
+ },
34
+ "depot": [
35
+ {
36
+ "id": "435",
37
+ "stock_quantity": 8
38
+ },
39
+ {
40
+ "id": "438",
41
+ "pickup_time": {
42
+ "orderDeadline": "2011-09-10 12:00",
43
+ "value": "2011-09-11 18:00"
44
+ }
45
+ }
46
+ ],
47
+ "id": "536234275547",
48
+ "stock_quantity": 15
49
+ }
50
+ ]
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,88 @@
1
+ <SHOP>
2
+ <SHOPITEM>
3
+ <ITEM_ID id="AB123nnn">AB123</ITEM_ID>
4
+ <PRODUCTNAME>Nokia 5800 XpressMusic</PRODUCTNAME>
5
+ <PRODUCT>Nokia 5800 XpressMusic</PRODUCT>
6
+ <DESCRIPTION>Klasický s plným dotykovým uživatelským rozhraním</DESCRIPTION>
7
+ <URL>http://obchod.cz/mobily/nokia-5800-xpressmusic</URL>
8
+ <IMGURL>http://obchod.cz/mobily/nokia-5800-xpressmusic/obrazek.jpg</IMGURL>
9
+ <IMGURL_ALTERNATIVE>http://obchod.cz/mobily/nokia-5800-xpressmusic/obrazek2.jpg</IMGURL_ALTERNATIVE>
10
+ <VIDEO_URL>http://www.youtube.com/watch?v=KjR759oWF7w</VIDEO_URL>
11
+ <PRICE_VAT>6000</PRICE_VAT>
12
+ <HEUREKA_CPC>5,8</HEUREKA_CPC>
13
+ <MANUFACTURER>NOKIA</MANUFACTURER>
14
+ <CATEGORYTEXT>Elektronika | Mobilní telefony</CATEGORYTEXT>
15
+ <EAN>6417182041488</EAN>
16
+ <PRODUCTNO>RM-559394</PRODUCTNO>
17
+ <PARAM>
18
+ <PARAM_NAME>Barva</PARAM_NAME>
19
+ <VAL>černá</VAL>
20
+ </PARAM>
21
+ <DELIVERY_DATE>2</DELIVERY_DATE>
22
+ <DELIVERY>
23
+ <DELIVERY_ID>CESKA_POSTA</DELIVERY_ID>
24
+ <DELIVERY_PRICE>120</DELIVERY_PRICE>
25
+ <DELIVERY_PRICE_COD>120</DELIVERY_PRICE_COD>
26
+ </DELIVERY>
27
+ <DELIVERY>
28
+ <DELIVERY_ID>PPL</DELIVERY_ID>
29
+ <DELIVERY_PRICE>90</DELIVERY_PRICE>
30
+ <DELIVERY_PRICE_COD>120</DELIVERY_PRICE_COD>
31
+ </DELIVERY>
32
+ <ITEMGROUP_ID>EF789</ITEMGROUP_ID>
33
+ <ACCESSORY>CD456</ACCESSORY>
34
+ <GIFT>Pouzdro zdarma</GIFT>
35
+ <EXTENDED_WARRANTY>
36
+ <VAL>36</VAL>
37
+ <DESC>Záruka na 36 měsíců</DESC>
38
+ </EXTENDED_WARRANTY>
39
+ <SPECIAL_SERVICE>Aplikace ochranné fólie</SPECIAL_SERVICE>
40
+ <SALES_VOUCHER>
41
+ <CODE>SLEVA20</CODE>
42
+ <DESC>Sleva 20% po zadání kódu do 31.12.2021!</DESC>
43
+ </SALES_VOUCHER>
44
+ </SHOPITEM>
45
+ <SHOPITEM>
46
+ <ITEM_ID>A123</ITEM_ID>
47
+ <PRODUCTNAME>Nokia 5800 XpressMusic</PRODUCTNAME>
48
+ <PRODUCT>Nokia 5800 XpressMusic</PRODUCT>
49
+ <DESCRIPTION>Klasický s plným dotykovým uživatelským rozhraním</DESCRIPTION>
50
+ <URL>http://obchod.cz/mobily/nokia-5800-xpressmusic</URL>
51
+ <IMGURL>http://obchod.cz/mobily/nokia-5800-xpressmusic/obrazek.jpg</IMGURL>
52
+ <IMGURL_ALTERNATIVE>http://obchod.cz/mobily/nokia-5800-xpressmusic/obrazek2.jpg</IMGURL_ALTERNATIVE>
53
+ <VIDEO_URL>http://www.youtube.com/watch?v=KjR759oWF7w</VIDEO_URL>
54
+ <PRICE_VAT>6000</PRICE_VAT>
55
+ <HEUREKA_CPC>5,8</HEUREKA_CPC>
56
+ <MANUFACTURER>NOKIA</MANUFACTURER>
57
+ <CATEGORYTEXT>Elektronika | Mobilní telefony</CATEGORYTEXT>
58
+ <EAN>6417182041488</EAN>
59
+ <PRODUCTNO>RM-559394</PRODUCTNO>
60
+ <PARAM>
61
+ <PARAM_NAME>Barva</PARAM_NAME>
62
+ <VAL>černá</VAL>
63
+ </PARAM>
64
+ <DELIVERY_DATE>2</DELIVERY_DATE>
65
+ <DELIVERY>
66
+ <DELIVERY_ID>CESKA_POSTA</DELIVERY_ID>
67
+ <DELIVERY_PRICE>120</DELIVERY_PRICE>
68
+ <DELIVERY_PRICE_COD>120</DELIVERY_PRICE_COD>
69
+ </DELIVERY>
70
+ <DELIVERY>
71
+ <DELIVERY_ID>PPL</DELIVERY_ID>
72
+ <DELIVERY_PRICE>90</DELIVERY_PRICE>
73
+ <DELIVERY_PRICE_COD>120</DELIVERY_PRICE_COD>
74
+ </DELIVERY>
75
+ <ITEMGROUP_ID>EF789</ITEMGROUP_ID>
76
+ <ACCESSORY>CD456</ACCESSORY>
77
+ <GIFT>Pouzdro zdarma</GIFT>
78
+ <EXTENDED_WARRANTY>
79
+ <VAL>36</VAL>
80
+ <DESC>Záruka na 36 měsíců</DESC>
81
+ </EXTENDED_WARRANTY>
82
+ <SPECIAL_SERVICE>Aplikace ochranné fólie</SPECIAL_SERVICE>
83
+ <SALES_VOUCHER>
84
+ <CODE>SLEVA20</CODE>
85
+ <DESC>Sleva 20% po zadání kódu do 31.12.2021!</DESC>
86
+ </SALES_VOUCHER>
87
+ </SHOPITEM>
88
+ </SHOP>
@@ -0,0 +1,6 @@
1
+ {
2
+ "headers": {
3
+ "user": "TestUser"
4
+ },
5
+ "data": {}
6
+ }
@@ -0,0 +1,101 @@
1
+ {
2
+ "headers": {
3
+ "user": "TestUser"
4
+ },
5
+ "data": {
6
+ "SHOP": {
7
+ "SHOPITEM": [
8
+ {
9
+ "ACCESSORY": "CD456",
10
+ "CATEGORYTEXT": "Elektronika | Mobilní telefony",
11
+ "DELIVERY": [
12
+ {
13
+ "DELIVERY_ID": "CESKA_POSTA",
14
+ "DELIVERY_PRICE": 120,
15
+ "DELIVERY_PRICE_COD": 120
16
+ },
17
+ {
18
+ "DELIVERY_ID": "PPL",
19
+ "DELIVERY_PRICE": 90,
20
+ "DELIVERY_PRICE_COD": 120
21
+ }
22
+ ],
23
+ "DELIVERY_DATE": 2,
24
+ "DESCRIPTION": "Klasický s plným dotykovým uživatelským rozhraním",
25
+ "EAN": 6417182041488,
26
+ "EXTENDED_WARRANTY": {
27
+ "DESC": "Záruka na 36 měsíců",
28
+ "VAL": 36
29
+ },
30
+ "GIFT": "Pouzdro zdarma",
31
+ "HEUREKA_CPC": "5,8",
32
+ "IMGURL": "http://obchod.cz/mobily/nokia-5800-xpressmusic/obrazek.jpg",
33
+ "IMGURL_ALTERNATIVE": "http://obchod.cz/mobily/nokia-5800-xpressmusic/obrazek2.jpg",
34
+ "ITEMGROUP_ID": "EF789",
35
+ "ITEM_ID": "AB123",
36
+ "MANUFACTURER": "NOKIA",
37
+ "PARAM": {
38
+ "PARAM_NAME": "Barva",
39
+ "VAL": "černá"
40
+ },
41
+ "PRICE_VAT": 6000,
42
+ "PRODUCT": "Nokia 5800 XpressMusic",
43
+ "PRODUCTNAME": "Nokia 5800 XpressMusic",
44
+ "PRODUCTNO": "RM-559394",
45
+ "SALES_VOUCHER": {
46
+ "CODE": "SLEVA20",
47
+ "DESC": "Sleva 20% po zadání kódu do 31.12.2021!"
48
+ },
49
+ "SPECIAL_SERVICE": "Aplikace ochranné fólie",
50
+ "URL": "http://obchod.cz/mobily/nokia-5800-xpressmusic",
51
+ "VIDEO_URL": "http://www.youtube.com/watch?v=KjR759oWF7w"
52
+ },
53
+ {
54
+ "ACCESSORY": "CD456",
55
+ "CATEGORYTEXT": "Elektronika | Mobilní telefony",
56
+ "DELIVERY": [
57
+ {
58
+ "DELIVERY_ID": "CESKA_POSTA",
59
+ "DELIVERY_PRICE": 120,
60
+ "DELIVERY_PRICE_COD": 120
61
+ },
62
+ {
63
+ "DELIVERY_ID": "PPL",
64
+ "DELIVERY_PRICE": 90,
65
+ "DELIVERY_PRICE_COD": 120
66
+ }
67
+ ],
68
+ "DELIVERY_DATE": 2,
69
+ "DESCRIPTION": "Klasický s plným dotykovým uživatelským rozhraním",
70
+ "EAN": 6417182041488,
71
+ "EXTENDED_WARRANTY": {
72
+ "DESC": "Záruka na 36 měsíců",
73
+ "VAL": 36
74
+ },
75
+ "GIFT": "Pouzdro zdarma",
76
+ "HEUREKA_CPC": "5,8",
77
+ "IMGURL": "http://obchod.cz/mobily/nokia-5800-xpressmusic/obrazek.jpg",
78
+ "IMGURL_ALTERNATIVE": "http://obchod.cz/mobily/nokia-5800-xpressmusic/obrazek2.jpg",
79
+ "ITEMGROUP_ID": "EF789",
80
+ "ITEM_ID": "A123",
81
+ "MANUFACTURER": "NOKIA",
82
+ "PARAM": {
83
+ "PARAM_NAME": "Barva",
84
+ "VAL": "černá"
85
+ },
86
+ "PRICE_VAT": 6000,
87
+ "PRODUCT": "Nokia 5800 XpressMusic",
88
+ "PRODUCTNAME": "Nokia 5800 XpressMusic",
89
+ "PRODUCTNO": "RM-559394",
90
+ "SALES_VOUCHER": {
91
+ "CODE": "SLEVA20",
92
+ "DESC": "Sleva 20% po zadání kódu do 31.12.2021!"
93
+ },
94
+ "SPECIAL_SERVICE": "Aplikace ochranné fólie",
95
+ "URL": "http://obchod.cz/mobily/nokia-5800-xpressmusic",
96
+ "VIDEO_URL": "http://www.youtube.com/watch?v=KjR759oWF7w"
97
+ }
98
+ ]
99
+ }
100
+ }
101
+ }
@@ -0,0 +1,32 @@
1
+ import { container } from '@orchesty/nodejs-connectors/test/TestAbstract';
2
+ import { HttpMethods } from '@orchesty/nodejs-sdk/dist/lib/Transport/HttpMethods';
3
+ import { mockOnce } from '@orchesty/nodejs-sdk/dist/test/MockServer';
4
+ import NodeTester from '@orchesty/nodejs-sdk/dist/test/Testers/NodeTester';
5
+ import { readFileSync } from 'fs';
6
+ import init from '../../../test/dataProvider';
7
+ import { NAME as HEUREKA_AVAILABILITY_FEED_CONNECTOR } from '../HeurekaAvailabilityFeedConnector';
8
+
9
+ let tester: NodeTester;
10
+
11
+ describe('Tests for HeurekaAvailabilityFeedConnector', () => {
12
+ beforeAll(() => {
13
+ tester = new NodeTester(container, __filename, false, ['']);
14
+ init();
15
+ });
16
+
17
+ it('process - ok', async () => {
18
+ mockOnce([
19
+ {
20
+ request: {
21
+ method: HttpMethods.GET, url: /https:\/\/path\.to\/xml*/,
22
+ },
23
+ response: {
24
+ code: 200,
25
+ body: readFileSync(
26
+ `${__dirname}/Data/HeurekaAvailabilityFeedConnector/heurekaAvailabilityResponseMock.xml`,
27
+ ),
28
+ },
29
+ }]);
30
+ await tester.testConnector(HEUREKA_AVAILABILITY_FEED_CONNECTOR);
31
+ });
32
+ });
@@ -0,0 +1,32 @@
1
+ import { container } from '@orchesty/nodejs-connectors/test/TestAbstract';
2
+ import { HttpMethods } from '@orchesty/nodejs-sdk/dist/lib/Transport/HttpMethods';
3
+ import { mockOnce } from '@orchesty/nodejs-sdk/dist/test/MockServer';
4
+ import NodeTester from '@orchesty/nodejs-sdk/dist/test/Testers/NodeTester';
5
+ import { readFileSync } from 'fs';
6
+ import init from '../../../test/dataProvider';
7
+ import { NAME as HEUREKA_PRODUCT_FEED_CONNECTOR } from '../HeurekaProductFeedConnector';
8
+
9
+ let tester: NodeTester;
10
+
11
+ describe('Tests for HeurekaProductFeedConnector', () => {
12
+ beforeAll(() => {
13
+ tester = new NodeTester(container, __filename, false, ['']);
14
+ init();
15
+ });
16
+
17
+ it('process - ok', async () => {
18
+ mockOnce([
19
+ {
20
+ request: {
21
+ method: HttpMethods.GET, url: /https:\/\/path\.to\/xml*/,
22
+ },
23
+ response: {
24
+ code: 200,
25
+ body: readFileSync(
26
+ `${__dirname}/Data/HeurekaProductFeedConnector/heurekaProductResponseMock.xml`,
27
+ ),
28
+ },
29
+ }]);
30
+ await tester.testConnector(HEUREKA_PRODUCT_FEED_CONNECTOR);
31
+ });
32
+ });