require 'spec_helper'

module Vcloud
  module Core
    describe MetadataHelper do
      context "get_metadata" do

        it "should process valid metadata types" do
          metadata_entries = [
              {
                  :type => Fog::ContentTypes::METADATA,
                  :Key => 'role_name',
                  :TypedValue => {
                      :xsi_type => 'MetadataStringValue',
                      :Value => 'james-bond'
                  }},
              {
                  :type => Fog::ContentTypes::METADATA,
                  :Key => "server_number",
                  :TypedValue => {:xsi_type => "MetadataNumberValue", :Value => "-10"}
              },
              {
                  :type => Fog::ContentTypes::METADATA,
                  :Key => "created_at",
                  :TypedValue => {:xsi_type => "MetadataDateTimeValue", :Value => "2013-12-16T14:30:05.000Z"}
              },
              {
                  :type => Fog::ContentTypes::METADATA,
                  :Key => "daily_shutdown",
                  :TypedValue => {:xsi_type => "MetadataBooleanValue", :Value => "false"}
              }
          ]
          metadata = MetadataHelper.extract_metadata(metadata_entries)
          expect(metadata.count).to eq(4)
          expect(metadata[:role_name]).to eq('james-bond')
          expect(metadata[:server_number]).to eq(-10)
          expect(metadata[:created_at]).to eq(DateTime.parse("2013-12-16T14:30:05.000Z"))
          expect(metadata[:daily_shutdown]).to be_false
        end

        it "should skip metadata entry if entry type is not application/vnd.vmware.vcloud.metadata.value+xml" do
          metadata_entries = [
              {
                  :type => Fog::ContentTypes::METADATA,
                  :Key => 'role_name',
                  :TypedValue => {
                      :xsi_type => 'MetadataStringValue',
                      :Value => 'james-bond'
                  }},
              {
                  :Key => "untyped_key",
                  :TypedValue => {:xsi_type => "MetadataNumberValue", :Value => "-10"}
              },

          ]
          metadata = MetadataHelper.extract_metadata(metadata_entries)
          expect(metadata.count).to eq(1)
          metadata.keys.should_not include :untyped_key
        end

        it "should include unrecognized metadata types" do
          metadata_entries = [
              {
                  :type => Fog::ContentTypes::METADATA,
                  :Key => 'role_name',
                  :TypedValue => {
                      :xsi_type => 'MetadataStringValue',
                      :Value => 'james-bond'
                  }},
              {
                  :type => Fog::ContentTypes::METADATA,
                  :Key => "unrecognized_type_key",
                  :TypedValue => {:xsi_type => "MetadataWholeNumberValue", :Value => "-10"}
              },

          ]
          metadata = MetadataHelper.extract_metadata(metadata_entries)
          expect(metadata.count).to eq(2)
          metadata.keys.should include :unrecognized_type_key
        end


      end


    end

  end
end