ld4l-ore_rdf 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +25 -0
  4. data/.travis.yml +12 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE.txt +14 -0
  7. data/README.md +171 -0
  8. data/Rakefile +2 -0
  9. data/ld4l-ore_rdf.gemspec +45 -0
  10. data/lib/ld4l/ore_rdf/configuration.rb +41 -0
  11. data/lib/ld4l/ore_rdf/models/aggregation.rb +50 -0
  12. data/lib/ld4l/ore_rdf/models/aggregation_resource.rb +98 -0
  13. data/lib/ld4l/ore_rdf/models/proxy_resource.rb +54 -0
  14. data/lib/ld4l/ore_rdf/services/aggregation/add_aggregated_resource.rb +49 -0
  15. data/lib/ld4l/ore_rdf/services/aggregation/add_aggregated_resources.rb +28 -0
  16. data/lib/ld4l/ore_rdf/services/aggregation/create.rb +39 -0
  17. data/lib/ld4l/ore_rdf/services/aggregation/destroy.rb +47 -0
  18. data/lib/ld4l/ore_rdf/services/aggregation/destroy_with_id.rb +22 -0
  19. data/lib/ld4l/ore_rdf/services/aggregation/find.rb +72 -0
  20. data/lib/ld4l/ore_rdf/services/aggregation/persist.rb +34 -0
  21. data/lib/ld4l/ore_rdf/services/aggregation/resume.rb +30 -0
  22. data/lib/ld4l/ore_rdf/services/proxy/create.rb +64 -0
  23. data/lib/ld4l/ore_rdf/services/proxy/find.rb +93 -0
  24. data/lib/ld4l/ore_rdf/version.rb +5 -0
  25. data/lib/ld4l/ore_rdf/vocab/co.rb +27 -0
  26. data/lib/ld4l/ore_rdf/vocab/dcterms.rb +6 -0
  27. data/lib/ld4l/ore_rdf/vocab/iana.rb +9 -0
  28. data/lib/ld4l/ore_rdf/vocab/ore.rb +16 -0
  29. data/lib/ld4l/ore_rdf.rb +76 -0
  30. data/spec/ld4l/ore_rdf/configuration_spec.rb +174 -0
  31. data/spec/ld4l/ore_rdf/models/aggregation_resource_spec.rb +830 -0
  32. data/spec/ld4l/ore_rdf/models/aggregation_spec.rb +9 -0
  33. data/spec/ld4l/ore_rdf/models/proxy_resource_spec.rb +690 -0
  34. data/spec/ld4l/ore_rdf/services/aggregation/add_aggregated_resource_spec.rb +36 -0
  35. data/spec/ld4l/ore_rdf/services/aggregation/add_aggregated_resources_spec.rb +78 -0
  36. data/spec/ld4l/ore_rdf/services/aggregation/create_spec.rb +62 -0
  37. data/spec/ld4l/ore_rdf/services/aggregation/destroy_spec.rb +169 -0
  38. data/spec/ld4l/ore_rdf/services/aggregation/find_spec.rb +198 -0
  39. data/spec/ld4l/ore_rdf/services/aggregation/persist_spec.rb +13 -0
  40. data/spec/ld4l/ore_rdf/services/aggregation/resume_spec.rb +46 -0
  41. data/spec/ld4l/ore_rdf/services/proxy/create_spec.rb +143 -0
  42. data/spec/ld4l/ore_rdf/services/proxy/find_spec.rb +138 -0
  43. data/spec/ld4l/ore_rdf_spec.rb +53 -0
  44. data/spec/spec_helper.rb +23 -0
  45. metadata +259 -0
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'LD4L::OreRDF::AggregationResource::AddAggregatedResource' do
4
+
5
+ subject { LD4L::OreRDF::CreateAggregation.call(
6
+ title: "Test Title",
7
+ description: "Test description of aggregation.",
8
+ owner: LD4L::FoafRDF::Person.new("http://vivo.cornell.edu/individual/JohnSmith")) }
9
+
10
+ describe "#call" do
11
+ it "should return a LD4L::OreRDF::ProxyResource instance" do
12
+ proxy = LD4L::OreRDF::AddAggregatedResource.call( subject, RDF::URI("http://example.org/individual/b1") )
13
+ expect(proxy).to be_a(LD4L::OreRDF::ProxyResource)
14
+ end
15
+
16
+ it "should add a single resource to an empty set" do
17
+ subject.aggregates = []
18
+ LD4L::OreRDF::AddAggregatedResource.call( subject, RDF::URI("http://example.org/individual/b1") )
19
+ expect(subject.aggregates.first.rdf_subject).to eq RDF::URI("http://example.org/individual/b1")
20
+ end
21
+
22
+ it "should add a single resource to an existing set" do
23
+ subject.aggregates = RDF::URI("http://example.org/individual/b1" )
24
+ LD4L::OreRDF::AddAggregatedResource.call( subject, RDF::URI("http://example.org/individual/b2") )
25
+ expect(subject.aggregates[0].rdf_subject).to eq RDF::URI("http://example.org/individual/b1")
26
+ expect(subject.aggregates[1].rdf_subject).to eq RDF::URI("http://example.org/individual/b2")
27
+ end
28
+
29
+ it "should generate the resource instance for a single resource" do
30
+ proxy = LD4L::OreRDF::AddAggregatedResource.call( subject, RDF::URI("http://example.org/individual/b1" ))
31
+ expect(proxy.proxy_for.first.rdf_subject).to eq RDF::URI("http://example.org/individual/b1")
32
+ expect(proxy.proxy_in.first).to eq subject.aggregation_resource
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'LD4L::OreRDF::AddAggregatedResources' do
4
+
5
+ subject { LD4L::OreRDF::CreateAggregation.call(
6
+ title: "Test Title",
7
+ description: "Test description of aggregation.",
8
+ owner: LD4L::FoafRDF::Person.new("http://vivo.cornell.edu/individual/JohnSmith")) }
9
+
10
+ describe "#call" do
11
+ it "should return an array" do
12
+ proxy_array = LD4L::OreRDF::AddAggregatedResources.call(
13
+ subject,
14
+ [RDF::URI("http://example.org/individual/b1"),
15
+ RDF::URI("http://example.org/individual/b2"),
16
+ RDF::URI("http://example.org/individual/b3")])
17
+ expect(proxy_array).to be_a(Array)
18
+ end
19
+
20
+ it "should return an array of LD4L::OreRDF::ProxyResource instances" do
21
+ proxy_array = LD4L::OreRDF::AddAggregatedResources.call(
22
+ subject,
23
+ [RDF::URI("http://example.org/individual/b1"),
24
+ RDF::URI("http://example.org/individual/b2"),
25
+ RDF::URI("http://example.org/individual/b3")])
26
+ proxy_array.each do |proxy|
27
+ expect(proxy).to be_a(LD4L::OreRDF::ProxyResource)
28
+ end
29
+ end
30
+
31
+ it "should add multiple resources to an empty set" do
32
+ subject.aggregates = []
33
+ LD4L::OreRDF::AddAggregatedResources.call(
34
+ subject,
35
+ [RDF::URI("http://example.org/individual/b1"),
36
+ RDF::URI("http://example.org/individual/b2"),
37
+ RDF::URI("http://example.org/individual/b3")])
38
+ aggregates = subject.aggregates
39
+ expect(aggregates).to include ActiveTriples::Resource.new(RDF::URI("http://example.org/individual/b1"))
40
+ expect(aggregates).to include ActiveTriples::Resource.new(RDF::URI("http://example.org/individual/b2"))
41
+ expect(aggregates).to include ActiveTriples::Resource.new(RDF::URI("http://example.org/individual/b3"))
42
+ end
43
+
44
+ it "should add multiple resources to an existing set" do
45
+ subject.aggregates = RDF::URI("http://example.org/individual/b1")
46
+ LD4L::OreRDF::AddAggregatedResources.call(
47
+ subject,
48
+ [RDF::URI("http://example.org/individual/b2"),
49
+ RDF::URI("http://example.org/individual/b3"),
50
+ RDF::URI("http://example.org/individual/b4")])
51
+ aggregates = subject.aggregates
52
+ expect(aggregates).to include ActiveTriples::Resource.new(RDF::URI("http://example.org/individual/b1"))
53
+ expect(aggregates).to include ActiveTriples::Resource.new(RDF::URI("http://example.org/individual/b2"))
54
+ expect(aggregates).to include ActiveTriples::Resource.new(RDF::URI("http://example.org/individual/b3"))
55
+ expect(aggregates).to include ActiveTriples::Resource.new(RDF::URI("http://example.org/individual/b4"))
56
+ end
57
+
58
+ it "should return an array of resource instances for each of the multiple resources" do
59
+ proxy_array = LD4L::OreRDF::AddAggregatedResources.call(
60
+ subject,
61
+ [RDF::URI("http://example.org/individual/b1"),
62
+ RDF::URI("http://example.org/individual/b2"),
63
+ RDF::URI("http://example.org/individual/b3")])
64
+ proxy_array.each do |proxy|
65
+ expect(proxy).to be_a(LD4L::OreRDF::ProxyResource)
66
+ expect(proxy.proxy_in.first).to eq subject.aggregation_resource
67
+ end
68
+ results = []
69
+ proxy_array.each do |proxy|
70
+ results << proxy.proxy_for.first
71
+ end
72
+ expect(results).to include ActiveTriples::Resource.new(RDF::URI("http://example.org/individual/b1"))
73
+ expect(results).to include ActiveTriples::Resource.new(RDF::URI("http://example.org/individual/b2"))
74
+ expect(results).to include ActiveTriples::Resource.new(RDF::URI("http://example.org/individual/b3"))
75
+ end
76
+ end
77
+
78
+ end
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'LD4L::OreRDF::CreateAggregation' do
4
+
5
+ describe "#call" do
6
+ it "should create a LD4L::OreRDF::AggregationResource instance" do
7
+ aggregation = LD4L::OreRDF::CreateAggregation.call(
8
+ title: "Test Title",
9
+ description: "Test description of aggregation.",
10
+ owner: LD4L::FoafRDF::Person.new("http://vivo.cornell.edu/individual/JohnSmith"))
11
+ expect(aggregation).to be_a(LD4L::OreRDF::Aggregation)
12
+ end
13
+
14
+ it "should create a aggregation with passed in properties excluding an id" do
15
+ aggregation = LD4L::OreRDF::CreateAggregation.call(
16
+ title: "Test Title",
17
+ description: "Test description of aggregation.",
18
+ owner: LD4L::FoafRDF::Person.new("http://vivo.cornell.edu/individual/JohnSmith"))
19
+ expect(aggregation.rdf_subject.to_s).to start_with(
20
+ "#{LD4L::OreRDF::AggregationResource.base_uri}#{LD4L::OreRDF::AggregationResource.localname_prefix}")
21
+ expect(aggregation.title).to eq "Test Title"
22
+ expect(aggregation.description).to eq "Test description of aggregation."
23
+ expect(aggregation.owner.first.rdf_subject).to eq RDF::URI("http://vivo.cornell.edu/individual/JohnSmith")
24
+ end
25
+
26
+ it "should create a aggregation with partial id" do
27
+ aggregation = LD4L::OreRDF::CreateAggregation.call(
28
+ id: "123",
29
+ title: "Test Title",
30
+ description: "Test description of aggregation.",
31
+ owner: LD4L::FoafRDF::Person.new("http://vivo.cornell.edu/individual/JohnSmith"))
32
+ expect(aggregation.rdf_subject.to_s).to eq "#{LD4L::OreRDF::AggregationResource.base_uri}123"
33
+ expect(aggregation.title).to eq "Test Title"
34
+ expect(aggregation.description).to eq "Test description of aggregation."
35
+ expect(aggregation.owner.first.rdf_subject).to eq RDF::URI("http://vivo.cornell.edu/individual/JohnSmith")
36
+ end
37
+
38
+ it "should create a aggregation with string uri id" do
39
+ aggregation = LD4L::OreRDF::CreateAggregation.call(
40
+ id: "http://example.org/individual/vc123",
41
+ title: "Test Title",
42
+ description: "Test description of aggregation.",
43
+ owner: LD4L::FoafRDF::Person.new("http://vivo.cornell.edu/individual/JohnSmith"))
44
+ expect(aggregation.rdf_subject.to_s).to eq "http://example.org/individual/vc123"
45
+ expect(aggregation.title).to eq "Test Title"
46
+ expect(aggregation.description).to eq "Test description of aggregation."
47
+ expect(aggregation.owner.first.rdf_subject).to eq RDF::URI("http://vivo.cornell.edu/individual/JohnSmith")
48
+ end
49
+
50
+ it "should create a aggregation with URI id" do
51
+ aggregation = LD4L::OreRDF::CreateAggregation.call(
52
+ id: RDF::URI("http://example.org/individual/vc123"),
53
+ title: "Test Title",
54
+ description: "Test description of aggregation.",
55
+ owner: LD4L::FoafRDF::Person.new("http://vivo.cornell.edu/individual/JohnSmith"))
56
+ expect(aggregation.rdf_subject.to_s).to eq "http://example.org/individual/vc123"
57
+ expect(aggregation.title).to eq "Test Title"
58
+ expect(aggregation.description).to eq "Test description of aggregation."
59
+ expect(aggregation.owner.first.rdf_subject).to eq RDF::URI("http://vivo.cornell.edu/individual/JohnSmith")
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,169 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'LD4L::OreRDF::DestroyAggregation' do
4
+
5
+ describe "#call" do
6
+
7
+ context "when aggregation hasn't been persisted" do
8
+ before do
9
+ ActiveTriples::Repositories.add_repository :default, RDF::Repository.new
10
+ end
11
+ after do
12
+ ActiveTriples::Repositories.add_repository :default, RDF::Repository.new
13
+ end
14
+
15
+ it "should return true if never persisted" do
16
+ id = "http::/example.org/NOT_PERSISTED"
17
+ aggregation = LD4L::OreRDF::CreateAggregation.call(
18
+ id: id,
19
+ title: "Unpersisted Aggregation",
20
+ description: "Test aggregation that isn't persisted." )
21
+ expect( LD4L::OreRDF::DestroyAggregation.call(aggregation) ).to be true
22
+ expect( LD4L::OreRDF::ResumeAggregation.call(id) ).to be nil
23
+ end
24
+
25
+ end
26
+
27
+ context "when aggregation doesn't have proxies" do
28
+ before do
29
+ ActiveTriples::Repositories.add_repository :default, RDF::Repository.new
30
+ @id = "http::/example.org/NO_PROXIES"
31
+ @aggregation = LD4L::OreRDF::CreateAggregation.call(
32
+ id: @id,
33
+ title: "No Proxy Aggregation",
34
+ description: "Test aggregation with no proxies." )
35
+ LD4L::OreRDF::PersistAggregation.call(@aggregation)
36
+ expect( LD4L::OreRDF::ResumeAggregation.call(@id).rdf_subject.to_s ).to eq @id
37
+ end
38
+ after do
39
+ ActiveTriples::Repositories.add_repository :default, RDF::Repository.new
40
+ end
41
+
42
+ it "should destroy aggregation resource and return true" do
43
+ expect( LD4L::OreRDF::DestroyAggregation.call(@aggregation) ).to be true
44
+ expect( LD4L::OreRDF::ResumeAggregation.call(@id) ).to eq nil
45
+ end
46
+ end
47
+
48
+ context "when aggregation has proxies" do
49
+ before do
50
+ ActiveTriples::Repositories.add_repository :default, RDF::Repository.new
51
+ @id1 = "http::/example.org/ag1"
52
+ @ag1 = LD4L::OreRDF::CreateAggregation.call(
53
+ id: @id1,
54
+ title: "Aggregation 1",
55
+ description: "Test aggregation with proxies." )
56
+ LD4L::OreRDF::AddAggregatedResources.call(
57
+ @ag1,
58
+ [RDF::URI("http://example.org/individual/b11"),
59
+ RDF::URI("http://example.org/individual/b12"),
60
+ RDF::URI("http://example.org/individual/b13")])
61
+ LD4L::OreRDF::PersistAggregation.call(@ag1)
62
+ a1 = LD4L::OreRDF::ResumeAggregation.call(@id1)
63
+ expect( a1.aggregation_resource.rdf_subject.to_s ).to eq @id1
64
+ expect( a1.proxy_resources.length).to eq 3
65
+
66
+ @id2 = "http::/example.org/ag2"
67
+ @ag2 = LD4L::OreRDF::CreateAggregation.call(
68
+ id: @id2,
69
+ title: "Aggregation 2",
70
+ description: "Test description of aggregation 2.",
71
+ owner: p )
72
+ LD4L::OreRDF::AddAggregatedResources.call(
73
+ @ag2,
74
+ [RDF::URI("http://example.org/individual/b21"),
75
+ RDF::URI("http://example.org/individual/b22"),
76
+ RDF::URI("http://example.org/individual/b23")])
77
+ LD4L::OreRDF::PersistAggregation.call(@ag2)
78
+ a2 = LD4L::OreRDF::ResumeAggregation.call(@id2)
79
+ expect( a2.aggregation_resource.rdf_subject.to_s ).to eq @id2
80
+ expect( a2.proxy_resources.length).to eq 3
81
+
82
+ @id3 = "http::/example.org/ag3"
83
+ @ag3 = LD4L::OreRDF::CreateAggregation.call(
84
+ id: @id3,
85
+ title: "Aggregation 3",
86
+ description: "Test description of aggregation 3.",
87
+ owner: p )
88
+ LD4L::OreRDF::PersistAggregation.call(@ag3)
89
+ a3 = LD4L::OreRDF::ResumeAggregation.call(@id3)
90
+ expect( a3.aggregation_resource.rdf_subject.to_s ).to eq @id3
91
+ expect( a3.proxy_resources.length).to eq 0
92
+ end
93
+ after do
94
+ ActiveTriples::Repositories.add_repository :default, RDF::Repository.new
95
+ end
96
+
97
+ context "and all parts are persisted" do
98
+ it "should destroy aggregation resource and all proxy resources and return true" do
99
+ expect( LD4L::OreRDF::DestroyAggregation.call(@ag1) ).to be true
100
+ expect( LD4L::OreRDF::ResumeAggregation.call(@id1) ).to eq nil
101
+
102
+ # verify other objects are unchanged
103
+ ag2 = LD4L::OreRDF::ResumeAggregation.call(@id2)
104
+ expect( ag2.rdf_subject.to_s ).to eq @id2
105
+ expect( ag2.proxy_resources.length).to eq 3
106
+
107
+ ag3 = LD4L::OreRDF::ResumeAggregation.call(@id3)
108
+ expect( ag3.rdf_subject.to_s ).to eq @id3
109
+ expect( ag3.proxy_resources.length).to eq 0
110
+ end
111
+ end
112
+
113
+ context "and some proxies are persisted" do
114
+ it "should destroy aggregation resource and persisted proxy resources and return true" do
115
+ LD4L::OreRDF::AddAggregatedResources.call(
116
+ @ag2,
117
+ [RDF::URI("http://example.org/individual/b24"),
118
+ RDF::URI("http://example.org/individual/b25")])
119
+ expect( @ag2.rdf_subject.to_s ).to eq @id2
120
+ expect( @ag2.proxy_resources.length).to eq 5
121
+
122
+ expect( LD4L::OreRDF::DestroyAggregation.call(@ag2) ).to be true
123
+ expect( LD4L::OreRDF::ResumeAggregation.call(@id2) ).to eq nil
124
+
125
+ # verify other objects are unchanged
126
+ ag1 = LD4L::OreRDF::ResumeAggregation.call(@id1)
127
+ expect( ag1.rdf_subject.to_s ).to eq @id1
128
+ expect( ag1.proxy_resources.length).to eq 3
129
+
130
+ ag3 = LD4L::OreRDF::ResumeAggregation.call(@id3)
131
+ expect( ag3.rdf_subject.to_s ).to eq @id3
132
+ expect( ag3.proxy_resources.length).to eq 0
133
+ end
134
+ end
135
+
136
+ context "and no proxies are persisted" do
137
+ it "should destroy aggregation resource and return true" do
138
+ LD4L::OreRDF::AddAggregatedResources.call(
139
+ @ag3,
140
+ [RDF::URI("http://example.org/individual/b31"),
141
+ RDF::URI("http://example.org/individual/b32")])
142
+ expect( @ag3.rdf_subject.to_s ).to eq @id3
143
+ expect( @ag3.proxy_resources.length).to eq 2
144
+
145
+ expect( LD4L::OreRDF::DestroyAggregation.call(@ag3) ).to be true
146
+ expect( LD4L::OreRDF::ResumeAggregation.call(@id3) ).to eq nil
147
+
148
+ # verify other objects are unchanged
149
+ ag1 = LD4L::OreRDF::ResumeAggregation.call(@id1)
150
+ expect( ag1.rdf_subject.to_s ).to eq @id1
151
+ expect( ag1.proxy_resources.length).to eq 3
152
+
153
+ ag2 = LD4L::OreRDF::ResumeAggregation.call(@id2)
154
+ expect( ag2.rdf_subject.to_s ).to eq @id2
155
+ expect( ag2.proxy_resources.length).to eq 3
156
+ end
157
+ end
158
+ end
159
+
160
+ context "when invalid parameters" do
161
+ it "should raise error if aggregation isn't LD4L::OreRDF::Aggregation" do
162
+ expect{ LD4L::OreRDF::DestroyAggregation.call('BAD VALUE') }.to raise_error(
163
+ ArgumentError,'aggregation must be an LD4L::OreRDF::Aggregation')
164
+ expect{ LD4L::OreRDF::DestroyAggregation.call(nil) }.to raise_error(
165
+ ArgumentError,'aggregation must be an LD4L::OreRDF::Aggregation')
166
+ end
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,198 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'LD4L::OreRDF::FindAggregations' do
4
+
5
+ describe "#call" do
6
+
7
+ context "when repository is empty" do
8
+ before do
9
+ ActiveTriples::Repositories.add_repository :default, RDF::Repository.new
10
+ end
11
+ it "should return an empty array" do
12
+ aggregations = LD4L::OreRDF::FindAggregations.call
13
+ expect(aggregations).to eq []
14
+ end
15
+ end
16
+
17
+ context "when repository has one aggregation" do
18
+ before do
19
+ p = LD4L::FoafRDF::Person.new("http://vivo.cornell.edu/individual/JohnSmith")
20
+ p.persist!
21
+
22
+ ag1 = LD4L::OreRDF::CreateAggregation.call(
23
+ id: "http::/example.org/ag1",
24
+ title: "Aggregation 1",
25
+ description: "Test description of aggregation 1.",
26
+ owner: p )
27
+ LD4L::OreRDF::AddAggregatedResources.call(
28
+ ag1,
29
+ [RDF::URI("http://example.org/individual/b11"),
30
+ RDF::URI("http://example.org/individual/b12"),
31
+ RDF::URI("http://example.org/individual/b13")])
32
+ LD4L::OreRDF::PersistAggregation.call(ag1)
33
+ end
34
+ after do
35
+ ActiveTriples::Repositories.add_repository :default, RDF::Repository.new
36
+ end
37
+
38
+ it "should return an array with 1 value" do
39
+ aggregations = LD4L::OreRDF::FindAggregations.call
40
+ expect(aggregations).to eq [ RDF::URI("http::/example.org/ag1") ]
41
+ end
42
+ end
43
+
44
+ context "when repository has multiple aggregations" do
45
+ before do
46
+ p = LD4L::FoafRDF::Person.new("http://vivo.cornell.edu/individual/JohnSmith")
47
+ p.persist!
48
+
49
+ ag1 = LD4L::OreRDF::CreateAggregation.call(
50
+ id: "http::/example.org/ag1",
51
+ title: "Aggregation 1",
52
+ description: "Test description of aggregation 1.",
53
+ owner: p )
54
+ LD4L::OreRDF::AddAggregatedResources.call(
55
+ ag1,
56
+ [RDF::URI("http://example.org/individual/b11"),
57
+ RDF::URI("http://example.org/individual/b12"),
58
+ RDF::URI("http://example.org/individual/b13")])
59
+ LD4L::OreRDF::PersistAggregation.call(ag1)
60
+
61
+ ag2 = LD4L::OreRDF::CreateAggregation.call(
62
+ id: "http::/example.org/ag2",
63
+ title: "Aggregation 2",
64
+ description: "Test description of aggregation 2.",
65
+ owner: p )
66
+ LD4L::OreRDF::AddAggregatedResources.call(
67
+ ag2,
68
+ [RDF::URI("http://example.org/individual/b21"),
69
+ RDF::URI("http://example.org/individual/b22"),
70
+ RDF::URI("http://example.org/individual/b23")])
71
+ LD4L::OreRDF::PersistAggregation.call(ag2)
72
+
73
+ ag3 = LD4L::OreRDF::CreateAggregation.call(
74
+ id: "http::/example.org/ag3",
75
+ title: "Aggregation 3",
76
+ description: "Test description of aggregation 3.",
77
+ owner: p )
78
+ LD4L::OreRDF::AddAggregatedResources.call(
79
+ ag3,
80
+ [RDF::URI("http://example.org/individual/b31"),
81
+ RDF::URI("http://example.org/individual/b32"),
82
+ RDF::URI("http://example.org/individual/b33")])
83
+ LD4L::OreRDF::PersistAggregation.call(ag3)
84
+ end
85
+ after do
86
+ ActiveTriples::Repositories.add_repository :default, RDF::Repository.new
87
+ end
88
+
89
+ xit "should find aggregation by rdf_subject" do
90
+
91
+
92
+ # TODO not sure how to write the criteria for this test
93
+
94
+
95
+ aggregations = LD4L::OreRDF::FindAggregations.call(:criteria => { :subject => "http::/example.org/ag3"})
96
+ expect(aggregations).not_to include "http::/example.org/ag1"
97
+ expect(aggregations).not_to include "http::/example.org/ag2"
98
+ expect(aggregations).to include "http::/example.org/ag3"
99
+ expect(aggregations.size).to eq 1
100
+ end
101
+
102
+ it "should find aggregation by literal criteria (aka title)" do
103
+ aggregations = LD4L::OreRDF::FindAggregations.call(:criteria => { RDF::DC.title => "Aggregation 2"})
104
+ expect(aggregations).not_to include "http::/example.org/ag1"
105
+ expect(aggregations).to include "http::/example.org/ag2"
106
+ expect(aggregations).not_to include "http::/example.org/ag3"
107
+ expect(aggregations.size).to eq 1
108
+ end
109
+
110
+ it "should find aggregation by rdf uri criteria (aka aggregates)" do
111
+ aggregations = LD4L::OreRDF::FindAggregations.call(
112
+ :criteria => { RDFVocabularies::ORE.aggregates => RDF::URI("http://example.org/individual/b32")})
113
+ expect(aggregations).not_to include "http::/example.org/ag1"
114
+ expect(aggregations).not_to include "http::/example.org/ag2"
115
+ expect(aggregations).to include "http::/example.org/ag3"
116
+ expect(aggregations.size).to eq 1
117
+ end
118
+
119
+ it "should return empty array when criteria (aka title) doesn't match any aggregations" do
120
+ aggregations = LD4L::OreRDF::FindAggregations.call(:criteria => { RDF::DC.title => "NON-EXISTENT TITLE"})
121
+ expect(aggregations).to eq []
122
+ end
123
+
124
+ it "should find all aggregations" do
125
+ aggregations = LD4L::OreRDF::FindAggregations.call
126
+ expect(aggregations).to include "http::/example.org/ag1"
127
+ expect(aggregations).to include "http::/example.org/ag2"
128
+ expect(aggregations).to include "http::/example.org/ag3"
129
+ expect(aggregations.size).to eq 3
130
+ end
131
+
132
+ it "should resume all aggregation & proxies when resume = true" do
133
+ aggregations = LD4L::OreRDF::FindAggregations.call(:resume => true)
134
+ ag_uris = ["http::/example.org/ag1","http::/example.org/ag2","http::/example.org/ag3"]
135
+ aggregations.each_key do |a|
136
+ expect(a).to be_kind_of(RDF::URI)
137
+ expect(aggregations[a]).to be_kind_of(LD4L::OreRDF::Aggregation)
138
+ expect(ag_uris).to include aggregations[a].aggregation_resource.rdf_subject.to_str
139
+ end
140
+ expect(aggregations.size).to eq 3
141
+ end
142
+
143
+ it "should return values for specified literal property in results when criteria specified" do
144
+ aggregations = LD4L::OreRDF::FindAggregations.call(
145
+ :criteria => { RDF::DC.title => "Aggregation 2" },
146
+ :properties => { :description => RDF::DC.description } )
147
+ expect(aggregations).to eq ( { RDF::URI("http::/example.org/ag2") => {
148
+ :description => RDF::Literal("Test description of aggregation 2.") } } )
149
+ end
150
+
151
+ it "should return values for specified properties in results when criteria not specified" do
152
+ aggregations = LD4L::OreRDF::FindAggregations.call(
153
+ :properties => { :title => RDF::DC.title, :description => RDF::DC.description } )
154
+ expect(aggregations.size).to eq 3
155
+ expect(aggregations).to have_key RDF::URI("http::/example.org/ag1")
156
+ expect(aggregations).to have_key RDF::URI("http::/example.org/ag2")
157
+ expect(aggregations).to have_key RDF::URI("http::/example.org/ag3")
158
+ expect(aggregations[RDF::URI("http::/example.org/ag1")]).to eq( {
159
+ :title => RDF::Literal("Aggregation 1"),
160
+ :description => RDF::Literal("Test description of aggregation 1.") } )
161
+ expect(aggregations[RDF::URI("http::/example.org/ag2")]).to eq( {
162
+ :title => RDF::Literal("Aggregation 2"),
163
+ :description => RDF::Literal("Test description of aggregation 2.") } )
164
+ expect(aggregations[RDF::URI("http::/example.org/ag3")]).to eq( {
165
+ :title => RDF::Literal("Aggregation 3"),
166
+ :description => RDF::Literal("Test description of aggregation 3.") } )
167
+ end
168
+
169
+
170
+ xit "should search another repository if specified" do
171
+ # TODO WRITE TEST
172
+ end
173
+ end
174
+
175
+ context "when arguments are invalid" do
176
+ it "should raise error when repository isn't a symbol" do
177
+ expect{ LD4L::OreRDF::FindAggregations.call(:repository => 'BAD VALUE') }.to raise_error(
178
+ ArgumentError,'repository must be a symbol')
179
+ end
180
+
181
+ it "should raise error when repository is a symbol, but isn't a registered repository" do
182
+ expect{ LD4L::OreRDF::FindAggregations.call(:repository => :nonexistent_repo) }.to raise_error(
183
+ ArgumentError,'repository must be a registered repository')
184
+ end
185
+
186
+ it "should raise error when resume is other than true or false" do
187
+ expect{ LD4L::OreRDF::FindAggregations.call(:resume => 'BAD VALUE') }.to raise_error(
188
+ ArgumentError,'resume must be true or false' )
189
+ end
190
+
191
+ xit "should raise error when criteria is other than nil or a Hash" do
192
+ expect{ LD4L::OreRDF::FindAggregations.call(:criteria => 'BAD VALUE') }.to raise_error(
193
+ ArgumentError,'criteria must be a hash of attribute-value pairs for searching for aggregations' )
194
+ end
195
+ end
196
+
197
+ end
198
+ end