loggers are created only once, unify logger for unit tests

This commit is contained in:
Moriz Wahl 2022-05-16 16:02:12 +02:00
parent 44c5cb8dc1
commit 5cac5d9cfb
13 changed files with 40 additions and 119 deletions

View File

@ -1,7 +1,6 @@
import axios from 'axios'
import log4js from '@/server/logger'
const logger = log4js.getLogger('http')
import { backendLogger as logger } from '@/server/logger'
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const apiPost = async (url: string, payload: unknown): Promise<any> => {

View File

@ -25,30 +25,6 @@ import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail'
import Decimal from 'decimal.js-light'
import { AdminPendingCreation } from '@entity/AdminPendingCreation'
import { Transaction as DbTransaction } from '@entity/Transaction'
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
import { logger } from './UserResolver'
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
import { getLogger } from '@/server/logger'
jest.mock('@/server/logger', () => {
const originalModule = jest.requireActual('@/server/logger')
return {
__esModule: true,
...originalModule,
getLogger: jest.fn(() => {
return {
addContext: jest.fn(),
trace: jest.fn(),
debug: jest.fn(),
warn: jest.fn(),
info: jest.fn(),
error: jest.fn(),
fatal: jest.fn(),
}
}),
}
})
// mock account activation email to avoid console spam
jest.mock('@/mailer/sendAccountActivationEmail', () => {

View File

@ -1,4 +1,4 @@
import { getLogger } from '@/server/logger'
import { backendLogger as logger } from '@/server/logger'
import { Context, getUser } from '@/server/context'
import { Resolver, Query, Ctx, Authorized } from 'type-graphql'
@ -12,8 +12,6 @@ import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
import { getCustomRepository } from '@dbTools/typeorm'
import { TransactionLinkRepository } from '@repository/TransactionLink'
const logger = getLogger('backend')
@Resolver()
export class BalanceResolver {
@Authorized([RIGHTS.BALANCE])

View File

@ -1,7 +1,7 @@
/* eslint-disable new-cap */
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { getLogger } from '@/server/logger'
import { backendLogger as logger } from '@/server/logger'
import CONFIG from '@/config'
import { Context, getUser } from '@/server/context'
@ -35,8 +35,6 @@ import Decimal from 'decimal.js-light'
import { BalanceResolver } from './BalanceResolver'
const logger = getLogger('backend')
const MEMO_MAX_CHARS = 255
const MEMO_MIN_CHARS = 5

View File

@ -12,28 +12,9 @@ import { User } from '@entity/User'
import CONFIG from '@/config'
import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail'
import { sendResetPasswordEmail } from '@/mailer/sendResetPasswordEmail'
import { printTimeDuration, activationLink, logger } from './UserResolver'
import { printTimeDuration, activationLink } from './UserResolver'
import { getLogger } from '@/server/logger'
jest.mock('@/server/logger', () => {
const originalModule = jest.requireActual('@/server/logger')
return {
__esModule: true,
...originalModule,
getLogger: jest.fn(() => {
return {
addContext: jest.fn(),
trace: jest.fn(),
debug: jest.fn(),
warn: jest.fn(),
info: jest.fn(),
error: jest.fn(),
fatal: jest.fn(),
}
}),
}
})
import { logger } from '@test/testSetup'
// import { klicktippSignIn } from '@/apis/KlicktippController'
@ -77,16 +58,6 @@ afterAll(async () => {
})
describe('UserResolver', () => {
describe('logger', () => {
it('creates a logger', () => {
expect(getLogger).toBeCalledWith('backend')
})
it('adds user context to logger', () => {
expect(logger.addContext).toBeCalledWith('user', 'unknown')
})
})
describe('createUser', () => {
const variables = {
email: 'peter@lustig.de',

View File

@ -1,5 +1,5 @@
import fs from 'fs'
import { getLogger } from '@/server/logger'
import { backendLogger as logger } from '@/server/logger'
import { Context, getUser } from '@/server/context'
import { Resolver, Query, Args, Arg, Authorized, Ctx, UseMiddleware, Mutation } from 'type-graphql'
@ -28,9 +28,6 @@ const sodium = require('sodium-native')
// eslint-disable-next-line @typescript-eslint/no-var-requires
const random = require('random-bigint')
export const logger = getLogger('backend')
logger.addContext('user', 'unknown')
// We will reuse this for changePassword
const isPassword = (password: string): boolean => {
return !!password.match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9 \\t\\n\\r]).{8,}$/)

View File

@ -1,8 +1,8 @@
import { sendEMail, logger } from './sendEMail'
import { sendEMail } from './sendEMail'
import { createTransport } from 'nodemailer'
import CONFIG from '@/config'
import { getLogger } from '@/server/logger'
import { logger } from '@test/testSetup'
CONFIG.EMAIL = false
CONFIG.EMAIL_SMTP_URL = 'EMAIL_SMTP_URL'
@ -10,25 +10,6 @@ CONFIG.EMAIL_SMTP_PORT = '1234'
CONFIG.EMAIL_USERNAME = 'user'
CONFIG.EMAIL_PASSWORD = 'pwd'
jest.mock('@/server/logger', () => {
const originalModule = jest.requireActual('@/server/logger')
return {
__esModule: true,
...originalModule,
getLogger: jest.fn(() => {
return {
addContext: jest.fn(),
trace: jest.fn(),
debug: jest.fn(),
warn: jest.fn(),
info: jest.fn(),
error: jest.fn(),
fatal: jest.fn(),
}
}),
}
})
jest.mock('nodemailer', () => {
return {
__esModule: true,
@ -46,12 +27,6 @@ jest.mock('nodemailer', () => {
describe('sendEMail', () => {
let result: boolean
describe('logger', () => {
it('initializes the logger', () => {
expect(getLogger).toBeCalledWith('backend.mailer.sendEMail')
})
})
describe('config email is false', () => {
beforeEach(async () => {
result = await sendEMail({

View File

@ -1,10 +1,8 @@
import { getLogger } from '@/server/logger'
import { backendLogger as logger } from '@/server/logger'
import { createTransport } from 'nodemailer'
import CONFIG from '@/config'
export const logger = getLogger('backend.mailer.sendEMail')
export const sendEMail = async (emailDef: {
to: string
subject: string

View File

@ -1,10 +1,8 @@
import log4js from '@/server/logger'
import { backendLogger as logger } from '@/server/logger'
import Decimal from 'decimal.js-light'
import { sendEMail } from './sendEMail'
import { transactionReceived } from './text/transactionReceived'
const logger = log4js.getLogger('backend.mailer.sendTransactionReceivedEmail')
export const sendTransactionReceivedEmail = (data: {
senderFirstName: string
senderLastName: string

View File

@ -22,7 +22,7 @@ import schema from '@/graphql/schema'
import { elopageWebhook } from '@/webhook/elopage'
import { Connection } from '@dbTools/typeorm'
import { getLogger } from './logger'
import { apolloLogger } from './logger'
import { Logger } from 'log4js'
// TODO implement
@ -30,14 +30,11 @@ import { Logger } from 'log4js'
type ServerDef = { apollo: ApolloServer; app: Express; con: Connection }
const serverLogger = getLogger('apollo')
const createServer = async (
// eslint-disable-next-line @typescript-eslint/no-explicit-any
context: any = serverContext,
logger: Logger = serverLogger,
logger: Logger = apolloLogger,
): Promise<ServerDef> => {
logger.addContext('user', 'unknown')
logger.debug('createServer...')
// open mysql connection

View File

@ -1,4 +1,4 @@
import log4js, { Logger } from 'log4js'
import log4js from 'log4js'
import CONFIG from '@/config'
import { readFileSync } from 'fs'
@ -9,8 +9,10 @@ options.categories.default.level = CONFIG.LOG_LEVEL
log4js.configure(options)
export const getLogger = (name: string): Logger => {
return log4js.getLogger(name)
}
const apolloLogger = log4js.getLogger('apollo')
const backendLogger = log4js.getLogger('backend')
export default log4js
apolloLogger.addContext('user', 'unknown')
backendLogger.addContext('user', 'unknown')
export { apolloLogger, backendLogger }

View File

@ -1,8 +1,5 @@
import { Migration } from '@entity/Migration'
import log4js from '@/server/logger'
const logger = log4js.getLogger('backend.DBVersion')
logger.addContext('user', 'unknown')
import { backendLogger as logger } from '@/server/logger'
const getDBVersion = async (): Promise<string | null> => {
try {

View File

@ -1,7 +1,22 @@
/* eslint-disable no-console */
import { backendLogger as logger } from '@/server/logger'
// disable console.info for apollo log
// eslint-disable-next-line @typescript-eslint/no-empty-function
console.info = () => {}
jest.setTimeout(1000000)
jest.mock('@/server/logger', () => {
const originalModule = jest.requireActual('@/server/logger')
return {
__esModule: true,
...originalModule,
backendLogger: {
addContext: jest.fn(),
trace: jest.fn(),
debug: jest.fn(),
warn: jest.fn(),
info: jest.fn(),
error: jest.fn(),
fatal: jest.fn(),
},
}
})
export { logger }