soldotno/aurora-core

View on GitHub
src/utils/resolve-modules.test.server.js

Summary

Maintainability
A
0 mins
Test Coverage
// Dependencies
import expect from 'expect';
import mockery from 'mockery';

/**
 * Test suite before hook
 * (this is run _once_ before running any of the tests)
 */
before(() => {
  /**
   * Enable mocking of requires
   * using mockery (suppress warning)
   */
  mockery.enable({
    warnOnReplace: false,
    warnOnUnregistered: false
  });
});

/**
 * Test suite after hook
 * (this is run _once_ after running all of the tests)
 */
after(() => {
  /**
   * Disable mocking of requires when done
   */
  mockery.disable();
});

/**
 * The actual test suit(s)
 */
describe('resolveModules()', () => {
  it('should resolve modules recursively', (done) => {
    /**
     * Create a mock for the getModule method
     */
    const getModuleMock = function(type) {
      return Promise.resolve({ type });
    };

    /**
     * Import the unit we want to test
     */
    const resolveModules = require('./resolve-modules').default(getModuleMock);

    /**
     * Create a dummy config to extract styles from
     */
    const dummyConfig = {
      app: {
        type: 'demo-app',
        options: {
          modules: [{
            type: 'demo-hom',
            options: {
              modules: [{
                type: 'demo-module',
                options: {
                  a: 5
                }
              }, {
                type: 'demo-module',
                options: {
                  b: 10
                }
              }, {
                type: 'demo-module',
                options: {
                  c: 15
                }
              }]
            }
          }]
        }
      }
    };

    /**
     * Resolve the modules
     */
    resolveModules(dummyConfig)
    .then((configWithModulesResolved) => {
      /**
       * Do assertations/expectations
       */
      expect(configWithModulesResolved).toEqual({
        app: {
          type: { type: 'demo-app' },
          options: {
            modules: [{
              type: { type: 'demo-hom' },
              options: {
                modules: [{
                  type: { type: 'demo-module' },
                  options: {
                    a: 5
                  }
                }, {
                  type: { type: 'demo-module' },
                  options: {
                    b: 10
                  }
                }, {
                  type: { type: 'demo-module' },
                  options: {
                    c: 15
                  }
                }]
              }
            }]
          }
        }
      });

      /**
       * Tell mocha that we're done testing async
       */
      done();
    });
  });
})