services_controller_spec.rb 4.9 KB
Newer Older
1 2 3
require 'spec_helper'

describe Projects::ServicesController do
4
  let(:project) { create(:project, :repository) }
5
  let(:user)    { create(:user) }
6 7 8
  let(:service) { create(:hipchat_service, project: project) }
  let(:hipchat_client) { { '#room' => double(send: true) } }
  let(:service_params) { { token: 'hipchat_token_p', room: '#room' } }
9 10 11

  before do
    sign_in(user)
12
    project.add_master(user)
13 14
  end

15 16 17 18
  describe '#test' do
    context 'when can_test? returns false' do
      it 'renders 404' do
        allow_any_instance_of(Service).to receive(:can_test?).and_return(false)
19

20
        put :test, namespace_id: project.namespace, project_id: project, id: service.to_param
21

22
        expect(response).to have_gitlab_http_status(404)
23
      end
24
    end
25

26 27
    context 'success' do
      context 'with empty project' do
28
        let(:project) { create(:project) }
29

30 31
        context 'with chat notification service' do
          let(:service) { project.create_microsoft_teams_service(webhook: 'http://webhook.com') }
32

33 34
          it 'returns success' do
            allow_any_instance_of(MicrosoftTeams::Notifier).to receive(:ping).and_return(true)
35

36
            put :test, namespace_id: project.namespace, project_id: project, id: service.to_param
37

38
            expect(response.status).to eq(200)
39 40 41
          end
        end

42 43
        it 'returns success' do
          expect(HipChat::Client).to receive(:new).with('hipchat_token_p', anything).and_return(hipchat_client)
44

45
          put :test, namespace_id: project.namespace, project_id: project, id: service.to_param, service: service_params
46

47
          expect(response.status).to eq(200)
48 49 50
        end
      end

51 52
      it 'returns success' do
        expect(HipChat::Client).to receive(:new).with('hipchat_token_p', anything).and_return(hipchat_client)
53

54
        put :test, namespace_id: project.namespace, project_id: project, id: service.to_param, service: service_params
55

56
        expect(response.status).to eq(200)
57
      end
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82

      context 'when service is configured for the first time' do
        before do
          allow_any_instance_of(ServiceHook).to receive(:execute).and_return(true)
        end

        it 'persist the object' do
          do_put

          expect(BuildkiteService.first).to be_present
        end

        it 'creates the ServiceHook object' do
          do_put

          expect(BuildkiteService.first.service_hook).to be_present
        end

        def do_put
          put :test, namespace_id: project.namespace,
                     project_id: project,
                     id: 'buildkite',
                     service: { 'active' => '1', 'push_events' => '1', token: 'token', 'project_url' => 'http://test.com' }
        end
      end
83 84
    end

85
    context 'failure' do
J
Jarka Kadlecova 已提交
86
      it 'returns success status code and the error message' do
87 88
        expect(HipChat::Client).to receive(:new).with('hipchat_token_p', anything).and_raise('Bad test')

89
        put :test, namespace_id: project.namespace, project_id: project, id: service.to_param, service: service_params
90 91

        expect(response.status).to eq(200)
92 93
        expect(JSON.parse(response.body))
          .to eq('error' => true, 'message' => 'Test failed.', 'service_response' => 'Bad test')
94
      end
95 96
    end
  end
97 98

  describe 'PUT #update' do
99 100 101
    context 'when param `active` is set to true' do
      it 'activates the service and redirects to integrations paths' do
        put :update,
102
          namespace_id: project.namespace, project_id: project, id: service.to_param, service: { active: true }
103

104
        expect(response).to redirect_to(project_settings_integrations_path(project))
105 106 107
        expect(flash[:notice]).to eq 'HipChat activated.'
      end
    end
108

109 110
    context 'when param `active` is set to false' do
      it 'does not  activate the service but saves the settings' do
111
        put :update,
112
          namespace_id: project.namespace, project_id: project, id: service.to_param, service: { active: false }
113

114
        expect(flash[:notice]).to eq 'HipChat settings saved, but not activated.'
115 116
      end
    end
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152

    context 'with a deprecated service' do
      let(:service) { create(:kubernetes_service, project: project) }

      before do
        put :update,
          namespace_id: project.namespace, project_id: project, id: service.to_param, service: { namespace: 'updated_namespace' }
      end

      it 'should not update the service' do
        service.reload
        expect(service.namespace).not_to eq('updated_namespace')
      end
    end
  end

  describe "GET #edit" do
    before do
      get :edit, namespace_id: project.namespace, project_id: project, id: service_id
    end

    context 'with approved services' do
      let(:service_id) { 'jira' }

      it 'should render edit page' do
        expect(response).to be_success
      end
    end

    context 'with a deprecated service' do
      let(:service_id) { 'kubernetes' }

      it 'should render edit page' do
        expect(response).to be_success
      end
    end
153
  end
154
end