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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/app/controllers/qa/linked_data_terms_controller.rb +30 -9
- data/app/controllers/qa/terms_controller.rb +3 -2
- data/app/models/qa/linked_data/config/context_property_map.rb +6 -25
- data/app/services/qa/iri_template_service.rb +32 -24
- data/app/services/qa/linked_data/authority_service.rb +8 -0
- data/app/services/qa/linked_data/authority_url_service.rb +27 -8
- data/app/services/qa/linked_data/deep_sort_service.rb +3 -2
- data/app/services/qa/linked_data/graph_service.rb +13 -0
- data/app/services/qa/linked_data/language_service.rb +12 -0
- data/app/services/qa/linked_data/language_sort_service.rb +7 -2
- data/app/services/qa/linked_data/ldpath_service.rb +40 -0
- data/app/services/qa/linked_data/mapper/graph_ldpath_mapper_service.rb +49 -0
- data/app/services/qa/linked_data/mapper/graph_mapper_service.rb +3 -11
- data/app/services/qa/linked_data/mapper/graph_predicate_mapper_service.rb +40 -0
- data/app/services/qa/linked_data/mapper/search_results_mapper_service.rb +58 -11
- data/app/services/qa/linked_data/mapper/term_results_mapper_service.rb +80 -0
- data/config/authorities/linked_data/loc.json +13 -7
- data/config/authorities/linked_data/oclc_fast.json +13 -8
- data/lib/generators/qa/discogs/USAGE +10 -0
- data/lib/generators/qa/discogs/discogs_generator.rb +12 -0
- data/lib/generators/qa/discogs/templates/config/discogs-formats.yml +346 -0
- data/lib/generators/qa/discogs/templates/config/discogs-genres.yml +627 -0
- data/lib/generators/qa/install/templates/config/initializers/qa.rb +4 -0
- data/lib/qa.rb +6 -0
- data/lib/qa/authorities.rb +2 -0
- data/lib/qa/authorities/discogs.rb +28 -0
- data/lib/qa/authorities/discogs/discogs_instance_builder.rb +145 -0
- data/lib/qa/authorities/discogs/discogs_translation.rb +126 -0
- data/lib/qa/authorities/discogs/discogs_utils.rb +89 -0
- data/lib/qa/authorities/discogs/discogs_works_builder.rb +153 -0
- data/lib/qa/authorities/discogs/generic_authority.rb +151 -0
- data/lib/qa/authorities/discogs_subauthority.rb +9 -0
- data/lib/qa/authorities/linked_data/config.rb +7 -3
- data/lib/qa/authorities/linked_data/config/search_config.rb +99 -11
- data/lib/qa/authorities/linked_data/config/term_config.rb +112 -8
- data/lib/qa/authorities/linked_data/find_term.rb +154 -84
- data/lib/qa/authorities/linked_data/search_query.rb +76 -13
- data/lib/qa/configuration.rb +8 -0
- data/lib/qa/version.rb +1 -1
- data/spec/controllers/linked_data_terms_controller_spec.rb +151 -30
- data/spec/controllers/terms_controller_spec.rb +4 -0
- data/spec/features/linked_data/language_spec.rb +298 -0
- data/spec/fixtures/authorities/linked_data/lod_full_config.json +21 -5
- data/spec/fixtures/authorities/linked_data/lod_lang_defaults.json +4 -4
- data/spec/fixtures/authorities/linked_data/lod_lang_multi_defaults.json +4 -4
- data/spec/fixtures/authorities/linked_data/lod_lang_no_defaults.json +4 -5
- data/spec/fixtures/authorities/linked_data/lod_lang_param.json +4 -4
- data/spec/fixtures/authorities/linked_data/lod_term_uri_param_config.json +1 -1
- data/spec/fixtures/discogs-find-response-json.json +1 -0
- data/spec/fixtures/discogs-find-response-jsonld-master.json +1 -0
- data/spec/fixtures/discogs-find-response-jsonld-release.json +1 -0
- data/spec/fixtures/discogs-id-matches-master.json +1 -0
- data/spec/fixtures/discogs-id-matches-release.json +1 -0
- data/spec/fixtures/discogs-id-not-found-master.json +1 -0
- data/spec/fixtures/discogs-id-not-found-release.json +1 -0
- data/spec/fixtures/discogs-search-response-no-auth.json +1 -0
- data/spec/fixtures/discogs-search-response-no-subauth.json +1 -0
- data/spec/fixtures/discogs-search-response-subauth.json +1 -0
- data/spec/fixtures/lod_lang_search_enesfrde.rdf.xml +60 -0
- data/spec/fixtures/lod_lang_search_sv.rdf.xml +42 -0
- data/spec/fixtures/lod_loc_term_found.rdf.xml +5 -0
- data/spec/lib/authorities/discogs/generic_authority_spec.rb +235 -0
- data/spec/lib/authorities/discogs_spec.rb +17 -0
- data/spec/lib/authorities/linked_data/config_spec.rb +68 -5
- data/spec/lib/authorities/linked_data/find_term_spec.rb +298 -3
- data/spec/lib/authorities/linked_data/generic_authority_spec.rb +46 -485
- data/spec/lib/authorities/linked_data/search_config_spec.rb +154 -3
- data/spec/lib/authorities/linked_data/search_query_spec.rb +240 -3
- data/spec/lib/authorities/linked_data/term_config_spec.rb +193 -5
- data/spec/lib/configuration_spec.rb +18 -0
- data/spec/models/linked_data/config/context_property_map_spec.rb +3 -31
- data/spec/services/iri_template_service_spec.rb +54 -12
- data/spec/{lib/authorities → services}/linked_data/authority_service_spec.rb +47 -0
- data/spec/services/linked_data/language_service_spec.rb +52 -11
- data/spec/services/linked_data/ldpath_service_spec.rb +61 -0
- data/spec/services/linked_data/mapper/graph_ldpath_mapper_service_spec.rb +118 -0
- data/spec/services/linked_data/mapper/graph_predicate_mapper_service_spec.rb +110 -0
- data/spec/services/linked_data/mapper/term_results_mapper_service_spec.rb +94 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/support/matchers/include_hash.rb +5 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -0
- metadata +73 -5
- data/lib/qa/authorities/linked_data/rdf_helper.rb +0 -49
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
|
+
require 'qa/authorities/linked_data/config/term_config'
|
|
2
3
|
|
|
3
4
|
describe Qa::Authorities::LinkedData::TermConfig do
|
|
4
5
|
let(:full_config) { Qa::Authorities::LinkedData::Config.new(:LOD_FULL_CONFIG).term }
|
|
@@ -6,13 +7,24 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
6
7
|
let(:search_only_config) { Qa::Authorities::LinkedData::Config.new(:LOD_SEARCH_ONLY_CONFIG).term }
|
|
7
8
|
let(:encoding_config) { Qa::Authorities::LinkedData::Config.new(:LOD_ENCODING_CONFIG).term }
|
|
8
9
|
|
|
10
|
+
let(:ldpath_results_config) do
|
|
11
|
+
{
|
|
12
|
+
id_ldpath: 'schema:identifier ::xsd:string',
|
|
13
|
+
label_ldpath: 'skos:prefLabel ::xsd:string',
|
|
14
|
+
altlabel_ldpath: 'skos:altLabel ::xsd:string',
|
|
15
|
+
broader_ldpath: 'skos:broader ::xsd:string',
|
|
16
|
+
narrower_ldpath: 'skos:narrower ::xsd:string',
|
|
17
|
+
sameas_ldpath: 'skos:exactMatch ::xsd:string'
|
|
18
|
+
}
|
|
19
|
+
end
|
|
20
|
+
|
|
9
21
|
describe '#term_config' do
|
|
10
22
|
let(:full_term_config) do
|
|
11
23
|
{
|
|
12
24
|
url: {
|
|
13
25
|
:@context => 'http://www.w3.org/ns/hydra/context.jsonld',
|
|
14
26
|
:@type => 'IriTemplate',
|
|
15
|
-
template: 'http://localhost/test_default/term/{subauth}/{term_id}?{?param1}&{?param2}',
|
|
27
|
+
template: 'http://localhost/test_default/term/{subauth}/{term_id}?{?param1}&{?param2}&{?lang}',
|
|
16
28
|
variableRepresentation: 'BasicRepresentation',
|
|
17
29
|
mapping: [
|
|
18
30
|
{
|
|
@@ -41,15 +53,23 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
41
53
|
property: 'hydra:freetextQuery',
|
|
42
54
|
required: false,
|
|
43
55
|
default: 'beta'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
:@type => 'IriTemplateMapping',
|
|
59
|
+
variable: 'lang',
|
|
60
|
+
property: 'hydra:freetextQuery',
|
|
61
|
+
required: false,
|
|
62
|
+
default: 'de'
|
|
44
63
|
}
|
|
45
64
|
]
|
|
46
65
|
},
|
|
47
66
|
qa_replacement_patterns: {
|
|
48
67
|
term_id: 'term_id',
|
|
49
|
-
subauth: 'subauth'
|
|
68
|
+
subauth: 'subauth',
|
|
69
|
+
lang: 'lang'
|
|
50
70
|
},
|
|
51
71
|
term_id: 'ID',
|
|
52
|
-
language: ['
|
|
72
|
+
language: ['es'],
|
|
53
73
|
results: {
|
|
54
74
|
id_predicate: 'http://purl.org/dc/terms/identifier',
|
|
55
75
|
label_predicate: 'http://www.w3.org/2004/02/skos/core#prefLabel',
|
|
@@ -88,7 +108,7 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
88
108
|
{
|
|
89
109
|
:@context => 'http://www.w3.org/ns/hydra/context.jsonld',
|
|
90
110
|
:@type => 'IriTemplate',
|
|
91
|
-
template: 'http://localhost/test_default/term/{subauth}/{term_id}?{?param1}&{?param2}',
|
|
111
|
+
template: 'http://localhost/test_default/term/{subauth}/{term_id}?{?param1}&{?param2}&{?lang}',
|
|
92
112
|
variableRepresentation: 'BasicRepresentation',
|
|
93
113
|
mapping: [
|
|
94
114
|
{
|
|
@@ -117,6 +137,13 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
117
137
|
property: 'hydra:freetextQuery',
|
|
118
138
|
required: false,
|
|
119
139
|
default: 'beta'
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
:@type => 'IriTemplateMapping',
|
|
143
|
+
variable: 'lang',
|
|
144
|
+
property: 'hydra:freetextQuery',
|
|
145
|
+
required: false,
|
|
146
|
+
default: 'de'
|
|
120
147
|
}
|
|
121
148
|
]
|
|
122
149
|
}
|
|
@@ -156,7 +183,7 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
156
183
|
expect(min_config.term_language).to eq nil
|
|
157
184
|
end
|
|
158
185
|
it 'returns the preferred language for selecting literal values if configured for term' do
|
|
159
|
-
expect(full_config.term_language).to eq [:
|
|
186
|
+
expect(full_config.term_language).to eq [:es]
|
|
160
187
|
end
|
|
161
188
|
end
|
|
162
189
|
|
|
@@ -188,6 +215,19 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
188
215
|
end
|
|
189
216
|
end
|
|
190
217
|
|
|
218
|
+
describe '#term_results_id_ldpath' do
|
|
219
|
+
it 'returns nil if only search configuration is defined' do
|
|
220
|
+
expect(search_only_config.term_results_id_ldpath).to eq nil
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
context 'when id specified as ldpath' do
|
|
224
|
+
before { allow(full_config).to receive(:term_results).and_return(ldpath_results_config) }
|
|
225
|
+
it 'returns the ldpath' do
|
|
226
|
+
expect(full_config.term_results_id_ldpath).to eq 'schema:identifier ::xsd:string'
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
191
231
|
describe '#term_results_label_predicate' do
|
|
192
232
|
it 'returns nil if only search configuration is defined' do
|
|
193
233
|
expect(search_only_config.term_results_label_predicate).to eq nil
|
|
@@ -197,6 +237,19 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
197
237
|
end
|
|
198
238
|
end
|
|
199
239
|
|
|
240
|
+
describe '#term_results_label_ldpath' do
|
|
241
|
+
it 'returns nil if only search configuration is defined' do
|
|
242
|
+
expect(search_only_config.term_results_label_ldpath).to eq nil
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
context 'when label specified as ldpath' do
|
|
246
|
+
before { allow(full_config).to receive(:term_results).and_return(ldpath_results_config) }
|
|
247
|
+
it 'returns the ldpath' do
|
|
248
|
+
expect(full_config.term_results_label_ldpath).to eq 'skos:prefLabel ::xsd:string'
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
200
253
|
describe '#term_results_altlabel_predicate' do
|
|
201
254
|
it 'returns nil if only search configuration is defined' do
|
|
202
255
|
expect(search_only_config.term_results_altlabel_predicate).to eq nil
|
|
@@ -209,6 +262,22 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
209
262
|
end
|
|
210
263
|
end
|
|
211
264
|
|
|
265
|
+
describe '#term_results_altlabel_ldpath' do
|
|
266
|
+
it 'returns nil if only search configuration is defined' do
|
|
267
|
+
expect(search_only_config.term_results_altlabel_ldpath).to eq nil
|
|
268
|
+
end
|
|
269
|
+
it 'return nil if altlabel predicate is not defined' do
|
|
270
|
+
expect(min_config.term_results_altlabel_ldpath).to eq nil
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
context 'when altlabel specified as ldpath' do
|
|
274
|
+
before { allow(full_config).to receive(:term_results).and_return(ldpath_results_config) }
|
|
275
|
+
it 'returns the ldpath' do
|
|
276
|
+
expect(full_config.term_results_altlabel_ldpath).to eq 'skos:altLabel ::xsd:string'
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
212
281
|
describe '#term_results_broader_predicate' do
|
|
213
282
|
it 'returns nil if only search configuration is defined' do
|
|
214
283
|
expect(search_only_config.term_results_broader_predicate).to eq nil
|
|
@@ -221,6 +290,22 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
221
290
|
end
|
|
222
291
|
end
|
|
223
292
|
|
|
293
|
+
describe '#term_results_broader_ldpath' do
|
|
294
|
+
it 'returns nil if only search configuration is defined' do
|
|
295
|
+
expect(search_only_config.term_results_broader_ldpath).to eq nil
|
|
296
|
+
end
|
|
297
|
+
it 'return nil if broader predicate is not defined' do
|
|
298
|
+
expect(min_config.term_results_broader_ldpath).to eq nil
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
context 'when broader specified as ldpath' do
|
|
302
|
+
before { allow(full_config).to receive(:term_results).and_return(ldpath_results_config) }
|
|
303
|
+
it 'returns the ldpath' do
|
|
304
|
+
expect(full_config.term_results_broader_ldpath).to eq 'skos:broader ::xsd:string'
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
|
|
224
309
|
describe '#term_results_narrower_predicate' do
|
|
225
310
|
it 'returns nil if only search configuration is defined' do
|
|
226
311
|
expect(search_only_config.term_results_narrower_predicate).to eq nil
|
|
@@ -233,6 +318,22 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
233
318
|
end
|
|
234
319
|
end
|
|
235
320
|
|
|
321
|
+
describe '#term_results_narrower_ldpath' do
|
|
322
|
+
it 'returns nil if only search configuration is defined' do
|
|
323
|
+
expect(search_only_config.term_results_narrower_ldpath).to eq nil
|
|
324
|
+
end
|
|
325
|
+
it 'return nil if narrower predicate is not defined' do
|
|
326
|
+
expect(min_config.term_results_narrower_ldpath).to eq nil
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
context 'when narrower specified as ldpath' do
|
|
330
|
+
before { allow(full_config).to receive(:term_results).and_return(ldpath_results_config) }
|
|
331
|
+
it 'returns the ldpath' do
|
|
332
|
+
expect(full_config.term_results_narrower_ldpath).to eq 'skos:narrower ::xsd:string'
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
|
|
236
337
|
describe '#term_results_sameas_predicate' do
|
|
237
338
|
it 'returns nil if only search configuration is defined' do
|
|
238
339
|
expect(search_only_config.term_results_sameas_predicate).to eq nil
|
|
@@ -245,6 +346,46 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
245
346
|
end
|
|
246
347
|
end
|
|
247
348
|
|
|
349
|
+
describe '#term_results_sameas_ldpath' do
|
|
350
|
+
it 'returns nil if only search configuration is defined' do
|
|
351
|
+
expect(search_only_config.term_results_sameas_ldpath).to eq nil
|
|
352
|
+
end
|
|
353
|
+
it 'return nil if sameas predicate is not defined' do
|
|
354
|
+
expect(min_config.term_results_sameas_ldpath).to eq nil
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
context 'when sameas specified as ldpath' do
|
|
358
|
+
before { allow(full_config).to receive(:term_results).and_return(ldpath_results_config) }
|
|
359
|
+
it 'returns the ldpath' do
|
|
360
|
+
expect(full_config.term_results_sameas_ldpath).to eq 'skos:exactMatch ::xsd:string'
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
describe '#supports_language_parameter?' do
|
|
366
|
+
it 'returns false if only search configuration is defined' do
|
|
367
|
+
expect(search_only_config.supports_language_parameter?).to eq false
|
|
368
|
+
end
|
|
369
|
+
it 'returns false if the configuration does NOT define the lang replacement' do
|
|
370
|
+
expect(min_config.supports_language_parameter?).to eq false
|
|
371
|
+
end
|
|
372
|
+
it 'returns true if the configuration defines the lang replacement' do
|
|
373
|
+
expect(full_config.supports_language_parameter?).to eq true
|
|
374
|
+
end
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
describe '#supports_subauthorities?' do
|
|
378
|
+
it 'returns false if only search configuration is defined' do
|
|
379
|
+
expect(search_only_config.supports_subauthorities?).to eq false
|
|
380
|
+
end
|
|
381
|
+
it 'returns false if the configuration does NOT define the subauth replacement' do
|
|
382
|
+
expect(min_config.supports_subauthorities?).to eq false
|
|
383
|
+
end
|
|
384
|
+
it 'returns true if the configuration defines the subauth replacement' do
|
|
385
|
+
expect(full_config.supports_subauthorities?).to eq true
|
|
386
|
+
end
|
|
387
|
+
end
|
|
388
|
+
|
|
248
389
|
describe '#term_subauthorities?' do
|
|
249
390
|
it 'returns false if only search configuration is defined' do
|
|
250
391
|
expect(search_only_config.term_subauthorities?).to eq false
|
|
@@ -302,4 +443,51 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
302
443
|
expect(full_config.term_subauthorities).to eq expected_hash
|
|
303
444
|
end
|
|
304
445
|
end
|
|
446
|
+
|
|
447
|
+
describe '#info' do
|
|
448
|
+
let(:term_details) do
|
|
449
|
+
{
|
|
450
|
+
"label" => "oclc_fast term (QA)",
|
|
451
|
+
"uri" => "urn:qa:term:oclc_fast",
|
|
452
|
+
"authority" => "oclc_fast",
|
|
453
|
+
"action" => "term",
|
|
454
|
+
"language" => ["en"]
|
|
455
|
+
}
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
let(:search_details) do
|
|
459
|
+
{
|
|
460
|
+
"label" => "oclc_fast search (QA)",
|
|
461
|
+
"uri" => "urn:qa:search:oclc_fast",
|
|
462
|
+
"authority" => "oclc_fast",
|
|
463
|
+
"action" => "search",
|
|
464
|
+
"language" => ["en"]
|
|
465
|
+
}
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
let(:search_details_with_subauth) do
|
|
469
|
+
{
|
|
470
|
+
"label" => "oclc_fast search topic (QA)",
|
|
471
|
+
"uri" => "urn:qa:search:oclc_fast:topic",
|
|
472
|
+
"authority" => "oclc_fast",
|
|
473
|
+
"subauthority" => "topic",
|
|
474
|
+
"action" => "search",
|
|
475
|
+
"language" => ["en"]
|
|
476
|
+
}
|
|
477
|
+
end
|
|
478
|
+
|
|
479
|
+
let(:details) { Qa::Authorities::LinkedData::Config.new(:OCLC_FAST).term.info }
|
|
480
|
+
|
|
481
|
+
it "returns a list with details for term without subauthorities" do
|
|
482
|
+
expect(details).to include_hash(term_details)
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
it "does not return a list with details for search without subauthorities" do
|
|
486
|
+
expect(details).not_to include_hash(search_details)
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
it "does not return a list with details for search with a subauthority" do
|
|
490
|
+
expect(details).not_to include_hash(search_details_with_subauth)
|
|
491
|
+
end
|
|
492
|
+
end
|
|
305
493
|
end
|
|
@@ -68,4 +68,22 @@ RSpec.describe Qa::Configuration do
|
|
|
68
68
|
end
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
|
+
|
|
72
|
+
describe '#limit_ldpath_to_context' do
|
|
73
|
+
context 'when NOT configured' do
|
|
74
|
+
it 'returns true' do
|
|
75
|
+
expect(subject.limit_ldpath_to_context?).to be true
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
context 'when configured' do
|
|
80
|
+
before do
|
|
81
|
+
subject.limit_ldpath_to_context = false
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'returns the configured value' do
|
|
85
|
+
expect(subject.limit_ldpath_to_context?).to be false
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
71
89
|
end
|
|
@@ -209,34 +209,6 @@ RSpec.describe Qa::LinkedData::Config::ContextPropertyMap do
|
|
|
209
209
|
it 'returns the values selected from the graph' do
|
|
210
210
|
expect(subject.values(graph, subject_uri)).to match_array coordinates
|
|
211
211
|
end
|
|
212
|
-
|
|
213
|
-
context 'when ldpath_program gets parse error' do
|
|
214
|
-
let(:ldpath) { property_map[:ldpath] }
|
|
215
|
-
let(:cause) { "undefined method `ascii_tree' for nil:NilClass" }
|
|
216
|
-
let(:warning) { I18n.t('qa.linked_data.ldpath.parse_logger_error') }
|
|
217
|
-
let(:log_message) { "WARNING: #{warning} (ldpath='#{ldpath}')\n cause: #{cause}" }
|
|
218
|
-
|
|
219
|
-
before { allow(Ldpath::Program).to receive(:parse).with(anything).and_raise(cause) }
|
|
220
|
-
|
|
221
|
-
it 'logs error and returns PARSE ERROR as the value' do
|
|
222
|
-
expect(Rails.logger).to receive(:warn).with(log_message)
|
|
223
|
-
expect { subject.values(graph, subject_uri) }.to raise_error StandardError, I18n.t('qa.linked_data.ldpath.parse_error')
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
context 'when ldpath_evaluate gets parse error' do
|
|
228
|
-
let(:ldpath) { property_map[:ldpath] }
|
|
229
|
-
let(:cause) { "unknown cause" }
|
|
230
|
-
let(:warning) { I18n.t('qa.linked_data.ldpath.evaluate_logger_error') }
|
|
231
|
-
let(:log_message) { "WARNING: #{warning} (ldpath='#{ldpath}')\n cause: #{cause}" }
|
|
232
|
-
|
|
233
|
-
before { allow(program).to receive(:evaluate).with(subject_uri, graph).and_raise(cause) }
|
|
234
|
-
|
|
235
|
-
it 'logs error and returns PARSE ERROR as the value' do
|
|
236
|
-
expect(Rails.logger).to receive(:warn).with(log_message)
|
|
237
|
-
expect { subject.values(graph, subject_uri) }.to raise_error StandardError, I18n.t('qa.linked_data.ldpath.evaluate_error')
|
|
238
|
-
end
|
|
239
|
-
end
|
|
240
212
|
end
|
|
241
213
|
|
|
242
214
|
describe '#expand_uri?' do
|
|
@@ -271,9 +243,9 @@ RSpec.describe Qa::LinkedData::Config::ContextPropertyMap do
|
|
|
271
243
|
allow(Ldpath::Program).to receive(:parse).with('property = madsrdf:identifiesRWO/madsrdf:birthDate/schema:label ;').and_return(basic_program)
|
|
272
244
|
allow(Ldpath::Program).to receive(:parse).with('property = skos:prefLabel ::xsd:string ;').and_return(expanded_label_program)
|
|
273
245
|
allow(Ldpath::Program).to receive(:parse).with('property = loc:lccn ::xsd:string ;').and_return(expanded_id_program)
|
|
274
|
-
allow(basic_program).to receive(:evaluate).with(subject_uri, graph).and_return('property' => [expanded_uri])
|
|
275
|
-
allow(expanded_label_program).to receive(:evaluate).with(RDF::URI.new(subject_uri), graph).and_return('property' => [expanded_label])
|
|
276
|
-
allow(expanded_id_program).to receive(:evaluate).with(RDF::URI.new(subject_uri), graph).and_return('property' => [expanded_id])
|
|
246
|
+
allow(basic_program).to receive(:evaluate).with(subject_uri, context: graph, limit_to_context: true).and_return('property' => [expanded_uri])
|
|
247
|
+
allow(expanded_label_program).to receive(:evaluate).with(RDF::URI.new(subject_uri), context: graph, limit_to_context: true).and_return('property' => [expanded_label])
|
|
248
|
+
allow(expanded_id_program).to receive(:evaluate).with(RDF::URI.new(subject_uri), context: graph, limit_to_context: true).and_return('property' => [expanded_id])
|
|
277
249
|
end
|
|
278
250
|
it 'returns the uri, id, label for the expanded uri value' do
|
|
279
251
|
expanded_values = subject.expanded_values(graph, subject_uri).first
|
|
@@ -5,7 +5,7 @@ RSpec.describe Qa::IriTemplateService do
|
|
|
5
5
|
{
|
|
6
6
|
:'@context' => 'http://www.w3.org/ns/hydra/context.jsonld',
|
|
7
7
|
:'@type' => 'IriTemplate',
|
|
8
|
-
template: 'http://localhost/test_default/search?{?subauth}&{?query}&{?max_records}&{?
|
|
8
|
+
template: 'http://localhost/test_default/search?{?subauth}&{?query}&{?max_records}&{?lang}',
|
|
9
9
|
variableRepresentation: 'BasicRepresentation',
|
|
10
10
|
mapping: [
|
|
11
11
|
{
|
|
@@ -18,8 +18,7 @@ RSpec.describe Qa::IriTemplateService do
|
|
|
18
18
|
:'@type' => 'IriTemplateMapping',
|
|
19
19
|
variable: 'subauth',
|
|
20
20
|
property: 'hydra:freetextQuery',
|
|
21
|
-
required: false
|
|
22
|
-
default: 'personal_names'
|
|
21
|
+
required: false
|
|
23
22
|
},
|
|
24
23
|
{
|
|
25
24
|
:'@type' => 'IriTemplateMapping',
|
|
@@ -30,10 +29,9 @@ RSpec.describe Qa::IriTemplateService do
|
|
|
30
29
|
},
|
|
31
30
|
{
|
|
32
31
|
:'@type' => 'IriTemplateMapping',
|
|
33
|
-
variable: '
|
|
32
|
+
variable: 'lang',
|
|
34
33
|
property: 'hydra:freetextQuery',
|
|
35
|
-
required: false
|
|
36
|
-
default: 'en'
|
|
34
|
+
required: false
|
|
37
35
|
}
|
|
38
36
|
]
|
|
39
37
|
}
|
|
@@ -47,22 +45,66 @@ RSpec.describe Qa::IriTemplateService do
|
|
|
47
45
|
query: 'mark twain',
|
|
48
46
|
subauth: 'corporate_names',
|
|
49
47
|
max_records: 10,
|
|
50
|
-
|
|
48
|
+
lang: 'fr'
|
|
51
49
|
)
|
|
52
50
|
end
|
|
53
51
|
|
|
54
52
|
it 'returns template with substitutions' do
|
|
55
|
-
expected_url = 'http://localhost/test_default/search?subauth=corporate_names&query=mark twain&max_records=10&
|
|
53
|
+
expected_url = 'http://localhost/test_default/search?subauth=corporate_names&query=mark twain&max_records=10&lang=fr'
|
|
56
54
|
expect(described_class.build_url(url_config: url_config, substitutions: substitutions)).to eq expected_url
|
|
57
55
|
end
|
|
58
56
|
end
|
|
59
57
|
|
|
60
58
|
context 'when minimal substitutions specified' do
|
|
61
|
-
|
|
59
|
+
context 'and default specified for maxRecords only' do
|
|
60
|
+
let(:substitutions) { HashWithIndifferentAccess.new(query: 'mark twain') }
|
|
62
61
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
it 'returns template with substitutions' do
|
|
63
|
+
expected_url = 'http://localhost/test_default/search?query=mark twain&max_records=20'
|
|
64
|
+
expect(described_class.build_url(url_config: url_config, substitutions: substitutions)).to eq expected_url
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
context 'and defaults specified for all' do
|
|
69
|
+
let(:substitutions) { HashWithIndifferentAccess.new(query: 'mark twain') }
|
|
70
|
+
let(:mapping) do
|
|
71
|
+
[
|
|
72
|
+
{
|
|
73
|
+
:'@type' => 'IriTemplateMapping',
|
|
74
|
+
variable: 'query',
|
|
75
|
+
property: 'hydra:freetextQuery',
|
|
76
|
+
required: true
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
:'@type' => 'IriTemplateMapping',
|
|
80
|
+
variable: 'subauth',
|
|
81
|
+
property: 'hydra:freetextQuery',
|
|
82
|
+
required: false,
|
|
83
|
+
default: 'personal_names'
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
:'@type' => 'IriTemplateMapping',
|
|
87
|
+
variable: 'max_records',
|
|
88
|
+
property: 'hydra:freetextQuery',
|
|
89
|
+
required: false,
|
|
90
|
+
default: 20
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
:'@type' => 'IriTemplateMapping',
|
|
94
|
+
variable: 'lang',
|
|
95
|
+
property: 'hydra:freetextQuery',
|
|
96
|
+
required: false,
|
|
97
|
+
default: 'en'
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
before { url_template[:mapping] = mapping }
|
|
103
|
+
|
|
104
|
+
it 'returns template with substitutions' do
|
|
105
|
+
expected_url = 'http://localhost/test_default/search?subauth=personal_names&query=mark twain&max_records=20&lang=en'
|
|
106
|
+
expect(described_class.build_url(url_config: url_config, substitutions: substitutions)).to eq expected_url
|
|
107
|
+
end
|
|
66
108
|
end
|
|
67
109
|
end
|
|
68
110
|
end
|