require File.expand_path '../../test_helper', __dir__

# Test class for Create Application Gateway Request
class TestCreateApplicationGateway < Minitest::Test
  def setup
    @service = Fog::Network::AzureRM.new(credentials)
    client = @service.instance_variable_get(:@network_client)
    @gateways = client.application_gateways
    @promise = Concurrent::Promise.execute do
    end
  end

  def test_create_application_gateway_success
    mocked_response = ApiStub::Requests::Network::ApplicationGateway.create_application_gateway_response
    expected_response = Azure::ARM::Network::Models::ApplicationGateway.serialize_object(mocked_response.body)
    @promise.stub :value!, mocked_response do
      gateway_ip_configurations = ApiStub::Requests::Network::ApplicationGateway.gateway_ip_configurations
      frontend_ip_configurations = ApiStub::Requests::Network::ApplicationGateway.frontend_ip_configurations
      frontend_ports = ApiStub::Requests::Network::ApplicationGateway.frontend_ports
      backend_address_pools = ApiStub::Requests::Network::ApplicationGateway.backend_address_pools
      backend_http_settings_list = ApiStub::Requests::Network::ApplicationGateway.backend_http_settings_list
      http_listeners = ApiStub::Requests::Network::ApplicationGateway.http_listeners
      request_routing_rules = ApiStub::Requests::Network::ApplicationGateway.request_routing_rules
      @gateways.stub :create_or_update, @promise do
        assert_equal @service.create_application_gateway('gateway', 'East US', 'fogRM-rg', 'Standard_Medium', 'Standard', 2, gateway_ip_configurations, nil, frontend_ip_configurations, frontend_ports, nil, backend_address_pools, backend_http_settings_list, http_listeners, nil, request_routing_rules), expected_response
      end
    end
  end

  def test_create_application_gateway_argument_error_failure
    response = ApiStub::Requests::Network::ApplicationGateway.create_application_gateway_response
    @promise.stub :value!, response do
      @gateways.stub :create_or_update, @promise do
        assert_raises ArgumentError do
          @service.create_application_gateway('gateway', 'East US', 'fogRM-rg', 'Standard_Medium', 'Standard', 2)
        end
      end
    end
  end

  def test_create_application_gateway_exception_failure
    response = -> { raise MsRestAzure::AzureOperationError.new(nil, nil, 'error' => { 'message' => 'mocked exception' }) }
    @promise.stub :value!, response do
      gateway_ip_configurations = ApiStub::Requests::Network::ApplicationGateway.gateway_ip_configurations
      ssl_certificates = ApiStub::Requests::Network::ApplicationGateway.ssl_certificates
      frontend_ip_configurations = ApiStub::Requests::Network::ApplicationGateway.frontend_ip_configurations
      frontend_ports = ApiStub::Requests::Network::ApplicationGateway.frontend_ports
      probes = ApiStub::Requests::Network::ApplicationGateway.probes
      backend_address_pools = ApiStub::Requests::Network::ApplicationGateway.backend_address_pools
      backend_http_settings_list = ApiStub::Requests::Network::ApplicationGateway.backend_http_settings_list
      http_listeners = ApiStub::Requests::Network::ApplicationGateway.http_listeners
      url_path_paths = ApiStub::Requests::Network::ApplicationGateway.url_path_maps
      request_routing_rules = ApiStub::Requests::Network::ApplicationGateway.request_routing_rules
      @gateways.stub :create_or_update, @promise do
        assert_raises RuntimeError do
          @service.create_application_gateway('gateway', 'East US', 'fogRM-rg', 'Standard_Medium', 'Standard', 2, gateway_ip_configurations, ssl_certificates, frontend_ip_configurations, frontend_ports, probes, backend_address_pools, backend_http_settings_list, http_listeners, url_path_paths, request_routing_rules)
        end
      end
    end
  end
end