'use strict';

const { test } = require('ava');
const createLogger = require('./logger');
const logger = require('../logger');

test('should expose a setLoggerProvider function', t => {
    t.true(logger.setLoggerProvider instanceof Function);
});

test('should create logger via custom logger provider', t => {
    const loggerName = 'test';
    const loggerImpl = {
        debug: () => {},
        info: () => {},
        warn: () => {},
        error: () => {},
    };
    const provider = () => loggerImpl;
    logger.setLoggerProvider(provider);

    const log = createLogger(loggerName);

    t.is(log, loggerImpl);
});

test('should require custom logger to implement info', t => {
    const loggerImpl = {
        debug: () => {},
        warn: () => {},
        error: () => {},
    };
    const provider = () => loggerImpl;
    const error = t.throws(() => {
        logger.setLoggerProvider(provider)();
    }, TypeError);
    t.is(error.message, 'Logger must implement info');
});

test('should require custom logger to implement error', t => {
    const loggerImpl = {
        debug: () => {},
        warn: () => {},
        info: () => {},
    };
    const provider = () => loggerImpl;
    const error = t.throws(() => {
        logger.setLoggerProvider(provider)();
    }, TypeError);
    t.is(error.message, 'Logger must implement error');
});