require 'fog/vcloud/models/compute/networks'

Shindo.tests("Vcloud::Compute | network", ['vcloud']) do

  Fog::Vcloud::Compute::SUPPORTED_VERSIONS.each do |version|
    tests("api version #{version}") do
      pending if Fog.mocking?

      connection = Fog::Vcloud::Compute.new(
        :vcloud_host => 'vcloud.example.com',
        :vcloud_username => 'username',
        :vcloud_password => 'password',
        :vcloud_version => version
      )
      tests("an org network") do
        instance = connection.get_network("https://vcloud.example.com/api#{version == '1.0' ? '/v1.0' : ''}/network/1")
        instance.reload

        tests("#href").returns("https://vcloud.example.com/api#{version == '1.0' ? '/v1.0' : ''}/network/1") { instance.href }
        tests("#name").returns("Network1") { instance.name }
        tests("#description").returns("Some fancy Network") { instance.description }

        tests("configuration") do
          tests("parent network").returns("ParentNetwork1") { instance.configuration[:ParentNetwork][:name]}
          tests("dns").returns("172.0.0.2") { instance.configuration[:IpScope][:Dns1]}

          tests("#fence_mode").returns("natRouted") { instance.configuration[:FenceMode] }

          tests("features") do
            tests("dhcp_service") do
              tests("#is_enabled").returns("false") { instance.configuration[:Features][:DhcpService][:IsEnabled] }
              tests("ip_range") do
                tests("#start_address").returns("192.168.0.151") { instance.configuration[:Features][:DhcpService][:IpRange][:StartAddress] }
              end
            end
            tests("firewall_server") do
              tests("is_enabled").returns("true"){ instance.configuration[:Features][:FirewallService][:IsEnabled] }
            end
            tests("nat_service") do
              tests("is_enabled").returns("false"){ instance.configuration[:Features][:NatService][:IsEnabled] }
            end
          end
        end

        tests("#parent_network") do
          tests("returned network name").returns("ParentNetwork1"){ p = instance.parent_network; p.name }
        end
      end

      tests("an external network") do
        instance = connection.get_network("https://vcloud.example.com/api#{version == '1.0' ? '/v1.0' : ''}/admin/network/2")
        instance.reload
        tests("#href").returns("https://vcloud.example.com/api#{version == '1.0' ? '/v1.0' : ''}/admin/network/2") { instance.href }
        tests("#name").returns("ParentNetwork1") { instance.name }
        tests("#description").returns("Internet Connection") { instance.description }
        tests("#provider_info").returns("NETWORK:dvportgroup-230 on com.vmware.vcloud.entity.vimserver:35935555") { instance.provider_info }

        tests("configuration") do
          tests("dns").returns("172.0.0.2") { instance.configuration[:IpScope][:Dns1]}
          tests("allocated addresses").returns("172.0.0.144") { instance.configuration[:IpScope][:AllocatedIpAddresses][:IpAddress].first }
        end

        tests("#parent_network").returns(nil){ instance.parent_network }
      end
    end
  end
end
