Skip to content

Commit

Permalink
refactor db module exporting UsersCollection, unit-testing repository
Browse files Browse the repository at this point in the history
  • Loading branch information
christian-fei committed May 22, 2020
1 parent f4edbc0 commit b56b730
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 9 deletions.
6 changes: 3 additions & 3 deletions index.test.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
const test = require('ava')
const sinon = require('sinon')
const db = require('./lib/db')
const { UsersCollection } = require('./lib/db')

const userRepository = require('./lib/user-repository')
const emailService = require('./lib/email-service')
const newsletter = require('.')

test.beforeEach(async () => {
await db.get('users').remove({})
await UsersCollection.remove({})
})

test('sends a newsletter to users that did not yet receive it', async t => {
await db.get('users').insert({ name: 'test', email: '[email protected]', lastEmailSentAt: null })
await UsersCollection.insert({ name: 'test', email: '[email protected]', lastEmailSentAt: null })

sinon.spy(userRepository, 'findNotYetReceivedNewsletter')
sinon.stub(emailService, 'sendTo')
Expand Down
4 changes: 3 additions & 1 deletion lib/db.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
const monk = require('monk')
const db = monk(process.env.MONGO_URL)

module.exports = db
module.exports = {
UsersCollection: db.get('users')
}
4 changes: 2 additions & 2 deletions lib/user-repository.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
const db = require('./db')
const { UsersCollection } = require('./db')

module.exports = {
findNotYetReceivedNewsletter: () => {
return db.get('users').find({
return UsersCollection.find({
lastEmailSentAt: null
})
}
Expand Down
12 changes: 9 additions & 3 deletions lib/user-repository.test.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
const test = require('ava')
const db = require('./db')
const sinon = require('sinon')
const userRepository = require('./user-repository')
const { UsersCollection } = require('./db')

test.beforeEach(async () => {
await db.get('users').remove({})
await UsersCollection.remove({})
})

test('find users that did not yet receive the newsletter', async t => {
await db.get('users').insert({ name: 'test', email: '[email protected]', lastEmailSentAt: null })
await UsersCollection.insert({ name: 'test', email: '[email protected]', lastEmailSentAt: null })

sinon.spy(UsersCollection, 'find')

const users = await userRepository.findNotYetReceivedNewsletter()
t.true(Array.isArray(users))
t.is(users.length, 1)

t.true(UsersCollection.find.calledOnce)
t.true(UsersCollection.find.calledWith({ lastEmailSentAt: null }))
})

0 comments on commit b56b730

Please sign in to comment.