From c6ae1f991dcd96aae00e85cb2fe5cb52984abc4b Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 9 Jun 2022 08:27:48 +0200 Subject: [PATCH] MOBILE-4069 tests: Add unit tests for CoreLogger --- src/core/singletons/tests/logger.test.ts | 120 +++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 src/core/singletons/tests/logger.test.ts diff --git a/src/core/singletons/tests/logger.test.ts b/src/core/singletons/tests/logger.test.ts new file mode 100644 index 000000000..702bc0f3b --- /dev/null +++ b/src/core/singletons/tests/logger.test.ts @@ -0,0 +1,120 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* eslint-disable no-console */ + +import { CoreConstants } from '@/core/constants'; +import { CoreBrowser } from '@singletons/browser'; +import { CoreLogger } from '@singletons/logger'; + +describe('CoreLogger singleton', () => { + + beforeEach(() => { + console.log = jest.fn(); + console.info = jest.fn(); + console.warn = jest.fn(); + console.debug = jest.fn(); + console.error = jest.fn(); + }); + + it('adds logs to the console in dev environment', () => { + // Simulate dev environment. + const isTesting = CoreConstants.BUILD.isTesting; + const isProduction = CoreConstants.BUILD.isProduction; + CoreConstants.BUILD.isTesting = false; + CoreConstants.BUILD.isProduction = false; + + const logger = CoreLogger.getInstance('TestName'); + + logger.log('Log message'); + expect(( console.log).mock.calls[0][0]).toContain('TestName: Log message'); + + logger.info('Info message'); + expect(( console.info).mock.calls[0][0]).toContain('TestName: Info message'); + + logger.warn('Warn message'); + expect(( console.warn).mock.calls[0][0]).toContain('TestName: Warn message'); + + logger.debug('Debug message'); + expect(( console.debug).mock.calls[0][0]).toContain('TestName: Debug message'); + + logger.error('Error message'); + expect(( console.error).mock.calls[0][0]).toContain('TestName: Error message'); + + CoreConstants.BUILD.isTesting = isTesting; + CoreConstants.BUILD.isProduction = isProduction; + }); + + it('adds logs to the console if enabled via dev setting', () => { + // Enable logging. + CoreBrowser.setDevelopmentSetting('LoggingEnabled', '1'); + + const logger = CoreLogger.getInstance('TestName'); + + logger.log('Log message'); + expect(( console.log).mock.calls[0][0]).toContain('TestName: Log message'); + + logger.info('Info message'); + expect(( console.info).mock.calls[0][0]).toContain('TestName: Info message'); + + logger.warn('Warn message'); + expect(( console.warn).mock.calls[0][0]).toContain('TestName: Warn message'); + + logger.debug('Debug message'); + expect(( console.debug).mock.calls[0][0]).toContain('TestName: Debug message'); + + logger.error('Error message'); + expect(( console.error).mock.calls[0][0]).toContain('TestName: Error message'); + + CoreBrowser.clearDevelopmentSetting('LoggingEnabled'); + }); + + it('doesn\'t log to the console in testing environment', () => { + // Disable production. + const isProduction = CoreConstants.BUILD.isProduction; + CoreConstants.BUILD.isProduction = false; + + const logger = CoreLogger.getInstance('TestName'); + + logger.log('Log message'); + expect(console.log).not.toHaveBeenCalled(); + + logger.info('Info message'); + expect(console.info).not.toHaveBeenCalled(); + + logger.warn('Warn message'); + expect(console.warn).not.toHaveBeenCalled(); + + logger.debug('Debug message'); + expect(console.debug).not.toHaveBeenCalled(); + + logger.error('Error message'); + expect(console.error).not.toHaveBeenCalled(); + + CoreConstants.BUILD.isProduction = isProduction; + }); + + it('displays a warning in production environment', () => { + // Enable production. + const isProduction = CoreConstants.BUILD.isProduction; + CoreConstants.BUILD.isProduction = true; + + CoreLogger.getInstance('TestName'); + + expect(console.warn).toHaveBeenCalledWith('Log is disabled in production app'); + + CoreConstants.BUILD.isProduction = isProduction; + }); + +});