Skip to content

Commit

Permalink
Addresses handful of bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
osahyoun committed Jan 9, 2018
1 parent 154548f commit d9a7a34
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 26 deletions.
10 changes: 4 additions & 6 deletions lib/dynamodb/eventTypeChecker.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
export const CANCEL_PAYMENT_EVENT = 'PAYMENT_SERVICE:SUBSCRIPTION:DELETE';
export const UPDATE_MEMBER_EVENT = 'MEMBERS_SERVICE:MEMBER:UPDATE';

export function updateMemberEvent(record = {}): boolean {
const { eventName, eventType } = record;
return eventName === 'INSERT' && eventType === UPDATE_MEMBER_EVENT;
export function updateMemberEvent(eventName, record = {}): boolean {
return eventName === 'INSERT' && record.eventType === UPDATE_MEMBER_EVENT;
}
export function cancelPaymentEvent(record = {}): boolean {
const { eventType } = record;
return eventType === CANCEL_PAYMENT_EVENT;
export function cancelPaymentEvent(eventName, record = {}): boolean {
return eventName === 'INSERT' && record.eventType === CANCEL_PAYMENT_EVENT;
}
20 changes: 14 additions & 6 deletions members-service/triggerChampaignMemberUpdate.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,26 @@ const logger = new OperationsLogger({
client: new DocumentClient(),
});

export async function handler(e, ctx, cb, fn = updateMember) {
const [item] = e.Records;
async function update(item, fn = updateMember) {
const record = Converter.unmarshall(item.dynamodb.NewImage);
if (!updateMemberEvent(record)) return cb(null, 'Not a member update event');

if (!updateMemberEvent(item.eventName, record)) {
console.error('ERROR: Not a member update event');
return;
}

try {
const result = await fn(record.data);
logger.updateStatus(record, { champaign: 'SUCCESS' });
return cb(null, result);
} catch (e) {
logger.updateStatus(record, { champaign: 'FAILURE' });
cb(e);
throw e;
}
}

export async function handler(e, ctx, cb, memberUpdater = updateMember) {
e.Records.forEach(item => {
update(item, memberUpdater);
});

cb(null);
}
20 changes: 12 additions & 8 deletions members-service/triggerChampaignMemberUpdate.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,26 @@ import { updateMember } from '../lib/clients/champaign/member';

jest.mock('../lib/dynamodb/operationsLogger');

console.error = () => {};
jest.spyOn(console, 'error');

describe('handler', function() {
test('it is a function', () => {
expect(typeof handler).toEqual('function');
});

test('does not process non-update member events', async () => {
test.only('does not process non-update member events', async () => {
const cb = jest.fn();
await handler(invalidEvent(), null, cb);
return expect(cb).toBeCalledWith(null, 'Not a member update event');
handler(invalidEvent(), null, cb);
return expect(console.error).toBeCalledWith(
'ERROR: Not a member update event'
);
});

test('calls updateMember() with the member data', async () => {
const cb = jest.fn();
test.only('calls updateMember() with the member data', async () => {
const event = validEvent();
const update = jest.fn((...args) => updateMember(...args));
await handler(event, null, cb, update);
handler(event, null, jest.fn(), update);
return expect(update).toHaveBeenCalledWith(
expect.objectContaining({
email: 'vincent@sumofus.org',
Expand All @@ -37,9 +41,9 @@ function validEvent(date) {
return {
Records: [
{
eventName: 'INSERT',
dynamodb: {
NewImage: Converter.marshall({
eventName: 'INSERT',
eventType: UPDATE_MEMBER_EVENT,
id: uuidv1(),
createdAt: date || new Date().toISOString(),
Expand All @@ -60,9 +64,9 @@ function invalidEvent(date = new Date().toISOString()) {
return {
Records: [
{
eventName: 'INSERT',
dynamodb: {
NewImage: Converter.marshall({
eventName: 'INSERT',
eventType: 'INVALID_EVENT',
id: uuidv1(),
createdAt: date || new Date().toISOString(),
Expand Down
3 changes: 2 additions & 1 deletion payments-service/subscriptions-delete-actionkit.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ export const handler = async (e, ctx, cb, fn = cancelRecurringOrders) => {
// Get first item
const [item] = e.Records;
const record = AWS.DynamoDB.Converter.unmarshall(item.dynamodb.NewImage);
if (!cancelPaymentEvent(record)) return cb(null, 'Not a cancel event');
if (!cancelPaymentEvent(item.eventName, record))
return cb(null, 'Not a cancel event');

try {
await fn(record.data.recurringId);
Expand Down
4 changes: 2 additions & 2 deletions payments-service/subscriptions-delete-actionkit.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ function validEvent(date) {
return {
Records: [
{
eventName: 'INSERT',
dynamodb: {
NewImage: marshall({
eventName: 'INSERT',
eventType: CANCEL_PAYMENT_EVENT,
id: uuidv1(),
createdAt: date,
Expand All @@ -77,7 +77,7 @@ function validEvent(date) {
function invalidEvent() {
return {
Records: [
{ dynamodb: { NewImage: { eventName: 'INSERT', eventType: 'INVALID' } } },
{ eventName: 'INSERT', dynamodb: { NewImage: { eventType: 'INVALID' } } },
],
};
}
2 changes: 1 addition & 1 deletion payments-service/subscriptions-delete-champaign.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export const handler = (
const [item] = event.Records;
const record = AWS.DynamoDB.Converter.unmarshall(item.dynamodb.NewImage);

if (!cancelPaymentEvent(record)) {
if (!cancelPaymentEvent(item.eventName, record)) {
return callback(null, 'Not a cancel event');
}
const recurringId = record.data.recurringId;
Expand Down
4 changes: 2 additions & 2 deletions payments-service/subscriptions-delete-champaign.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,9 @@ function validEvent(date) {
return {
Records: [
{
eventName: 'INSERT',
dynamodb: {
NewImage: marshall({
eventName: 'INSERT',
eventType: CANCEL_PAYMENT_EVENT,
id: uuidv1(),
createdAt: date,
Expand All @@ -87,9 +87,9 @@ function notFoundEvent(date) {
return {
Records: [
{
eventName: 'INSERT',
dynamodb: {
NewImage: marshall({
eventName: 'INSERT',
eventType: CANCEL_PAYMENT_EVENT,
id: uuidv1(),
createdAt: date,
Expand Down

0 comments on commit d9a7a34

Please sign in to comment.