@defra-fish/sales-api-service
Version:
Rod Licensing Sales API
69 lines (63 loc) • 2.57 kB
JavaScript
import AwsSdk from 'aws-sdk'
import { PAYMENTS_TABLE } from '../../../config.js'
import { createPaymentJournal, updatePaymentJournal, getPaymentJournal, queryJournalsByTimestamp } from '../payment-journals.service.js'
describe('payment-journals service', () => {
beforeAll(async () => {
PAYMENTS_TABLE.TableName = 'TestTable'
})
describe('createPaymentJournal', () => {
it('calls put on dynamodb', async () => {
await createPaymentJournal('test-id', { some: 'data' })
expect(AwsSdk.DynamoDB.DocumentClient.mockedMethods.put).toHaveBeenCalledWith({
TableName: PAYMENTS_TABLE.TableName,
Item: { id: 'test-id', some: 'data', expires: expect.any(Number) },
ConditionExpression: 'attribute_not_exists(id)'
})
})
})
describe('updatePaymentJournal', () => {
it('calls update on dynamodb', async () => {
await updatePaymentJournal('test-id', { some: 'data' })
expect(AwsSdk.DynamoDB.DocumentClient.mockedMethods.update).toHaveBeenCalledWith({
TableName: PAYMENTS_TABLE.TableName,
Key: { id: 'test-id' },
UpdateExpression: 'SET #expires = :expires,#some = :some',
ExpressionAttributeNames: {
'#expires': 'expires',
'#some': 'some'
},
ExpressionAttributeValues: {
':expires': expect.any(Number),
':some': 'data'
},
ConditionExpression: 'attribute_exists(id)',
ReturnValues: 'ALL_NEW'
})
})
})
describe('getPaymentJournal', () => {
it('calls get on dynamodb', async () => {
await getPaymentJournal('test-id')
expect(AwsSdk.DynamoDB.DocumentClient.mockedMethods.get).toHaveBeenCalledWith({
TableName: PAYMENTS_TABLE.TableName,
Key: { id: 'test-id' },
ConsistentRead: true
})
})
})
describe('queryJournalsByTimestamp', () => {
it('calls query on dynamodb', async () => {
await queryJournalsByTimestamp({ paymentStatus: 'In Progress', from: '2020-05-29T11:44:45.875Z', to: '2020-05-29T11:44:45.875Z' })
expect(AwsSdk.DynamoDB.DocumentClient.mockedMethods.query).toHaveBeenCalledWith({
TableName: PAYMENTS_TABLE.TableName,
IndexName: 'PaymentJournalsByStatusAndTimestamp',
KeyConditionExpression: 'paymentStatus = :paymentStatus AND paymentTimestamp BETWEEN :from AND :to',
ExpressionAttributeValues: {
':from': '2020-05-29T11:44:45.875Z',
':paymentStatus': 'In Progress',
':to': '2020-05-29T11:44:45.875Z'
}
})
})
})
})