require 'spec_helper'

describe(RCAP::CAP_1_0::Parameter) do
  context('when initialised') do
    context('from XML') do
      before(:each) do
        @original_parameter = RCAP::CAP_1_0::Parameter.new do |parameter|
          parameter.name = 'name'
          parameter.value = 'value'
        end
        @alert = RCAP::CAP_1_0::Alert.new
        @alert.add_info.parameters << @original_parameter
        @xml_string = @alert.to_xml
        @xml_document = REXML::Document.new(@xml_string)
        @info_xml_element = RCAP.xpath_first(@xml_document.root, RCAP::CAP_1_0::Info::XPATH, RCAP::CAP_1_0::Alert::XMLNS)
        @parameter_xml_element = RCAP.xpath_first(@info_xml_element, RCAP::CAP_1_0::Parameter::XPATH, RCAP::CAP_1_0::Alert::XMLNS)
        @parameter = RCAP::CAP_1_0::Parameter.from_xml_element(@parameter_xml_element)
      end

      it('should parse into the correct class') do
        @parameter.class.should == RCAP::CAP_1_0::Parameter
      end

      it('should parse the name correctly') do
        @parameter.name.should == @original_parameter.name
      end

      it('should parse the value correctly') do
        @parameter.value.should == @original_parameter.value
      end
    end
  end

  context('when exported') do
    before(:each) do
      @parameter = RCAP::CAP_1_0::Parameter.new do |parameter|
        parameter.name = 'name'
        parameter.value = 'value'
      end
    end

    context('to a hash') do
      it('should export correctly') do
        @parameter.to_h.should == { 'name' => 'value' }
      end
    end
  end

  describe('.parse_parameter') do
    it('should parse valid content correctly') do
      RCAP::CAP_1_0::Parameter.parse_parameter('name=value').should == { name: 'name', value: 'value' }
    end

    it('should parse invalid content correctly') do
      RCAP::CAP_1_0::Parameter.parse_parameter('name').should.nil?
    end
  end

  describe('.to_xml_element') do
    before(:each) do
      @parameter = RCAP::CAP_1_0::Parameter.new do |parameter|
        parameter.name = 'name'
        parameter.value = 'value'
      end
    end

    it('should generate an XML element correctly') do
      @parameter.to_xml_element.text.should == 'name=value'
    end
  end

  describe('.from_xml_element') do
    before(:each) do
      @parameter = RCAP::CAP_1_0::Parameter.new do |parameter|
        parameter.name = 'name'
        parameter.value = 'value'
      end
    end

    it('should initialise correctly') do
      parameter = RCAP::CAP_1_0::Parameter.from_xml_element(@parameter.to_xml_element)
      parameter.name.should == @parameter.name
      parameter.value.should == @parameter.value
    end
  end
end