hubot-deploy
Version:
hubot script for GitHub Flow
124 lines (105 loc) • 6.73 kB
text/coffeescript
Path = require('path')
Patterns = require(Path.join(__dirname, "..", "..", "src", "models", "patterns"))
DeployPattern = Patterns.DeployPattern
DeploysPattern = Patterns.DeploysPattern
describe "Patterns", () ->
describe "DeployPattern", () ->
it "rejects things that don't start with deploy", () ->
assert !"ping".match(DeployPattern)
assert !"image me pugs".match(DeployPattern)
it "handles simple deployment", () ->
matches = "deploy hubot".match(DeployPattern)
assert.equal "deploy", matches[1], "incorrect task"
assert.equal "hubot", matches[3], "incorrect app name"
assert.equal undefined, matches[4], "incorrect branch"
assert.equal undefined, matches[5], "incorrect environment"
assert.equal undefined, matches[6], "incorrect host specification"
it "handles ! operations", () ->
matches = "deploy! hubot".match(DeployPattern)
assert.equal "deploy", matches[1], "incorrect task"
assert.equal "!", matches[2], "incorrect task"
assert.equal "hubot", matches[3], "incorrect app name"
assert.equal undefined, matches[4], "incorrect branch"
assert.equal undefined, matches[5], "incorrect environment"
assert.equal undefined, matches[6], "incorrect host specification"
it "handles custom tasks", () ->
matches = "deploy:migrate hubot".match(DeployPattern)
assert.equal "deploy:migrate", matches[1], "incorrect task"
assert.equal "hubot", matches[3], "incorrect app name"
assert.equal undefined, matches[4], "incorrect branch"
assert.equal undefined, matches[5], "incorrect environment"
assert.equal undefined, matches[6], "incorrect host specification"
it "handles deploying branches", () ->
matches = "deploy hubot/mybranch to production".match(DeployPattern)
assert.equal "deploy", matches[1], "incorrect task"
assert.equal "hubot", matches[3], "incorrect app name"
assert.equal "mybranch", matches[4], "incorrect branch name"
assert.equal "production", matches[5], "incorrect environment name"
assert.equal undefined, matches[6], "incorrect branch name"
it "handles deploying to environments", () ->
matches = "deploy hubot to production".match(DeployPattern)
assert.equal "deploy", matches[1], "incorrect task"
assert.equal "hubot", matches[3], "incorrect app name"
assert.equal undefined, matches[4], "incorrect branch name"
assert.equal "production", matches[5], "incorrect environment name"
assert.equal undefined, matches[6], "incorrect branch name"
it "handles environments with hosts", () ->
matches = "deploy hubot to production/fe".match(DeployPattern)
assert.equal "deploy", matches[1], "incorrect task"
assert.equal "hubot", matches[3], "incorrect app name"
assert.equal undefined, matches[4], "incorrect branch name"
assert.equal "production", matches[5], "incorrect environment name"
assert.equal "fe", matches[6], "incorrect host name"
assert.equal undefined, matches[7], "incorrect yubikey pattern"
it "handles branch deploys with slashes and environments with hosts", () ->
matches = "deploy hubot/atmos/branch to production/fe".match(DeployPattern)
assert.equal "deploy", matches[1], "incorrect task"
assert.equal "hubot", matches[3], "incorrect app name"
assert.equal "atmos/branch", matches[4], "incorrect branch name"
assert.equal "production", matches[5], "incorrect environment name"
assert.equal "fe", matches[6], "incorrect host name"
assert.equal undefined, matches[7], "incorrect yubikey pattern"
it "handles branch deploys with slashes and environments with hosts plus yubikeys", () ->
matches = "deploy hubot/atmos/branch to production/fe ccccccdlnncbtuevhdbctrccukdciveuclhbkvehbeve".match(DeployPattern)
assert.equal "deploy", matches[1], "incorrect task"
assert.equal "hubot", matches[3], "incorrect app name"
assert.equal "atmos/branch", matches[4], "incorrect branch name"
assert.equal "production", matches[5], "incorrect environment name"
assert.equal "fe", matches[6], "incorrect host name"
assert.equal "ccccccdlnncbtuevhdbctrccukdciveuclhbkvehbeve", matches[7], "incorrect yubikey pattern"
it "handles branch deploys with slashes and environments with hosts plus 2fa keys", () ->
matches = "deploy hubot/atmos/branch to production/fe 123456".match(DeployPattern)
assert.equal "deploy", matches[1], "incorrect task"
assert.equal "hubot", matches[3], "incorrect app name"
assert.equal "atmos/branch", matches[4], "incorrect branch name"
assert.equal "production", matches[5], "incorrect environment name"
assert.equal "fe", matches[6], "incorrect host name"
assert.equal "123456", matches[7], "incorrect authenticator token"
it "doesn't match on malformed yubikeys", () ->
matches = "deploy hubot/atmos/branch to production/fe burgers".match(DeployPattern)
assert.equal null, matches
it "does not match typos", () ->
matches = "deploy hubot/branch tos taging".match(DeployPattern)
assert.equal matches, null
describe "DeploysPattern", () ->
it "rejects things that don't start with deploy", () ->
assert !"ping".match(DeploysPattern)
assert !"image me pugs".match(DeploysPattern)
it "handles simple deploys listing", () ->
matches = "deploys hubot".match(DeploysPattern)
assert.equal "deploys", matches[1], "incorrect task"
assert.equal "hubot", matches[2], "incorrect app name"
assert.equal undefined, matches[3], "incorrect branch"
assert.equal undefined, matches[4], "incorrect environment"
it "handles deploys with environments", () ->
matches = "deploys hubot in production".match(DeploysPattern)
assert.equal "deploys", matches[1], "incorrect task"
assert.equal "hubot", matches[2], "incorrect app name"
assert.equal undefined, matches[3], "incorrect branch name"
assert.equal "production", matches[4], "incorrect environment name"
it "handles deploys with branches", () ->
matches = "deploys hubot/mybranch to production".match(DeploysPattern)
assert.equal "deploys", matches[1], "incorrect task"
assert.equal "hubot", matches[2], "incorrect app name"
assert.equal "mybranch", matches[3], "incorrect branch name"
assert.equal "production", matches[4], "incorrect environment name"