Issues (791)

test/plugin.js (3 issues)

Severity
1
var chai = require('chai');
2
var sinonChai = require('sinon-chai')
3
var expect = chai.expect
4
chai.use(sinonChai)
5
var sinon = require('sinon');
6
var path = require('path');
7
var child_process = require('child_process')
8
import {Promise} from 'bluebird'
9
var events = require('events')
10
import which from 'which'
11
const npm = which.sync('npm')
12
13
var config = require('../src/cli').config
14
config.set({root: path.join(__dirname,'fixtures')})
15
16
var abeExtend = require('../src/cli').abeExtend;
17
var Plugins = require('../src/cli').Plugins;
18
var Manager = require('../src/cli').Manager;
19
var fse = require('fs-extra');
20
21
describe('Plugin', function() {
22
23
  before( function(done) {
24
    Manager.instance.init()
25
      .then(function () {
26
        this.fixture = {
27
          testPlugin: 'test',
28
          testNewPlugin: 'testnew',
29
          testScript: 'test-script',
30
          testProcess: 'test'
31
        }
32
        done()
33
      }.bind(this))
34
  });
35
36
  it('abeExtend.hooks.instance.getPluginConfig find plugin', function(){
37
    const plugin = abeExtend.plugins.instance.getPluginConfig(
38
      abeExtend.plugins.instance.pluginsDir,
39
      this.fixture.testPlugin
40
    )
41
    chai.expect(plugin.hooks).to.have.afterEditorInput;
0 ignored issues
show
The result of the property access to chai.expect(plugin.hooks).to.have.afterEditorInput is not used.
Loading history...
42
    chai.expect(plugin.routes.get[0]).to.have.path;
0 ignored issues
show
The result of the property access to chai.expect(plugin.routes.get.0).to.have.path is not used.
Loading history...
43
  })
44
45
  it('abeExtend.hooks.instance.getPluginConfig find script', function(){
46
    const plugin = abeExtend.plugins.instance.getPluginConfig(
47
      abeExtend.plugins.instance.scriptsDir,
48
      this.fixture.testScript
49
    )
50
    chai.expect(plugin.hooks).to.have.afterEditorInput;
0 ignored issues
show
The result of the property access to chai.expect(plugin.hooks).to.have.afterEditorInput is not used.
Loading history...
51
  })
52
53
  it('abeExtend.hooks.instance.getProcess', function(){
54
    const proc = abeExtend.plugins.instance.getProcess(
55
      this.fixture.testProcess
56
    )
57
    chai.assert.equal(path.basename(proc), 'test.js', 'getProcess test failed !')
58
  })
59
60
  it('abeExtend.hooks.instance.getPartials', function(){
61
    const partialsArray = abeExtend.plugins.instance.getPartials()
62
    chai.assert.equal(partialsArray.length, 1, 'getPartials test failed !')
63
  })
64
65
  it('abeExtend.plugins.instance.getRoutes()', function() {
66
    var routes = abeExtend.plugins.instance.getRoutes()
67
    chai.expect(routes[0].get).to.have.length(1);
68
  });
69
70
  it('abeExtend.hooks.instance.trigger', function() {
71
    var res = abeExtend.hooks.instance.trigger('afterEditorInput')
72
    chai.assert.equal(res, 'test', 'Hook test failed !')
73
  });
74
75
  it('abeExtend.plugins.instance.add', function(done) {
76
    var dir = './node_modules/'
77
    this.sinon = sinon.sandbox.create();
78
    var fakeChild = this.fakeChild = {
79
      'stdout': new events.EventEmitter(),
80
      'stderr': new events.EventEmitter()
81
    };
82
83
    this.sinon.stub(child_process, 'spawn', function(){
84
      return fakeChild;
85
    });
86
87
    abeExtend.plugins.instance.add(dir, this.fixture.testPlugin)
88
    .then(function() {
89
      chai.expect(child_process.spawn).to.have.been.calledWith(npm, ["install", "--save", this.fixture.testPlugin], { cwd: "./node_modules/" })
90
      done()
91
      this.sinon.restore();
92
    }.bind(this))
93
  });
94
95
  it('abeExtend.plugins.instance.remove', function(done) {
96
    var dir = './node_modules/'
97
    this.sinon = sinon.sandbox.create();
98
    var fakeChild = this.fakeChild = {
99
      'stdout': new events.EventEmitter(),
100
      'stderr': new events.EventEmitter()
101
    };
102
103
    this.sinon.stub(child_process, 'spawn', function(){
104
      return fakeChild;
105
    });
106
    this.sinon.stub(abeExtend.plugins.instance, 'removePlugin')
107
108
    abeExtend.plugins.instance.remove(dir, this.fixture.testNewPlugin)
109
    .then(function() {
110
      chai.expect(child_process.spawn).to.have.been.calledWith(npm, ["uninstall", "--save", this.fixture.testNewPlugin], { cwd: "./node_modules/" })
111
      done()
112
      abeExtend.plugins.instance.removePlugin.restore()
113
      this.sinon.restore();
114
    }.bind(this))
115
  });
116
117
  it('abeExtend.plugins.instance.removePlugin(plugin)', function() {
118
    abeExtend.plugins.instance.removePlugin(this.fixture.testNewPlugin)
119
    chai.assert.equal(config.getLocalConfig().plugins.length, 1, 'updatePlugin test failed !')
120
  });
121
122
  it('abeExtend.plugins.instance.updatePlugin NoVersionNewPlugin', function() {
123
    abeExtend.plugins.instance.updatePlugin(this.fixture.testNewPlugin)
124
    chai.assert.equal(config.plugins[1], this.fixture.testNewPlugin, 'updatePlugin test failed !')
125
  });
126
127
  it('abeExtend.plugins.instance.updatePlugin VersionExistingPlugin', function() {
128
    abeExtend.plugins.instance.updatePlugin("[email protected]")
129
    chai.assert.equal(config.plugins[0], '[email protected]', 'updatePlugin test failed !')
130
  });
131
132
  it('abeExtend.plugins.instance.install(dir, plugin)', function(done){
133
    var dir = './node_modules/'
134
    this.sinon = sinon.sandbox.create();
135
    var stub = sinon.stub(abeExtend.plugins.instance, 'add')
136
    stub.returns(Promise.resolve(0));
137
138
    abeExtend.plugins.instance.install(dir, this.fixture.testPlugin)
139
    sinon.assert.calledOnce(abeExtend.plugins.instance.add)
140
    abeExtend.plugins.instance.add.restore()
141
    done()
142
  });
143
144
  it('abeExtend.plugins.instance.install(dir)', function(done){
145
    var dir = './node_modules/'
146
    this.sinon = sinon.sandbox.create();
147
    var stub = sinon.stub(abeExtend.plugins.instance, 'add')
148
    stub.returns(Promise.resolve(0));
149
150
    abeExtend.plugins.instance.install(dir)
151
    sinon.assert.calledTwice(abeExtend.plugins.instance.add)
152
    abeExtend.plugins.instance.add.restore()
153
154
    done()
155
  });
156
157
  it('abeExtend.plugins.instance.uninstall(dir, plugin)', function(done){
158
    var dir = './node_modules/'
159
    this.sinon = sinon.sandbox.create();
160
    var stub = sinon.stub(abeExtend.plugins.instance, 'remove')
161
    stub.returns(Promise.resolve(0));
162
163
    abeExtend.plugins.instance.uninstall(dir, this.fixture.testNewPlugin)
164
    sinon.assert.calledOnce(abeExtend.plugins.instance.remove)
165
    abeExtend.plugins.instance.remove.restore()
166
    done()
167
  });
168
});
169