spec/core/configuration_spec.rb (133 lines of code) (raw):

require 'core/configuration' require 'connectors/base/connector' require 'connectors/connector_status' require 'active_support/core_ext/hash/indifferent_access' require 'utility/constants' describe Core::Configuration do describe '.update' do let(:connector_settings) { double } let(:connector_class) { double } let(:connector_status) { Connectors::ConnectorStatus::CREATED } let(:connector_id) { '123' } let(:service_type) { 'mongo' } let(:param_service_type) { nil } let(:needs_service_type) { false } let(:configuration) { { :foo => {} } } before(:each) do allow(Core::ElasticConnectorActions).to receive(:update_connector_fields) allow(Connectors::REGISTRY).to receive(:connector_class).and_return(connector_class) allow(connector_settings).to receive(:id).and_return(connector_id) allow(connector_settings).to receive(:service_type).and_return(service_type) allow(connector_settings).to receive(:connector_status).and_return(connector_status) allow(connector_settings).to receive(:needs_service_type?).and_return(needs_service_type) allow(connector_settings).to receive(:formatted).and_return('') allow(connector_class).to receive(:configurable_fields).and_return(configuration) allow(connector_class).to receive(:configurable_fields_indifferent_access).and_return(configuration.with_indifferent_access) allow(connector_class).to receive(:kibana_features).and_return(Connectors::Base::Connector.kibana_features) end describe '.update' do (Connectors::ConnectorStatus::STATUSES - [Connectors::ConnectorStatus::CREATED]).each do |status| context "when connector status is #{status}" do let(:connector_status) { status } it 'updates nothing' do expect(Core::ElasticConnectorActions).to_not receive(:update_connector_fields) described_class.update(connector_settings, param_service_type) end end end context 'when connector class is not supported' do let(:connector_class) { nil } it 'updates nothing' do expect(Core::ElasticConnectorActions).to_not receive(:update_connector_fields) described_class.update(connector_settings, param_service_type) end end it 'updates configuration and status' do expect(Core::ElasticConnectorActions) .to receive(:update_connector_fields) .with(connector_id, hash_including( :configuration => configuration, :status => Connectors::ConnectorStatus::NEEDS_CONFIGURATION, :features => { :sync_rules => { :basic => { :enabled => true }, :advanced => { :enabled => true } } } )) described_class.update(connector_settings) end context 'when all configurable fields are set with symbols' do let(:configuration) { { :foo => { :value => 'bar' } } } it 'updates status to configured' do expect(Core::ElasticConnectorActions) .to receive(:update_connector_fields) .with(connector_id, hash_including(:status => Connectors::ConnectorStatus::CONFIGURED)) described_class.update(connector_settings, param_service_type) end end context 'when all configurable fields are set with strings' do let(:configuration) { { 'foo' => { 'value' => 'bar' } } } it 'updates status to configured' do expect(Core::ElasticConnectorActions) .to receive(:update_connector_fields) .with(connector_id, hash_including(:status => Connectors::ConnectorStatus::CONFIGURED)) described_class.update(connector_settings, param_service_type) end end context 'when all configurable fields are set with a mix of strings and symbols' do let(:configuration) { { 'foo' => { 'value' => 'Foo' }, :bar => { :value => 'Bar' } } } it 'updates status to configured' do expect(Core::ElasticConnectorActions) .to receive(:update_connector_fields) .with(connector_id, hash_including(:status => Connectors::ConnectorStatus::CONFIGURED)) described_class.update(connector_settings, param_service_type) end end context 'when not all configurable fields are set (with strings)' do let(:configuration) { { 'foo' => { 'value' => nil } } } it 'updates status to configured' do expect(Core::ElasticConnectorActions) .to receive(:update_connector_fields) .with(connector_id, hash_including(:status => Connectors::ConnectorStatus::NEEDS_CONFIGURATION)) described_class.update(connector_settings, param_service_type) end end context 'when not all configurable fields are set (with symbols)' do let(:configuration) { { :foo => { :value => nil } } } it 'updates status to configured' do expect(Core::ElasticConnectorActions) .to receive(:update_connector_fields) .with(connector_id, hash_including(:status => Connectors::ConnectorStatus::NEEDS_CONFIGURATION)) described_class.update(connector_settings, param_service_type) end end context 'when in non-native mode' do let(:service_type) { nil } let(:param_service_type) { 'mongo' } let(:needs_service_type) { true } it 'updates service type' do expect(Core::ElasticConnectorActions) .to receive(:update_connector_fields) .with(connector_id, hash_including(:service_type => param_service_type)) described_class.update(connector_settings, param_service_type) end end end end end