path = require 'path'
chai = require 'chai'
expect = chai.expect
_ = require 'lodash'
Robot = require 'hubot/src/robot'
Brain = require 'hubot/src/brain'
TextMessage = require('hubot/src/message').TextMessage

process.env.FORCE_PUSH_BRANCH_PATTERN = 'changes'

describe 'Hubot with force-push-handler script', ->
  beforeEach (done) ->
    @robot = new Robot null, 'mock-adapter', true, 'TestHubot'
    @adapter = @robot.adapter
    @adapter.on 'connected', ->
      @robot.loadFile path.resolve('.', 'src', 'robot-scripts'), 'force-push-handler.coffee'
      @robot.loadFile path.resolve('.', 'src', 'robot-scripts'), 'active-owner.coffee'
    @robot.run()
    @user = @robot.brain.userForId '1',
      name: '@Gary'
      room: '1'
    done()

  afterEach ->
    @robot.server.close()
    @robot.shutdown

  describe 'on force-push events', ->
    it 'should message AOs with Commit link', (done) ->
      adapter = @adapter
      robot = @robot
      user = @user
      @robot.receive (new TextMessage @user, 'TestHubot add team1 to teams'), ->
        robot.receive (new TextMessage user, 'TestHubot assign @Gary as AO for team1'), ->
          adapter.on 'reply', (envelope, strings) ->
            message = "(gatorproblems) (gatorproblems) (gatorproblems) (gatorproblems) (gatorproblems) (gatorproblems) (gatorproblems)\n"
            + "(gatorproblems)     FORCE PUSH ALERT     (gatorproblems)\n"
            + "(gatorproblems) (gatorproblems) (gatorproblems) (gatorproblems) (gatorproblems) (gatorproblems) (gatorproblems)\n"
            + "changes has been forced push by baxterthehacker onto baxterthehacker/public-repo. Last commit hash before the push was 9049f1265b7d61be4a8904a9a27120d2064dab3b."
            expect(strings[0]).to.equal(message)
            done()
          json = require '../../fixtures/force-push'
          robot.emit 'github.push.forced', json
