require 'spec_helper' RSpec.describe Qa::LinkedData::RequestHeaderService do let(:request) { double } describe '#search_header' do context 'when optional params are defined' do let(:search_params) do { 'subauthority' => 'person', 'lang' => 'sp', 'maxRecords' => '4', 'context' => 'true', 'performance_data' => 'true', 'response_header' => 'true' }.with_indifferent_access end before { allow(request).to receive(:env).and_return('HTTP_ACCEPT_LANGUAGE' => 'de') } it 'uses passed in params' do expected_results = { context: true, performance_data: true, replacements: { 'maxRecords' => '4' }, response_header: true, subauthority: 'person', user_language: ['sp'] } expect(described_class.new(request: request, params: search_params).search_header).to eq expected_results end end context 'when none of the optional params are defined' do context 'and request does not define language' do before { allow(request).to receive(:env).and_return('HTTP_ACCEPT_LANGUAGE' => nil) } it 'returns defaults' do expected_results = { context: false, performance_data: false, replacements: {}, response_header: false, subauthority: nil, user_language: nil } expect(described_class.new(request: request, params: {}).search_header).to eq expected_results end end context 'and request does define language' do before { allow(request).to receive(:env).and_return('HTTP_ACCEPT_LANGUAGE' => 'de') } it 'returns defaults with language set to request language' do expected_results = { context: false, performance_data: false, replacements: {}, response_header: false, subauthority: nil, user_language: ['de'] } expect(described_class.new(request: request, params: {}).search_header).to eq expected_results end end end end describe '#fetch_header' do context 'when optional params are defined' do let(:fetch_params) do { 'subauthority' => 'person', 'lang' => 'sp', 'extra' => 'data', 'even' => 'more data', 'format' => 'n3', 'performance_data' => 'true', 'response_header' => 'true' }.with_indifferent_access end before { allow(request).to receive(:env).and_return('HTTP_ACCEPT_LANGUAGE' => 'de') } it 'uses passed in params' do expected_results = { format: 'n3', performance_data: true, replacements: { 'extra' => 'data', 'even' => 'more data' }, response_header: true, subauthority: 'person', user_language: ['sp'] } expect(described_class.new(request: request, params: fetch_params).fetch_header).to eq expected_results end end context 'when none of the optional params are defined' do context 'and request does not define language' do before { allow(request).to receive(:env).and_return('HTTP_ACCEPT_LANGUAGE' => nil) } it 'returns defaults' do expected_results = { format: 'json', performance_data: false, replacements: {}, response_header: false, subauthority: nil, user_language: nil } expect(described_class.new(request: request, params: {}).fetch_header).to eq expected_results end end context 'and request does define language' do before { allow(request).to receive(:env).and_return('HTTP_ACCEPT_LANGUAGE' => 'de') } it 'returns defaults with language set to request language' do expected_results = { format: 'json', performance_data: false, replacements: {}, response_header: false, subauthority: nil, user_language: ['de'] } expect(described_class.new(request: request, params: {}).fetch_header).to eq expected_results end end end end end