1 | var assert = require('assert');
|
2 | var async = require('async');
|
3 | var shortid = require('shortid');
|
4 | var sinon = require('sinon');
|
5 | var _ = require('lodash');
|
6 | var path = require('path');
|
7 | var log = require('../lib/log');
|
8 | var request = require('request');
|
9 | var debug = require('debug')('4front:cli:test');
|
10 | var envCommand = require('../commands/env');
|
11 | var mockSpawn = require('./mock-spawn');
|
12 |
|
13 | require('dash-assert');
|
14 |
|
15 | describe('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 |
|
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 |
|
94 | it('sets encrypted value', function(done) {
|
95 | _.extend(this.program, {
|
96 | key: 'API_KEY',
|
97 | value: 'some_value',
|
98 | encrypted: true,
|
99 | virtualEnv: 'production'
|
100 | });
|
101 |
|
102 | envCommand(this.program, function(err) {
|
103 | if (err) return done(err);
|
104 |
|
105 | assert.isTrue(request.put.calledWith(sinon.match({
|
106 | url: sinon.match('/apps/' + self.program.virtualApp.appId + '/env/production/' + self.program.key),
|
107 | json: {value: self.program.value, encrypted: true}
|
108 | })));
|
109 |
|
110 | done();
|
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 |
|
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 = 'delete';
|
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 | });
|