spec/unit/elasticsearch_serverless_spec.rb (119 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. require 'unit_test_helper' describe ElasticsearchServerless::Client do context 'instantiation' do it 'raises an error when no url is passed' do expect{ ElasticsearchServerless::Client.new(api_key: 'test') }. to raise_error(ArgumentError, /missing keyword: :?url/) end it 'raises an error when no api_key is passed' do expect{ ElasticsearchServerless::Client.new(url: 'test') }. to raise_error(ArgumentError, /missing keyword: :?api_key/) end it 'instantiates a client' do expect(ElasticsearchServerless::Client.new(url: 'test', api_key: 'test')). to be_an_instance_of ElasticsearchServerless::Client end it 'integrates with Elastic Transport' do transport = double(Elastic::Transport::Client) allow(Elastic::Transport::Client). to receive(:new).with( { host: 'test', transport_options: { headers: { "Authorization" => "ApiKey test", "Elastic-Api-Version" => '2023-10-31', user_agent: ElasticsearchServerless::Client.new(url: 'test', api_key: 'test').user_agent } }, compression: true } ).and_return(transport) client = ElasticsearchServerless::Client.new(api_key: 'test', url: 'test') allow(transport).to receive(:perform_request).with('GET', '/') client.perform_request('GET', '/') end it 'uses the correct user agent' do client = ElasticsearchServerless::Client.new(api_key: 'test', url: 'test') expect(client.transport.options[:transport_options][:headers][:user_agent]). to match("elasticsearch-serverless-ruby/#{ElasticsearchServerless::VERSION}") end end context 'has compression enabled' do let(:client) do ElasticsearchServerless::Client.new( api_key: 'test', url: 'test' ) end it 'has compression enabled' do expect(client.transport.options[:compression]).to eq true end end context 'initializer arguments' do let(:client) do ElasticsearchServerless::Client.new(api_key: 'test', url: 'test', arguments: arguments) end it 'raises an error for wrong parameters' do expect do ElasticsearchServerless::Client.new(api_key: 'test', url: 'test', randomize_hosts: true) end.to raise_error(ArgumentError) end it 'raises an error for wrong parameters in arguments' do expect do ElasticsearchServerless::Client.new(api_key: 'test', url: 'test', arguments: { randomize_hosts: true }) end.to raise_error(ArgumentError) end it 'accepst opentelemetry_tracer_provider in arguments' do require 'opentelemetry' arguments = { opentelemetry_tracer_provider: OpenTelemetry.tracer_provider } client = ElasticsearchServerless::Client.new(api_key: 'test', url: 'test', arguments: arguments) expect(client.transport.options[:opentelemetry_tracer_provider]) end context 'adapters' do let(:arguments) { { adapter: :net_http_persistent } } it 'accepts adapter as an argument' do fork { require 'faraday/net_http_persistent' expect(client.transport.connections.first.connection.adapter).to eq Faraday::Adapter::NetHttpPersistent } end unless defined?(JRUBY_VERSION) end context 'log' do let(:arguments) { { log: true } } it 'accepts log as an argument' do expect(client.transport.options[:log]).to eq true end end context 'logger' do class MyLogger < Logger def initialize; end end let(:arguments) { { logger: MyLogger.new } } it 'accepts a logger as an argument' do expect(client.transport.options[:logger]).to be_an_instance_of(MyLogger) end end context 'trace' do let(:arguments) { { trace: true } } it 'accepts trace as an argument' do expect(client.transport.options[:trace]).to eq true end end context 'trace' do let(:arguments) { { tracer: MyLogger.new } } it 'accepts tracer as an argument' do expect(client.transport.options[:tracer]).to be_an_instance_of(MyLogger) end end context 'serializer_class' do class MyJSONSerializer def initialize(param); self end end let(:arguments) { { serializer_class: MyJSONSerializer } } it 'accepts a serializer_class as an argument' do expect(client.transport.options[:serializer_class]).to eq(MyJSONSerializer) end end end end