BigW Consortium Gitlab

health_check_controller_spec.rb 3.9 KB
Newer Older
1 2 3
require 'spec_helper'

describe HealthCheckController do
4 5
  include StubENV

6 7 8 9
  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'] }

10 11 12 13
  before do
    stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
  end

14 15 16 17 18 19 20 21 22
  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
23 24 25 26 27 28 29
      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

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 65 66
      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
67 68
        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')
69 70
      end

71 72 73
      it 'supports passing the token in the header' do
        request.headers['TOKEN'] = token
        get :index
74
        expect(response).to have_http_status(500)
75 76 77 78
        expect(response.content_type).to eq 'text/plain'
        expect(response.body).to include('The server is on fire')
      end

79 80
      it 'supports failure plaintest response' do
        get :index, token: token
81
        expect(response).to have_http_status(500)
82 83 84 85 86 87
        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
88
        expect(response).to have_http_status(500)
89 90 91 92 93 94 95
        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
96
        expect(response).to have_http_status(500)
97 98 99 100 101 102 103
        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
104
        expect(response).to have_http_status(500)
105 106 107 108 109 110 111
        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