Skip to content

Commit 1bf885d

Browse files
committed
fix(payment): CHECKOUT-3401 Load order payments using checkout.orderId
1 parent 15d0777 commit 1bf885d

File tree

4 files changed

+27
-50
lines changed

4 files changed

+27
-50
lines changed

src/order/order-action-creator.spec.js

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,14 @@ describe('OrderActionCreator', () => {
132132
});
133133
});
134134

135-
describe('#loadCurrentOrderPayments()', () => {
135+
describe('#loadOrderPayments()', () => {
136136
beforeEach(() => {
137137
jest.spyOn(checkoutClient, 'loadOrder')
138138
.mockReturnValue(Promise.resolve(getResponse(getOrder())));
139139
});
140140

141141
it('emits actions if able to load order', async () => {
142-
const actions = await Observable.from(orderActionCreator.loadCurrentOrderPayments()(store))
142+
const actions = await orderActionCreator.loadOrderPayments(295)
143143
.toArray()
144144
.toPromise();
145145

@@ -154,7 +154,7 @@ describe('OrderActionCreator', () => {
154154
.mockReturnValue(Promise.reject(getErrorResponse()));
155155

156156
const errorHandler = jest.fn((action) => Observable.of(action));
157-
const actions = await Observable.from(orderActionCreator.loadCurrentOrderPayments()(store))
157+
const actions = await orderActionCreator.loadOrderPayments(295)
158158
.catch(errorHandler)
159159
.toArray()
160160
.toPromise();
@@ -167,7 +167,7 @@ describe('OrderActionCreator', () => {
167167
});
168168

169169
it('loads order by using order id from order object', async () => {
170-
await orderActionCreator.loadCurrentOrderPayments()(store)
170+
await orderActionCreator.loadOrderPayments(295)
171171
.toPromise();
172172

173173
expect(checkoutClient.loadOrder).toHaveBeenCalledWith(295, undefined);
@@ -180,25 +180,14 @@ describe('OrderActionCreator', () => {
180180
order: getOrderState(),
181181
});
182182

183-
await orderActionCreator.loadCurrentOrderPayments()(store)
183+
await orderActionCreator.loadOrderPayments(295)
184184
.toPromise();
185185

186186
expect(checkoutClient.loadOrder).toHaveBeenCalledWith(295, undefined);
187187
});
188188

189-
it('throws error if there is no existing order id', async () => {
190-
store = createCheckoutStore();
191-
192-
try {
193-
await orderActionCreator.loadCurrentOrderPayments()(store)
194-
.toPromise();
195-
} catch (error) {
196-
expect(error).toBeInstanceOf(MissingDataError);
197-
}
198-
});
199-
200189
it('loads order only when action is dispatched', async () => {
201-
const action = orderActionCreator.loadCurrentOrderPayments()(store);
190+
const action = orderActionCreator.loadOrderPayments(295);
202191

203192
expect(checkoutClient.loadOrder).not.toHaveBeenCalled();
204193

src/order/order-action-creator.ts

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,18 @@ export default class OrderActionCreator {
3434
}
3535

3636
// TODO: Remove when checkout does not contain unrelated order data.
37-
loadCurrentOrderPayments(options?: RequestOptions): ThunkAction<LoadOrderPaymentsAction, InternalCheckoutSelectors> {
38-
return store => defer(() => {
39-
const orderId = this._getCurrentOrderId(store.getState());
40-
41-
if (!orderId) {
42-
throw new MissingDataError(MissingDataErrorType.MissingOrderId);
43-
}
37+
loadOrderPayments(orderId: number, options?: RequestOptions): Observable<LoadOrderPaymentsAction> {
38+
return new Observable((observer: Observer<LoadOrderPaymentsAction>) => {
39+
observer.next(createAction(OrderActionType.LoadOrderPaymentsRequested));
4440

45-
return this._loadOrderPayments(orderId, options);
41+
this._checkoutClient.loadOrder(orderId, options)
42+
.then(response => {
43+
observer.next(createAction(OrderActionType.LoadOrderPaymentsSucceeded, response.body));
44+
observer.complete();
45+
})
46+
.catch(response => {
47+
observer.error(createErrorAction(OrderActionType.LoadOrderPaymentsFailed, response));
48+
});
4649
});
4750
}
4851

@@ -104,25 +107,10 @@ export default class OrderActionCreator {
104107
);
105108
}
106109

107-
// TODO: Remove when checkout does not contain unrelated order data.
108-
private _loadOrderPayments(orderId: number, options?: RequestOptions): Observable<LoadOrderPaymentsAction> {
109-
return new Observable((observer: Observer<LoadOrderPaymentsAction>) => {
110-
observer.next(createAction(OrderActionType.LoadOrderPaymentsRequested));
111-
112-
this._checkoutClient.loadOrder(orderId, options)
113-
.then(response => {
114-
observer.next(createAction(OrderActionType.LoadOrderPaymentsSucceeded, response.body));
115-
observer.complete();
116-
})
117-
.catch(response => {
118-
observer.error(createErrorAction(OrderActionType.LoadOrderPaymentsFailed, response));
119-
});
120-
});
121-
}
122-
123110
private _getCurrentOrderId(state: InternalCheckoutSelectors): number | undefined {
124111
const order = state.order.getOrder();
125112
const checkout = state.checkout.getCheckout();
113+
126114
return (order && order.orderId) || (checkout && checkout.orderId);
127115
}
128116

src/payment/payment-strategy-action-creator.spec.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,8 @@ describe('PaymentStrategyActionCreator', () => {
209209
jest.spyOn(noPaymentDataStrategy, 'execute')
210210
.mockReturnValue(Promise.resolve(store.getState()));
211211

212-
jest.spyOn(orderActionCreator, 'loadCurrentOrderPayments')
213-
.mockReturnValue(() => Observable.of(createAction(OrderActionType.LoadOrderPaymentsRequested)));
212+
jest.spyOn(orderActionCreator, 'loadOrderPayments')
213+
.mockReturnValue(Observable.of(createAction(OrderActionType.LoadOrderPaymentsRequested)));
214214
});
215215

216216
it('finds payment strategy by method', async () => {
@@ -246,7 +246,7 @@ describe('PaymentStrategyActionCreator', () => {
246246
await Observable.from(actionCreator.execute(payload)(store))
247247
.toPromise();
248248

249-
expect(orderActionCreator.loadCurrentOrderPayments).toHaveBeenCalled();
249+
expect(orderActionCreator.loadOrderPayments).toHaveBeenCalled();
250250
});
251251

252252
it('emits action to load order and notify execution progress', async () => {
@@ -343,8 +343,8 @@ describe('PaymentStrategyActionCreator', () => {
343343
jest.spyOn(strategy, 'finalize')
344344
.mockReturnValue(Promise.resolve(store.getState()));
345345

346-
jest.spyOn(orderActionCreator, 'loadCurrentOrderPayments')
347-
.mockReturnValue((() => Observable.of(createAction(OrderActionType.LoadOrderPaymentsRequested))));
346+
jest.spyOn(orderActionCreator, 'loadOrderPayments')
347+
.mockReturnValue(Observable.of(createAction(OrderActionType.LoadOrderPaymentsRequested)));
348348
});
349349

350350
it('finds payment strategy by method', async () => {
@@ -372,7 +372,7 @@ describe('PaymentStrategyActionCreator', () => {
372372
await Observable.from(actionCreator.finalize()(store))
373373
.toPromise();
374374

375-
expect(orderActionCreator.loadCurrentOrderPayments).toHaveBeenCalled();
375+
expect(orderActionCreator.loadOrderPayments).toHaveBeenCalled();
376376
});
377377

378378
it('emits action to load order and notify finalization progress', async () => {

src/payment/payment-strategy-action-creator.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';
22
import { concat } from 'rxjs/observable/concat';
33
import { empty } from 'rxjs/observable/empty';
4-
import { from } from 'rxjs/observable/from';
54
import { Observable } from 'rxjs/Observable';
65
import { Observer } from 'rxjs/Observer';
76

@@ -174,10 +173,11 @@ export default class PaymentStrategyActionCreator {
174173
}
175174

176175
private _loadOrderPaymentsIfNeeded(store: ReadableCheckoutStore, options?: RequestOptions): Observable<LoadOrderPaymentsAction> {
177-
const checkout = store.getState().checkout.getCheckout();
176+
const state = store.getState();
177+
const checkout = state.checkout.getCheckout();
178178

179179
if (checkout && checkout.orderId) {
180-
return from(this._orderActionCreator.loadCurrentOrderPayments(options)(store));
180+
return this._orderActionCreator.loadOrderPayments(checkout.orderId, options);
181181
}
182182

183183
return empty();

0 commit comments

Comments
 (0)