spec/enterprise-search/request_spec.rb (121 lines of code) (raw):
# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# frozen_string_literal: true
require 'spec_helper'
require 'ostruct'
require_relative './../webmock_requires'
describe Elastic::EnterpriseSearch::Client do
let(:client) { Elastic::EnterpriseSearch::Client.new(http_auth: http_auth) }
let(:stub_response) { OpenStruct.new(status: 200) }
let(:host) { 'http://localhost:3002' }
let(:http_auth) { { user: 'elastic', password: 'password' } }
let(:user_agent) do
[
"#{Elastic::EnterpriseSearch::CLIENT_NAME}/#{Elastic::EnterpriseSearch::VERSION} ",
"(RUBY_VERSION: #{RUBY_VERSION}; ",
"#{RbConfig::CONFIG['host_os'].split('_').first[/[a-z]+/i].downcase} ",
"#{RbConfig::CONFIG['target_cpu']}; ",
"elastic-transport: #{Elastic::Transport::VERSION})"
].join
end
let(:headers) do
{
'Authorization' => 'Basic ZWxhc3RpYzpwYXNzd29yZA==',
'Content-Type' => 'application/json',
'User-Agent' => user_agent
}
end
context 'builds request' do
context 'get' do
it 'builds the right request' do
stub_request(:get, "#{host}/test")
.with(
query: { 'params' => 'test' },
headers: headers
).to_return(stub_response)
expect(client.get('test', params: 'test').status).to eq(200)
end
end
context 'delete' do
it 'builds the right request' do
stub_request(:delete, "#{host}/test")
.with(
query: { 'params' => 'test' },
headers: headers
).to_return(stub_response)
expect(client.delete('test', params: 'test').status).to eq(200)
end
end
context 'post' do
it 'builds the right request' do
stub_request(:post, "#{host}/test")
.with(
body: { some: 'value' },
headers: headers
).to_return(stub_response)
expect(client.post('test', {}, { some: 'value' }).status).to eq(200)
end
end
context 'put' do
it 'builds the right request' do
stub_request(:put, "#{host}/test")
.with(body: { 'params' => 'test' }, headers: headers)
.to_return(stub_response)
expect(client.put('test', {}, { 'params' => 'test' }).status).to eq(200)
end
end
context 'with custom headers' do
let(:custom_header) { { 'x-custom-header' => 'Custom Header Value' } }
it 'builds the right request' do
stub_request(:get, "#{host}/test")
.with(body: { 'params' => 'test' })
.with(headers: headers.merge(custom_header))
.to_return(stub_response)
expect(client.request(:get, 'test', {}, { 'params' => 'test' }, custom_header).status).to eq(200)
end
it 'builds the right request for put' do
stub_request(:put, "#{host}/test")
.with(body: { 'params' => 'test' })
.with(headers: headers.merge(custom_header))
.to_return(stub_response)
expect(client.put('test', {}, { 'params' => 'test' }, custom_header).status).to eq(200)
end
end
context 'Test headers' do
context 'when using an empty header' do
let(:custom_header) { {} }
it 'builds the right request' do
stub_request(:get, "#{host}/test")
.with(body: { 'params' => 'test' })
.with(headers: headers)
.to_return(stub_response)
expect(client.request(:get, 'test', {}, { 'params' => 'test' }, custom_header).status).to eq(200)
end
end
context 'when using invalid header' do
let(:custom_header) { 'Test' }
it 'builds the right request' do
stub_request(:get, "#{host}/test")
.with(body: { 'params' => 'test' })
.with(headers: headers)
.to_return(stub_response)
expect(client.request(:get, 'test', {}, { 'params' => 'test' }, custom_header).status).to eq(200)
end
end
end
end
context 'with ssl' do
let(:host) { 'https://localhost:3002/api/ws/v1' }
let(:client) do
Elastic::EnterpriseSearch::Client.new(
http_auth: http_auth,
host: host
)
end
it 'sends the request correctly' do
stub_request(:get, "#{host}/test")
.with(
query: { 'params' => 'test' },
headers: headers
).to_return(stub_response)
expect(client.get('test', { 'params' => 'test' }).status).to eq(200)
end
end
end