From d2051f127d7a5550faf9f8fbb482d504400990e0 Mon Sep 17 00:00:00 2001 From: Raed Date: Tue, 18 Jul 2023 17:16:17 +0200 Subject: [PATCH 1/3] fix(recommend): Type MultipleQueriesResponse for recommend --- packages/recommend/src/types/WithRecommendMethods.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/recommend/src/types/WithRecommendMethods.ts b/packages/recommend/src/types/WithRecommendMethods.ts index 48774f212..33cd1f230 100644 --- a/packages/recommend/src/types/WithRecommendMethods.ts +++ b/packages/recommend/src/types/WithRecommendMethods.ts @@ -1,4 +1,4 @@ -import { MultipleQueriesResponse, SearchOptions } from '@algolia/client-search'; +import { SearchOptions, SearchResponse } from '@algolia/client-search'; import { RequestOptions } from '@algolia/transporter'; import { FrequentlyBoughtTogetherQuery } from './FrequentlyBoughtTogetherQuery'; @@ -9,6 +9,16 @@ import { TrendingFacetsQuery } from './TrendingFacetsQuery'; import { TrendingItemsQuery } from './TrendingItemsQuery'; import { TrendingQuery } from './TrendingQuery'; +/** + * This MultipleQueriesResponse type differs from MultipleQueriesResponse imported from @algolia/client-search as it omits "SearchForFacetValuesResponse" in results + */ +export type MultipleQueriesResponse = { + /** + * The list of results. + */ + readonly results: ReadonlyArray>; +}; + export type WithRecommendMethods = TType & { /** * Returns recommendations. From 3216296b88a8135823eb9c7e396a2b38b225912c Mon Sep 17 00:00:00 2001 From: Raed Date: Tue, 18 Jul 2023 17:23:10 +0200 Subject: [PATCH 2/3] change type name from MultipleQueriesResponse to RecommendQueriesResponse --- .../recommend/src/types/WithRecommendMethods.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/recommend/src/types/WithRecommendMethods.ts b/packages/recommend/src/types/WithRecommendMethods.ts index 33cd1f230..a2833670f 100644 --- a/packages/recommend/src/types/WithRecommendMethods.ts +++ b/packages/recommend/src/types/WithRecommendMethods.ts @@ -9,10 +9,7 @@ import { TrendingFacetsQuery } from './TrendingFacetsQuery'; import { TrendingItemsQuery } from './TrendingItemsQuery'; import { TrendingQuery } from './TrendingQuery'; -/** - * This MultipleQueriesResponse type differs from MultipleQueriesResponse imported from @algolia/client-search as it omits "SearchForFacetValuesResponse" in results - */ -export type MultipleQueriesResponse = { +export type RecommendQueriesResponse = { /** * The list of results. */ @@ -26,7 +23,7 @@ export type WithRecommendMethods = TType & { readonly getRecommendations: ( queries: ReadonlyArray, requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; + ) => Readonly>>; /** * Returns [Related Products](https://algolia.com/doc/guides/algolia-ai/recommend/#related-products). @@ -34,7 +31,7 @@ export type WithRecommendMethods = TType & { readonly getRelatedProducts: ( queries: readonly RelatedProductsQuery[], requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; + ) => Readonly>>; /** * Returns [Frequently Bought Together](https://algolia.com/doc/guides/algolia-ai/recommend/#frequently-bought-together) products. @@ -42,7 +39,7 @@ export type WithRecommendMethods = TType & { readonly getFrequentlyBoughtTogether: ( queries: readonly FrequentlyBoughtTogetherQuery[], requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; + ) => Readonly>>; /** * Returns trending items @@ -50,7 +47,7 @@ export type WithRecommendMethods = TType & { readonly getTrendingItems: ( queries: readonly TrendingItemsQuery[], requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; + ) => Readonly>>; /** * Returns trending items per facet @@ -58,7 +55,7 @@ export type WithRecommendMethods = TType & { readonly getTrendingFacets: ( queries: readonly TrendingFacetsQuery[], requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; + ) => Readonly>>; /** * Returns Looking Similar @@ -66,5 +63,5 @@ export type WithRecommendMethods = TType & { readonly getLookingSimilar: ( queries: readonly LookingSimilarQuery[], requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; + ) => Readonly>>; }; From bb251cc4c0d34be1d376cd1203c1caba0db8ed27 Mon Sep 17 00:00:00 2001 From: Raed Date: Wed, 19 Jul 2023 15:49:51 +0200 Subject: [PATCH 3/3] add smake test --- .../src/__tests__/getRecommendations.test.ts | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/recommend/src/__tests__/getRecommendations.test.ts b/packages/recommend/src/__tests__/getRecommendations.test.ts index b9c0f4d16..7bb765b65 100644 --- a/packages/recommend/src/__tests__/getRecommendations.test.ts +++ b/packages/recommend/src/__tests__/getRecommendations.test.ts @@ -2,9 +2,21 @@ import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; const recommend = new TestSuite('recommend').recommend; -function createMockedClient() { +function createMockedClient() { const client = recommend('appId', 'apiKey'); - jest.spyOn(client.transporter, 'read').mockImplementation(() => Promise.resolve()); + jest.spyOn(client.transporter, 'read').mockImplementation(() => + Promise.resolve({ + results: [ + { + hits: [ + { + objectID: '1', + }, + ], + }, + ], + }) + ); return client; } @@ -197,4 +209,25 @@ describe('getRecommendations', () => { {} ); }); + + test('returns recommendations results', async () => { + const client = createMockedClient(); + + const recommendations = await client.getRecommendations( + [ + { + model: 'bought-together', + indexName: 'products', + objectID: 'B018APC4LE', + }, + ], + {} + ); + + expect(recommendations.results[0].hits).toEqual([ + { + objectID: '1', + }, + ]); + }); });