Skip to content
This repository was archived by the owner on Oct 16, 2019. It is now read-only.

Commit 3ce884d

Browse files
authored
Merge pull request #116 from zalando-incubator/115-reco-type
feat(Recos): Type param for getRecommendations() added
2 parents 8f3869e + d803db3 commit 3ce884d

File tree

3 files changed

+115
-5
lines changed

3 files changed

+115
-5
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
{
2+
"brand": [ {
3+
"id" : "SO254J000-C00",
4+
"tracking_string" : "TRACKING_STRING",
5+
"name" : "6 PACK - Socken - anthracite/grey",
6+
"brand" : {
7+
"name" : "s.Oliver"
8+
},
9+
"lowest_price" : {
10+
"amount" : 15.95,
11+
"currency" : "EUR"
12+
},
13+
"media" : {
14+
"media_items" : [
15+
{
16+
"type" : "IMAGE_PARTNER",
17+
"path" : "SO/25/4J/00/0C/00/SO254J000-C00@1.1.jpg",
18+
"media_character" : "UNSPECIFIED"
19+
},
20+
{
21+
"type" : "IMAGE",
22+
"path" : "SO/25/4J/00/0C/00/SO254J000-C00@1.1.jpg",
23+
"media_character" : "UNSPECIFIED"
24+
}, {
25+
"type" : "IMAGE",
26+
"path" : "SO/25/4J/00/0C/00/SO254J000-C00@2.1.jpg",
27+
"media_character" : "UNSPECIFIED"
28+
}, {
29+
"type" : "IMAGE",
30+
"path" : "SO/25/4J/00/0C/00/SO254J000-C00@3.1.jpg",
31+
"media_character" : "UNSPECIFIED"
32+
}, {
33+
"type" : "IMAGE",
34+
"path" : "SO/25/4J/00/0C/00/SO254J000-C00@4.1.jpg",
35+
"media_character" : "UNSPECIFIED"
36+
}, {
37+
"type" : "IMAGE",
38+
"path" : "SO/25/4J/00/0C/00/SO254J000-C00@5.1.jpg",
39+
"media_character" : "UNSPECIFIED"
40+
}, {
41+
"type" : "IMAGE",
42+
"path" : "SO/25/4J/00/0C/00/SO254J000-C00@6.1.jpg",
43+
"media_character" : "UNSPECIFIED"
44+
} ]
45+
}
46+
}, {
47+
"id" : "BU182F003-Q11",
48+
"name" : "6 PACK - Füßlinge - black",
49+
"brand" : {
50+
"name" : "Bugatti"
51+
},
52+
"lowest_price" : {
53+
"amount" : 13.95,
54+
"currency" : "EUR"
55+
},
56+
"media" : {
57+
"media_items" : [ {
58+
"type" : "IMAGE",
59+
"path" : "BU/18/2F/00/3Q/11/BU182F003-Q11@4.jpg",
60+
"media_character" : "NON_MODEL"
61+
}, {
62+
"type" : "IMAGE",
63+
"path" : "BU/18/2F/00/3Q/11/BU182F003-Q11@3.jpg",
64+
"media_character" : "NON_MODEL"
65+
} ]
66+
}
67+
}]
68+
}

src/api/__tests__/recommendation_models_tests.js

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,17 @@ import AtlasSDK from '../../index';
66
const fs = require('fs');
77
const path = require('path');
88

9-
const RecommendedJSON = fs.readFileSync(path.join(__dirname, 'data/recommendation_service_response.json'), 'utf8');
9+
const recommendedJSON = fs.readFileSync(path.join(__dirname, 'data/recommendation_service_response.json'), 'utf8');
10+
const recommendedBrandJSON = fs.readFileSync(path.join(__dirname,
11+
'data/recommendation_service_response_for_brand.json'), 'utf8');
1012
const configJson = fs.readFileSync(path.join(__dirname, 'data/config_service_response.json'), 'utf8');
1113

12-
test('Article should be initialized from JSON object', async t => {
14+
test('Recommended articles should be initialized from JSON object', async t => {
1315
fetchMock.get('https://atlas-config-api.dc.zalan.do/api/config/CLIENT_ID-staging.json', configJson);
1416

1517
const url = 'https://catalog_api.com/api/articles/AD112B0F6-A11/recommendations/?client_id=CLIENT_ID&anon_id=1234';
1618

17-
fetchMock.get(url, RecommendedJSON);
19+
fetchMock.get(url, recommendedJSON);
1820

1921
const sdk = await AtlasSDK.configure({
2022
client_id: 'CLIENT_ID',
@@ -45,3 +47,42 @@ test('Article should be initialized from JSON object', async t => {
4547
t.is(recommendedArticles[0].images[1].resolutions.large, imgURL);
4648
t.falsy(recommendedArticles[recommendedArticles.length - 1].trackingString);
4749
});
50+
51+
test('Recommended same brand articles should be initialized from JSON object', async t => {
52+
fetchMock.get('https://atlas-config-api.dc.zalan.do/api/config/CLIENT_ID-staging.json', configJson);
53+
54+
const url = 'https://catalog_api.com/api/articles/AD112B0F6-A11/recommendations/?client_id=CLIENT_ID&anon_id=12345';
55+
56+
fetchMock.get(url, recommendedBrandJSON);
57+
58+
const sdk = await AtlasSDK.configure({
59+
client_id: 'CLIENT_ID',
60+
sales_channel: 'SALES_CHANNEL',
61+
is_sandbox: true
62+
});
63+
64+
const recommendedArticles = await sdk.getRecommendations('AD112B0F6-A11',
65+
{
66+
type: 'brand',
67+
reco_id: '12345',
68+
tracking_String: 'TRACKING_STRING'
69+
}
70+
);
71+
72+
const imgURL = 'https://mosaic01.ztat.net/vgs/media/large/SO/25/4J/00/0C/00/SO254J000-C00@1.1.jpg';
73+
74+
t.is(recommendedArticles[0].id, 'SO254J000-C00');
75+
t.is(recommendedArticles[0].brand.name, 's.Oliver');
76+
t.is(recommendedArticles[0].name, '6 PACK - Socken - anthracite/grey');
77+
t.is(recommendedArticles[0].lowestPrice.amount, 15.95);
78+
t.is(recommendedArticles[0].lowestPrice.currency, 'EUR');
79+
t.is(recommendedArticles[0].images.length, 7);
80+
t.is(recommendedArticles[0].images[0].type, 'IMAGE_PARTNER');
81+
t.is(recommendedArticles[0].images[0].mediaCharacter, 'UNSPECIFIED');
82+
t.is(recommendedArticles[0].images[0].resolutions.large, imgURL);
83+
t.is(recommendedArticles[0].images[1].type, 'IMAGE');
84+
t.is(recommendedArticles[0].images[1].mediaCharacter, 'UNSPECIFIED');
85+
t.is(recommendedArticles[0].images[1].resolutions.large, imgURL);
86+
t.falsy(recommendedArticles[recommendedArticles.length - 1].trackingString);
87+
});
88+

src/api/atlas_sdk_client.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,11 +338,12 @@ class AtlasSDKClient {
338338
*/
339339
getRecommendations(sku, options = {
340340
reco_id: '',
341-
tracking_string: ''
341+
tracking_string: '',
342+
type: ''
342343
}) {
343344
const config = this.config;
344345
const catalogUrl = config.catalogApi.url;
345-
const type = config.recommendations[0].type;
346+
const type = options.type ? options.type : config.recommendations[0].type;
346347
const url = `${catalogUrl}/articles/${sku}/recommendations/?client_id=${config.clientId}&anon_id=${options.reco_id}`; /* eslint max-len: 0 */
347348
const GetRecommendationsEndpoint = {
348349
url: url,

0 commit comments

Comments
 (0)