require 'spec_helper' describe Sekken::XS::ComplexType do specify 'all/element' do complex_type = new_complex_type(' ') expect(complex_type).to be_a(Sekken::XS::ComplexType) all = complex_type.children.first expect(all).to be_a(Sekken::XS::All) elements = all.children expect(elements.count).to eq(4) elements.each do |element| expect(element).to be_a(Sekken::XS::Element) end element_names = elements.map(&:name) expect(element_names).to eq(%w[speciality firstname lastname login]) expect(complex_type.collect_child_elements).to eq(elements) end specify 'complexContent/extension/sequence/element' do base_type = new_complex_type(' ') # mock the schemas for #collect_child_elements schemas = mock('schemas') schemas.expects(:complex_type).with('http://example.com/ons', 'baseObject').returns(base_type) complex_type = new_complex_type(' ', schemas) expect(complex_type).to be_a(Sekken::XS::ComplexType) complex_content = complex_type.children.first expect(complex_content).to be_a(Sekken::XS::ComplexContent) extension = complex_content.children.first expect(extension).to be_a(Sekken::XS::Extension) expect(extension['base']).to eq('ons:baseObject') sequence = extension.children.first expect(sequence).to be_a(Sekken::XS::Sequence) sequence_elements = sequence.children expect(sequence_elements.count).to eq(3) expect(sequence_elements[0]).to be_a(Sekken::XS::Element) expect(sequence_elements[0].name).to eq('Description') expect(sequence_elements[1]).to be_a(Sekken::XS::Element) expect(sequence_elements[1].name).to eq('ProcessId') expect(sequence_elements[1].type).to eq('ens:ID') expect(sequence_elements[1].namespaces).to include('xmlns:ens' => 'http://example.com/ens') expect(sequence_elements[2]).to be_a(Sekken::XS::Element) expect(sequence_elements[2].name).to eq('CreatedDate') # complex_type#collect_child_elements resolves extensions extension_elements = base_type.elements all_elements = extension_elements + sequence_elements expect(complex_type.collect_child_elements).to eq(all_elements) end specify 'complexType/simpleContent (plus annotations)' do base_type = new_complex_type(' ') schemas = mock('schemas') schemas.expects(:complex_type).with('http://example.com/ons', 'baseObject').returns(base_type) complex_type = new_complex_type(' Basic type for specifying measures and the system of measurement. ', schemas) children = complex_type.collect_child_elements expect(children.size).to eq(2) expect(children[1].name).to eq('The Child Element') end specify 'complexType/simpleContent/attribute (plus annotations)' do complex_type = new_complex_type(' Basic type for specifying measures and the system of measurement. Unit of measure. This attribute is shared by various fields, representing units such as lbs, oz, kg, g, in, cm. AddItem AddItems No GetItemShipping GetSellerTransactions GetShippingDiscountProfiles Conditionally GetItem
DetailLevel: none, ItemReturnDescription, ItemReturnAttributes, ReturnAll
Conditionally
') expect(complex_type).to be_a(Sekken::XS::ComplexType) expect(complex_type.collect_child_elements).to be_empty end specify 'complexType/sequence/element/simpleType' do complex_type = new_complex_type(' ') expect(complex_type).to be_a(Sekken::XS::ComplexType) elements = complex_type.collect_child_elements expect(elements.count).to eq(3) expect(elements[0].type).to eq('xsd:integer') expect(elements[1].type).to eq('xsd:string') expect(elements[2].type).to be_nil expect(elements[2].inline_type).to be_a(Sekken::XS::SimpleType) expect(elements[2].inline_type.base).to eq('xsd:string') end specify 'complexType/sequence' do complex_type = new_complex_type(' ') expect(complex_type).to be_a(Sekken::XS::ComplexType) expect(complex_type).to be_empty end def new_complex_type(xml, schemas = nil) node = Nokogiri.XML(xml).root schemas ||= mock('schemas') schema = {} Sekken::XS::ComplexType.new(node, schemas, schema) end end