1 | var assert = require('assert');
|
2 | var sinon = require('sinon');
|
3 | var inquirer = require('inquirer');
|
4 | var request = require('request');
|
5 | var _ = require('lodash');
|
6 | var parseUrl = require('url').parse;
|
7 | var listApps = require('../commands/list-apps');
|
8 | var log = require('../lib/log');
|
9 |
|
10 | require('dash-assert');
|
11 |
|
12 | describe('list-apps', function() {
|
13 | var self;
|
14 |
|
15 | beforeEach(function() {
|
16 | self = this;
|
17 |
|
18 | this.mockAnswers = {};
|
19 | this.program = {
|
20 | profile: {
|
21 | endpoint: 'https://apphost.com/',
|
22 | jwt: {
|
23 | token: '23523454'
|
24 | }
|
25 | }
|
26 | };
|
27 |
|
28 | this.orgs = [];
|
29 | this.apps = [];
|
30 |
|
31 | this.mockInquirer = require('./mock-inquirer')(this.mockAnswers);
|
32 | sinon.stub(inquirer, 'prompt', this.mockInquirer.prompt);
|
33 |
|
34 | sinon.stub(request, 'get', function(options, callback) {
|
35 | var urlPath = parseUrl(options.url).pathname;
|
36 | switch (urlPath) {
|
37 | case '/api/profile/orgs':
|
38 | return callback(null, {statusCode: 200}, self.orgs);
|
39 | break;
|
40 | case '/api/orgs/1/apps':
|
41 | return callback(null, {statusCode: 200}, self.apps);
|
42 | break;
|
43 | default:
|
44 | throw new Error("Unexpected request " + urlPath);
|
45 | }
|
46 | });
|
47 |
|
48 | sinon.stub(log, 'write', _.noop());
|
49 | sinon.stub(console, 'log', _.noop());
|
50 | });
|
51 |
|
52 | afterEach(function() {
|
53 | request.get.restore();
|
54 | inquirer.prompt.restore();
|
55 | log.write.restore();
|
56 | console.log.restore();
|
57 | });
|
58 |
|
59 | it('prompts for org', function(done) {
|
60 | this.orgs = [{orgId: '1'}, {orgId: '2'}];
|
61 | this.mockAnswers.orgId = '1';
|
62 |
|
63 | listApps(this.program, function(err) {
|
64 | if (err) return done(err);
|
65 | assert.ok(self.mockInquirer.wasAsked('orgId'));
|
66 |
|
67 | assert.isTrue(request.get.calledWith(
|
68 | sinon.match({url: 'https://apphost.com/api/profile/orgs'})));
|
69 |
|
70 | assert.isTrue(request.get.calledWith(
|
71 | sinon.match({url: 'https://apphost.com/api/orgs/1/apps'})));
|
72 |
|
73 | done();
|
74 | });
|
75 | });
|
76 |
|
77 | it('does not prompt for orgId if only one org', function(done) {
|
78 | this.orgs = [{orgId: '1'}];
|
79 |
|
80 | listApps(this.program, function(err) {
|
81 | if (err) return done(err);
|
82 | assert.isFalse(self.mockInquirer.wasAsked('orgId'));
|
83 |
|
84 | done();
|
85 | });
|
86 | });
|
87 |
|
88 | it('displays message if user not member of any orgs', function(done) {
|
89 | listApps(this.program, function(err) {
|
90 | if (err) return done(err);
|
91 | log.write.calledWith(sinon.match("You don't belong to any organizations"));
|
92 |
|
93 | done();
|
94 | });
|
95 | });
|
96 | });
|