Created
October 22, 2021 23:03
-
-
Save Pyrolistical/433eaa2d5c0bf5d71ca8931fe3f848e8 to your computer and use it in GitHub Desktop.
ecommerce-escalation v1 test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import {jest} from '@jest/globals'; | |
import Service, {InsufficientStock} from './service'; | |
describe('checkout', () => { | |
test('fails when insufficient stock for desired product', async () => { | |
const repository = { | |
findInventoryByProductSku: jest.fn() | |
.mockResolvedValueOnce({ | |
productSku: 'some product sku', | |
stock: 2 | |
}), | |
updateInventoryStockByProductSku: jest.fn(), | |
createOrder: jest.fn() | |
}; | |
const service = Service(repository); | |
await expect(service.checkout([ | |
{ | |
productSku: 'some product sku', | |
quantity: 10 | |
} | |
], 'some shipping address', 'some payment details')).rejects.toThrow(InsufficientStock); | |
expect(repository.findInventoryByProductSku).toHaveBeenNthCalledWith(1, 'some product sku'); | |
expect(repository.updateInventoryStockByProductSku).not.toHaveBeenCalled(); | |
expect(repository.createOrder).not.toHaveBeenCalled(); | |
}); | |
test('creates order when all desired items are in stock', async () => { | |
const repository = { | |
findInventoryByProductSku: jest.fn() | |
.mockResolvedValueOnce({ | |
productSku: 'some product sku', | |
stock: 30 | |
}), | |
updateInventoryStockByProductSku: jest.fn() | |
.mockResolvedValueOnce(), | |
createOrder: jest.fn() | |
.mockResolvedValueOnce('some order id') | |
}; | |
const service = Service(repository); | |
const result = await service.checkout([ | |
{ | |
productSku: 'some product sku', | |
quantity: 10 | |
} | |
], 'some shipping address', 'some payment details'); | |
expect(result).toBe('some order id'); | |
expect(repository.findInventoryByProductSku).toHaveBeenNthCalledWith(1, 'some product sku'); | |
expect(repository.updateInventoryStockByProductSku).toHaveBeenNthCalledWith(1, 'some product sku', 20); | |
expect(repository.createOrder).toHaveBeenNthCalledWith(1, { | |
lineItems: [ | |
{ | |
productSku: 'some product sku', | |
quantity: 10 | |
}, | |
], | |
shippingAddress: 'some shipping address', | |
paymentDetails: 'some payment details' | |
}); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment