dynamics_crm 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -39,6 +39,22 @@ describe DynamicsCRM::FetchXml::Builder do
39
39
  <order attribute="productid" descending="false"/>
40
40
  </entity>
41
41
  </fetch>
42
+ }
43
+ end
44
+
45
+ it "builds a single entity with condition" do
46
+ entity = subject.entity('opportunity').add_attributes(['name', 'amount', 'ownerid'])
47
+ entity.add_condition('opportunityid', 'eq', '02dd7344-d04a-e411-a9d3-9cb654950300')
48
+ expect(subject.to_xml).to eq %Q{<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
49
+ <entity name="opportunity">
50
+ <attribute name="name"/>
51
+ <attribute name="amount"/>
52
+ <attribute name="ownerid"/>
53
+ <filter type="and">
54
+ <condition attribute="opportunityid" operator="eq" value="02dd7344-d04a-e411-a9d3-9cb654950300"/>
55
+ </filter>
56
+ </entity>
57
+ </fetch>
42
58
  }
43
59
  end
44
60
 
@@ -47,7 +63,7 @@ describe DynamicsCRM::FetchXml::Builder do
47
63
  context "link_entity" do
48
64
  it "builds entity with link_entity" do
49
65
  entity = subject.entity('opportunityproduct').add_attributes(opportunity_product_fields).order('productid')
50
- entity.link_entity('product', to: 'productid', from: 'productid', :alias => 'prod').add_attributes(product_fields)
66
+ entity.link_entity('product', to: 'productid', from: 'productid', :alias => 'prod', link_type: 'outer').add_attributes(product_fields)
51
67
  expect(subject.to_xml).to eq %Q{<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
52
68
  <entity name="opportunityproduct">
53
69
  <attribute name="productid"/>
@@ -57,7 +73,7 @@ describe DynamicsCRM::FetchXml::Builder do
57
73
  <attribute name="extendedamount"/>
58
74
  <attribute name="opportunityproductid"/>
59
75
  <order attribute="productid" descending="false"/>
60
- <link-entity name="product" from="productid" to="productid" alias="prod">
76
+ <link-entity name="product" from="productid" to="productid" alias="prod" link-type="outer">
61
77
  <attribute name="name"/>
62
78
  <attribute name="producttypecode"/>
63
79
  <attribute name="price"/>
@@ -85,14 +101,14 @@ describe DynamicsCRM::FetchXml::Builder do
85
101
  <attribute name="extendedamount"/>
86
102
  <attribute name="opportunityproductid"/>
87
103
  <order attribute="productid" descending="false"/>
88
- <link-entity name="product" from="productid" to="productid" alias="prod">
104
+ <link-entity name="product" from="productid" to="productid" alias="prod" link-type="inner">
89
105
  <attribute name="name"/>
90
106
  <attribute name="producttypecode"/>
91
107
  <attribute name="price"/>
92
108
  <attribute name="standardcost"/>
93
109
  <attribute name="currentcost"/>
94
110
  </link-entity>
95
- <link-entity name="opportunity" from="opportunityid" to="opportunityid" alias="oppty">
111
+ <link-entity name="opportunity" from="opportunityid" to="opportunityid" alias="oppty" link-type="inner">
96
112
  <filter type="and">
97
113
  <condition attribute="opportunityid" operator="eq" value="02dd7344-d04a-e411-a9d3-9cb654950300"/>
98
114
  </filter>
@@ -21,4 +21,66 @@ describe DynamicsCRM::Metadata::EntityMetadata do
21
21
 
22
22
  end
23
23
 
24
+ context 'relationships' do
25
+ subject {
26
+ doc = REXML::Document.new(fixture("retrieve_entity_relationships_response"))
27
+ entity = doc.get_elements("//b:KeyValuePairOfstringanyType/c:value").first
28
+ DynamicsCRM::Metadata::EntityMetadata.new(entity)
29
+ }
30
+
31
+ context "parse attributes and relationships according to their type" do
32
+ it { subject.MetadataId.should == "30b0cd7e-0081-42e1-9a48-688442277fae" }
33
+ it { subject.LogicalName.should == "opportunity" }
34
+ it { subject.ObjectTypeCode.should == "3" }
35
+ it { subject.OwnershipType.should == "UserOwned" }
36
+ it { subject.PrimaryIdAttribute.should == "opportunityid" }
37
+ it { subject.PrimaryNameAttribute.should == "name" }
38
+ it { expect(subject.one_to_many.size).to eq 7 }
39
+ it { expect(subject.many_to_many.size).to eq 1 }
40
+ it { expect(subject.many_to_one.size).to eq 8 }
41
+ end
42
+
43
+ context "many to one metadata" do
44
+ let(:systemuser) { subject.many_to_one.first }
45
+
46
+ it { expect(systemuser.entity.LogicalName).to eq "opportunity" }
47
+ it { expect(systemuser.ReferencedAttribute).to eq 'systemuserid' }
48
+ it { expect(systemuser.ReferencedEntity).to eq 'systemuser' }
49
+ it { expect(systemuser.ReferencingAttribute).to eq 'createdby' }
50
+ it { expect(systemuser.ReferencingEntity).to eq 'opportunity' }
51
+
52
+ it { expect(systemuser.link_entity_fragment(["address1_composite", "address1_city"])).to eq %Q{
53
+ <link-entity name="systemuser" from="systemuserid" to="createdby" alias="systemuser">
54
+ <attribute name="address1_composite" />
55
+ <attribute name="address1_city" />
56
+ </link-entity>
57
+ }
58
+ }
59
+ end
60
+
61
+ context "one to many metadata" do
62
+ let(:socialactivity) { subject.one_to_many.first }
63
+
64
+ it { expect(socialactivity.entity.LogicalName).to eq "opportunity" }
65
+ it { expect(socialactivity.ReferencedAttribute).to eq 'opportunityid' }
66
+ it { expect(socialactivity.ReferencedEntity).to eq 'opportunity' }
67
+ it { expect(socialactivity.ReferencingAttribute).to eq 'regardingobjectid' }
68
+ it { expect(socialactivity.ReferencingEntity).to eq 'socialactivity' }
69
+ end
70
+
71
+ context "many to many metadata" do
72
+ let(:competitors) { subject.many_to_many.first }
73
+
74
+ it { expect(competitors.entity.LogicalName).to eq "opportunity" }
75
+
76
+ it { expect(competitors.SchemaName).to eq "opportunitycompetitors_association" }
77
+ it { expect(competitors.Entity1IntersectAttribute).to eq "opportunityid" }
78
+ it { expect(competitors.Entity1LogicalName).to eq "opportunity" }
79
+
80
+ it { expect(competitors.Entity2IntersectAttribute).to eq "competitorid" }
81
+ it { expect(competitors.Entity2LogicalName).to eq "competitor" }
82
+ it { expect(competitors.IntersectEntityName).to eq "opportunitycompetitors" }
83
+ end
84
+ end
85
+
24
86
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamics_crm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Heth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-18 00:00:00.000000000 Z
11
+ date: 2014-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curb
@@ -149,6 +149,8 @@ files:
149
149
  - lib/dynamics_crm/fetch_xml/link_entity.rb
150
150
  - lib/dynamics_crm/metadata/attribute_metadata.rb
151
151
  - lib/dynamics_crm/metadata/entity_metadata.rb
152
+ - lib/dynamics_crm/metadata/one_to_many_relationship.rb
153
+ - lib/dynamics_crm/metadata/relationship_metadata.rb
152
154
  - lib/dynamics_crm/metadata/retrieve_all_entities_response.rb
153
155
  - lib/dynamics_crm/metadata/retrieve_attribute_response.rb
154
156
  - lib/dynamics_crm/metadata/retrieve_entity_response.rb
@@ -188,6 +190,7 @@ files:
188
190
  - spec/fixtures/retrieve_attribute_identifier_response.xml
189
191
  - spec/fixtures/retrieve_attribute_picklist_response.xml
190
192
  - spec/fixtures/retrieve_attribute_response.xml
193
+ - spec/fixtures/retrieve_entity_relationships_response.xml
191
194
  - spec/fixtures/retrieve_entity_response.xml
192
195
  - spec/fixtures/retrieve_multiple_result.xml
193
196
  - spec/fixtures/sender_fault.xml
@@ -252,6 +255,7 @@ test_files:
252
255
  - spec/fixtures/retrieve_attribute_identifier_response.xml
253
256
  - spec/fixtures/retrieve_attribute_picklist_response.xml
254
257
  - spec/fixtures/retrieve_attribute_response.xml
258
+ - spec/fixtures/retrieve_entity_relationships_response.xml
255
259
  - spec/fixtures/retrieve_entity_response.xml
256
260
  - spec/fixtures/retrieve_multiple_result.xml
257
261
  - spec/fixtures/sender_fault.xml