deploys_controller_spec.rb 1.9 KB
describe DeploysController, type: 'controller' do
  render_views

  context 'POST #create' do
    before do
      @params = {
        'local_username' => 'john.doe',
        'scm_repository' => 'git@github.com/errbit/errbit.git',
        'rails_env'      => 'production',
        'scm_revision'   => '19d77837eef37902cf5df7e4445c85f392a8d0d5',
        'message'        => 'johns first deploy'
      }
      @app = Fabricate(:app_with_watcher, notify_on_deploys: true, api_key: 'APIKEY')
    end

    it 'finds the app via the api key' do
      expect(App).to receive(:find_by_api_key!).with('APIKEY').and_return(@app)
      post :create, deploy: @params, api_key: 'APIKEY'
    end

    it 'creates a deploy' do
      expect(App).to receive(:find_by_api_key!).and_return(@app)
      expect(@app.deploys).to receive(:create!).
        with(
          username:    'john.doe',
          environment: 'production',
          repository:  'git@github.com/errbit/errbit.git',
          revision:    '19d77837eef37902cf5df7e4445c85f392a8d0d5',
          message:     'johns first deploy').and_return(Fabricate(:deploy))
      post :create, deploy: @params, api_key: 'APIKEY'
    end

    it 'sends an email notification when configured to do so' do
      post :create, deploy: @params, api_key: 'APIKEY'
      email = ActionMailer::Base.deliveries.last
      expect(email.to).to include(@app.watchers.first.email)
      expect(email.subject).to eq "[#{@app.name}] Deployed to production by john.doe"
    end
  end

  context "GET #index" do
    before(:each) do
      @deploy = Fabricate :deploy
      sign_in Fabricate(:admin)
      get :index, app_id: @deploy.app.id
    end

    it "should render successfully" do
      expect(response).to be_success
    end

    it "should contain info about existing deploy" do
      expect(response.body).to match(@deploy.short_revision)
      expect(response.body).to match(@deploy.app.name)
    end
  end
end