hubot-deploy
Version:
hubot script for GitHub Flow
81 lines (64 loc) • 2.79 kB
text/coffeescript
Fs = require "fs"
VCR = require "ys-vcr"
Path = require('path')
Robot = require "hubot/src/robot"
TextMessage = require("hubot/src/message").TextMessage
GitHubEvents = require(Path.join(__dirname, "..", "..", "src", "github", "webhooks"))
Deployment = GitHubEvents.Deployment
Handler = require(Path.join(__dirname, "..", "..", "src", "models", "handler"))
describe "Deployment Handlers", () ->
user = null
robot = null
adapter = null
deployment = null
beforeEach (done) ->
VCR.playback()
process.env.HUBOT_DEPLOY_FERNET_SECRETS or= "HSfTG4uWzw9whtlLEmNAzscHh96eHUFt3McvoWBXmHk="
process.env.HUBOT_DEPLOY_EMIT_GITHUB_DEPLOYMENTS = true
robot = new Robot(null, "mock-adapter", true, "hubot")
robot.adapter.on "connected", () ->
require("../../index")(robot)
userInfo =
name: "atmos",
room: "#my-room"
user = robot.brain.userForId "1", userInfo
adapter = robot.adapter
done()
robot.run()
afterEach () ->
delete(process.env.HUBOT_DEPLOY_DEFAULT_ENVIRONMENT)
VCR.stop()
robot.server.close()
robot.shutdown()
deploymentFixtureFor = (fixtureName) ->
fixtureData = Path.join __dirname, "..", "..", "test", "fixtures", "deployments", "#{fixtureName}.json"
JSON.parse(Fs.readFileSync(fixtureData))
it "only responds to the currently running bot name", (done) ->
fixturePayload = deploymentFixtureFor "production"
fixturePayload.deployment.payload.robotName = "evilbot"
deployment = new Deployment "uuid", fixturePayload
handler = new Handler.Handler robot, deployment
handler.run (err, handler) ->
assert.equal err.message, "Received request for unintended robot evilbot."
done()
it "ignores deployments that have no notify attrs in their payload", (done) ->
fixturePayload = deploymentFixtureFor "production"
delete fixturePayload.deployment.payload.notify
deployment = new Deployment "uuid", fixturePayload
handler = new Handler.Handler robot, deployment
handler.run (err, handler) ->
assert.equal err.message, "Not deploying atmos/my-robot/heroku to production. Not chat initiated."
done()
it "dispatches to specific providers", (done) ->
fixturePayload = deploymentFixtureFor "production"
deployment = new Deployment "uuid", fixturePayload
handler = new Handler.Handler robot, deployment
handler.run (err, handler) ->
throw err if err
assert.equal "heroku", handler.provider
assert.equal "heroku", handler.ref
assert.equal "3c9f42c", handler.sha
assert.equal "1875476", handler.number
assert.equal "production", handler.environment
assert.equal "atmos/my-robot", handler.repoName
done()