Home Reference Source Test

src/lib/commands/init/installer-logger.test.js

import test from 'ava';
import sinon from 'sinon';

import InstallerLogger from './installer-logger';

const createMockedLogger = () => {
  return new InstallerLogger();
};

test.beforeEach('mock', t => {
  sinon.stub(global.console, 'error');
  sinon.stub(global.console, 'log');
});

test.afterEach.always('unmock', t => {
  global.console.error.restore();
  global.console.log.restore();
});

test.serial('Should create a installer-logger instance', t => {
  const logger = new InstallerLogger();

  t.is(typeof logger.asObserver, 'function');
});

test.serial('Should return observer', t => {
  const logger = new InstallerLogger();

  const observer = logger.asObserver();

  t.is(typeof observer.next, 'function');
  t.is(typeof observer.error, 'function');
});

test.serial('Should log WRITE_USER_GENERETOR_CONFIG_SUCCESS', t => {
  const logger = createMockedLogger();

  const type = 'WRITE_USER_GENERETOR_CONFIG_SUCCESS';
  logger.next({ type });

  t.true(global.console.log.calledWith(sinon.match(/UPDATED/)));
  t.true(global.console.log.calledWith(sinon.match(/package.json/)));
});

test.serial(
  'Should log CREATE_CUSTOM_SEEDER_TEMPLATE_FILE_SKIP_FILE_EXISTS',
  t => {
    const logger = createMockedLogger();

    const type = 'CREATE_CUSTOM_SEEDER_TEMPLATE_FILE_SKIP_FILE_EXISTS';
    const payload = { customSeederTemplateFilename: 'some-filename' };

    logger.next({ type, payload });

    t.true(global.console.log.calledWith(sinon.match(/SKIP/)));
    t.true(global.console.log.calledWith(sinon.match(/are already exists/)));
    t.true(
      global.console.log.calledWith(
        sinon.match(payload.customSeederTemplateFilename)
      )
    );
  }
);

test.serial('Should log CREATE_CUSTOM_SEEDER_TEMPLATE_FILE_SUCCESS', t => {
  const logger = createMockedLogger();

  const type = 'CREATE_CUSTOM_SEEDER_TEMPLATE_FILE_SUCCESS';
  const payload = { customSeederTemplateFilename: 'some-filename' };

  logger.next({ type, payload });

  t.true(global.console.log.calledWith(sinon.match(/CREATED/)));
  t.true(
    global.console.log.calledWith(
      sinon.match(payload.customSeederTemplateFilename)
    )
  );
});

test.serial('Should log CREATE_SEEDERS_FOLDER_SKIP_FOLDER_EXISTS', t => {
  const logger = createMockedLogger();

  const type = 'CREATE_SEEDERS_FOLDER_SKIP_FOLDER_EXISTS';
  const payload = { foldername: 'some-foldername' };

  logger.next({ type, payload });

  t.true(global.console.log.calledWith(sinon.match(/SKIP/)));
  t.true(global.console.log.calledWith(sinon.match(/are already exists/)));
  t.true(global.console.log.calledWith(sinon.match(payload.foldername)));
});

test.serial('Should log CREATE_SEEDERS_FOLDER_SUCCESS', t => {
  const logger = createMockedLogger();

  const type = 'CREATE_SEEDERS_FOLDER_SUCCESS';
  const payload = { foldername: 'some-foldername' };

  logger.next({ type, payload });

  t.true(global.console.log.calledWith(sinon.match(/CREATED/)));
  t.true(global.console.log.calledWith(sinon.match(payload.foldername)));
});

test.serial('Should log WRITE_USER_CONFIG_SKIP_FILE_EXISTS', t => {
  const logger = createMockedLogger();

  const type = 'WRITE_USER_CONFIG_SKIP_FILE_EXISTS';
  const payload = { filename: 'some-filename' };

  logger.next({ type, payload });

  t.true(global.console.log.calledWith(sinon.match(/SKIP/)));
  t.true(global.console.log.calledWith(sinon.match(/are already exists/)));
  t.true(global.console.log.calledWith(sinon.match(payload.filename)));
});

test.serial('Should log WRITE_USER_CONFIG_SUCCESS', t => {
  const logger = createMockedLogger();

  const type = 'WRITE_USER_CONFIG_SUCCESS';
  const payload = { filename: 'some-filename' };

  logger.next({ type, payload });

  t.true(global.console.log.calledWith(sinon.match(/CREATED/)));
  t.true(global.console.log.calledWith(sinon.match(payload.filename)));
});

test.serial('Should log WRITE_USER_GENERETOR_CONFIG_ERROR', t => {
  const logger = createMockedLogger();

  const type = 'WRITE_USER_GENERETOR_CONFIG_ERROR';
  const payload = { error: 'some-error', filepath: 'some-filepath' };

  logger.error({ type, payload });

  t.true(global.console.log.calledWith(sinon.match(/ERROR/)));
  t.true(
    global.console.log.calledWith(sinon.match(/Unable to write config file/))
  );
  t.true(global.console.log.calledWith(sinon.match(payload.filepath)));
  t.true(global.console.error.calledWith(payload.error));
});

test.serial('Should log CREATE_CUSTOM_SEEDER_TEMPLATE_FILE_ERROR', t => {
  const logger = createMockedLogger();

  const type = 'CREATE_CUSTOM_SEEDER_TEMPLATE_FILE_ERROR';
  const payload = {
    error: 'some-error',
    customSeederTemplatePath: 'some-filename',
  };

  logger.error({ type, payload });

  t.true(global.console.log.calledWith(sinon.match(/ERROR/)));
  t.true(
    global.console.log.calledWith(
      sinon.match(/Unable to create custom seeder template/)
    )
  );
  t.true(
    global.console.log.calledWith(sinon.match(payload.customSeederTemplatePath))
  );
  t.true(global.console.error.calledWith(payload.error));
});

test.serial('Should log CREATE_SEEDERS_FOLDER_ERROR', t => {
  const logger = createMockedLogger();

  const type = 'CREATE_SEEDERS_FOLDER_ERROR';
  const payload = { error: 'some-error', folderpath: 'some-folderpath' };

  logger.error({ type, payload });

  t.true(global.console.log.calledWith(sinon.match(/ERROR/)));
  t.true(
    global.console.log.calledWith(
      sinon.match(/Unable to create seeders folder/)
    )
  );
  t.true(global.console.log.calledWith(sinon.match(payload.folderpath)));
  t.true(global.console.error.calledWith(payload.error));
});

test.serial('Should log WRITE_USER_CONFIG_ERROR', t => {
  const logger = createMockedLogger();

  const type = 'WRITE_USER_CONFIG_ERROR';
  const payload = { error: 'some-error', filepath: 'some-filepath' };

  logger.error({ type, payload });

  t.true(global.console.log.calledWith(sinon.match(/ERROR/)));
  t.true(
    global.console.log.calledWith(
      sinon.match(/Unable to write user config file/)
    )
  );
  t.true(global.console.log.calledWith(sinon.match(payload.filepath)));
  t.true(global.console.error.calledWith(payload.error));
});

test.serial('Should log error', t => {
  const logger = createMockedLogger();

  const payload = { error: 'some-error' };

  logger.error({ type: 'some-type', payload });

  t.true(global.console.error.calledWith(payload.error));
});

test.serial('Should log error without inner error', t => {
  const logger = createMockedLogger();

  const payload = {};

  logger.error({ type: 'some-type', payload });

  t.false(global.console.error.called);
});