UNPKG

5.56 kBJavaScriptView Raw
1var assert = require('assert');
2var async = require('async');
3var shortid = require('shortid');
4var sinon = require('sinon');
5var _ = require('lodash');
6var path = require('path');
7var log = require('../lib/log');
8var request = require('request');
9var debug = require('debug')('4front:cli:test');
10var envCommand = require('../commands/env');
11var mockSpawn = require('./mock-spawn');
12
13require('dash-assert');
14
15describe('env', function() {
16 var self;
17
18 beforeEach(function() {
19 self = this;
20
21 this.program = {
22 virtualApp: {
23 appId: shortid.generate()
24 },
25 virtualAppManifest: {
26 scripts: {}
27 },
28 profile: {
29 url: 'https://apphost.com/',
30 jwt: {
31 token: '23523454'
32 }
33 }
34 };
35
36 sinon.stub(console, 'log', _.noop());
37 });
38
39 afterEach(function() {
40 console.log.restore();
41 });
42
43 describe("set", function() {
44 beforeEach(function() {
45 this.program.subCommand = 'set';
46
47 // Stub the PUT api call to activate the version
48 sinon.stub(request, 'put', function(options, callback) {
49 callback(null, {statusCode: 200}, _.extend({}, options.json));
50 });
51 });
52
53 afterEach(function() {
54 request.put.restore();
55 });
56
57 it('sets global env variable', function(done) {
58 _.extend(this.program, {
59 key: 'API_KEY',
60 value: 'some_value'
61 });
62
63 envCommand(this.program, function(err) {
64 if (err) return done(err);
65
66 assert.isTrue(request.put.calledWith(sinon.match({
67 url: sinon.match('/apps/' + self.program.virtualApp.appId + '/env/' + self.program.key),
68 json: {value: self.program.value}
69 })));
70
71 done();
72 });
73 });
74
75 it('sets virtual env specific variable', function(done) {
76 _.extend(this.program, {
77 key: 'API_KEY',
78 value: 'some_value',
79 virtualEnv: 'production'
80 });
81
82 envCommand(this.program, function(err) {
83 if (err) return done(err);
84
85 assert.isTrue(request.put.calledWith(sinon.match({
86 url: sinon.match('/apps/' + self.program.virtualApp.appId + '/env/production/' + self.program.key),
87 json: {value: self.program.value}
88 })));
89
90 done();
91 });
92
93 it('sets encrypted value', function(done) {
94 _.extend(this.program, {
95 key: 'API_KEY',
96 value: 'some_value',
97 encrypted: true,
98 virtualEnv: 'production'
99 });
100
101 envCommand(this.program, function(err) {
102 if (err) return done(err);
103
104 assert.isTrue(request.put.calledWith(sinon.match({
105 url: sinon.match('/apps/' + self.program.virtualApp.appId + '/env/production/' + self.program.key),
106 json: {value: self.program.value, encrypted: true}
107 })));
108
109 done();
110 });
111 });
112 });
113
114 it('invalid env variable key', function(done) {
115 _.extend(this.program, {
116 key: '$invalid%key',
117 value: 'some_value'
118 });
119
120 envCommand(this.program, function(err) {
121 assert.isNotNull(err);
122 assert.isTrue(/Environment variable keys can only contain letters/.test(err));
123
124 done();
125 });
126 });
127 });
128
129 // Test listing the environment variables
130 describe('list', function() {
131 beforeEach(function() {
132 this.program.subCommand = 'list';
133 this.env = {
134 _global: {
135 KEY1: 'key1'
136 },
137 production: {
138 KEY2: 'key2'
139 }
140 };
141
142 sinon.stub(request, 'get', function(options, callback) {
143 callback(null, {statusCode: 200}, self.env);
144 });
145 });
146
147 afterEach(function() {
148 request.get.restore();
149 });
150
151 it('lists env variables', function(done) {
152 envCommand(this.program, function(err) {
153 if (err) return done(err);
154
155 assert.isTrue(request.get.calledWith(sinon.match({
156 url: sinon.match('/apps/' + self.program.virtualApp.appId + '/env')
157 })));
158
159 assert.isTrue(console.log.calledWith(JSON.stringify(self.env, null, 2)));
160 done();
161 });
162 });
163 });
164
165 describe('delete env variable', function() {
166 beforeEach(function() {
167 this.program.subCommand = 'del';
168
169 sinon.stub(request, 'del', function(options, callback) {
170 callback(null, {statusCode: 200});
171 });
172 });
173
174 afterEach(function() {
175 request.del.restore();
176 });
177
178 it('invokes DELETE api for global', function(done) {
179 this.program.key = 'KEY1';
180
181 envCommand(this.program, function(err) {
182 if (err) return done(err);
183
184 assert.isTrue(request.del.calledWith(sinon.match({
185 url: sinon.match('/apps/' + self.program.virtualApp.appId + '/env/KEY1')
186 })));
187
188 done();
189 });
190 });
191
192 it('invokes api for virtual env specific value', function(done) {
193 this.program.key = 'KEY2';
194 this.program.virtualEnv = 'test';
195
196 envCommand(this.program, function(err) {
197 if (err) return done(err);
198
199 assert.isTrue(request.del.calledWith(sinon.match({
200 url: sinon.match('/apps/' + self.program.virtualApp.appId + '/env/test/KEY2')
201 })));
202
203 done();
204 });
205 });
206
207 it('returns error for invalid key', function(done) {
208 _.extend(this.program, {
209 key: '$invalid%key',
210 value: 'some_value'
211 });
212
213 envCommand(this.program, function(err) {
214 assert.isNotNull(err);
215 assert.isTrue(/Environment variable keys can only contain letters/.test(err));
216
217 done();
218 });
219 });
220 });
221});