qa 3.1.0 → 4.0.0.rc1
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 +5 -5
- data/README.md +16 -548
- data/app/controllers/qa/linked_data_terms_controller.rb +64 -42
- data/app/controllers/qa/terms_controller.rb +14 -6
- data/app/models/qa/iri_template/url_config.rb +47 -0
- data/app/models/qa/iri_template/variable_map.rb +62 -0
- data/app/models/qa/linked_data/config/context_map.rb +77 -0
- data/app/models/qa/linked_data/config/context_property_map.rb +144 -0
- data/app/models/qa/linked_data/config/helper.rb +34 -0
- data/app/services/qa/iri_template_service.rb +31 -0
- data/{lib/qa/authorities → app/services/qa}/linked_data/authority_service.rb +3 -4
- data/app/services/qa/linked_data/authority_url_service.rb +48 -0
- data/app/services/qa/linked_data/deep_sort_service.rb +238 -0
- data/app/services/qa/linked_data/graph_service.rb +106 -0
- data/app/services/qa/linked_data/language_service.rb +30 -0
- data/app/services/qa/linked_data/language_sort_service.rb +81 -0
- data/app/services/qa/linked_data/mapper/context_mapper_service.rb +59 -0
- data/app/services/qa/linked_data/mapper/graph_mapper_service.rb +40 -0
- data/app/services/qa/linked_data/mapper/search_results_mapper_service.rb +70 -0
- data/config/authorities/linked_data/loc.json +5 -2
- data/config/authorities/linked_data/oclc_fast.json +3 -2
- data/config/initializers/linked_data_authorities.rb +1 -1
- data/config/locales/qa.en.yml +9 -0
- data/lib/generators/qa/install/templates/config/initializers/qa.rb +4 -0
- data/lib/qa.rb +8 -0
- data/lib/qa/authorities/assign_fast/generic_authority.rb +1 -1
- data/lib/qa/authorities/base.rb +0 -11
- data/lib/qa/authorities/crossref/generic_authority.rb +1 -1
- data/lib/qa/authorities/geonames.rb +1 -1
- data/lib/qa/authorities/getty/aat.rb +7 -2
- data/lib/qa/authorities/getty/tgn.rb +7 -2
- data/lib/qa/authorities/getty/ulan.rb +7 -2
- data/lib/qa/authorities/linked_data.rb +0 -1
- data/lib/qa/authorities/linked_data/config.rb +29 -28
- data/lib/qa/authorities/linked_data/config/search_config.rb +21 -79
- data/lib/qa/authorities/linked_data/config/term_config.rb +7 -77
- data/lib/qa/authorities/linked_data/find_term.rb +25 -17
- data/lib/qa/authorities/linked_data/generic_authority.rb +6 -5
- data/lib/qa/authorities/linked_data/rdf_helper.rb +6 -73
- data/lib/qa/authorities/linked_data/search_query.rb +54 -101
- data/lib/qa/authorities/loc/generic_authority.rb +4 -4
- data/lib/qa/authorities/web_service_base.rb +1 -8
- data/lib/qa/configuration.rb +7 -0
- data/lib/qa/version.rb +1 -1
- data/lib/tasks/mesh.rake +19 -18
- data/spec/controllers/linked_data_terms_controller_spec.rb +51 -1
- data/spec/controllers/terms_controller_spec.rb +15 -15
- data/spec/fixtures/authorities/linked_data/lod_encoding_config.json +2 -1
- data/spec/fixtures/authorities/linked_data/lod_full_config.json +56 -2
- data/spec/fixtures/authorities/linked_data/lod_full_config_1_0.json +164 -0
- data/spec/fixtures/authorities/linked_data/lod_lang_defaults.json +5 -4
- data/spec/fixtures/authorities/linked_data/lod_lang_multi_defaults.json +3 -2
- data/spec/fixtures/authorities/linked_data/lod_lang_no_defaults.json +3 -2
- data/spec/fixtures/authorities/linked_data/lod_lang_param.json +3 -2
- data/spec/fixtures/authorities/linked_data/lod_min_config.json +3 -2
- data/spec/fixtures/authorities/linked_data/lod_search_only_config.json +2 -1
- data/spec/fixtures/authorities/linked_data/lod_sort.json +2 -1
- data/spec/fixtures/authorities/linked_data/lod_term_id_param_config.json +2 -1
- data/spec/fixtures/authorities/linked_data/lod_term_only_config.json +2 -1
- data/spec/fixtures/authorities/linked_data/lod_term_uri_param_config.json +2 -1
- data/spec/fixtures/getty-error-response.txt +10 -0
- data/spec/fixtures/lod_2_ranked_2_unranked.nt +17 -0
- data/spec/fixtures/lod_3_ranked_varying_preds.nt +16 -0
- data/spec/fixtures/lod_lang_search_filtering.nt +11 -0
- data/spec/fixtures/lod_search_with_blanknode_subjects.nt +18 -0
- data/spec/fixtures/lod_term_with_blanknode_objects.nt +8 -0
- data/spec/lib/authorities/assign_fast_spec.rb +1 -0
- data/spec/lib/authorities/getty/aat_spec.rb +14 -2
- data/spec/lib/authorities/getty/tgn_spec.rb +14 -2
- data/spec/lib/authorities/getty/ulan_spec.rb +14 -2
- data/spec/lib/authorities/linked_data/authority_service_spec.rb +2 -1
- data/spec/lib/authorities/linked_data/config_spec.rb +284 -5
- data/spec/lib/authorities/linked_data/find_term_spec.rb +3 -1
- data/spec/lib/authorities/linked_data/generic_authority_spec.rb +92 -42
- data/spec/lib/authorities/linked_data/search_config_spec.rb +67 -160
- data/spec/lib/authorities/linked_data/search_query_spec.rb +3 -127
- data/spec/lib/authorities/linked_data/term_config_spec.rb +6 -134
- data/spec/lib/authorities/loc_spec.rb +9 -9
- data/spec/lib/configuration_spec.rb +20 -7
- data/spec/lib/tasks/mesh.rake_spec.rb +2 -2
- data/spec/models/iri_template/url_config_spec.rb +102 -0
- data/spec/models/iri_template/variable_map_spec.rb +105 -0
- data/spec/models/linked_data/config/context_map_spec.rb +148 -0
- data/spec/models/linked_data/config/context_property_map_spec.rb +286 -0
- data/spec/services/iri_template_service_spec.rb +69 -0
- data/spec/services/linked_data/authority_url_service_spec.rb +107 -0
- data/spec/services/linked_data/deep_sort_service_spec.rb +260 -0
- data/spec/services/linked_data/graph_service_spec.rb +232 -0
- data/spec/services/linked_data/language_service_spec.rb +66 -0
- data/spec/services/linked_data/language_sort_service_spec.rb +58 -0
- data/spec/services/linked_data/mapper/context_mapper_service_spec.rb +137 -0
- data/spec/services/linked_data/mapper/graph_mapper_service_spec.rb +110 -0
- data/spec/services/linked_data/mapper/search_results_mapper_service_spec.rb +109 -0
- data/spec/spec_helper.rb +10 -2
- metadata +81 -11
|
@@ -1,131 +1,7 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
RSpec.describe Qa::Authorities::LinkedData::SearchQuery do
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
let(:term_a) { "alpha" }
|
|
9
|
-
let(:term_b) { "bravo" }
|
|
10
|
-
let(:term_c) { "charlie" }
|
|
11
|
-
let(:term_d) { "delta" }
|
|
12
|
-
|
|
13
|
-
context 'when sort predicate is NOT specified in configuration' do
|
|
14
|
-
let(:auth_name) { :LOD_MIN_CONFIG }
|
|
15
|
-
|
|
16
|
-
it "does not change order" do
|
|
17
|
-
json_results = [{ label: "[#{term_b}, #{term_c}]", sort: [term_b, term_c] },
|
|
18
|
-
{ label: "[#{term_b}, #{term_d}]", sort: [term_b, term_d] },
|
|
19
|
-
{ label: "[#{term_b}, #{term_a}]", sort: [term_b, term_a] }]
|
|
20
|
-
expect(instance.send(:sort_search_results, json_results)).to eq json_results
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
context 'when sort predicate is specified in configuration' do
|
|
25
|
-
let(:auth_name) { :LOD_SORT }
|
|
26
|
-
|
|
27
|
-
context "and sort term is empty" do
|
|
28
|
-
context "for all" do
|
|
29
|
-
it "does not change order" do
|
|
30
|
-
json_results = [{ label: "[#{term_b}]", sort: [""] },
|
|
31
|
-
{ label: "[#{term_a}]", sort: [""] },
|
|
32
|
-
{ label: "[#{term_c}]", sort: [""] }]
|
|
33
|
-
expect(instance.send(:sort_search_results, json_results)).to eq json_results
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
context "for one" do
|
|
38
|
-
it "puts empty first when empty is in 1st position" do
|
|
39
|
-
json_results = [{ label: "['_empty_1_']", sort: [""] },
|
|
40
|
-
{ label: "[#{term_c}]", sort: [term_c] },
|
|
41
|
-
{ label: "[#{term_a}]", sort: [term_a] }]
|
|
42
|
-
expected_results = [{ label: "['_empty_1_']" },
|
|
43
|
-
{ label: "[#{term_a}]" },
|
|
44
|
-
{ label: "[#{term_c}]" }]
|
|
45
|
-
expect(instance.send(:sort_search_results, json_results)).to eq expected_results
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "puts empty first when empty is in 2nd position" do
|
|
49
|
-
json_results = [{ label: "[#{term_b}]", sort: [term_b] },
|
|
50
|
-
{ label: "['_empty_2_']", sort: [""] },
|
|
51
|
-
{ label: "[#{term_a}]", sort: [term_a] }]
|
|
52
|
-
expected_results = [{ label: "['_empty_2_']" },
|
|
53
|
-
{ label: "[#{term_a}]" },
|
|
54
|
-
{ label: "[#{term_b}]" }]
|
|
55
|
-
expect(instance.send(:sort_search_results, json_results)).to eq expected_results
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "puts empty first when empty is in last position" do
|
|
59
|
-
json_results = [{ label: "[#{term_b}]", sort: [term_b] },
|
|
60
|
-
{ label: "[#{term_c}]", sort: [term_c] },
|
|
61
|
-
{ label: "['_empty_last_']", sort: [""] }]
|
|
62
|
-
expected_results = [{ label: "['_empty_last_']" },
|
|
63
|
-
{ label: "[#{term_b}]" },
|
|
64
|
-
{ label: "[#{term_c}]" }]
|
|
65
|
-
expect(instance.send(:sort_search_results, json_results)).to eq expected_results
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
context "and sort term is single value" do
|
|
71
|
-
context "for all" do
|
|
72
|
-
it "sorts on the single value" do
|
|
73
|
-
json_results = [{ label: "[#{term_b}]", sort: [term_b] },
|
|
74
|
-
{ label: "[#{term_c}]", sort: [term_c] },
|
|
75
|
-
{ label: "[#{term_a}]", sort: [term_a] }]
|
|
76
|
-
expected_results = [{ label: "[#{term_a}]" },
|
|
77
|
-
{ label: "[#{term_b}]" },
|
|
78
|
-
{ label: "[#{term_c}]" }]
|
|
79
|
-
expect(instance.send(:sort_search_results, json_results)).to eq expected_results
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
context "when first sort term is same" do
|
|
85
|
-
it "sorts on second sort term" do
|
|
86
|
-
json_results = [{ label: "[#{term_b}, #{term_c}]", sort: [term_b, term_c] },
|
|
87
|
-
{ label: "[#{term_b}, #{term_d}]", sort: [term_b, term_d] },
|
|
88
|
-
{ label: "[#{term_b}, #{term_a}]", sort: [term_b, term_a] }]
|
|
89
|
-
expected_results = [{ label: "[#{term_b}, #{term_a}]" },
|
|
90
|
-
{ label: "[#{term_b}, #{term_c}]" },
|
|
91
|
-
{ label: "[#{term_b}, #{term_d}]" }]
|
|
92
|
-
expect(instance.send(:sort_search_results, json_results)).to eq expected_results
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
context "when different number of sort terms" do
|
|
97
|
-
context "and initial terms match" do
|
|
98
|
-
it "puts shorter set of terms before longer set" do
|
|
99
|
-
json_results = [{ label: "[#{term_b}, #{term_c}]", sort: [term_b, term_c] },
|
|
100
|
-
{ label: "[#{term_b}]", sort: [term_b] },
|
|
101
|
-
{ label: "[#{term_b}, #{term_a}]", sort: [term_b, term_a] }]
|
|
102
|
-
expected_results = [{ label: "[#{term_b}]" },
|
|
103
|
-
{ label: "[#{term_b}, #{term_a}]" },
|
|
104
|
-
{ label: "[#{term_b}, #{term_c}]" }]
|
|
105
|
-
expect(instance.send(:sort_search_results, json_results)).to eq expected_results
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
context "and a difference happens before end of term sets" do
|
|
110
|
-
it "stops ordering as soon as a difference is found" do
|
|
111
|
-
json_results = [{ label: "[#{term_b}, #{term_d}, #{term_c}]", sort: [term_b, term_d, term_c] },
|
|
112
|
-
{ label: "[#{term_a}, #{term_c}]", sort: [term_a, term_c] },
|
|
113
|
-
{ label: "[#{term_b}, #{term_d}, #{term_a}]", sort: [term_b, term_d, term_a] }]
|
|
114
|
-
expected_results = [{ label: "[#{term_a}, #{term_c}]" },
|
|
115
|
-
{ label: "[#{term_b}, #{term_d}, #{term_a}]" },
|
|
116
|
-
{ label: "[#{term_b}, #{term_d}, #{term_c}]" }]
|
|
117
|
-
expect(instance.send(:sort_search_results, json_results)).to eq expected_results
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
context "and sort values are numeric" do
|
|
123
|
-
it "does numeric compare" do
|
|
124
|
-
json_results = [{ label: "['22']", sort: ["22"] }, { label: "['1']", sort: ["1"] }, { label: "['215']", sort: ["215"] }]
|
|
125
|
-
expected_results = [{ label: "['1']" }, { label: "['22']" }, { label: "['215']" }]
|
|
126
|
-
expect(instance.send(:sort_search_results, json_results)).to eq expected_results
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
end
|
|
4
|
+
# all search 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"
|
|
131
7
|
end
|
|
@@ -12,7 +12,7 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
12
12
|
url: {
|
|
13
13
|
:@context => 'http://www.w3.org/ns/hydra/context.jsonld',
|
|
14
14
|
:@type => 'IriTemplate',
|
|
15
|
-
template: 'http://localhost/test_default/term/{
|
|
15
|
+
template: 'http://localhost/test_default/term/{subauth}/{term_id}?{?param1}&{?param2}',
|
|
16
16
|
variableRepresentation: 'BasicRepresentation',
|
|
17
17
|
mapping: [
|
|
18
18
|
{
|
|
@@ -83,12 +83,12 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
85
|
|
|
86
|
-
describe '#
|
|
86
|
+
describe '#url_config' do
|
|
87
87
|
let(:url_config) do
|
|
88
88
|
{
|
|
89
89
|
:@context => 'http://www.w3.org/ns/hydra/context.jsonld',
|
|
90
90
|
:@type => 'IriTemplate',
|
|
91
|
-
template: 'http://localhost/test_default/term/{
|
|
91
|
+
template: 'http://localhost/test_default/term/{subauth}/{term_id}?{?param1}&{?param2}',
|
|
92
92
|
variableRepresentation: 'BasicRepresentation',
|
|
93
93
|
mapping: [
|
|
94
94
|
{
|
|
@@ -123,20 +123,10 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
123
123
|
end
|
|
124
124
|
|
|
125
125
|
it 'returns nil if only search configuration is defined' do
|
|
126
|
-
expect(search_only_config.
|
|
126
|
+
expect(search_only_config.url_config).to eq nil
|
|
127
127
|
end
|
|
128
|
-
it 'returns the
|
|
129
|
-
expect(full_config.
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
describe '#term_url' do
|
|
134
|
-
it 'returns nil if only search configuration is defined' do
|
|
135
|
-
expect(search_only_config.term_url_template).to eq nil
|
|
136
|
-
end
|
|
137
|
-
it 'returns the term url from the configuration' do
|
|
138
|
-
expected_url = 'http://localhost/test_default/term/{?subauth}/{?term_id}?param1={?param1}¶m2={?param2}'
|
|
139
|
-
expect(full_config.term_url_template).to eq expected_url
|
|
128
|
+
it 'returns the url config from the configuration' do
|
|
129
|
+
expect(full_config.url_config).to be_kind_of Qa::IriTemplate::UrlConfig
|
|
140
130
|
end
|
|
141
131
|
end
|
|
142
132
|
|
|
@@ -255,48 +245,6 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
255
245
|
end
|
|
256
246
|
end
|
|
257
247
|
|
|
258
|
-
describe '#term_replacements?' do
|
|
259
|
-
it 'returns false if only search configuration is defined' do
|
|
260
|
-
expect(search_only_config.term_replacements?).to eq false
|
|
261
|
-
end
|
|
262
|
-
it 'returns false if the configuration does NOT define replacements' do
|
|
263
|
-
expect(min_config.term_replacements?).to eq false
|
|
264
|
-
end
|
|
265
|
-
it 'returns true if the configuration defines replacements' do
|
|
266
|
-
expect(full_config.term_replacements?).to eq true
|
|
267
|
-
end
|
|
268
|
-
end
|
|
269
|
-
|
|
270
|
-
describe '#term_replacement_count' do
|
|
271
|
-
it 'returns 0 if only search configuration is defined' do
|
|
272
|
-
expect(search_only_config.term_replacement_count).to eq 0
|
|
273
|
-
end
|
|
274
|
-
it 'returns 0 if replacement_count is NOT defined' do
|
|
275
|
-
expect(min_config.term_replacement_count).to eq 0
|
|
276
|
-
end
|
|
277
|
-
it 'returns the number of replacements if defined' do
|
|
278
|
-
expect(full_config.term_replacement_count).to eq 2
|
|
279
|
-
end
|
|
280
|
-
end
|
|
281
|
-
|
|
282
|
-
describe '#term_replacements' do
|
|
283
|
-
it 'returns empty hash if only search configuration is defined' do
|
|
284
|
-
empty_hash = {}
|
|
285
|
-
expect(search_only_config.term_replacements).to eq empty_hash
|
|
286
|
-
end
|
|
287
|
-
it 'returns empty hash if no replacement patterns are defined' do
|
|
288
|
-
empty_hash = {}
|
|
289
|
-
expect(min_config.term_replacements).to eq empty_hash
|
|
290
|
-
end
|
|
291
|
-
it 'returns hash of all replacement patterns' do
|
|
292
|
-
expected_hash = {
|
|
293
|
-
param1: { :@type => 'IriTemplateMapping', variable: 'param1', property: 'hydra:freetextQuery', required: false, default: 'alpha' },
|
|
294
|
-
param2: { :@type => 'IriTemplateMapping', variable: 'param2', property: 'hydra:freetextQuery', required: false, default: 'beta' }
|
|
295
|
-
}
|
|
296
|
-
expect(full_config.term_replacements).to eq expected_hash
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
|
-
|
|
300
248
|
describe '#term_subauthorities?' do
|
|
301
249
|
it 'returns false if only search configuration is defined' do
|
|
302
250
|
expect(search_only_config.term_subauthorities?).to eq false
|
|
@@ -354,80 +302,4 @@ describe Qa::Authorities::LinkedData::TermConfig do
|
|
|
354
302
|
expect(full_config.term_subauthorities).to eq expected_hash
|
|
355
303
|
end
|
|
356
304
|
end
|
|
357
|
-
|
|
358
|
-
describe '#term_subauthority_replacement_pattern' do
|
|
359
|
-
it 'returns empty hash if only search configuration is defined' do
|
|
360
|
-
empty_hash = {}
|
|
361
|
-
expect(search_only_config.term_subauthority_replacement_pattern).to eq empty_hash
|
|
362
|
-
end
|
|
363
|
-
it 'returns empty hash if no subauthorities are defined' do
|
|
364
|
-
empty_hash = {}
|
|
365
|
-
expect(min_config.term_subauthority_replacement_pattern).to eq empty_hash
|
|
366
|
-
end
|
|
367
|
-
it 'returns hash replacement pattern for subauthority and the default value' do
|
|
368
|
-
expected_hash = { pattern: 'subauth', default: 'term_sub2_name' }
|
|
369
|
-
expect(full_config.term_subauthority_replacement_pattern).to eq expected_hash
|
|
370
|
-
end
|
|
371
|
-
end
|
|
372
|
-
|
|
373
|
-
# rubocop:disable RSpec/RepeatedExample
|
|
374
|
-
describe '#term_url_with_replacements' do
|
|
375
|
-
it 'returns nil if only search configuration is defined' do
|
|
376
|
-
expect(search_only_config.term_url_with_replacements('C123')).to eq nil
|
|
377
|
-
end
|
|
378
|
-
context 'when subauthorities ARE defined' do
|
|
379
|
-
it 'returns the url with query substitution applied' do
|
|
380
|
-
expected_url = 'http://localhost/test_default/term/term_sub2_name/C123?param1=alpha¶m2=beta'
|
|
381
|
-
expect(full_config.term_url_with_replacements('C123')).to eq expected_url
|
|
382
|
-
end
|
|
383
|
-
it 'returns the url with default subauthority when NOT specified' do
|
|
384
|
-
expected_url = 'http://localhost/test_default/term/term_sub2_name/C123?param1=alpha¶m2=beta'
|
|
385
|
-
expect(full_config.term_url_with_replacements('C123')).to eq expected_url
|
|
386
|
-
end
|
|
387
|
-
it 'returns the url with subauthority substitution when specified' do
|
|
388
|
-
expected_url = 'http://localhost/test_default/term/term_sub3_name/C123?param1=alpha¶m2=beta'
|
|
389
|
-
expect(full_config.term_url_with_replacements('C123', 'term_sub3_key')).to eq expected_url
|
|
390
|
-
end
|
|
391
|
-
it 'returns the url with default values when replacements are NOT specified' do
|
|
392
|
-
expected_url = 'http://localhost/test_default/term/term_sub2_name/C123?param1=alpha¶m2=beta'
|
|
393
|
-
expect(full_config.term_url_with_replacements('C123')).to eq expected_url
|
|
394
|
-
end
|
|
395
|
-
it 'returns the url with replacement substitution values when replacements are specified' do
|
|
396
|
-
expected_url = 'http://localhost/test_default/term/term_sub2_name/C123?param1=golf¶m2=hotel'
|
|
397
|
-
expect(full_config.term_url_with_replacements('C123', nil, param1: 'golf', param2: 'hotel')).to eq expected_url
|
|
398
|
-
end
|
|
399
|
-
end
|
|
400
|
-
|
|
401
|
-
context 'when subauthorities are NOT defined' do
|
|
402
|
-
it 'returns the url with query substitution applied' do
|
|
403
|
-
expected_url = 'http://localhost/test_default/term/C123'
|
|
404
|
-
expect(min_config.term_url_with_replacements('C123')).to eq expected_url
|
|
405
|
-
end
|
|
406
|
-
it 'and subauth param is included returns the url with query substitution applied ignoring the subauth' do
|
|
407
|
-
expected_url = 'http://localhost/test_default/term/C123'
|
|
408
|
-
expect(min_config.term_url_with_replacements('C123', 'fake_subauth_key')).to eq expected_url
|
|
409
|
-
end
|
|
410
|
-
end
|
|
411
|
-
|
|
412
|
-
context 'when replacements are not defined' do
|
|
413
|
-
it 'returns the url with query substitution applied' do
|
|
414
|
-
expected_url = 'http://localhost/test_default/term/C123'
|
|
415
|
-
expect(min_config.term_url_with_replacements('C123')).to eq expected_url
|
|
416
|
-
end
|
|
417
|
-
it 'and replacements param is included returns the url with query substitution applied ignoring the replacements' do
|
|
418
|
-
expected_url = 'http://localhost/test_default/term/C123'
|
|
419
|
-
expect(min_config.term_url_with_replacements('C123', nil, fake_replacement_key: 'fake_value')).to eq expected_url
|
|
420
|
-
end
|
|
421
|
-
end
|
|
422
|
-
|
|
423
|
-
context 'with encoding specified in config' do
|
|
424
|
-
it 'returns the uri as the url' do
|
|
425
|
-
expected_url = 'http://localhost/test_default/term?uri=http%3A%2F%2Fencoded%2Ebecause%3Fencode%3Dtrue&yes%3Aencoded%20here&no:encoding here&defaults:to not encoded'
|
|
426
|
-
term_uri = 'http://encoded.because?encode=true'
|
|
427
|
-
replacements = { encode_true: 'yes:encoded here', encode_false: 'no:encoding here', encode_not_specified: 'defaults:to not encoded' }
|
|
428
|
-
expect(encoding_config.term_url_with_replacements(term_uri, nil, replacements)).to eq expected_url
|
|
429
|
-
end
|
|
430
|
-
end
|
|
431
|
-
end
|
|
432
|
-
# rubocop:enable RSpec/RepeatedExample
|
|
433
305
|
end
|
|
@@ -28,14 +28,14 @@ describe Qa::Authorities::Loc do
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
context "for searching" do
|
|
31
|
-
let(:url) { '
|
|
31
|
+
let(:url) { 'http://id.loc.gov/search/?q=foo&q=cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fauthorities%2Fsubjects&format=json' }
|
|
32
32
|
it "returns a url" do
|
|
33
33
|
expect(authority.build_query_url("foo")).to eq(url)
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
context "for returning single terms" do
|
|
38
|
-
let(:url) { "
|
|
38
|
+
let(:url) { "http://id.loc.gov/authorities/subjects/sh2002003586.json" }
|
|
39
39
|
it "returns a url with an authority and id" do
|
|
40
40
|
expect(authority.find_url("sh2002003586")).to eq(url)
|
|
41
41
|
end
|
|
@@ -49,15 +49,15 @@ describe Qa::Authorities::Loc do
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
before do
|
|
52
|
-
stub_request(:get, "
|
|
52
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=cs:http://id.loc.gov/authorities/subjects")
|
|
53
53
|
.with(headers: { 'Accept' => 'application/json' })
|
|
54
54
|
.to_return(status: 200, body: "")
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
context "with flat params encoded" do
|
|
58
|
-
let(:url) { '
|
|
58
|
+
let(:url) { 'http://id.loc.gov/search/?q=foo&q=cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fauthorities%2Fsubjects&format=json' }
|
|
59
59
|
it "returns a response" do
|
|
60
|
-
flat_params_url = "
|
|
60
|
+
flat_params_url = "http://id.loc.gov/search/?format=json&q=foo&q=cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fauthorities%2Fsubjects"
|
|
61
61
|
expect(subject.env.url.to_s).to eq(flat_params_url)
|
|
62
62
|
end
|
|
63
63
|
end
|
|
@@ -66,7 +66,7 @@ describe Qa::Authorities::Loc do
|
|
|
66
66
|
describe "#search" do
|
|
67
67
|
context "any LOC authorities" do
|
|
68
68
|
let :authority do
|
|
69
|
-
stub_request(:get, "
|
|
69
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=s&q=cs:http://id.loc.gov/vocabulary/geographicAreas")
|
|
70
70
|
.with(headers: { 'Accept' => 'application/json' })
|
|
71
71
|
.to_return(body: webmock_fixture("loc-response.txt"), status: 200)
|
|
72
72
|
described_class.subauthority_for("geographicAreas")
|
|
@@ -95,7 +95,7 @@ describe Qa::Authorities::Loc do
|
|
|
95
95
|
|
|
96
96
|
context "subject terms" do
|
|
97
97
|
let :results do
|
|
98
|
-
stub_request(:get, "
|
|
98
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=History--&q=cs:http://id.loc.gov/authorities/subjects")
|
|
99
99
|
.with(headers: { 'Accept' => 'application/json' })
|
|
100
100
|
.to_return(body: webmock_fixture("loc-subjects-response.txt"), status: 200)
|
|
101
101
|
described_class.subauthority_for("subjects").search("History--")
|
|
@@ -111,7 +111,7 @@ describe Qa::Authorities::Loc do
|
|
|
111
111
|
|
|
112
112
|
context "name terms" do
|
|
113
113
|
let :results do
|
|
114
|
-
stub_request(:get, "
|
|
114
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=Berry&q=cs:http://id.loc.gov/authorities/names")
|
|
115
115
|
.with(headers: { 'Accept' => 'application/json' })
|
|
116
116
|
.to_return(body: webmock_fixture("loc-names-response.txt"), status: 200)
|
|
117
117
|
described_class.subauthority_for("names").search("Berry")
|
|
@@ -125,7 +125,7 @@ describe Qa::Authorities::Loc do
|
|
|
125
125
|
describe "#find" do
|
|
126
126
|
context "using a subject id" do
|
|
127
127
|
let :results do
|
|
128
|
-
stub_request(:get, "
|
|
128
|
+
stub_request(:get, "http://id.loc.gov/authorities/subjects/sh2002003586.json")
|
|
129
129
|
.with(headers: { 'Accept' => 'application/json' })
|
|
130
130
|
.to_return(status: 200, body: webmock_fixture("loc-subject-find-response.txt"), headers: {})
|
|
131
131
|
described_class.subauthority_for("subjects").find("sh2002003586")
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
1
3
|
RSpec.describe Qa::Configuration do
|
|
2
4
|
subject { described_class.new }
|
|
3
5
|
|
|
4
|
-
it { is_expected.to respond_to(:cors_headers?) }
|
|
5
|
-
it { is_expected.to respond_to(:enable_cors_headers) }
|
|
6
|
-
it { is_expected.to respond_to(:disable_cors_headers) }
|
|
7
|
-
it { is_expected.to respond_to(:authorized_reload_token=) }
|
|
8
|
-
it { is_expected.to respond_to(:authorized_reload_token) }
|
|
9
|
-
it { is_expected.to respond_to(:valid_authority_reload_token?) }
|
|
10
|
-
|
|
11
6
|
describe '#enable_cors_headers' do
|
|
12
7
|
it 'turns on cors headers support' do
|
|
13
8
|
subject.enable_cors_headers
|
|
@@ -55,4 +50,22 @@ RSpec.describe Qa::Configuration do
|
|
|
55
50
|
end
|
|
56
51
|
end
|
|
57
52
|
end
|
|
53
|
+
|
|
54
|
+
describe '#default_language' do
|
|
55
|
+
context 'when NOT configured' do
|
|
56
|
+
it 'returns :en as the default language' do
|
|
57
|
+
expect(subject.default_language).to be :en
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'when configured' do
|
|
62
|
+
before do
|
|
63
|
+
subject.default_language = [:fr]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'returns the configured default language' do
|
|
67
|
+
expect(subject.default_language).to match_array [:fr]
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
58
71
|
end
|
|
@@ -10,8 +10,8 @@ describe "mesh rake tasks" do # rubocop:disable RSpec/DescribeClass
|
|
|
10
10
|
Rake::Task.define_task(:environment) # rspec has loaded rails
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
describe "mesh:import" do
|
|
14
|
-
let(:task_name) { "mesh:import" }
|
|
13
|
+
describe "qa:mesh:import" do
|
|
14
|
+
let(:task_name) { "qa:mesh:import" }
|
|
15
15
|
let(:output) { StringIO.new }
|
|
16
16
|
before do
|
|
17
17
|
$stdout = output # rubocop:disable RSpec/ExpectOutput # TODO: Explore how to remove this disable
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe Qa::IriTemplate::UrlConfig do
|
|
4
|
+
let(:url_template) do
|
|
5
|
+
{
|
|
6
|
+
:"@context" => "http://www.w3.org/ns/hydra/context.jsonld",
|
|
7
|
+
:"@type" => "IriTemplate",
|
|
8
|
+
template: "http://localhost/test_default/search?{?subauth}&{?query}&{?param1}&{?param2}",
|
|
9
|
+
variableRepresentation: "BasicRepresentation",
|
|
10
|
+
mapping: [
|
|
11
|
+
{
|
|
12
|
+
:"@type" => "IriTemplateMapping",
|
|
13
|
+
variable: "query",
|
|
14
|
+
property: "hydra:freetextQuery",
|
|
15
|
+
required: true
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
:"@type" => "IriTemplateMapping",
|
|
19
|
+
variable: "subauth",
|
|
20
|
+
property: "hydra:freetextQuery",
|
|
21
|
+
required: false,
|
|
22
|
+
default: "search_sub1_name"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
:"@type" => "IriTemplateMapping",
|
|
26
|
+
variable: "param1",
|
|
27
|
+
property: "hydra:freetextQuery",
|
|
28
|
+
required: false,
|
|
29
|
+
default: "delta"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
:"@type" => "IriTemplateMapping",
|
|
33
|
+
variable: "param2",
|
|
34
|
+
property: "hydra:freetextQuery",
|
|
35
|
+
required: false,
|
|
36
|
+
default: "echo"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe 'model attributes' do
|
|
43
|
+
subject { described_class.new(url_template) }
|
|
44
|
+
|
|
45
|
+
it { is_expected.to respond_to :template }
|
|
46
|
+
it { is_expected.to respond_to :variable_representation }
|
|
47
|
+
it { is_expected.to respond_to :mapping }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe '#new' do
|
|
51
|
+
context 'when missing template' do
|
|
52
|
+
before do
|
|
53
|
+
allow(url_template).to receive(:fetch).with(:template, nil).and_return(nil)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'raises an error' do
|
|
57
|
+
expect { described_class.new(url_template) }.to raise_error(Qa::InvalidConfiguration, 'template is required')
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'when missing mapping' do
|
|
62
|
+
before do
|
|
63
|
+
allow(url_template).to receive(:fetch).with(:template, nil).and_return("http://localhost/test_default/search?{?subauth}&{?query}&{?param1}&{?param2}")
|
|
64
|
+
allow(url_template).to receive(:fetch).with(:mapping, nil).and_return(nil)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'raises an error' do
|
|
68
|
+
expect { described_class.new(url_template) }.to raise_error(Qa::InvalidConfiguration, 'mapping is required')
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
context 'when no maps defined' do
|
|
73
|
+
before do
|
|
74
|
+
allow(url_template).to receive(:fetch).with(:template, nil).and_return("http://localhost/test_default/search?{?subauth}&{?query}&{?param1}&{?param2}")
|
|
75
|
+
allow(url_template).to receive(:fetch).with(:mapping, nil).and_return([])
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'raises an error' do
|
|
79
|
+
expect { described_class.new(url_template) }.to raise_error(Qa::InvalidConfiguration, 'mapping must include at least one map')
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
describe '#template' do
|
|
85
|
+
subject { described_class.new(url_template) }
|
|
86
|
+
|
|
87
|
+
it 'returns the configured url template' do
|
|
88
|
+
expect(subject.template).to eq 'http://localhost/test_default/search?{?subauth}&{?query}&{?param1}&{?param2}'
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
describe '#mapping' do
|
|
93
|
+
subject { described_class.new(url_template) }
|
|
94
|
+
|
|
95
|
+
it 'returns an array of variable maps' do
|
|
96
|
+
mapping = subject.mapping
|
|
97
|
+
expect(mapping).to be_kind_of Array
|
|
98
|
+
expect(mapping.size).to eq 4
|
|
99
|
+
expect(mapping.first).to be_kind_of Qa::IriTemplate::VariableMap
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|