From 114c8d5ebed1cbec672ada860d89dda638f94723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Silke=20Gr=C3=BCber?= <57660644+SGrueber@users.noreply.github.com> Date: Thu, 16 Dec 2021 12:27:33 +0100 Subject: [PATCH] fix: add quote to cart in case no cart exists (#952) --- .../quoting/services/quoting/quoting.service.spec.ts | 8 ++++---- .../quoting/services/quoting/quoting.service.ts | 12 ++++-------- .../quoting/store/quoting/quoting.effects.spec.ts | 6 +++--- .../quoting/store/quoting/quoting.effects.ts | 6 +++--- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/app/extensions/quoting/services/quoting/quoting.service.spec.ts b/src/app/extensions/quoting/services/quoting/quoting.service.spec.ts index 5fc5a4dd3e..c14fedf8ce 100644 --- a/src/app/extensions/quoting/services/quoting/quoting.service.spec.ts +++ b/src/app/extensions/quoting/services/quoting/quoting.service.spec.ts @@ -156,15 +156,15 @@ describe('Quoting Service', () => { describe('addQuoteToBasket', () => { beforeEach(() => { - when(apiService.post(anything(), anything(), anything())).thenReturn(of({})); + when(apiService.post(anything(), anything())).thenReturn(of({})); }); it('should use basket API for adding quotes to basket', done => { - quotingService.addQuoteToBasket('quoteID').subscribe( + quotingService.addQuoteToBasket('basketId', 'quoteID').subscribe( () => { - verify(apiService.post(anything(), anything(), anything())).once(); + verify(apiService.post(anything(), anything())).once(); const [path, body] = capture(apiService.post).last(); - expect(path).toMatchInlineSnapshot(`"baskets/current/items"`); + expect(path).toMatchInlineSnapshot(`"baskets/basketId/items"`); expect(body).toMatchInlineSnapshot(` Object { "quoteID": "quoteID", diff --git a/src/app/extensions/quoting/services/quoting/quoting.service.ts b/src/app/extensions/quoting/services/quoting/quoting.service.ts index fc658e69cf..b8f9be5816 100644 --- a/src/app/extensions/quoting/services/quoting/quoting.service.ts +++ b/src/app/extensions/quoting/services/quoting/quoting.service.ts @@ -6,7 +6,6 @@ import { concatMap, defaultIfEmpty, expand, filter, last, map, mapTo, take } fro import { Link } from 'ish-core/models/link/link.model'; import { ApiService, unpackEnvelope } from 'ish-core/services/api/api.service'; -import { BasketService } from 'ish-core/services/basket/basket.service'; import { QuoteRequestUpdate } from '../../models/quote-request-update/quote-request-update.model'; import { QuotingHelper } from '../../models/quoting/quoting.helper'; @@ -22,11 +21,7 @@ import { @Injectable({ providedIn: 'root' }) export class QuotingService { - constructor( - private apiService: ApiService, - private basketService: BasketService, - private quoteMapper: QuotingMapper - ) {} + constructor(private apiService: ApiService, private quoteMapper: QuotingMapper) {} getQuotes() { return forkJoin([ @@ -100,8 +95,9 @@ export class QuotingService { .pipe(map(data => this.quoteMapper.fromData(data, 'Quote'))); } - addQuoteToBasket(quoteID: string) { - return this.basketService.currentBasketEndpoint().post('items', { quoteID }).pipe(mapTo(quoteID)); + addQuoteToBasket(basketId: string, quoteID: string) { + // ToDo: remove parameter basketId and delegate addQuoteToBasket to the basket service if the basket REST api 1.0 provides this functionality, see #70533 + return this.apiService.post(`baskets/${basketId}/items`, { quoteID }).pipe(mapTo(quoteID)); } createQuoteRequestFromQuote(quoteID: string) { diff --git a/src/app/extensions/quoting/store/quoting/quoting.effects.spec.ts b/src/app/extensions/quoting/store/quoting/quoting.effects.spec.ts index 203aefa091..fbd159d5a0 100644 --- a/src/app/extensions/quoting/store/quoting/quoting.effects.spec.ts +++ b/src/app/extensions/quoting/store/quoting/quoting.effects.spec.ts @@ -180,7 +180,7 @@ describe('Quoting Effects', () => { describe('addQuoteToBasket$', () => { beforeEach(() => { - when(quotingService.addQuoteToBasket(anything())).thenReturn(of('')); + when(quotingService.addQuoteToBasket(anything(), anything())).thenReturn(of('')); }); describe('with basket', () => { @@ -192,7 +192,7 @@ describe('Quoting Effects', () => { actions$ = of(addQuoteToBasket({ id: 'quoteID' })); effects.addQuoteToBasket$.subscribe(() => { - verify(quotingService.addQuoteToBasket('quoteID')).once(); + verify(quotingService.addQuoteToBasket('basketID', 'quoteID')).once(); verify(basketService.createBasket()).never(); done(); }); @@ -209,7 +209,7 @@ describe('Quoting Effects', () => { actions$ = of(addQuoteToBasket({ id: 'quoteID' })); effects.addQuoteToBasket$.subscribe(() => { - verify(quotingService.addQuoteToBasket('quoteID')).once(); + verify(quotingService.addQuoteToBasket('basketID', 'quoteID')).once(); verify(basketService.createBasket()).once(); done(); }); diff --git a/src/app/extensions/quoting/store/quoting/quoting.effects.ts b/src/app/extensions/quoting/store/quoting/quoting.effects.ts index 879c662455..6880595846 100644 --- a/src/app/extensions/quoting/store/quoting/quoting.effects.ts +++ b/src/app/extensions/quoting/store/quoting/quoting.effects.ts @@ -115,15 +115,15 @@ export class QuotingEffects { this.actions$.pipe( ofType(addQuoteToBasket), mapToPayloadProperty('id'), - concatMap(id => + concatMap(quoteId => this.store.pipe( select(getCurrentBasketId), first(), switchMap(basketId => !basketId ? this.basketService.createBasket().pipe(map(basket => basket.id)) : of(basketId) ), - concatMap(() => this.quotingService.addQuoteToBasket(id)), - mergeMapTo([updateBasket({ update: { calculated: true } }), addQuoteToBasketSuccess({ id })]), + concatMap(basketId => this.quotingService.addQuoteToBasket(basketId, quoteId)), + mergeMapTo([updateBasket({ update: { calculated: true } }), addQuoteToBasketSuccess({ id: quoteId })]), mapErrorToAction(loadQuotingFail) ) )