Skip to content

Instantly share code, notes, and snippets.

View edharmowongso's full-sized avatar
💭
Work, Spirit & Pray!

Eka P D edharmowongso

💭
Work, Spirit & Pray!
  • Pomona
  • Jakarta
View GitHub Profile
@edharmowongso
edharmowongso / campaign.js
Created September 12, 2020 10:03
Controller File (campaign.js) - Update campaign.js to load model from MongoDB
// Location: controller/campaign.js
const {
models: {
mongo: { campaign: Campaign }
}
} = require('@pomona/pomona2-dbmodels')
const Joi = require('@hapi/joi')
Joi.objectId = require('joi-objectid')(Joi)
@edharmowongso
edharmowongso / campaign.mocha.js
Created September 12, 2020 09:58
Third Part (TDD)
// Location: controller/__tests__/campaign.mocha.js
// LINE CODE 1 - 11 -> https://gist.github.com/edharmowongso/2a052f5b352bbe0dbfeb5a9dce1bdda8
const {
CampaignMockedModules: {
'@pomona/pomona2-dbmodels': {
models: {
mongo: { campaign: Campaign }
}
@edharmowongso
edharmowongso / campaign.mockedModules.js
Last active September 12, 2020 10:00
Create a mock modules file (campaign)
// Location: controller/__tests__/mocks/campaign.mockedModules.js
const proxyquire = require('proxyquire')
const sinon = require('sinon')
const {
mongoose: {
Types: { ObjectId }
}
} = require('mongodb-dbmodels')
@edharmowongso
edharmowongso / campaign.js
Created September 12, 2020 09:37
Controller File (campaign.js) - Update campaign.js to pass the current test
// Location: controller/campaign.js
const Joi = require('@hapi/joi')
Joi.objectId = require('joi-objectid')(Joi)
exports.GetCampaignsByBrandId = async (req, res, next) => {
try {
const validatedQuery = await Joi.validate(
req.query,
Joi.object().keys({
@edharmowongso
edharmowongso / campaign.js
Created September 12, 2020 09:27
Controller File (campaign.js)
// Location: controller/campaign.js
exports.GetCampaignsByBrandId = async (req, res, next) => {
return true
}
@edharmowongso
edharmowongso / campaign.mocha.js
Last active September 12, 2020 09:30
First Part (TDD)
// Location: controller/__tests__/campaign.mocha.js
require('dotenv').config()
const chai = require('chai')
const sinon = require('sinon')
const sinonChai = require('sinon-chai')
const deepEqualInAnyOrder = require('deep-equal-in-any-order')
const { mockReq, mockRes } = require('sinon-express-mock')
const { expect } = chai
@edharmowongso
edharmowongso / campaign.mocha.js
Last active September 12, 2020 09:33
Second Part (TDD)
// Location: controller/__tests__/campaign.mocha.js
// LINE CODE 1 - 11 -> https://gist.github.com/edharmowongso/2a052f5b352bbe0dbfeb5a9dce1bdda8
describe.only('Campaign Controller test', function() {
describe('GetCampaignsByBrandId test', function() {
let res,
next,
wrongId = '5d0e0ef4ea9baa7fb13ddsadfa',
fakeId = '5d9afccd7758c65dba4a531c'
@edharmowongso
edharmowongso / logger.js
Created August 23, 2020 10:41
Library utils (logger.js)
// Located at app/lib/logger.js
const { log, error, warn } = console
class Log {
constructor(message) {
this.message = message
}
Write() {
@edharmowongso
edharmowongso / logger.mocha.js
Last active August 23, 2020 10:39
Prepare all test setup requirement, then define the main test scenario and it's children with using describe and it.
// Located inside __tests__ folder
require('dotenv').config()
// Call the mocked modules
const {
loggerModule: logger
} = require('./mocks/logger.mockedModules')
// Act as the assertion library
@edharmowongso
edharmowongso / logger.mockedModules.js
Last active August 23, 2020 10:43
Setup the mocked modules
// Located at __tests__/mocks/logger.mockedModules.js
// Stubbing required depedencies
const proxyquire = require('proxyquire')
const loggerMockedModules = {}
// Force the "real controller" to use this mocked module
// controller: reporting_log.js
const loggerModule = proxyquire(
'../../reporting_log',