ember-cli-deploy/ember-cli-deploy

View on GitHub
node-tests/unit/tasks/read-config-test.js

Summary

Maintainability
D
2 days
Test Coverage
var ReadConfigTask = require('../../../lib/tasks/read-config');
var assert         = require('../../helpers/assert');
var path           = require('path');

describe('ReadConfigTask', function() {
  describe('#run', function() {
    it('reads from the config file', function(done){
      var project = {
        name: function() {return 'test-project';},
        root: process.cwd(),
        addons: []
      };

      var task = new ReadConfigTask({
        project: project,
        deployTarget: 'development',
        deployConfigFile: 'node-tests/fixtures/config/deploy.js'
      });
      task.run().then(function(config){
        assert.equal(config.build.environment, 'development');
        assert.equal(config.s3.bucket, 'shineonyoucrazy');
        done();
      });
    });

    var configFileNotFoundExceptionPattern = /Deploy config does not exist at/;
    it('throws an exception if deployConfigFile cannot be found', function() {
      var project = {
        name: function() {return 'test-project';},
        root: process.cwd(),
        addons: []
      };

      var fn = function () {
        new ReadConfigTask({
          project: project,
          deployTarget: 'development',
          deployConfigFile: path.join(process.cwd(), 'node-tests/fixtures/config/this-config-does-not-exist.js')
        }).run();
      };

      assert.throws(fn, configFileNotFoundExceptionPattern, 'config file does not exist but exception is not thrown');
    });

    it('accepts an absolute deployConfigFile', function() {
      var project = {
        name: function() {return 'test-project';},
        root: process.cwd(),
        addons: []
      };

      var fn = function () {
        new ReadConfigTask({
          project: project,
          deployTarget: 'development',
          deployConfigFile: path.join(process.cwd(), 'node-tests/fixtures/config/deploy.js')
        }).run();
      };

      assert.doesNotThrow(fn, configFileNotFoundExceptionPattern, 'config file could not be read');
    });

    describe('setting environment variables from .env', function() {
      var project;
      var customDotEnvVars = [
        'OVERRIDDEN',
        'SHARED',
        'ENVTEST'
      ];

      beforeEach(function(){
        customDotEnvVars.forEach(function(dotEnvVar) {
          delete process.env[dotEnvVar];
        });

        project = {
          name: function() {return 'test-project';},
          root: path.join(process.cwd(), 'node-tests/fixtures'),
          addons: []
        };
      });
      it('sets the process.env vars if a .env file exists for deploy environment', function() {
        assert.isUndefined(process.env.ENVTEST);

        var task = new ReadConfigTask({
          project: project,
          deployTarget: 'development',
          deployConfigFile: 'config/deploy.js'
        });
        task.run();

        assert.equal(process.env.ENVTEST, 'SUCCESS');
      });

      it('sets the process.env vars from main .env file', function() {
        assert.isUndefined(process.env.SHARED);

        var task = new ReadConfigTask({
          project: project,
          deployTarget: 'development',
          deployConfigFile: 'config/deploy.js'
        });
        task.run();

        assert.equal(process.env.SHARED, 'shared-key');
      });

      it('overrides vars from main .env file if defined in deploy environment .env file', function() {
        assert.isUndefined(process.env.OVERRIDDEN);

        var task = new ReadConfigTask({
          project: project,
          deployTarget: 'development',
          deployConfigFile: 'config/deploy.js'
        });
        task.run();

        assert.equal(process.env.OVERRIDDEN, 'deploy-env-flavor');
      });
    });


    it('rejects an empty config', function(done) {
      var project = {
        name: function() {return 'test-project';},
        root: process.cwd(),
        addons: []
      };

      var task = new ReadConfigTask({
        project: project,
        deployTarget: 'development',
        deployConfigFile: 'node-tests/fixtures/config/empty.js'
      });
      task.run().then(function(){
        assert.fail('empty config file resolved', 'empty config file rejected');
      }).catch(function(error) {
        assert.match(error, /Config is undefined for/);
        done();
      });
    });
  });

});