qa 4.0.0 → 4.1.0

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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/controllers/qa/linked_data_terms_controller.rb +30 -9
  4. data/app/controllers/qa/terms_controller.rb +3 -2
  5. data/app/models/qa/linked_data/config/context_property_map.rb +6 -25
  6. data/app/services/qa/iri_template_service.rb +32 -24
  7. data/app/services/qa/linked_data/authority_service.rb +8 -0
  8. data/app/services/qa/linked_data/authority_url_service.rb +27 -8
  9. data/app/services/qa/linked_data/deep_sort_service.rb +3 -2
  10. data/app/services/qa/linked_data/graph_service.rb +13 -0
  11. data/app/services/qa/linked_data/language_service.rb +12 -0
  12. data/app/services/qa/linked_data/language_sort_service.rb +7 -2
  13. data/app/services/qa/linked_data/ldpath_service.rb +40 -0
  14. data/app/services/qa/linked_data/mapper/graph_ldpath_mapper_service.rb +49 -0
  15. data/app/services/qa/linked_data/mapper/graph_mapper_service.rb +3 -11
  16. data/app/services/qa/linked_data/mapper/graph_predicate_mapper_service.rb +40 -0
  17. data/app/services/qa/linked_data/mapper/search_results_mapper_service.rb +58 -11
  18. data/app/services/qa/linked_data/mapper/term_results_mapper_service.rb +80 -0
  19. data/config/authorities/linked_data/loc.json +13 -7
  20. data/config/authorities/linked_data/oclc_fast.json +13 -8
  21. data/lib/generators/qa/discogs/USAGE +10 -0
  22. data/lib/generators/qa/discogs/discogs_generator.rb +12 -0
  23. data/lib/generators/qa/discogs/templates/config/discogs-formats.yml +346 -0
  24. data/lib/generators/qa/discogs/templates/config/discogs-genres.yml +627 -0
  25. data/lib/generators/qa/install/templates/config/initializers/qa.rb +4 -0
  26. data/lib/qa.rb +6 -0
  27. data/lib/qa/authorities.rb +2 -0
  28. data/lib/qa/authorities/discogs.rb +28 -0
  29. data/lib/qa/authorities/discogs/discogs_instance_builder.rb +145 -0
  30. data/lib/qa/authorities/discogs/discogs_translation.rb +126 -0
  31. data/lib/qa/authorities/discogs/discogs_utils.rb +89 -0
  32. data/lib/qa/authorities/discogs/discogs_works_builder.rb +153 -0
  33. data/lib/qa/authorities/discogs/generic_authority.rb +151 -0
  34. data/lib/qa/authorities/discogs_subauthority.rb +9 -0
  35. data/lib/qa/authorities/linked_data/config.rb +7 -3
  36. data/lib/qa/authorities/linked_data/config/search_config.rb +99 -11
  37. data/lib/qa/authorities/linked_data/config/term_config.rb +112 -8
  38. data/lib/qa/authorities/linked_data/find_term.rb +154 -84
  39. data/lib/qa/authorities/linked_data/search_query.rb +76 -13
  40. data/lib/qa/configuration.rb +8 -0
  41. data/lib/qa/version.rb +1 -1
  42. data/spec/controllers/linked_data_terms_controller_spec.rb +151 -30
  43. data/spec/controllers/terms_controller_spec.rb +4 -0
  44. data/spec/features/linked_data/language_spec.rb +298 -0
  45. data/spec/fixtures/authorities/linked_data/lod_full_config.json +21 -5
  46. data/spec/fixtures/authorities/linked_data/lod_lang_defaults.json +4 -4
  47. data/spec/fixtures/authorities/linked_data/lod_lang_multi_defaults.json +4 -4
  48. data/spec/fixtures/authorities/linked_data/lod_lang_no_defaults.json +4 -5
  49. data/spec/fixtures/authorities/linked_data/lod_lang_param.json +4 -4
  50. data/spec/fixtures/authorities/linked_data/lod_term_uri_param_config.json +1 -1
  51. data/spec/fixtures/discogs-find-response-json.json +1 -0
  52. data/spec/fixtures/discogs-find-response-jsonld-master.json +1 -0
  53. data/spec/fixtures/discogs-find-response-jsonld-release.json +1 -0
  54. data/spec/fixtures/discogs-id-matches-master.json +1 -0
  55. data/spec/fixtures/discogs-id-matches-release.json +1 -0
  56. data/spec/fixtures/discogs-id-not-found-master.json +1 -0
  57. data/spec/fixtures/discogs-id-not-found-release.json +1 -0
  58. data/spec/fixtures/discogs-search-response-no-auth.json +1 -0
  59. data/spec/fixtures/discogs-search-response-no-subauth.json +1 -0
  60. data/spec/fixtures/discogs-search-response-subauth.json +1 -0
  61. data/spec/fixtures/lod_lang_search_enesfrde.rdf.xml +60 -0
  62. data/spec/fixtures/lod_lang_search_sv.rdf.xml +42 -0
  63. data/spec/fixtures/lod_loc_term_found.rdf.xml +5 -0
  64. data/spec/lib/authorities/discogs/generic_authority_spec.rb +235 -0
  65. data/spec/lib/authorities/discogs_spec.rb +17 -0
  66. data/spec/lib/authorities/linked_data/config_spec.rb +68 -5
  67. data/spec/lib/authorities/linked_data/find_term_spec.rb +298 -3
  68. data/spec/lib/authorities/linked_data/generic_authority_spec.rb +46 -485
  69. data/spec/lib/authorities/linked_data/search_config_spec.rb +154 -3
  70. data/spec/lib/authorities/linked_data/search_query_spec.rb +240 -3
  71. data/spec/lib/authorities/linked_data/term_config_spec.rb +193 -5
  72. data/spec/lib/configuration_spec.rb +18 -0
  73. data/spec/models/linked_data/config/context_property_map_spec.rb +3 -31
  74. data/spec/services/iri_template_service_spec.rb +54 -12
  75. data/spec/{lib/authorities → services}/linked_data/authority_service_spec.rb +47 -0
  76. data/spec/services/linked_data/language_service_spec.rb +52 -11
  77. data/spec/services/linked_data/ldpath_service_spec.rb +61 -0
  78. data/spec/services/linked_data/mapper/graph_ldpath_mapper_service_spec.rb +118 -0
  79. data/spec/services/linked_data/mapper/graph_predicate_mapper_service_spec.rb +110 -0
  80. data/spec/services/linked_data/mapper/term_results_mapper_service_spec.rb +94 -0
  81. data/spec/spec_helper.rb +1 -1
  82. data/spec/support/matchers/include_hash.rb +5 -0
  83. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -0
  84. metadata +73 -5
  85. data/lib/qa/authorities/linked_data/rdf_helper.rb +0 -49
@@ -1,7 +1,302 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe Qa::Authorities::LinkedData::FindTerm do
4
- # all term fetch functionality is tested in spec/lib/authorities/linked_data/generic_authority_spec.rb and
5
- # spec/controllers/linked_data_term_controller_spec.rb
6
- it "is tested elsewhere"
4
+ describe '#find' do
5
+ let(:lod_oclc) { described_class.new(term_config(:OCLC_FAST)) }
6
+ let(:lod_loc) { described_class.new(term_config(:LOC)) }
7
+
8
+ context 'basic parameter testing' do
9
+ context 'with bad id' do
10
+ before do
11
+ stub_request(:get, 'http://id.worldcat.org/fast/FAKE_ID')
12
+ .to_return(status: 404, body: '', headers: {})
13
+ end
14
+ it 'raises a TermNotFound exception' do
15
+ expect { lod_oclc.find('FAKE_ID') }.to raise_error Qa::TermNotFound, /.*\/FAKE_ID\ Not Found - Term may not exist at LOD Authority./
16
+ end
17
+ end
18
+ end
19
+
20
+ context 'performance stats' do
21
+ before do
22
+ stub_request(:get, 'http://id.worldcat.org/fast/530369')
23
+ .to_return(status: 200, body: webmock_fixture('lod_oclc_term_found.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
24
+ end
25
+ context 'when set to true' do
26
+ let :results do
27
+ lod_oclc.find('530369', performance_data: true)
28
+ end
29
+ it 'includes performance in return hash' do
30
+ expect(results.keys).to match_array [:performance, :results]
31
+ expect(results[:performance].keys).to match_array [:predicate_count, :fetch_time_s, :normalization_time_s, :total_time_s]
32
+ expect(results[:performance][:predicate_count]).to eq 7
33
+ expect(results[:performance][:total_time_s]).to eq results[:performance][:fetch_time_s] + results[:performance][:normalization_time_s]
34
+ end
35
+ end
36
+
37
+ context 'when set to false' do
38
+ let :results do
39
+ lod_oclc.find('530369', performance_data: false)
40
+ end
41
+ it 'does NOT include performance in return hash' do
42
+ expect(results.keys).not_to include(:performance)
43
+ end
44
+ end
45
+
46
+ context 'when using default setting' do
47
+ let :results do
48
+ lod_oclc.find('530369')
49
+ end
50
+ it 'does NOT include performance in return hash' do
51
+ expect(results.keys).not_to include(:performance)
52
+ end
53
+ end
54
+ end
55
+
56
+ context 'in OCLC_FAST authority' do
57
+ context 'term found' do
58
+ let :results do
59
+ stub_request(:get, 'http://id.worldcat.org/fast/530369')
60
+ .to_return(status: 200, body: webmock_fixture('lod_oclc_term_found.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
61
+ lod_oclc.find('530369')
62
+ end
63
+ it 'has correct primary predicate values' do
64
+ expect(results[:uri]).to eq('http://id.worldcat.org/fast/530369')
65
+ expect(results[:id]).to eq('530369')
66
+ expect(results[:label]).to eq ['Cornell University']
67
+ expect(results[:altlabel]).to include('Ithaca (N.Y.). Cornell University', "Kornel\\xCA\\xB9skii universitet", "K\\xCA\\xBBang-nai-erh ta hs\\xC3\\xBCeh")
68
+ expect(results[:altlabel].size).to eq 3
69
+ expect(results[:sameas]).to include('http://id.loc.gov/authorities/names/n79021621', 'https://viaf.org/viaf/126293486')
70
+ end
71
+
72
+ it 'has correct number of predicates in pred-obj list' do
73
+ expect(results['predicates'].count).to eq 7
74
+ end
75
+
76
+ it 'has primary predicates in pred-obj list' do
77
+ expect(results['predicates']['http://purl.org/dc/terms/identifier']).to eq ['530369']
78
+ expect(results['predicates']['http://www.w3.org/2004/02/skos/core#prefLabel']).to eq ['Cornell University']
79
+ expect(results['predicates']['http://www.w3.org/2004/02/skos/core#altLabel'])
80
+ .to include('Ithaca (N.Y.). Cornell University', "Kornel\\xCA\\xB9skii universitet",
81
+ "K\\xCA\\xBBang-nai-erh ta hs\\xC3\\xBCeh")
82
+ expect(results['predicates']['http://schema.org/sameAs']).to include('http://id.loc.gov/authorities/names/n79021621', 'https://viaf.org/viaf/126293486')
83
+ end
84
+
85
+ it 'has unspecified predicate values' do
86
+ expect(results['predicates']['http://www.w3.org/1999/02/22-rdf-syntax-ns#type']).to eq ['http://schema.org/Organization']
87
+ expect(results['predicates']['http://www.w3.org/2004/02/skos/core#inScheme'])
88
+ .to include('http://id.worldcat.org/fast/ontology/1.0/#fast', 'http://id.worldcat.org/fast/ontology/1.0/#facet-Corporate')
89
+ expect(results['predicates']['http://schema.org/name'])
90
+ .to include('Cornell University', 'Ithaca (N.Y.). Cornell University', "Kornel\\xCA\\xB9skii universitet",
91
+ "K\\xCA\\xBBang-nai-erh ta hs\\xC3\\xBCeh")
92
+ end
93
+ end
94
+ end
95
+
96
+ context 'in LOC authority' do
97
+ context 'term found' do
98
+ let :results do
99
+ stub_request(:get, 'http://id.loc.gov/authorities/subjects/sh85118553')
100
+ .to_return(status: 200, body: webmock_fixture('lod_loc_term_found.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
101
+ lod_loc.find('sh 85118553', subauth: 'subjects')
102
+ end
103
+ it 'has correct primary predicate values' do
104
+ expect(results[:uri]).to eq 'http://id.loc.gov/authorities/subjects/sh85118553'
105
+ expect(results[:uri]).to be_kind_of String
106
+ expect(results[:id]).to eq 'sh 85118553'
107
+ expect(results[:label]).to eq ['Science']
108
+ expect(results[:altlabel]).to include('Natural science', 'Science of science', 'Sciences')
109
+ expect(results[:narrower]).to include('http://id.loc.gov/authorities/subjects/sh92004048')
110
+ expect(results[:narrower].first).to be_kind_of String
111
+ end
112
+
113
+ it 'has correct number of predicates in pred-obj list' do
114
+ expect(results['predicates'].count).to eq 15
115
+ end
116
+
117
+ it 'has primary predicates in pred-obj list' do
118
+ expect(results['predicates']['http://id.loc.gov/vocabulary/identifiers/lccn']).to eq ['sh 85118553']
119
+ expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#authoritativeLabel']).to eq ['Science']
120
+ expect(results['predicates']['http://www.w3.org/2004/02/skos/core#prefLabel']).to eq ['Science']
121
+ expect(results['predicates']['http://www.w3.org/2004/02/skos/core#altLabel']).to include('Natural science', 'Science of science', 'Sciences')
122
+ end
123
+
124
+ it 'has loc mads predicate values' do
125
+ expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#classification']).to eq ['Q']
126
+ expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#isMemberOfMADSCollection'])
127
+ .to include('http://id.loc.gov/authorities/subjects/collection_LCSHAuthorizedHeadings',
128
+ 'http://id.loc.gov/authorities/subjects/collection_LCSH_General',
129
+ 'http://id.loc.gov/authorities/subjects/collection_SubdivideGeographically')
130
+ expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#hasCloseExternalAuthority'])
131
+ .to include('http://data.bnf.fr/ark:/12148/cb12321484k', 'http://data.bnf.fr/ark:/12148/cb119673416',
132
+ 'http://data.bnf.fr/ark:/12148/cb119934236', 'http://data.bnf.fr/ark:/12148/cb12062047t',
133
+ 'http://data.bnf.fr/ark:/12148/cb119469567', 'http://data.bnf.fr/ark:/12148/cb11933232c',
134
+ 'http://data.bnf.fr/ark:/12148/cb122890536', 'http://data.bnf.fr/ark:/12148/cb121155321',
135
+ 'http://data.bnf.fr/ark:/12148/cb15556043g', 'http://data.bnf.fr/ark:/12148/cb123662513',
136
+ 'http://d-nb.info/gnd/4066562-8', 'http://data.bnf.fr/ark:/12148/cb120745812',
137
+ 'http://data.bnf.fr/ark:/12148/cb11973101n', 'http://data.bnf.fr/ark:/12148/cb13328497r')
138
+ expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#isMemberOfMADSScheme'])
139
+ .to eq ['http://id.loc.gov/authorities/subjects']
140
+ expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#editorialNote'])
141
+ .to eq ['headings beginning with the word [Scientific;] and subdivision [Science] under ethnic groups and individual wars, e.g. [World War, 1939-1945--Science]']
142
+ end
143
+
144
+ it 'has more unspecified predicate values' do
145
+ expect(results['predicates']['http://www.w3.org/1999/02/22-rdf-syntax-ns#type']).to include('http://www.loc.gov/mads/rdf/v1#Topic', 'http://www.loc.gov/mads/rdf/v1#Authority', 'http://www.w3.org/2004/02/skos/core#Concept')
146
+ expect(results['predicates']['http://www.w3.org/2002/07/owl#sameAs']).to include('info:lc/authorities/sh85118553', 'http://id.loc.gov/authorities/sh85118553#concept')
147
+ expect(results['predicates']['http://www.w3.org/2004/02/skos/core#closeMatch'])
148
+ .to include('http://data.bnf.fr/ark:/12148/cb12321484k', 'http://data.bnf.fr/ark:/12148/cb119673416',
149
+ 'http://data.bnf.fr/ark:/12148/cb119934236', 'http://data.bnf.fr/ark:/12148/cb12062047t',
150
+ 'http://data.bnf.fr/ark:/12148/cb119469567', 'http://data.bnf.fr/ark:/12148/cb11933232c',
151
+ 'http://data.bnf.fr/ark:/12148/cb122890536', 'http://data.bnf.fr/ark:/12148/cb121155321',
152
+ 'http://data.bnf.fr/ark:/12148/cb15556043g', 'http://data.bnf.fr/ark:/12148/cb123662513',
153
+ 'http://d-nb.info/gnd/4066562-8', 'http://data.bnf.fr/ark:/12148/cb120745812',
154
+ 'http://data.bnf.fr/ark:/12148/cb11973101n', 'http://data.bnf.fr/ark:/12148/cb13328497r')
155
+ expect(results['predicates']['http://www.w3.org/2004/02/skos/core#editorial'])
156
+ .to eq ['headings beginning with the word [Scientific;] and subdivision [Science] under ethnic groups and individual wars, e.g. [World War, 1939-1945--Science]']
157
+ expect(results['predicates']['http://www.w3.org/2004/02/skos/core#inScheme']).to eq ['http://id.loc.gov/authorities/subjects']
158
+ end
159
+ end
160
+ end
161
+
162
+ # rubocop:disable RSpec/NestedGroups
163
+ describe "language processing" do
164
+ context "when filtering #find result" do
165
+ context "and lang NOT passed in" do
166
+ context "and NO language defined in authority config" do
167
+ context "and NO language defined in Qa config" do
168
+ let(:lod_lang_no_defaults) { described_class.new(term_config(:LOD_LANG_NO_DEFAULTS)) }
169
+ let :results do
170
+ stub_request(:get, "http://aims.fao.org/aos/agrovoc/c_9513")
171
+ .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
172
+ lod_lang_no_defaults.find('http://aims.fao.org/aos/agrovoc/c_9513')
173
+ end
174
+
175
+ before do
176
+ Qa.config.default_language = []
177
+ end
178
+
179
+ after do
180
+ Qa.config.default_language = :en
181
+ end
182
+
183
+ it "is not filtered" do
184
+ expect(results[:label]).to eq ['buttermilk', 'Babeurre']
185
+ expect(results[:altlabel]).to eq ['yummy', 'délicieux']
186
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
187
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
188
+ end
189
+ end
190
+ context "and default_language is defined in Qa config" do
191
+ let(:lod_lang_no_defaults) { described_class.new(term_config(:LOD_LANG_NO_DEFAULTS)) }
192
+ let :results do
193
+ stub_request(:get, "http://aims.fao.org/aos/agrovoc/c_9513")
194
+ .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
195
+ lod_lang_no_defaults.find('http://aims.fao.org/aos/agrovoc/c_9513')
196
+ end
197
+ it "filters using Qa configured default for summary but not for predicates list" do
198
+ expect(results[:label]).to eq ['buttermilk']
199
+ expect(results[:altlabel]).to eq ['yummy']
200
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
201
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
202
+ end
203
+ end
204
+ end
205
+ context "and language IS defined in authority config" do
206
+ let(:lod_lang_defaults) { described_class.new(term_config(:LOD_LANG_DEFAULTS)) }
207
+ let :results do
208
+ stub_request(:get, "http://aims.fao.org/aos/agrovoc/c_9513")
209
+ .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
210
+ lod_lang_defaults.find('http://aims.fao.org/aos/agrovoc/c_9513')
211
+ end
212
+ it "filters using authority configured language for summary but not for predicates list" do
213
+ expect(results[:label]).to eq ['Babeurre']
214
+ expect(results[:altlabel]).to eq ['délicieux']
215
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
216
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
217
+ end
218
+ end
219
+ context "and multiple languages ARE defined in authority config" do
220
+ let(:lod_lang_multi_defaults) { described_class.new(term_config(:LOD_LANG_MULTI_DEFAULTS)) }
221
+ let :results do
222
+ stub_request(:get, "http://aims.fao.org/aos/agrovoc/c_9513")
223
+ .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfrde.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
224
+ lod_lang_multi_defaults.find('http://aims.fao.org/aos/agrovoc/c_9513')
225
+ end
226
+ it "filters using authority configured languages for summary but not for predicates list" do
227
+ expect(results[:label]).to eq ['buttermilk', 'Babeurre']
228
+ expect(results[:altlabel]).to eq ['yummy', 'délicieux']
229
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre", "Buttermilch")
230
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux", "lecker")
231
+ end
232
+ end
233
+ end
234
+
235
+ context "and lang IS passed in" do
236
+ let(:lod_lang_defaults) { described_class.new(term_config(:LOD_LANG_DEFAULTS)) }
237
+ let :results do
238
+ stub_request(:get, "http://aims.fao.org/aos/agrovoc/c_9513")
239
+ .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
240
+ lod_lang_defaults.find('http://aims.fao.org/aos/agrovoc/c_9513', language: 'fr')
241
+ end
242
+ it "is filtered to specified language" do
243
+ expect(results[:label]).to eq ['Babeurre']
244
+ expect(results[:altlabel]).to eq ['délicieux']
245
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
246
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
247
+ end
248
+ end
249
+
250
+ context "and result does not have altlabel" do
251
+ let(:lod_lang_defaults) { described_class.new(term_config(:LOD_LANG_DEFAULTS)) }
252
+ let :results do
253
+ stub_request(:get, "http://aims.fao.org/aos/agrovoc/c_9513")
254
+ .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr_noalt.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
255
+ lod_lang_defaults.find('http://aims.fao.org/aos/agrovoc/c_9513', language: 'fr')
256
+ end
257
+ it "is filtered to specified language" do
258
+ expect(results[:label]).to eq ['Babeurre']
259
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
260
+ end
261
+ end
262
+
263
+ context "when replacement on authority term URL" do
264
+ context "and using default" do
265
+ let(:lod_lang_param) { described_class.new(term_config(:LOD_LANG_PARAM)) }
266
+ let :results do
267
+ stub_request(:get, "http://aims.fao.org/aos/agrovoc/c_9513?lang=en")
268
+ .to_return(status: 200, body: webmock_fixture("lod_lang_term_en.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
269
+ lod_lang_param.find('http://aims.fao.org/aos/agrovoc/c_9513')
270
+ end
271
+ it "is correctly parsed" do
272
+ expect(results[:label]).to eq ['buttermilk']
273
+ expect(results[:altlabel]).to eq ['yummy']
274
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to eq ['buttermilk']
275
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to eq ['yummy']
276
+ end
277
+ end
278
+
279
+ context "and lang specified" do
280
+ let(:lod_lang_param) { described_class.new(term_config(:LOD_LANG_PARAM)) }
281
+ let :results do
282
+ stub_request(:get, "http://aims.fao.org/aos/agrovoc/c_9513?lang=fr")
283
+ .to_return(status: 200, body: webmock_fixture("lod_lang_term_fr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
284
+ lod_lang_param.find('http://aims.fao.org/aos/agrovoc/c_9513', replacements: { 'lang' => 'fr' })
285
+ end
286
+ it "is correctly parsed" do
287
+ expect(results[:label]).to eq ['Babeurre']
288
+ expect(results[:altlabel]).to eq ['délicieux']
289
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to eq ['Babeurre']
290
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to eq ['délicieux']
291
+ end
292
+ end
293
+ end
294
+ end
295
+ end
296
+ # rubocop:enable RSpec/NestedGroups
297
+ end
298
+
299
+ def term_config(authority_name)
300
+ Qa::Authorities::LinkedData::Config.new(authority_name).term
301
+ end
7
302
  end
@@ -1,491 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe Qa::Authorities::LinkedData::GenericAuthority do
4
- describe '#search' do
5
- let(:lod_oclc) { described_class.new(:OCLC_FAST) }
6
-
7
- context 'in OCLC_FAST authority' do
8
- context '0 search results' do
9
- let :results do
10
- stub_request(:get, 'http://experimental.worldcat.org/fast/search?maximumRecords=3&query=cql.any%20all%20%22supercalifragilisticexpialidocious%22&sortKeys=usage')
11
- .to_return(status: 200, body: webmock_fixture('lod_oclc_query_no_results.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
12
- lod_oclc.search('supercalifragilisticexpialidocious', replacements: { 'maximumRecords' => '3' })
13
- end
14
- it 'returns an empty array' do
15
- expect(results).to eq([])
16
- end
17
- end
18
-
19
- context '3 search results' do
20
- let :results do
21
- stub_request(:get, 'http://experimental.worldcat.org/fast/search?maximumRecords=3&query=cql.any%20all%20%22cornell%22&sortKeys=usage')
22
- .to_return(status: 200, body: webmock_fixture('lod_oclc_all_query_3_results.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
23
- lod_oclc.search('cornell', replacements: { 'maximumRecords' => '3' })
24
- end
25
- it 'is correctly parsed' do
26
- expect(results.count).to eq(3)
27
- expect(results.first).to eq(uri: 'http://id.worldcat.org/fast/530369', id: '530369', label: 'Cornell University')
28
- expect(results.second).to eq(uri: 'http://id.worldcat.org/fast/5140', id: '5140', label: 'Cornell, Joseph')
29
- expect(results.third).to eq(uri: 'http://id.worldcat.org/fast/557490', id: '557490', label: 'New York State School of Industrial and Labor Relations')
30
- end
31
- end
32
- end
33
-
34
- context 'in OCLC_FAST authority and personal_name subauthority' do
35
- context '0 search results' do
36
- let :results do
37
- stub_request(:get, 'http://experimental.worldcat.org/fast/search?maximumRecords=3&query=oclc.personalName%20all%20%22supercalifragilisticexpialidocious%22&sortKeys=usage')
38
- .to_return(status: 200, body: webmock_fixture('lod_oclc_query_no_results.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
39
- lod_oclc.search('supercalifragilisticexpialidocious', subauth: 'personal_name', replacements: { 'maximumRecords' => '3' })
40
- end
41
- it 'returns an empty array' do
42
- expect(results).to eq([])
43
- end
44
- end
45
-
46
- context '3 search results' do
47
- let :results do
48
- stub_request(:get, 'http://experimental.worldcat.org/fast/search?maximumRecords=3&query=oclc.personalName%20all%20%22cornell%22&sortKeys=usage')
49
- .to_return(status: 200, body: webmock_fixture('lod_oclc_personalName_query_3_results.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
50
- lod_oclc.search('cornell', subauth: 'personal_name', replacements: { 'maximumRecords' => '3' })
51
- end
52
- it 'is correctly parsed' do
53
- expect(results.count).to eq(3)
54
- expect(results.first).to eq(uri: 'http://id.worldcat.org/fast/409667', id: '409667', label: 'Cornell, Ezra, 1807-1874')
55
- expect(results.second).to eq(uri: 'http://id.worldcat.org/fast/5140', id: '5140', label: 'Cornell, Joseph')
56
- expect(results.third).to eq(uri: 'http://id.worldcat.org/fast/72456', id: '72456', label: 'Cornell, Sarah Maria, 1802-1832')
57
- end
58
- end
59
- end
60
-
61
- context 'when id predicate is not specified' do
62
- let(:min_authority) { described_class.new(:LOD_MIN_CONFIG) }
63
- let :results do
64
- stub_request(:get, 'http://localhost/test_default/search?query=peanuts')
65
- .to_return(status: 200, body: webmock_fixture('lod_oclc_personalName_query_3_results.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
66
- min_authority.search('peanuts')
67
- end
68
- it 'uses subject uri for id' do
69
- expect(results.count).to eq(3)
70
- expect(results.first).to eq(uri: 'http://id.worldcat.org/fast/409667', id: 'http://id.worldcat.org/fast/409667', label: 'Cornell, Ezra, 1807-1874')
71
- expect(results.second).to eq(uri: 'http://id.worldcat.org/fast/5140', id: 'http://id.worldcat.org/fast/5140', label: 'Cornell, Joseph')
72
- expect(results.third).to eq(uri: 'http://id.worldcat.org/fast/72456', id: 'http://id.worldcat.org/fast/72456', label: 'Cornell, Sarah Maria, 1802-1832')
73
- end
74
- end
75
-
76
- # context 'in LOC authority' do
77
- # ###################################
78
- # ### SEARCH NOT SUPPORTED BY LOC ###
79
- # ###################################
80
- # # let(:lod_loc) { Qa::Authorities::LinkedData::GenericAuthority.new(:LOC) }
81
- # end
82
-
83
- # rubocop:disable RSpec/NestedGroups
84
- describe "language processing" do
85
- context "when filtering #search results" do
86
- context "and lang NOT passed in" do
87
- context "and NO language defined in authority config" do
88
- context "and NO language defined in Qa config" do
89
- let(:lod_lang_no_defaults) { described_class.new(:LOD_LANG_NO_DEFAULTS) }
90
- let :results do
91
- stub_request(:get, "http://localhost/test_no_default/search?query=milk")
92
- .to_return(status: 200, body: webmock_fixture("lod_lang_search_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
93
- lod_lang_no_defaults.search('milk')
94
- end
95
-
96
- before do
97
- Qa.config.default_language = []
98
- end
99
-
100
- after do
101
- Qa.config.default_language = :en
102
- end
103
-
104
- it "is not filtered" do
105
- expect(results.first[:label]).to eq('[buttermilk, Babeurre] (yummy, délicieux)')
106
- expect(results.second[:label]).to eq('[condensed milk, lait condensé] (creamy, crémeux)')
107
- expect(results.third[:label]).to eq('[dried milk, lait en poudre] (powdery, poudreux)')
108
- end
109
- end
110
-
111
- context "and default_language is defined in Qa config" do
112
- let(:lod_lang_no_defaults) { described_class.new(:LOD_LANG_NO_DEFAULTS) }
113
- let :results do
114
- stub_request(:get, "http://localhost/test_no_default/search?query=milk")
115
- .to_return(status: 200, body: webmock_fixture("lod_lang_search_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
116
- lod_lang_no_defaults.search('milk')
117
- end
118
- it "filters using Qa configured default" do
119
- expect(results.first[:label]).to eq('buttermilk (yummy)')
120
- expect(results.second[:label]).to eq('condensed milk (creamy)')
121
- expect(results.third[:label]).to eq('dried milk (powdery)')
122
- end
123
- end
124
- end
125
-
126
- context "and language IS defined in authority config" do
127
- let(:lod_lang_defaults) { described_class.new(:LOD_LANG_DEFAULTS) }
128
- let :results do
129
- stub_request(:get, "http://localhost/test_default/search?query=milk")
130
- .to_return(status: 200, body: webmock_fixture("lod_lang_search_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
131
- lod_lang_defaults.search('milk')
132
- end
133
- it "is filtered to authority defined language" do
134
- expect(results.first[:label]).to eq('Babeurre (délicieux)')
135
- expect(results.second[:label]).to eq('lait condensé (crémeux)')
136
- expect(results.third[:label]).to eq('lait en poudre (poudreux)')
137
- end
138
- end
139
- end
140
-
141
- context "and multiple languages ARE defined in authority config" do
142
- let(:lod_lang_multi_defaults) { described_class.new(:LOD_LANG_MULTI_DEFAULTS) }
143
- let :results do
144
- stub_request(:get, "http://localhost/test_default/search?query=milk")
145
- .to_return(status: 200, body: webmock_fixture("lod_lang_search_enfrde.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
146
- lod_lang_multi_defaults.search('milk')
147
- end
148
- it "is filtered to authority defined languages" do
149
- expect(results.first[:label]).to eq('[buttermilk, Babeurre] (yummy, délicieux)')
150
- expect(results.second[:label]).to eq('[condensed milk, lait condensé] (creamy, crémeux)')
151
- expect(results.third[:label]).to eq('[dried milk, lait en poudre] (powdery, poudreux)')
152
- end
153
- end
154
-
155
- context "and language IS passed in to search" do
156
- let(:lod_lang_defaults) { described_class.new(:LOD_LANG_DEFAULTS) }
157
- let :results do
158
- stub_request(:get, "http://localhost/test_default/search?query=milk")
159
- .to_return(status: 200, body: webmock_fixture("lod_lang_search_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
160
- lod_lang_defaults.search('milk', language: :fr)
161
- end
162
- it "is filtered to specified language" do
163
- expect(results.first[:label]).to eq('Babeurre (délicieux)')
164
- expect(results.second[:label]).to eq('lait condensé (crémeux)')
165
- expect(results.third[:label]).to eq('lait en poudre (poudreux)')
166
- end
167
- end
168
-
169
- context "when replacement on authority search URL" do
170
- context "and using default" do
171
- let(:lod_lang_param) { described_class.new(:LOD_LANG_PARAM) }
172
- let :results do
173
- stub_request(:get, "http://localhost/test_replacement/search?lang=en&query=milk")
174
- .to_return(status: 200, body: webmock_fixture("lod_lang_search_en.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
175
- lod_lang_param.search("milk")
176
- end
177
- it "is correctly parsed" do
178
- expect(results.first[:label]).to eq('buttermilk (yummy)')
179
- expect(results.second[:label]).to eq('condensed milk (creamy)')
180
- expect(results.third[:label]).to eq('dried milk (powdery)')
181
- end
182
- end
183
-
184
- context "and lang specified" do
185
- let(:lod_lang_param) { described_class.new(:LOD_LANG_PARAM) }
186
- let :results do
187
- stub_request(:get, "http://localhost/test_replacement/search?query=milk&lang=fr")
188
- .to_return(status: 200, body: webmock_fixture("lod_lang_search_fr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
189
- lod_lang_param.search("milk", replacements: { 'lang' => 'fr' })
190
- end
191
- it "is correctly parsed" do
192
- expect(results.first[:label]).to eq('Babeurre (délicieux)')
193
- expect(results.second[:label]).to eq('lait condensé (crémeux)')
194
- expect(results.third[:label]).to eq('lait en poudre (poudreux)')
195
- end
196
- end
197
- end
198
- end
199
- end
200
- # rubocop:enable RSpec/NestedGroups
201
- end
202
-
203
- describe '#find' do
204
- let(:lod_oclc) { described_class.new(:OCLC_FAST) }
205
- let(:lod_loc) { described_class.new(:LOC) }
206
-
207
- context 'basic parameter testing' do
208
- context 'with bad id' do
209
- before do
210
- stub_request(:get, 'http://id.worldcat.org/fast/FAKE_ID')
211
- .to_return(status: 404, body: '', headers: {})
212
- end
213
- it 'raises a TermNotFound exception' do
214
- expect { lod_oclc.find('FAKE_ID') }.to raise_error Qa::TermNotFound, /.*\/FAKE_ID\ Not Found - Term may not exist at LOD Authority./
215
- end
216
- end
217
-
218
- # context 'with language specified' do
219
- # before do
220
- # stub_request(:get, 'http://id.worldcat.org/fast/FAKE_ID')
221
- # .to_return(status: 404, body: '', headers: {})
222
- # end
223
- # it 'raises a TermNotFound exception' do
224
- # expect { lod_oclc.find('FAKE_ID', language: :en) }.to raise_error Qa::TermNotFound, /.*\/FAKE_ID\ Not Found - Term may not exist at LOD Authority./
225
- # end
226
- # end
227
- #
228
- # context 'with replacements specified' do
229
- # before do
230
- # stub_request(:get, 'http://id.worldcat.org/fast/FAKE_ID')
231
- # .to_return(status: 404, body: '', headers: {})
232
- # end
233
- # it 'raises a TermNotFound exception' do
234
- # expect { lod_oclc.find('FAKE_ID') }.to raise_error Qa::TermNotFound, /.*\/FAKE_ID\ Not Found - Term may not exist at LOD Authority./
235
- # end
236
- # end
237
- #
238
- # context 'with subauth specified' do
239
- # before do
240
- # stub_request(:get, 'http://id.worldcat.org/fast/FAKE_ID')
241
- # .to_return(status: 404, body: '', headers: {})
242
- # end
243
- # it 'raises a TermNotFound exception' do
244
- # expect { lod_oclc.find('FAKE_ID') }.to raise_error Qa::TermNotFound, /.*\/FAKE_ID\ Not Found - Term may not exist at LOD Authority./
245
- # end
246
- # end
247
- end
248
-
249
- context 'in OCLC_FAST authority' do
250
- context 'term found' do
251
- let :results do
252
- stub_request(:get, 'http://id.worldcat.org/fast/530369')
253
- .to_return(status: 200, body: webmock_fixture('lod_oclc_term_found.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
254
- lod_oclc.find('530369')
255
- end
256
- it 'has correct primary predicate values' do
257
- expect(results[:uri]).to eq('http://id.worldcat.org/fast/530369')
258
- expect(results[:id]).to eq('530369')
259
- expect(results[:label]).to eq ['Cornell University']
260
- expect(results[:altlabel]).to include('Ithaca (N.Y.). Cornell University', "Kornel\\xCA\\xB9skii universitet", "K\\xCA\\xBBang-nai-erh ta hs\\xC3\\xBCeh")
261
- expect(results[:altlabel].size).to eq 3
262
- expect(results[:sameas]).to include('http://id.loc.gov/authorities/names/n79021621', 'https://viaf.org/viaf/126293486')
263
- end
264
-
265
- it 'has correct number of predicates in pred-obj list' do
266
- expect(results['predicates'].count).to eq 7
267
- end
268
-
269
- it 'has primary predicates in pred-obj list' do
270
- expect(results['predicates']['http://purl.org/dc/terms/identifier']).to eq ['530369']
271
- expect(results['predicates']['http://www.w3.org/2004/02/skos/core#prefLabel']).to eq ['Cornell University']
272
- expect(results['predicates']['http://www.w3.org/2004/02/skos/core#altLabel'])
273
- .to include('Ithaca (N.Y.). Cornell University', "Kornel\\xCA\\xB9skii universitet",
274
- "K\\xCA\\xBBang-nai-erh ta hs\\xC3\\xBCeh")
275
- expect(results['predicates']['http://schema.org/sameAs']).to include('http://id.loc.gov/authorities/names/n79021621', 'https://viaf.org/viaf/126293486')
276
- end
277
-
278
- it 'has unspecified predicate values' do
279
- expect(results['predicates']['http://www.w3.org/1999/02/22-rdf-syntax-ns#type']).to eq ['http://schema.org/Organization']
280
- expect(results['predicates']['http://www.w3.org/2004/02/skos/core#inScheme'])
281
- .to include('http://id.worldcat.org/fast/ontology/1.0/#fast', 'http://id.worldcat.org/fast/ontology/1.0/#facet-Corporate')
282
- expect(results['predicates']['http://schema.org/name'])
283
- .to include('Cornell University', 'Ithaca (N.Y.). Cornell University', "Kornel\\xCA\\xB9skii universitet",
284
- "K\\xCA\\xBBang-nai-erh ta hs\\xC3\\xBCeh")
285
- end
286
- end
287
- end
288
-
289
- context 'in LOC authority' do
290
- context 'term found' do
291
- let :results do
292
- stub_request(:get, 'http://id.loc.gov/authorities/subjects/sh85118553')
293
- .to_return(status: 200, body: webmock_fixture('lod_loc_term_found.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
294
- lod_loc.find('sh85118553', subauth: 'subjects')
295
- end
296
- it 'has correct primary predicate values' do
297
- expect(results[:uri]).to eq 'http://id.loc.gov/authorities/subjects/sh85118553'
298
- expect(results[:id]).to eq 'sh 85118553'
299
- expect(results[:label]).to eq ['Science']
300
- expect(results[:altlabel]).to include('Natural science', 'Science of science', 'Sciences')
301
- end
302
-
303
- it 'has correct number of predicates in pred-obj list' do
304
- expect(results['predicates'].count).to eq 14
305
- end
306
-
307
- it 'has primary predicates in pred-obj list' do
308
- expect(results['predicates']['http://id.loc.gov/vocabulary/identifiers/lccn']).to eq ['sh 85118553']
309
- expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#authoritativeLabel']).to eq ['Science']
310
- expect(results['predicates']['http://www.w3.org/2004/02/skos/core#prefLabel']).to eq ['Science']
311
- expect(results['predicates']['http://www.w3.org/2004/02/skos/core#altLabel']).to include('Natural science', 'Science of science', 'Sciences')
312
- end
313
-
314
- it 'has loc mads predicate values' do
315
- expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#classification']).to eq ['Q']
316
- expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#isMemberOfMADSCollection'])
317
- .to include('http://id.loc.gov/authorities/subjects/collection_LCSHAuthorizedHeadings',
318
- 'http://id.loc.gov/authorities/subjects/collection_LCSH_General',
319
- 'http://id.loc.gov/authorities/subjects/collection_SubdivideGeographically')
320
- expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#hasCloseExternalAuthority'])
321
- .to include('http://data.bnf.fr/ark:/12148/cb12321484k', 'http://data.bnf.fr/ark:/12148/cb119673416',
322
- 'http://data.bnf.fr/ark:/12148/cb119934236', 'http://data.bnf.fr/ark:/12148/cb12062047t',
323
- 'http://data.bnf.fr/ark:/12148/cb119469567', 'http://data.bnf.fr/ark:/12148/cb11933232c',
324
- 'http://data.bnf.fr/ark:/12148/cb122890536', 'http://data.bnf.fr/ark:/12148/cb121155321',
325
- 'http://data.bnf.fr/ark:/12148/cb15556043g', 'http://data.bnf.fr/ark:/12148/cb123662513',
326
- 'http://d-nb.info/gnd/4066562-8', 'http://data.bnf.fr/ark:/12148/cb120745812',
327
- 'http://data.bnf.fr/ark:/12148/cb11973101n', 'http://data.bnf.fr/ark:/12148/cb13328497r')
328
- expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#isMemberOfMADSScheme'])
329
- .to eq ['http://id.loc.gov/authorities/subjects']
330
- expect(results['predicates']['http://www.loc.gov/mads/rdf/v1#editorialNote'])
331
- .to eq ['headings beginning with the word [Scientific;] and subdivision [Science] under ethnic groups and individual wars, e.g. [World War, 1939-1945--Science]']
332
- end
333
-
334
- it 'has more unspecified predicate values' do
335
- expect(results['predicates']['http://www.w3.org/1999/02/22-rdf-syntax-ns#type']).to include('http://www.loc.gov/mads/rdf/v1#Topic', 'http://www.loc.gov/mads/rdf/v1#Authority', 'http://www.w3.org/2004/02/skos/core#Concept')
336
- expect(results['predicates']['http://www.w3.org/2002/07/owl#sameAs']).to include('info:lc/authorities/sh85118553', 'http://id.loc.gov/authorities/sh85118553#concept')
337
- expect(results['predicates']['http://www.w3.org/2004/02/skos/core#closeMatch'])
338
- .to include('http://data.bnf.fr/ark:/12148/cb12321484k', 'http://data.bnf.fr/ark:/12148/cb119673416',
339
- 'http://data.bnf.fr/ark:/12148/cb119934236', 'http://data.bnf.fr/ark:/12148/cb12062047t',
340
- 'http://data.bnf.fr/ark:/12148/cb119469567', 'http://data.bnf.fr/ark:/12148/cb11933232c',
341
- 'http://data.bnf.fr/ark:/12148/cb122890536', 'http://data.bnf.fr/ark:/12148/cb121155321',
342
- 'http://data.bnf.fr/ark:/12148/cb15556043g', 'http://data.bnf.fr/ark:/12148/cb123662513',
343
- 'http://d-nb.info/gnd/4066562-8', 'http://data.bnf.fr/ark:/12148/cb120745812',
344
- 'http://data.bnf.fr/ark:/12148/cb11973101n', 'http://data.bnf.fr/ark:/12148/cb13328497r')
345
- expect(results['predicates']['http://www.w3.org/2004/02/skos/core#editorial'])
346
- .to eq ['headings beginning with the word [Scientific;] and subdivision [Science] under ethnic groups and individual wars, e.g. [World War, 1939-1945--Science]']
347
- expect(results['predicates']['http://www.w3.org/2004/02/skos/core#inScheme']).to eq ['http://id.loc.gov/authorities/subjects']
348
- end
349
- end
350
- end
351
-
352
- # rubocop:disable RSpec/NestedGroups
353
- describe "language processing" do
354
- context "when filtering #find result" do
355
- context "and lang NOT passed in" do
356
- context "and NO language defined in authority config" do
357
- context "and NO language defined in Qa config" do
358
- let(:lod_lang_no_defaults) { described_class.new(:LOD_LANG_NO_DEFAULTS) }
359
- let :results do
360
- stub_request(:get, "http://localhost/test_no_default/term/c_9513")
361
- .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
362
- lod_lang_no_defaults.find('c_9513')
363
- end
364
-
365
- before do
366
- Qa.config.default_language = []
367
- end
368
-
369
- after do
370
- Qa.config.default_language = :en
371
- end
372
-
373
- it "is not filtered" do
374
- expect(results[:label]).to eq ['buttermilk', 'Babeurre']
375
- expect(results[:altlabel]).to eq ['yummy', 'délicieux']
376
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
377
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
378
- end
379
- end
380
- context "and default_language is defined in Qa config" do
381
- let(:lod_lang_no_defaults) { described_class.new(:LOD_LANG_NO_DEFAULTS) }
382
- let :results do
383
- stub_request(:get, "http://localhost/test_no_default/term/c_9513")
384
- .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
385
- lod_lang_no_defaults.find('c_9513')
386
- end
387
- it "filters using Qa configured default for summary but not for predicates list" do
388
- expect(results[:label]).to eq ['buttermilk']
389
- expect(results[:altlabel]).to eq ['yummy']
390
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
391
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
392
- end
393
- end
394
- end
395
- context "and language IS defined in authority config" do
396
- let(:lod_lang_defaults) { described_class.new(:LOD_LANG_DEFAULTS) }
397
- let :results do
398
- stub_request(:get, "http://localhost/test_default/term/c_9513")
399
- .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
400
- lod_lang_defaults.find('c_9513')
401
- end
402
- it "filters using authority configured language for summary but not for predicates list" do
403
- expect(results[:label]).to eq ['Babeurre']
404
- expect(results[:altlabel]).to eq ['délicieux']
405
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
406
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
407
- end
408
- end
409
- context "and multiple languages ARE defined in authority config" do
410
- let(:lod_lang_multi_defaults) { described_class.new(:LOD_LANG_MULTI_DEFAULTS) }
411
- let :results do
412
- stub_request(:get, "http://localhost/test_default/term/c_9513")
413
- .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfrde.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
414
- lod_lang_multi_defaults.find('c_9513')
415
- end
416
- it "filters using authority configured languages for summary but not for predicates list" do
417
- expect(results[:label]).to eq ['buttermilk', 'Babeurre']
418
- expect(results[:altlabel]).to eq ['yummy', 'délicieux']
419
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre", "Buttermilch")
420
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux", "lecker")
421
- end
422
- end
423
- end
424
-
425
- context "and lang IS passed in" do
426
- let(:lod_lang_defaults) { described_class.new(:LOD_LANG_DEFAULTS) }
427
- let :results do
428
- stub_request(:get, "http://localhost/test_default/term/c_9513")
429
- .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
430
- lod_lang_defaults.find('c_9513', language: 'fr')
431
- end
432
- it "is filtered to specified language" do
433
- expect(results[:label]).to eq ['Babeurre']
434
- expect(results[:altlabel]).to eq ['délicieux']
435
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
436
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
437
- end
438
- end
439
-
440
- context "and result does not have altlabel" do
441
- let(:lod_lang_defaults) { described_class.new(:LOD_LANG_DEFAULTS) }
442
- let :results do
443
- stub_request(:get, "http://localhost/test_default/term/c_9513")
444
- .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr_noalt.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
445
- lod_lang_defaults.find('c_9513', language: 'fr')
446
- end
447
- it "is filtered to specified language" do
448
- expect(results[:label]).to eq ['Babeurre']
449
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
450
- end
451
- end
452
-
453
- context "when replacement on authority term URL" do
454
- context "and using default" do
455
- let(:lod_lang_param) { described_class.new(:LOD_LANG_PARAM) }
456
- let :results do
457
- stub_request(:get, "http://localhost/test_replacement/term/c_9513?lang=en")
458
- .to_return(status: 200, body: webmock_fixture("lod_lang_term_en.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
459
- lod_lang_param.find("c_9513")
460
- end
461
- it "is correctly parsed" do
462
- expect(results[:label]).to eq ['buttermilk']
463
- expect(results[:altlabel]).to eq ['yummy']
464
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to eq ['buttermilk']
465
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to eq ['yummy']
466
- end
467
- end
468
-
469
- context "and lang specified" do
470
- let(:lod_lang_param) { described_class.new(:LOD_LANG_PARAM) }
471
- let :results do
472
- stub_request(:get, "http://localhost/test_replacement/term/c_9513?lang=fr")
473
- .to_return(status: 200, body: webmock_fixture("lod_lang_term_fr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
474
- lod_lang_param.find("c_9513", replacements: { 'lang' => 'fr' })
475
- end
476
- it "is correctly parsed" do
477
- expect(results[:label]).to eq ['Babeurre']
478
- expect(results[:altlabel]).to eq ['délicieux']
479
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to eq ['Babeurre']
480
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to eq ['délicieux']
481
- end
482
- end
483
- end
484
- end
485
- end
486
- # rubocop:enable RSpec/NestedGroups
487
- end
488
-
489
4
  describe '#new' do
490
5
  context 'without an authority' do
491
6
  it 'raises an exception' do
@@ -599,5 +114,51 @@ RSpec.describe Qa::Authorities::LinkedData::GenericAuthority do
599
114
  expect(min_authority.term_id_expects_uri?).to eq true
600
115
  end
601
116
  end
117
+
118
+ describe '#search' do
119
+ it 'responds to delegated search method' do
120
+ expect(min_authority).to respond_to :search
121
+ end
122
+ end
123
+
124
+ describe '#find' do
125
+ it 'responds to delegated search method' do
126
+ expect(min_authority).to respond_to :find
127
+ end
128
+ end
129
+
130
+ describe '#load_authorities' do
131
+ it 'responds to delegated search method' do
132
+ expect(min_authority).to respond_to :load_authorities
133
+ end
134
+ end
135
+
136
+ describe '#authority_names' do
137
+ it 'responds to delegated search method' do
138
+ expect(min_authority).to respond_to :authority_names
139
+ end
140
+ end
141
+ end
142
+
143
+ context 'testing service methods' do
144
+ let(:min_authority) { described_class.new(:LOD_MIN_CONFIG) }
145
+
146
+ describe '#authorities_service' do
147
+ it 'returns Qa::LinkedData::AuthorityService as the authorities service' do
148
+ expect(min_authority.authorities_service).to eq Qa::LinkedData::AuthorityService
149
+ end
150
+ end
151
+
152
+ describe '#search_service' do
153
+ it 'returns Qa::Authorities::LinkedData::SearchQuery as the search service' do
154
+ expect(min_authority.search_service).to be_kind_of Qa::Authorities::LinkedData::SearchQuery
155
+ end
156
+ end
157
+
158
+ describe '#item_service' do
159
+ it 'returns Qa::Authorities::LinkedData::FindTerm as the item service' do
160
+ expect(min_authority.item_service).to be_kind_of Qa::Authorities::LinkedData::FindTerm
161
+ end
162
+ end
602
163
  end
603
164
  end