BigW Consortium Gitlab

health_check_controller_spec.rb 3.81 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
require 'spec_helper'

describe HealthCheckController do
  let(:token) { current_application_settings.health_check_access_token }
  let(:json_response) { JSON.parse(response.body) }
  let(:xml_response) { Hash.from_xml(response.body)['hash'] }

  describe 'GET #index' do
    context 'when services are up but NO access token' do
      it 'returns a not found page' do
        get :index
        expect(response).to be_not_found
      end
    end

    context 'when services are up and an access token is provided' do
17 18 19 20 21 22 23
      it 'supports passing the token in the header' do
        request.headers['TOKEN'] = token
        get :index
        expect(response).to be_success
        expect(response.content_type).to eq 'text/plain'
      end

24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
      it 'supports successful plaintest response' do
        get :index, token: token
        expect(response).to be_success
        expect(response.content_type).to eq 'text/plain'
      end

      it 'supports successful json response' do
        get :index, token: token, format: :json
        expect(response).to be_success
        expect(response.content_type).to eq 'application/json'
        expect(json_response['healthy']).to be true
      end

      it 'supports successful xml response' do
        get :index, token: token, format: :xml
        expect(response).to be_success
        expect(response.content_type).to eq 'application/xml'
        expect(xml_response['healthy']).to be true
      end

      it 'supports successful responses for specific checks' do
        get :index, token: token, checks: 'email', format: :json
        expect(response).to be_success
        expect(response.content_type).to eq 'application/json'
        expect(json_response['healthy']).to be true
      end
    end

    context 'when a service is down but NO access token' do
      it 'returns a not found page' do
        get :index
        expect(response).to be_not_found
      end
    end

    context 'when a service is down and an access token is provided' do
      before do
        allow(HealthCheck::Utils).to receive(:process_checks).with('standard').and_return('The server is on fire')
        allow(HealthCheck::Utils).to receive(:process_checks).with('email').and_return('Email is on fire')
      end

65 66 67
      it 'supports passing the token in the header' do
        request.headers['TOKEN'] = token
        get :index
68
        expect(response).to have_http_status(500)
69 70 71 72
        expect(response.content_type).to eq 'text/plain'
        expect(response.body).to include('The server is on fire')
      end

73 74
      it 'supports failure plaintest response' do
        get :index, token: token
75
        expect(response).to have_http_status(500)
76 77 78 79 80 81
        expect(response.content_type).to eq 'text/plain'
        expect(response.body).to include('The server is on fire')
      end

      it 'supports failure json response' do
        get :index, token: token, format: :json
82
        expect(response).to have_http_status(500)
83 84 85 86 87 88 89
        expect(response.content_type).to eq 'application/json'
        expect(json_response['healthy']).to be false
        expect(json_response['message']).to include('The server is on fire')
      end

      it 'supports failure xml response' do
        get :index, token: token, format: :xml
90
        expect(response).to have_http_status(500)
91 92 93 94 95 96 97
        expect(response.content_type).to eq 'application/xml'
        expect(xml_response['healthy']).to be false
        expect(xml_response['message']).to include('The server is on fire')
      end

      it 'supports failure responses for specific checks' do
        get :index, token: token, checks: 'email', format: :json
98
        expect(response).to have_http_status(500)
99 100 101 102 103 104 105
        expect(response.content_type).to eq 'application/json'
        expect(json_response['healthy']).to be false
        expect(json_response['message']).to include('Email is on fire')
      end
    end
  end
end