Skip to content

Commit

Permalink
Enable config via chat
Browse files Browse the repository at this point in the history
  • Loading branch information
robsonbittencourt committed Oct 10, 2016
1 parent cdbb47e commit 7b608cf
Show file tree
Hide file tree
Showing 8 changed files with 243 additions and 38 deletions.
37 changes: 30 additions & 7 deletions config/config.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,40 @@
[
{
"id": 1,
"question": "Qual sua url do Jenkins?"
"speak": "Ok, vou lhe fazer algumas perguntas então. Se precisar de mais detalhes <https://github.com/hubot-js/gear-jenkins#jenkins-url|*clique aqui*>."
},

{
"speak": "_*Você utiliza o Jenkins com autenticação?*_",
"expectedResponses": [
{
"response": "Sim",
"iteration": {
"speak": "_*Qual é a url do Jenkins?*_ A url deve ter este formato: http://user:authToken@jenkinsUrl. \nSe não quiser fazer esta configuração agora, mantendo o valor atual, digite *pular*.",
"handler": "src/configHandler/url-handler"
}
},

{
"response": "Não",
"iteration": {
"speak": "_*Qual é a url do Jenkins?*_ Simplesmente utilize a url de acesso ao Jenkins. \nSe não quiser fazer esta configuração agora, mantendo o valor atual, digite *pular*.",
"handler": "src/configHandler/url-handler"
}
}
]
},

{
"id": 2,
"question": "Você utiliza CRFS no seu Jenkins?",
"expectedResponses": ["Sim", "Não"]
"speak": "_*Você utiliza CRFS no Jenkins?*_ \nSe não quiser fazer esta configuração agora, mantendo o valor atual, digite *pular*.",
"expectedResponses": [
{ "response": "Sim" },
{ "response": "Não" },
{ "response": "pular" }
],
"handler": "src/configHandler/csrf-handler"
},

{
"id": 3,
"question": "Tudo certo. Jenkins configurado"
"speak": "Tudo certo. Jenkins configurado"
}
]
1 change: 0 additions & 1 deletion config/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,4 @@
"message": "<!channel|channel> Alright. I'll start the job"
}
}

]
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
"homepage": "https://github.com/hubot-js/gear-jenkins#readme",
"dependencies": {
"jenkins": "^0.18.0",
"sqlite": "^2.2.0"
"sqlite": "^2.2.0",
"q": "^1.4.1",
"request-promise": "^4.1.1"
},
"devDependencies": {
"chai": "^3.5.0",
Expand Down
29 changes: 0 additions & 29 deletions src/configHandler/configHandler.js

This file was deleted.

25 changes: 25 additions & 0 deletions src/configHandler/csrf-handler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
'use strict';

exports.handle = handle;

let Q = require('q');
var db = require('../../src/db').getDb();

function handle(awnser) {
let deferred = Q.defer();

if (awnser === 'pular') {
deferred.resolve();
return deferred.promise;
}

db.run('UPDATE config SET useCSRF = ?', getUseCSRF(awnser));

deferred.resolve();

return deferred.promise;
}

function getUseCSRF(awnser) {
return awnser === 'Sim';
}
43 changes: 43 additions & 0 deletions src/configHandler/url-handler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
'use strict';

exports.handle = handle;

let Q = require('q');
var db = require('../../src/db').getDb();
var request = require('request-promise');

function handle(awnser) {
let deferred = Q.defer();

if (awnser === 'pular') {
deferred.resolve();
return deferred.promise;
}

let url = getUrl(awnser);
let successMessage = 'A url responde, aparentemente está tudo certo. :champagne:';
let errorMessage = 'Não consegui verificar a url, algo está errado. :disappointed: Confira se a url está correta.';

db.run('UPDATE config SET url = ?', url);

request.get(url)
.then(function() {
deferred.resolve(successMessage);
}).catch(function() {
deferred.reject(errorMessage);
});

return deferred.promise;
}

function getUrl(awnser) {
let url = awnser;

if (url.includes('|')) {
url = url.replace('<', '').substring(0, url.indexOf('|') - 1);
} else {
url = url.replace('<', '').replace('>', '');
}

return url;
}
53 changes: 53 additions & 0 deletions test/configHandlers/csrf-handler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
var proxyquire = require('proxyquire').noPreserveCache();
var chai = require('chai');
var expect = chai.expect;
var sinon = require('sinon');

var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);

describe('Handle with csrf configuration', function() {
var runSpy;
var dbStub;

beforeEach(function() {
var runStub = sinon.stub().resolves();
runSpy = sinon.spy(runStub);
var db = { run: runSpy };
dbStub = function() { return db; }
});

describe("Save option", function() {
it("with true when csrf is used", function() {
var csrfHandler = getCsrfHandler(dbStub);

return csrfHandler.handle('Sim').then(function() {
expect(runSpy.calledWithExactly('UPDATE config SET useCSRF = ?', true)).to.be.true;
});
});

it("with false when csrf is not used", function() {
var csrfHandler = getCsrfHandler(dbStub);

return csrfHandler.handle('Não').then(function() {
expect(runSpy.calledWithExactly('UPDATE config SET useCSRF = ?', false)).to.be.true;
});
});
});

describe("Skip configuration", function() {
it("when get skip word and do not save config", function() {
var csrfHandler = getCsrfHandler(dbStub);

var promise = csrfHandler.handle('pular').then(function() {
expect(runSpy.called).to.be.false;
});

return expect(promise).to.be.fulfilled;
});
});
});

function getCsrfHandler(dbStub) {
return proxyquire('../../src/configHandler/csrf-handler', { '../../src/db': { 'getDb': dbStub } } );
}
89 changes: 89 additions & 0 deletions test/configHandlers/url-handler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
var proxyquire = require('proxyquire').noPreserveCache();
var chai = require('chai');
var expect = chai.expect;
var sinon = require('sinon');

var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);

describe('Handle with url configuration', function() {
var runSpy;
var dbStub;
var requestStub;

beforeEach(function() {
var runStub = sinon.stub().resolves();
runSpy = sinon.spy(runStub);
var db = { run: runSpy };
dbStub = function() { return db; };
requestStub = sinon.stub().resolves();
});

describe("Save option", function() {
it("with first part when url have a pipe", function() {
var urlHandler = getUrlHandler(dbStub, requestStub);
var url = '<http://www.jenkins.com|www.jenkins.com>';

return urlHandler.handle(url).then(function() {
expect(runSpy.calledWithExactly('UPDATE config SET url = ?', 'http://www.jenkins.com')).to.be.true;
});
});

it("remove arrows when url do not have a pipe", function() {
var urlHandler = getUrlHandler(dbStub, requestStub);
var url = '<http://jenkins.com>';

return urlHandler.handle(url).then(function() {
expect(runSpy.calledWithExactly('UPDATE config SET url = ?', 'http://jenkins.com')).to.be.true;
});
});
});

describe("Verify informed url", function() {
it("and return error message when url do not respond", function() {
var errorMessage = 'Não consegui verificar a url, algo está errado. :disappointed: Confira se a url está correta.';
requestStub = sinon.stub().rejects(errorMessage);

var urlHandler = getUrlHandler(dbStub, requestStub);

var promise = urlHandler.handle('url');

return expect(promise).to.be.rejectedWith(errorMessage);
});

it("and return success message when url respond", function() {
var successMessage = 'A url responde, aparentemente está tudo certo. :champagne:';
requestStub = sinon.stub().resolves(successMessage);

var urlHandler = getUrlHandler(dbStub, requestStub);

var promise = urlHandler.handle('url');

return expect(promise).to.be.eventually.equal(successMessage);
});
});

describe("Skip configuration", function() {
it("when get skip word and do not save config", function() {
var csrfHandler = getUrlHandler(dbStub, requestStub);

var promise = csrfHandler.handle('pular').then(function() {
expect(runSpy.called).to.be.false;
});

return expect(promise).to.be.fulfilled;
});
});
});

function getUrlHandler(dbStub, requestStub) {
let db = { 'getDb': dbStub };
let request = { 'get': requestStub};

let stubs = {
'../../src/db': db,
'request-promise': request
}

return proxyquire('../../src/configHandler/url-handler', stubs);
}

0 comments on commit 7b608cf

Please sign in to comment.