@@ -5376,34 +5376,96 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => {
53765376 expect(tracker.trackRecommendationClick(parametersWithSeedItemIds)).to.equal(true);
53775377 });
53785378
5379- it('Should throw an error when invalid seedItemIds format is provided (number)', () => {
5380- const { tracker } = new ConstructorIO({ apiKey: testApiKey });
5381- const parametersWithInvalidSeedItemIds = {
5379+ it('Should respond with a valid response and convert seedItemIds to array when provided as string', (done) => {
5380+ const { tracker } = new ConstructorIO({
5381+ apiKey: testApiKey,
5382+ fetch: fetchSpy,
5383+ ...requestQueueOptions,
5384+ });
5385+ const parametersWithSeedItemIds = {
5386+ ...requiredParameters,
5387+ seedItemIds: 'item-123',
5388+ };
5389+ tracker.on('success', (responseParams) => {
5390+ const requestParams = helpers.extractBodyParamsFromFetch(fetchSpy);
5391+ // Request
5392+ expect(fetchSpy).to.have.been.called;
5393+ expect(requestParams).to.have.property('seed_item_ids').to.deep.equal(['item-123']);
5394+ // Response
5395+ expect(responseParams).to.have.property('method').to.equal('POST');
5396+ expect(responseParams).to.have.property('message');
5397+ done();
5398+ });
5399+ expect(tracker.trackRecommendationClick(parametersWithSeedItemIds)).to.equal(true);
5400+ });
5401+
5402+ it('Should respond with a valid response and convert seedItemIds to array when provided as number', (done) => {
5403+ const { tracker } = new ConstructorIO({
5404+ apiKey: testApiKey,
5405+ fetch: fetchSpy,
5406+ ...requestQueueOptions,
5407+ });
5408+ const parametersWithSeedItemIds = {
53825409 ...requiredParameters,
53835410 seedItemIds: 123,
53845411 };
5385- expect(tracker.trackRecommendationClick(parametersWithInvalidSeedItemIds)).to.be.an('error');
5386- expect(tracker.trackRecommendationClick(parametersWithInvalidSeedItemIds).message).to.equal('seedItemIds must be an array of strings');
5412+ tracker.on('success', (responseParams) => {
5413+ const requestParams = helpers.extractBodyParamsFromFetch(fetchSpy);
5414+ // Request
5415+ expect(fetchSpy).to.have.been.called;
5416+ expect(requestParams).to.have.property('seed_item_ids').to.deep.equal(['123']);
5417+ // Response
5418+ expect(responseParams).to.have.property('method').to.equal('POST');
5419+ expect(responseParams).to.have.property('message');
5420+ done();
5421+ });
5422+ expect(tracker.trackRecommendationClick(parametersWithSeedItemIds)).to.equal(true);
53875423 });
53885424
5389- it('Should throw an error when invalid seedItemIds format is provided (array with non-strings)', () => {
5390- const { tracker } = new ConstructorIO({ apiKey: testApiKey });
5391- const parametersWithInvalidSeedItemIds = {
5425+ it('Should respond with a valid response and omit seed_item_ids when seedItemIds is empty string', (done) => {
5426+ const { tracker } = new ConstructorIO({
5427+ apiKey: testApiKey,
5428+ fetch: fetchSpy,
5429+ ...requestQueueOptions,
5430+ });
5431+ const parametersWithSeedItemIds = {
53925432 ...requiredParameters,
5393- seedItemIds: ['item-123', 456, 'item-789'] ,
5433+ seedItemIds: '' ,
53945434 };
5395- expect(tracker.trackRecommendationClick(parametersWithInvalidSeedItemIds)).to.be.an('error');
5396- expect(tracker.trackRecommendationClick(parametersWithInvalidSeedItemIds).message).to.equal('seedItemIds must be an array of strings');
5435+ tracker.on('success', (responseParams) => {
5436+ const requestParams = helpers.extractBodyParamsFromFetch(fetchSpy);
5437+ // Request
5438+ expect(fetchSpy).to.have.been.called;
5439+ expect(requestParams).to.not.have.property('seed_item_ids');
5440+ // Response
5441+ expect(responseParams).to.have.property('method').to.equal('POST');
5442+ expect(responseParams).to.have.property('message');
5443+ done();
5444+ });
5445+ expect(tracker.trackRecommendationClick(parametersWithSeedItemIds)).to.equal(true);
53975446 });
53985447
5399- it('Should throw an error when invalid seedItemIds format is provided (object)', () => {
5400- const { tracker } = new ConstructorIO({ apiKey: testApiKey });
5401- const parametersWithInvalidSeedItemIds = {
5448+ it('Should respond with a valid response and omit seed_item_ids when seedItemIds is empty array', (done) => {
5449+ const { tracker } = new ConstructorIO({
5450+ apiKey: testApiKey,
5451+ fetch: fetchSpy,
5452+ ...requestQueueOptions,
5453+ });
5454+ const parametersWithSeedItemIds = {
54025455 ...requiredParameters,
5403- seedItemIds: { id: 'item-123' } ,
5456+ seedItemIds: [] ,
54045457 };
5405- expect(tracker.trackRecommendationClick(parametersWithInvalidSeedItemIds)).to.be.an('error');
5406- expect(tracker.trackRecommendationClick(parametersWithInvalidSeedItemIds).message).to.equal('seedItemIds must be an array of strings');
5458+ tracker.on('success', (responseParams) => {
5459+ const requestParams = helpers.extractBodyParamsFromFetch(fetchSpy);
5460+ // Request
5461+ expect(fetchSpy).to.have.been.called;
5462+ expect(requestParams).to.not.have.property('seed_item_ids');
5463+ // Response
5464+ expect(responseParams).to.have.property('method').to.equal('POST');
5465+ expect(responseParams).to.have.property('message');
5466+ done();
5467+ });
5468+ expect(tracker.trackRecommendationClick(parametersWithSeedItemIds)).to.equal(true);
54075469 });
54085470 });
54095471
0 commit comments