UNPKG

@lableb/javascript-sdk

Version:

Lableb cloud search client for javascript

617 lines (461 loc) 20.4 kB
import { LablebRequestBuilder } from '../main/main.request'; import { v4 as generateUUID } from 'uuid'; import { generate } from "randomstring"; import { MESSAGES } from '../../config/messages'; import { GlobalRequestOptions, LablebRequestBuilderType } from '../main/main.request.type'; import { BatchRecommendFeedbackRequestParams, SingleRecommendFeedbackRequestParams } from './recommend-feedback.request.type'; describe('Missing required fields', () => { test('missing feedback documents', async () => { try { const recommendFeedbackOptions: any = { APIKey: generateUUID(), platformName: generate(), }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.FEEDBACK_DOCUMENTS_ARE_REQUIRED) } }); test('missing feedback documents in batch', async () => { try { const recommendFeedbackOptions: any = { APIKey: generateUUID(), platformName: generate(), }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.batch(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.FEEDBACK_DOCUMENTS_ARE_REQUIRED) } }); test('missing platform name', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { APIKey: generateUUID(), documentFeedback: { sourceId: generate(), targetId: generate(), } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.PLATFORM_NAME_IS_REQUIRED) } }); test('missing platform name in batch', async () => { try { const recommendFeedbackOptions: BatchRecommendFeedbackRequestParams = { APIKey: generateUUID(), documentsFeedbacks: [{ sourceId: generate(), targetId: generate(), }], }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.batch(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.PLATFORM_NAME_IS_REQUIRED) } }); test('missing api key', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generateUUID(), documentFeedback: { sourceId: generate(), targetId: generate(), } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect([ MESSAGES.API_KEY_IS_REQUIRED, ]).toContain(error.message); } }); test('missing api key in batch', async () => { try { const recommendFeedbackOptions: BatchRecommendFeedbackRequestParams = { platformName: generateUUID(), documentsFeedbacks: [{ sourceId: generate(), targetId: generate(), }], }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.batch(recommendFeedbackOptions); } catch (error) { expect([ MESSAGES.API_KEY_IS_REQUIRED, ]).toContain(error.message); } }); }); describe('Passing required fields and compare', () => { test('passing only required fields', async () => { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), documentFeedback: { sourceId: generate(), targetId: generate(), } }; const lablebRequest = await LablebRequestBuilder(); const { url, method, headers, params, body } = await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); const expectedURL = `${process.env.API_BASE_URL}/projects/${recommendFeedbackOptions.platformName}/indices/${process.env.GLOBAL_DEFAULT_INDEX_NAME}/recommend/${process.env.GLOBAL_DEFAULT_RECOMMEND_HANDLER}/feedback/hits`; expect(expectedURL).toEqual(url); expect(method).toEqual('POST'); expect(params.apikey).toEqual(recommendFeedbackOptions.APIKey); expect(body).toEqual([recommendFeedbackOptions.documentFeedback]); }); }); describe('Passing optional fields and compare', () => { test('passing all optional fields', async () => { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: generate(), sourceTitle: generate(), sourceUrl: 'https://example.com', targetId: generate(), targetTitle: generate(), targetUrl: 'https://example.com', itemOrder: 5, sessionId: generate(), userCountry: 'AF', userId: '42', userIp: '192.168.1.1' } }; const lablebRequest = await LablebRequestBuilder(); const { url, method, headers, params, body } = await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); const expectedURL = `${process.env.API_BASE_URL}/projects/${recommendFeedbackOptions.platformName}/indices/${recommendFeedbackOptions.indexName}/recommend/${recommendFeedbackOptions.recommendHandler}/feedback/hits`; expect(expectedURL).toEqual(url); expect(method).toEqual('POST'); expect(params.apikey).toEqual(recommendFeedbackOptions.APIKey); expect(body).toEqual([recommendFeedbackOptions.documentFeedback]); }); }); describe('passing public/private options', () => { const globalOptions: GlobalRequestOptions = { indexName: generate(), APIKey: generateUUID(), recommendHandler: generate(), platformName: generate(), } let lablebRequest: LablebRequestBuilderType; beforeAll(async () => { lablebRequest = await LablebRequestBuilder(globalOptions); }); test('using public index name', async () => { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { APIKey: generateUUID(), documentFeedback: { sourceId: generate(), targetId: generate(), } }; const { url } = await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); const expectedURL = `${process.env.API_BASE_URL}/projects/${globalOptions.platformName}/indices/${globalOptions.indexName}/recommend/${globalOptions.recommendHandler}/feedback/hits`; expect(expectedURL).toEqual(url); }); test('using private index name', async () => { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { indexName: generate(), APIKey: generateUUID(), documentFeedback: { sourceId: generate(), targetId: generate(), } }; const { url } = await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); const expectedURL = `${process.env.API_BASE_URL}/projects/${globalOptions.platformName}/indices/${recommendFeedbackOptions.indexName}/recommend/${globalOptions.recommendHandler}/feedback/hits`; expect(expectedURL).toEqual(url); }); test('using public platform name', async () => { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { APIKey: generateUUID(), documentFeedback: { sourceId: generate(), targetId: generate(), } }; const { url } = await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); const expectedURL = `${process.env.API_BASE_URL}/projects/${globalOptions.platformName}/indices/${globalOptions.indexName}/recommend/${globalOptions.recommendHandler}/feedback/hits`; expect(expectedURL).toEqual(url); }); test('using private platform name', async () => { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), indexName: generate(), APIKey: generateUUID(), documentFeedback: { sourceId: generate(), targetId: generate(), } }; const { url } = await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); const expectedURL = `${process.env.API_BASE_URL}/projects/${recommendFeedbackOptions.platformName}/indices/${recommendFeedbackOptions.indexName}/recommend/${globalOptions.recommendHandler}/feedback/hits`; expect(expectedURL).toEqual(url); }); test('using public recommend handler', async () => { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { APIKey: generateUUID(), documentFeedback: { sourceId: generate(), targetId: generate(), } }; const { url } = await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); const expectedURL = `${process.env.API_BASE_URL}/projects/${globalOptions.platformName}/indices/${globalOptions.indexName}/recommend/${globalOptions.recommendHandler}/feedback/hits`; expect(expectedURL).toEqual(url); }); test('using private recommend handler', async () => { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { recommendHandler: generate(), APIKey: generateUUID(), documentFeedback: { sourceId: generate(), targetId: generate(), } }; const { url } = await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); const expectedURL = `${process.env.API_BASE_URL}/projects/${globalOptions.platformName}/indices/${globalOptions.indexName}/recommend/${recommendFeedbackOptions.recommendHandler}/feedback/hits`; expect(expectedURL).toEqual(url); }); }); describe('Validate bad inputs', () => { test('invalid source id', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: 242.2, targetId: generate(), } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.SOURCE_ID_IS_INVALID_DOCUMENT_ID) } }); test('invalid target id', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: generate(), targetId: 242.2, } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.TARGET_ID_IS_INVALID_DOCUMENT_ID) } }); test('invalid document order', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: generate(), targetId: generate(), itemOrder: 5.2, } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.ITEM_ORDER_IS_NOT_INTEGER) } }); test('invalid document url 1', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: generate(), targetId: generate(), sourceUrl: 'htts;//example.com', } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.URL_IS_NOT_VALID) } }); test('invalid document url 2', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: generate(), targetId: generate(), targetUrl: 'htts;//example.com', } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.URL_IS_NOT_VALID) } }); test('invalid document source title', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: generate(), targetId: generate(), sourceTitle: '' } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.SOURCE_TITLE_LENGTH_IS_INVALID) } }); test('invalid document target title', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: generate(), targetId: generate(), targetTitle: '' } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.TARGET_TITLE_LENGTH_IS_INVALID) } }); test('invalid user id', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: generate(), targetId: generate(), userId: true as any, } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.INVALID_USER_ID) } }); test('invalid user ip', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: generate(), targetId: generate(), userIp: '455.168.1.1' } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.INVALID_IP_ADDRESS) } }); test('invalid user country 1', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: generate(), targetId: generate(), userCountry: '', } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.COUNTRY_NAME_LENGTH_IS_INVALID) } }); test('invalid user country 2', async () => { try { const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: generate(), targetId: generate(), userCountry: 'VSX', } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.COUNTRY_NAME_LENGTH_IS_INVALID) } }); test('source id equal target id', async () => { try { const oneString = generate(); const recommendFeedbackOptions: SingleRecommendFeedbackRequestParams = { platformName: generate(), APIKey: generateUUID(), indexName: generate(), recommendHandler: generate(), documentFeedback: { sourceId: oneString, targetId: oneString, } }; const lablebRequest = await LablebRequestBuilder(); await lablebRequest.feedback.recommend.single(recommendFeedbackOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.TARGET_ID_MUST_BE_DIFFERENT_THAN_SOURCE_ID) } }); });