Skip to content

Commit

Permalink
feat(tests): Added missing test cases for LoggerBuilder and index
Browse files Browse the repository at this point in the history
Signed-off-by: Ferdinand Thiessen <[email protected]>
  • Loading branch information
susnux committed Feb 4, 2023
1 parent 07b02c2 commit 5691db8
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 1 deletion.
81 changes: 80 additions & 1 deletion tests/LoggerBuilder.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ describe('detect logging level', () => {
})

describe('without `OC.config.loglevel` (<=NC24)', () => {
afterEach(() => {
// @ts-expect-error
delete window.OC
})
it ('without `OC.debug`', async () => {
setReadyState('loading')
const builder = getLoggerBuilder()
Expand Down Expand Up @@ -73,6 +77,10 @@ describe('detect logging level', () => {
debug: false,
}
})
afterAll(() => {
// @ts-expect-error
delete window.OC
})

it ('already loaded', async () => {
setReadyState('complete')
Expand Down Expand Up @@ -121,5 +129,76 @@ describe('detect logging level', () => {
expect('level' in builder.getContext()).toBe(true)
expect(builder.getContext().level).toBe(LogLevel.Debug)
})

it ('with `OC.debug` override on HTML interactive phase', async () => {
setReadyState('loading');
const builder = getLoggerBuilder()
builder.detectLogLevel()

// Still loading so no level set
expect('level' in builder.getContext()).toBe(false)

// Trigger document loaded
window.OC.debug = true
setReadyState('interactive')
await new Promise(process.nextTick);

// Level should now be set to configured one
expect('level' in builder.getContext()).toBe(true)
expect(builder.getContext().level).toBe(LogLevel.Debug)
})
})
})

test('setApp()', () => {
const builder = getLoggerBuilder()
builder.setApp('myapp')
expect(builder.getContext()).toHaveProperty('app', 'myapp')
})

test('setLogLevel()', () => {
const builder = getLoggerBuilder()
expect(builder.getContext()).not.toHaveProperty('level')
builder.setLogLevel(LogLevel.Warn)
expect(builder.getContext()).toHaveProperty('level', LogLevel.Warn)
})

test('setUid()', () => {
const builder = getLoggerBuilder()
expect(builder.getContext()).not.toHaveProperty('uid')
builder.setUid('myUser')
expect(builder.getContext()).toHaveProperty('uid', 'myUser')
})

describe('detectUser()', () => {
it('without user', () => {
const builder = getLoggerBuilder()
builder.detectUser()
expect(builder.getContext()).not.toHaveProperty('uid')
})

it('with user', async () => {
// @nextcloud/auth caches the current user so we have to reset the modules and set the user before importing it
jest.resetModules()
document.head.setAttribute('data-user', 'myUser')

const { getLoggerBuilder } = await import('./mocks')
const builder = getLoggerBuilder()

builder.detectUser()
expect(builder.getContext()).toHaveProperty('uid', 'myUser')
})
})
})

test('build()', () => {
const builder = getLoggerBuilder()
const logger = builder.setApp('myApp')
.setUid('myUser')
.setLogLevel(LogLevel.Debug)
.build() as MockedLogger

expect(logger).toBeInstanceOf(MockedLogger)
expect(logger.context).toHaveProperty('app', 'myApp')
expect(logger.context).toHaveProperty('uid', 'myUser')
expect(logger.context).toHaveProperty('level', LogLevel.Debug)
})
17 changes: 17 additions & 0 deletions tests/index.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { LogLevel, getLogger, getLoggerBuilder } from '../lib/index'
import { ConsoleLogger } from '../lib/ConsoleLogger'
import { LoggerBuilder } from '../lib/LoggerBuilder'

test('getLoggerBuilder', () => {
const builder = getLoggerBuilder()
expect(builder).toBeInstanceOf(LoggerBuilder)
})

test('getLogger', () => {
const logger = getLogger()
expect(logger).toBeInstanceOf(ConsoleLogger)
})

test('exported LogLevel', () => {
expect(typeof LogLevel === 'object').toBe(true)
})

0 comments on commit 5691db8

Please sign in to comment.