UNPKG

@lableb/javascript-sdk

Version:

Lableb cloud search client for javascript

455 lines (319 loc) 12.9 kB
import { v4 as generateUUID } from 'uuid'; import { generate } from "randomstring"; import { SearchRequestParams } from './search.request.type'; import { LablebRequestBuilder } from '../main/main.request'; import { MESSAGES } from '../../config/messages'; import { createAndTestSearchURL } from '../../utils/test.utils/test.utils'; import { GlobalRequestOptions, LablebRequestBuilderType } from '../main/main.request.type'; describe('Missing required fields', () => { test('missing api key', async () => { try { const options: SearchRequestParams = { query: generate(), platformName: generate(), } const lablebRequest = await LablebRequestBuilder(); await lablebRequest.search(options); throw new Error('unexpected error'); } catch (error) { expect([ MESSAGES.API_KEY_IS_REQUIRED, ]).toContain(error.message); } }); test('missing query', async () => { try { const options: SearchRequestParams = { APIKey: generateUUID(), query: '', platformName: generate(), } const lablebRequest = await LablebRequestBuilder(); await lablebRequest.search(options); throw new Error('unexpected error'); } catch (error) { expect(error.message).toEqual(MESSAGES.QUERY_IS_REQUIRED) } }); test('missing platform name', async () => { try { const options: SearchRequestParams = { APIKey: generateUUID(), query: generate(), platformName: '', } const lablebRequest = await LablebRequestBuilder(); await lablebRequest.search(options); throw new Error('unexpected error'); } catch (error) { expect(error.message).toEqual(MESSAGES.PLATFORM_NAME_IS_REQUIRED) } }); }); describe('Pass required fields and compare', () => { test('passing all required fields', async () => { const searchOptions: SearchRequestParams = { APIKey: generateUUID(), query: generate(), platformName: generate(), } const lablebRequest = await LablebRequestBuilder(); const { params } = await lablebRequest.search(searchOptions); const expectedURL = `${process.env.API_BASE_URL}/projects/${searchOptions.platformName}/indices/${process.env.GLOBAL_DEFAULT_INDEX_NAME}/search/${process.env.GLOBAL_DEFAULT_SEARCH_HANDLER}`; await createAndTestSearchURL({ expectedURL, globalOptions: {}, searchOptions }); expect(params.q).toEqual(searchOptions.query); expect(params.apikey).toEqual(searchOptions.APIKey); }); }); describe('Pass optional fields and compare', () => { test('passing all optional fields', async () => { const searchOptions: SearchRequestParams = { APIKey: generateUUID(), query: generate(), platformName: generate(), searchHandler: generate(), indexName: generate(), userCountry: generate(2).toUpperCase(), limit: 53, sessionId: generate(7), skip: 4, userId: '24', userIp: '172.110.64.4', sort: 'asc test', } const lablebRequest = await LablebRequestBuilder(); const { params } = await lablebRequest.search(searchOptions); const expectedURL = `${process.env.API_BASE_URL}/projects/${searchOptions.platformName}/indices/${searchOptions.indexName}/search/${searchOptions.searchHandler}`; await createAndTestSearchURL({ expectedURL, globalOptions: {}, searchOptions }); expect(params.q).toEqual(searchOptions.query); expect(params.apikey).toEqual(searchOptions.APIKey); expect(params.userCountry).toEqual(searchOptions.userCountry); expect(params.limit).toEqual(searchOptions.limit); expect(params.sessionId).toEqual(searchOptions.sessionId); expect(params.skip).toEqual(searchOptions.skip); expect(params.userId).toEqual(searchOptions.userId); expect(params.userIp).toEqual(searchOptions.userIp); expect(params.sort).toEqual(searchOptions.sort); }); test('passing all optional fields with facets', async () => { const searchOptions: SearchRequestParams = { APIKey: generateUUID(), query: generate(), platformName: generate(), searchHandler: generate(), indexName: generate(), userCountry: generate(2).toUpperCase(), limit: 53, sessionId: generate(7), skip: 4, userId: '24', userIp: '172.110.64.4', sort: 'asc test', facets: { tags: ['greeting', 'lableb'] } } const lablebRequest = await LablebRequestBuilder(); const { params } = await lablebRequest.search(searchOptions); const expectedURL = `${process.env.API_BASE_URL}/projects/${searchOptions.platformName}/indices/${searchOptions.indexName}/search/${searchOptions.searchHandler}?tags=greeting&tags=lableb`; await createAndTestSearchURL({ expectedURL, globalOptions: {}, searchOptions }); expect(params.q).toEqual(searchOptions.query); expect(params.apikey).toEqual(searchOptions.APIKey); expect(params.userCountry).toEqual(searchOptions.userCountry); expect(params.limit).toEqual(searchOptions.limit); expect(params.sessionId).toEqual(searchOptions.sessionId); expect(params.skip).toEqual(searchOptions.skip); expect(params.userId).toEqual(searchOptions.userId); expect(params.userIp).toEqual(searchOptions.userIp); expect(params.sort).toEqual(searchOptions.sort); }); }); describe('Test global/private options', () => { const globalOptions: GlobalRequestOptions = { platformName: generate(), indexName: generate(), APIKey: generateUUID(), searchHandler: generate(), } let lablebRequest: LablebRequestBuilderType; beforeAll(async () => { lablebRequest = await LablebRequestBuilder(globalOptions);; }); test('using global platform name', async () => { const searchOptions: SearchRequestParams = { query: generate(), searchHandler: generate(), indexName: generate(), } const expectedURL = `${process.env.API_BASE_URL}/projects/${globalOptions.platformName}/indices/${searchOptions.indexName}/search/${searchOptions.searchHandler}`; await createAndTestSearchURL({ expectedURL, globalOptions, searchOptions }); }); test('using private platform name', async () => { const searchOptions: SearchRequestParams = { query: generate(), searchHandler: generate(), indexName: generate(), platformName: generate() } const expectedURL = `${process.env.API_BASE_URL}/projects/${searchOptions.platformName}/indices/${searchOptions.indexName}/search/${searchOptions.searchHandler}`; await createAndTestSearchURL({ expectedURL, globalOptions, searchOptions }); }); test('using global search handler', async () => { const searchOptions: SearchRequestParams = { query: generate(), indexName: generate(), platformName: generate(), } const expectedURL = `${process.env.API_BASE_URL}/projects/${searchOptions.platformName}/indices/${searchOptions.indexName}/search/${globalOptions.searchHandler}`; await createAndTestSearchURL({ expectedURL, globalOptions, searchOptions }); }); test('using private search handler', async () => { const searchOptions: SearchRequestParams = { query: generate(), searchHandler: generate(), indexName: generate(), platformName: generate(), } const expectedURL = `${process.env.API_BASE_URL}/projects/${searchOptions.platformName}/indices/${searchOptions.indexName}/search/${searchOptions.searchHandler}`; await createAndTestSearchURL({ expectedURL, globalOptions, searchOptions }); }); test('using global api key', async () => { const searchOptions: SearchRequestParams = { query: generate(), indexName: generate(), platformName: generate(), } const { params } = await lablebRequest.search(searchOptions); expect(params.apikey).toEqual(globalOptions.APIKey); }); test('using private api key', async () => { const searchOptions: SearchRequestParams = { query: generate(), searchHandler: generate(), indexName: generate(), platformName: generate(), APIKey: generateUUID(), } const { params } = await lablebRequest.search(searchOptions); expect(params.apikey).toEqual(searchOptions.APIKey); }); }); describe('Validate bad inputs', () => { test('validate query', async () => { try { const searchOptions: SearchRequestParams = { query: '', platformName: generate(), APIKey: generateUUID() } const lablebRequest = await LablebRequestBuilder(); await lablebRequest.search(searchOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.QUERY_IS_REQUIRED) } }); test('validate user country 1', async () => { try { const searchOptions: SearchRequestParams = { APIKey: generate(), query: generate(), searchHandler: generate(), indexName: generate(), platformName: generate(), userCountry: '', } const lablebRequest = await LablebRequestBuilder(); await lablebRequest.search(searchOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.COUNTRY_NAME_LENGTH_IS_INVALID) } }); test('validate user country 2', async () => { try { const searchOptions: SearchRequestParams = { query: generate(), searchHandler: generate(), indexName: generate(), platformName: generate(), userCountry: 'FAV', } const lablebRequest = await LablebRequestBuilder(); await lablebRequest.search(searchOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.COUNTRY_NAME_LENGTH_IS_INVALID) } }); test('validate user ip', async () => { try { const searchOptions: SearchRequestParams = { query: generate(), searchHandler: generate(), indexName: generate(), platformName: generate(), userIp: '366.125.21.21', } const lablebRequest = await LablebRequestBuilder(); await lablebRequest.search(searchOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.INVALID_IP_ADDRESS) } }); test('validate skip', async () => { try { const searchOptions: SearchRequestParams = { query: generate(), searchHandler: generate(), indexName: generate(), platformName: generate(), skip: 4.5, } const lablebRequest = await LablebRequestBuilder(); await lablebRequest.search(searchOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.SKIP_IS_NOT_INTEGER) } }); test('validate limit', async () => { try { const searchOptions: SearchRequestParams = { query: generate(), searchHandler: generate(), indexName: generate(), platformName: generate(), limit: 4.5, } const lablebRequest = await LablebRequestBuilder(); await lablebRequest.search(searchOptions); } catch (error) { expect(error.message).toEqual(MESSAGES.LIMIT_IS_NOT_INTEGER) } }); });