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.
Files changed (95) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +16 -548
  3. data/app/controllers/qa/linked_data_terms_controller.rb +64 -42
  4. data/app/controllers/qa/terms_controller.rb +14 -6
  5. data/app/models/qa/iri_template/url_config.rb +47 -0
  6. data/app/models/qa/iri_template/variable_map.rb +62 -0
  7. data/app/models/qa/linked_data/config/context_map.rb +77 -0
  8. data/app/models/qa/linked_data/config/context_property_map.rb +144 -0
  9. data/app/models/qa/linked_data/config/helper.rb +34 -0
  10. data/app/services/qa/iri_template_service.rb +31 -0
  11. data/{lib/qa/authorities → app/services/qa}/linked_data/authority_service.rb +3 -4
  12. data/app/services/qa/linked_data/authority_url_service.rb +48 -0
  13. data/app/services/qa/linked_data/deep_sort_service.rb +238 -0
  14. data/app/services/qa/linked_data/graph_service.rb +106 -0
  15. data/app/services/qa/linked_data/language_service.rb +30 -0
  16. data/app/services/qa/linked_data/language_sort_service.rb +81 -0
  17. data/app/services/qa/linked_data/mapper/context_mapper_service.rb +59 -0
  18. data/app/services/qa/linked_data/mapper/graph_mapper_service.rb +40 -0
  19. data/app/services/qa/linked_data/mapper/search_results_mapper_service.rb +70 -0
  20. data/config/authorities/linked_data/loc.json +5 -2
  21. data/config/authorities/linked_data/oclc_fast.json +3 -2
  22. data/config/initializers/linked_data_authorities.rb +1 -1
  23. data/config/locales/qa.en.yml +9 -0
  24. data/lib/generators/qa/install/templates/config/initializers/qa.rb +4 -0
  25. data/lib/qa.rb +8 -0
  26. data/lib/qa/authorities/assign_fast/generic_authority.rb +1 -1
  27. data/lib/qa/authorities/base.rb +0 -11
  28. data/lib/qa/authorities/crossref/generic_authority.rb +1 -1
  29. data/lib/qa/authorities/geonames.rb +1 -1
  30. data/lib/qa/authorities/getty/aat.rb +7 -2
  31. data/lib/qa/authorities/getty/tgn.rb +7 -2
  32. data/lib/qa/authorities/getty/ulan.rb +7 -2
  33. data/lib/qa/authorities/linked_data.rb +0 -1
  34. data/lib/qa/authorities/linked_data/config.rb +29 -28
  35. data/lib/qa/authorities/linked_data/config/search_config.rb +21 -79
  36. data/lib/qa/authorities/linked_data/config/term_config.rb +7 -77
  37. data/lib/qa/authorities/linked_data/find_term.rb +25 -17
  38. data/lib/qa/authorities/linked_data/generic_authority.rb +6 -5
  39. data/lib/qa/authorities/linked_data/rdf_helper.rb +6 -73
  40. data/lib/qa/authorities/linked_data/search_query.rb +54 -101
  41. data/lib/qa/authorities/loc/generic_authority.rb +4 -4
  42. data/lib/qa/authorities/web_service_base.rb +1 -8
  43. data/lib/qa/configuration.rb +7 -0
  44. data/lib/qa/version.rb +1 -1
  45. data/lib/tasks/mesh.rake +19 -18
  46. data/spec/controllers/linked_data_terms_controller_spec.rb +51 -1
  47. data/spec/controllers/terms_controller_spec.rb +15 -15
  48. data/spec/fixtures/authorities/linked_data/lod_encoding_config.json +2 -1
  49. data/spec/fixtures/authorities/linked_data/lod_full_config.json +56 -2
  50. data/spec/fixtures/authorities/linked_data/lod_full_config_1_0.json +164 -0
  51. data/spec/fixtures/authorities/linked_data/lod_lang_defaults.json +5 -4
  52. data/spec/fixtures/authorities/linked_data/lod_lang_multi_defaults.json +3 -2
  53. data/spec/fixtures/authorities/linked_data/lod_lang_no_defaults.json +3 -2
  54. data/spec/fixtures/authorities/linked_data/lod_lang_param.json +3 -2
  55. data/spec/fixtures/authorities/linked_data/lod_min_config.json +3 -2
  56. data/spec/fixtures/authorities/linked_data/lod_search_only_config.json +2 -1
  57. data/spec/fixtures/authorities/linked_data/lod_sort.json +2 -1
  58. data/spec/fixtures/authorities/linked_data/lod_term_id_param_config.json +2 -1
  59. data/spec/fixtures/authorities/linked_data/lod_term_only_config.json +2 -1
  60. data/spec/fixtures/authorities/linked_data/lod_term_uri_param_config.json +2 -1
  61. data/spec/fixtures/getty-error-response.txt +10 -0
  62. data/spec/fixtures/lod_2_ranked_2_unranked.nt +17 -0
  63. data/spec/fixtures/lod_3_ranked_varying_preds.nt +16 -0
  64. data/spec/fixtures/lod_lang_search_filtering.nt +11 -0
  65. data/spec/fixtures/lod_search_with_blanknode_subjects.nt +18 -0
  66. data/spec/fixtures/lod_term_with_blanknode_objects.nt +8 -0
  67. data/spec/lib/authorities/assign_fast_spec.rb +1 -0
  68. data/spec/lib/authorities/getty/aat_spec.rb +14 -2
  69. data/spec/lib/authorities/getty/tgn_spec.rb +14 -2
  70. data/spec/lib/authorities/getty/ulan_spec.rb +14 -2
  71. data/spec/lib/authorities/linked_data/authority_service_spec.rb +2 -1
  72. data/spec/lib/authorities/linked_data/config_spec.rb +284 -5
  73. data/spec/lib/authorities/linked_data/find_term_spec.rb +3 -1
  74. data/spec/lib/authorities/linked_data/generic_authority_spec.rb +92 -42
  75. data/spec/lib/authorities/linked_data/search_config_spec.rb +67 -160
  76. data/spec/lib/authorities/linked_data/search_query_spec.rb +3 -127
  77. data/spec/lib/authorities/linked_data/term_config_spec.rb +6 -134
  78. data/spec/lib/authorities/loc_spec.rb +9 -9
  79. data/spec/lib/configuration_spec.rb +20 -7
  80. data/spec/lib/tasks/mesh.rake_spec.rb +2 -2
  81. data/spec/models/iri_template/url_config_spec.rb +102 -0
  82. data/spec/models/iri_template/variable_map_spec.rb +105 -0
  83. data/spec/models/linked_data/config/context_map_spec.rb +148 -0
  84. data/spec/models/linked_data/config/context_property_map_spec.rb +286 -0
  85. data/spec/services/iri_template_service_spec.rb +69 -0
  86. data/spec/services/linked_data/authority_url_service_spec.rb +107 -0
  87. data/spec/services/linked_data/deep_sort_service_spec.rb +260 -0
  88. data/spec/services/linked_data/graph_service_spec.rb +232 -0
  89. data/spec/services/linked_data/language_service_spec.rb +66 -0
  90. data/spec/services/linked_data/language_sort_service_spec.rb +58 -0
  91. data/spec/services/linked_data/mapper/context_mapper_service_spec.rb +137 -0
  92. data/spec/services/linked_data/mapper/graph_mapper_service_spec.rb +110 -0
  93. data/spec/services/linked_data/mapper/search_results_mapper_service_spec.rb +109 -0
  94. data/spec/spec_helper.rb +10 -2
  95. metadata +81 -11
@@ -1,5 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe Qa::Authorities::LinkedData::FindTerm do
4
- it "should have tests"
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"
5
7
  end
@@ -69,50 +69,75 @@ RSpec.describe Qa::Authorities::LinkedData::GenericAuthority do
69
69
  describe "language processing" do
70
70
  context "when filtering #search results" do
71
71
  context "and lang NOT passed in" do
72
- context "and NO default defined in config" do
73
- let(:lod_lang_no_defaults) { described_class.new(:LOD_LANG_NO_DEFAULTS) }
74
- let :results do
75
- stub_request(:get, "http://localhost/test_no_default/search?query=milk")
76
- .to_return(status: 200, body: webmock_fixture("lod_lang_search_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
77
- lod_lang_no_defaults.search('milk')
72
+ context "and NO language defined in authority config" do
73
+ context "and NO language defined in Qa config" do
74
+ let(:lod_lang_no_defaults) { described_class.new(:LOD_LANG_NO_DEFAULTS) }
75
+ let :results do
76
+ stub_request(:get, "http://localhost/test_no_default/search?query=milk")
77
+ .to_return(status: 200, body: webmock_fixture("lod_lang_search_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
78
+ lod_lang_no_defaults.search('milk')
79
+ end
80
+
81
+ before do
82
+ Qa.config.default_language = []
83
+ end
84
+
85
+ after do
86
+ Qa.config.default_language = :en
87
+ end
88
+
89
+ it "is not filtered" do
90
+ expect(results.first[:label]).to eq('[buttermilk, Babeurre] (yummy, délicieux)')
91
+ expect(results.second[:label]).to eq('[condensed milk, lait condensé] (creamy, crémeux)')
92
+ expect(results.third[:label]).to eq('[dried milk, lait en poudre] (powdery, poudreux)')
93
+ end
78
94
  end
79
- it "is not filtered" do
80
- expect(results.first[:label]).to eq('[buttermilk, Babeurre] (yummy, délicieux)')
81
- expect(results.second[:label]).to eq('[condensed milk, lait condensé] (creamy, crémeux)')
82
- expect(results.third[:label]).to eq('[dried milk, lait en poudre] (powdery, poudreux)')
95
+
96
+ context "and default_language is defined in Qa config" do
97
+ let(:lod_lang_no_defaults) { described_class.new(:LOD_LANG_NO_DEFAULTS) }
98
+ let :results do
99
+ stub_request(:get, "http://localhost/test_no_default/search?query=milk")
100
+ .to_return(status: 200, body: webmock_fixture("lod_lang_search_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
101
+ lod_lang_no_defaults.search('milk')
102
+ end
103
+ it "filters using Qa configured default" do
104
+ expect(results.first[:label]).to eq('buttermilk (yummy)')
105
+ expect(results.second[:label]).to eq('condensed milk (creamy)')
106
+ expect(results.third[:label]).to eq('dried milk (powdery)')
107
+ end
83
108
  end
84
109
  end
85
110
 
86
- context "and default IS defined in config" do
111
+ context "and language IS defined in authority config" do
87
112
  let(:lod_lang_defaults) { described_class.new(:LOD_LANG_DEFAULTS) }
88
113
  let :results do
89
114
  stub_request(:get, "http://localhost/test_default/search?query=milk")
90
115
  .to_return(status: 200, body: webmock_fixture("lod_lang_search_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
91
116
  lod_lang_defaults.search('milk')
92
117
  end
93
- it "is filtered to default" do
94
- expect(results.first[:label]).to eq('buttermilk (yummy)')
95
- expect(results.second[:label]).to eq('condensed milk (creamy)')
96
- expect(results.third[:label]).to eq('dried milk (powdery)')
118
+ it "is filtered to authority defined language" do
119
+ expect(results.first[:label]).to eq('Babeurre (délicieux)')
120
+ expect(results.second[:label]).to eq('lait condensé (crémeux)')
121
+ expect(results.third[:label]).to eq('lait en poudre (poudreux)')
97
122
  end
98
123
  end
99
124
  end
100
125
 
101
- context "and multiple defaults ARE defined in config" do
126
+ context "and multiple languages ARE defined in authority config" do
102
127
  let(:lod_lang_multi_defaults) { described_class.new(:LOD_LANG_MULTI_DEFAULTS) }
103
128
  let :results do
104
129
  stub_request(:get, "http://localhost/test_default/search?query=milk")
105
130
  .to_return(status: 200, body: webmock_fixture("lod_lang_search_enfrde.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
106
131
  lod_lang_multi_defaults.search('milk')
107
132
  end
108
- it "is filtered to default" do
133
+ it "is filtered to authority defined languages" do
109
134
  expect(results.first[:label]).to eq('[buttermilk, Babeurre] (yummy, délicieux)')
110
135
  expect(results.second[:label]).to eq('[condensed milk, lait condensé] (creamy, crémeux)')
111
136
  expect(results.third[:label]).to eq('[dried milk, lait en poudre] (powdery, poudreux)')
112
137
  end
113
138
  end
114
139
 
115
- context "and lang IS passed in" do
140
+ context "and language IS passed in to search" do
116
141
  let(:lod_lang_defaults) { described_class.new(:LOD_LANG_DEFAULTS) }
117
142
  let :results do
118
143
  stub_request(:get, "http://localhost/test_default/search?query=milk")
@@ -313,46 +338,71 @@ RSpec.describe Qa::Authorities::LinkedData::GenericAuthority do
313
338
  describe "language processing" do
314
339
  context "when filtering #find result" do
315
340
  context "and lang NOT passed in" do
316
- context "and NO default defined in config" do
317
- let(:lod_lang_no_defaults) { described_class.new(:LOD_LANG_NO_DEFAULTS) }
318
- let :results do
319
- stub_request(:get, "http://localhost/test_no_default/term/c_9513")
320
- .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
321
- lod_lang_no_defaults.find('c_9513')
341
+ context "and NO language defined in authority config" do
342
+ context "and NO language defined in Qa config" do
343
+ let(:lod_lang_no_defaults) { described_class.new(:LOD_LANG_NO_DEFAULTS) }
344
+ let :results do
345
+ stub_request(:get, "http://localhost/test_no_default/term/c_9513")
346
+ .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
347
+ lod_lang_no_defaults.find('c_9513')
348
+ end
349
+
350
+ before do
351
+ Qa.config.default_language = []
352
+ end
353
+
354
+ after do
355
+ Qa.config.default_language = :en
356
+ end
357
+
358
+ it "is not filtered" do
359
+ expect(results[:label]).to eq ['buttermilk', 'Babeurre']
360
+ expect(results[:altlabel]).to eq ['yummy', 'délicieux']
361
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
362
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
363
+ end
322
364
  end
323
- it "is not filtered" do
324
- expect(results[:label]).to eq ['buttermilk', 'Babeurre']
325
- expect(results[:altlabel]).to eq ['yummy', 'délicieux']
326
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
327
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
365
+ context "and default_language is defined in Qa config" do
366
+ let(:lod_lang_no_defaults) { described_class.new(:LOD_LANG_NO_DEFAULTS) }
367
+ let :results do
368
+ stub_request(:get, "http://localhost/test_no_default/term/c_9513")
369
+ .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
370
+ lod_lang_no_defaults.find('c_9513')
371
+ end
372
+ it "filters using Qa configured default for summary but not for predicates list" do
373
+ expect(results[:label]).to eq ['buttermilk']
374
+ expect(results[:altlabel]).to eq ['yummy']
375
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
376
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
377
+ end
328
378
  end
329
379
  end
330
- context "and default IS defined in config" do
380
+ context "and language IS defined in authority config" do
331
381
  let(:lod_lang_defaults) { described_class.new(:LOD_LANG_DEFAULTS) }
332
382
  let :results do
333
383
  stub_request(:get, "http://localhost/test_default/term/c_9513")
334
384
  .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfr.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
335
385
  lod_lang_defaults.find('c_9513')
336
386
  end
337
- it "is filtered to default" do
338
- expect(results[:label]).to eq ['buttermilk']
339
- expect(results[:altlabel]).to eq ['yummy']
340
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to eq ['buttermilk']
341
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to eq ['yummy']
387
+ it "filters using authority configured language for summary but not for predicates list" do
388
+ expect(results[:label]).to eq ['Babeurre']
389
+ expect(results[:altlabel]).to eq ['délicieux']
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")
342
392
  end
343
393
  end
344
- context "and multiple defaults ARE defined in config" do
394
+ context "and multiple languages ARE defined in authority config" do
345
395
  let(:lod_lang_multi_defaults) { described_class.new(:LOD_LANG_MULTI_DEFAULTS) }
346
396
  let :results do
347
397
  stub_request(:get, "http://localhost/test_default/term/c_9513")
348
398
  .to_return(status: 200, body: webmock_fixture("lod_lang_term_enfrde.rdf.xml"), headers: { 'Content-Type' => 'application/rdf+xml' })
349
399
  lod_lang_multi_defaults.find('c_9513')
350
400
  end
351
- it "is filtered to default" do
401
+ it "filters using authority configured languages for summary but not for predicates list" do
352
402
  expect(results[:label]).to eq ['buttermilk', 'Babeurre']
353
403
  expect(results[:altlabel]).to eq ['yummy', 'délicieux']
354
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
355
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
404
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre", "Buttermilch")
405
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux", "lecker")
356
406
  end
357
407
  end
358
408
  end
@@ -367,8 +417,8 @@ RSpec.describe Qa::Authorities::LinkedData::GenericAuthority do
367
417
  it "is filtered to specified language" do
368
418
  expect(results[:label]).to eq ['Babeurre']
369
419
  expect(results[:altlabel]).to eq ['délicieux']
370
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to eq ['Babeurre']
371
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to eq ['délicieux']
420
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
421
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#altLabel"]).to include("yummy", "délicieux")
372
422
  end
373
423
  end
374
424
 
@@ -381,7 +431,7 @@ RSpec.describe Qa::Authorities::LinkedData::GenericAuthority do
381
431
  end
382
432
  it "is filtered to specified language" do
383
433
  expect(results[:label]).to eq ['Babeurre']
384
- expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to eq ['Babeurre']
434
+ expect(results["predicates"]["http://www.w3.org/2004/02/skos/core#prefLabel"]).to include("buttermilk", "Babeurre")
385
435
  end
386
436
  end
387
437
 
@@ -12,7 +12,7 @@ RSpec.describe Qa::Authorities::LinkedData::SearchConfig 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/search?subauth={?subauth}&query={?query}&param1={?param1}&param2={?param2}',
15
+ template: 'http://localhost/test_default/search?{?subauth}&{?query}&{?param1}&{?param2}',
16
16
  variableRepresentation: 'BasicRepresentation',
17
17
  mapping: [
18
18
  {
@@ -55,6 +55,55 @@ RSpec.describe Qa::Authorities::LinkedData::SearchConfig do
55
55
  altlabel_predicate: 'http://www.w3.org/2004/02/skos/core#altLabel',
56
56
  sort_predicate: 'http://www.w3.org/2004/02/skos/core#prefLabel'
57
57
  },
58
+ context: {
59
+ groups: {
60
+ dates: {
61
+ group_label_i18n: "qa.linked_data.authority.locnames_ld4l_cache.dates",
62
+ group_label_default: "Dates"
63
+ },
64
+ hierarchy: {
65
+ group_label_i18n: "qa.linked_data.authority.locgenres_ld4l_cache.hierarchy",
66
+ group_label_default: "Hierarchy"
67
+ }
68
+ },
69
+ properties: [
70
+ {
71
+ property_label_i18n: "qa.linked_data.authority.locgenres_ld4l_cache.authoritative_label",
72
+ property_label_default: "Authoritative Label",
73
+ ldpath: "madsrdf:authoritativeLabel",
74
+ selectable: true,
75
+ drillable: false
76
+ },
77
+ {
78
+ group_id: "dates",
79
+ property_label_i18n: "qa.linked_data.authority.locnames_ld4l_cache.birth_date",
80
+ property_label_default: "Birth",
81
+ ldpath: "madsrdf:identifiesRWO/madsrdf:birthDate/schema:label",
82
+ selectable: false,
83
+ drillable: false
84
+ },
85
+ {
86
+ group_id: "hierarchy",
87
+ property_label_i18n: "qa.linked_data.authority.locgenres_ld4l_cache.narrower",
88
+ property_label_default: "Narrower",
89
+ ldpath: "skos:narrower :: xsd:string",
90
+ selectable: true,
91
+ drillable: true,
92
+ expansion_label_ldpath: "skos:prefLabel ::xsd:string",
93
+ expansion_id_ldpath: "loc:lccn ::xsd:string"
94
+ },
95
+ {
96
+ group_id: "hierarchy",
97
+ property_label_i18n: "qa.linked_data.authority.locgenres_ld4l_cache.broader",
98
+ property_label_default: "Broader",
99
+ ldpath: "skos:broader :: xsd:string",
100
+ selectable: true,
101
+ drillable: true,
102
+ expansion_label_ldpath: "skos:prefLabel ::xsd:string",
103
+ expansion_id_ldpath: "loc:lccn ::xsd:string"
104
+ }
105
+ ]
106
+ },
58
107
  subauthorities: {
59
108
  search_sub1_key: 'search_sub1_name',
60
109
  search_sub2_key: 'search_sub2_name',
@@ -80,60 +129,12 @@ RSpec.describe Qa::Authorities::LinkedData::SearchConfig do
80
129
  end
81
130
  end
82
131
 
83
- describe '#url' do
84
- let(:url_config) do
85
- {
86
- :@context => 'http://www.w3.org/ns/hydra/context.jsonld',
87
- :@type => 'IriTemplate',
88
- template: 'http://localhost/test_default/search?subauth={?subauth}&query={?query}&param1={?param1}&param2={?param2}',
89
- variableRepresentation: 'BasicRepresentation',
90
- mapping: [
91
- {
92
- :@type => 'IriTemplateMapping',
93
- variable: 'query',
94
- property: 'hydra:freetextQuery',
95
- required: true
96
- },
97
- {
98
- :@type => 'IriTemplateMapping',
99
- variable: 'subauth',
100
- property: 'hydra:freetextQuery',
101
- required: false,
102
- default: 'search_sub1_name'
103
- },
104
- {
105
- :@type => 'IriTemplateMapping',
106
- variable: 'param1',
107
- property: 'hydra:freetextQuery',
108
- required: false,
109
- default: 'delta'
110
- },
111
- {
112
- :@type => 'IriTemplateMapping',
113
- variable: 'param2',
114
- property: 'hydra:freetextQuery',
115
- required: false,
116
- default: 'echo'
117
- }
118
- ]
119
- }
120
- end
121
-
122
- it 'returns nil if only term configuration is defined' do
123
- expect(term_only_config.url).to eq nil
124
- end
125
- it 'returns the search url from the configuration' do
126
- expect(full_config.url).to eq url_config
127
- end
128
- end
129
-
130
- describe '#url_template' do
132
+ describe '#url_config' do
131
133
  it 'returns nil if only term configuration is defined' do
132
- expect(term_only_config.url).to eq nil
134
+ expect(term_only_config.url_config).to eq nil
133
135
  end
134
- it 'returns the search url from the configuration' do
135
- expected_url_template = 'http://localhost/test_default/search?subauth={?subauth}&query={?query}&param1={?param1}&param2={?param2}'
136
- expect(full_config.url_template).to eq expected_url_template
136
+ it 'returns the url config from the configuration' do
137
+ expect(full_config.url_config).to be_kind_of Qa::IriTemplate::UrlConfig
137
138
  end
138
139
  end
139
140
 
@@ -221,45 +222,27 @@ RSpec.describe Qa::Authorities::LinkedData::SearchConfig do
221
222
  end
222
223
  end
223
224
 
224
- describe '#replacements?' do
225
+ describe '#supports_context?' do
225
226
  it 'returns false if only term configuration is defined' do
226
- expect(term_only_config.replacements?).to eq false
227
- end
228
- it 'returns false if the configuration does NOT define replacements' do
229
- expect(min_config.replacements?).to eq false
230
- end
231
- it 'returns true if the configuration defines replacements' do
232
- expect(full_config.replacements?).to eq true
233
- end
234
- end
235
-
236
- describe '#replacement_count' do
237
- it 'returns 0 if only term configuration is defined' do
238
- expect(term_only_config.replacement_count).to eq 0
227
+ expect(term_only_config.supports_context?).to eq false
239
228
  end
240
- it 'returns 0 if replacement_count is NOT defined' do
241
- expect(min_config.replacement_count).to eq 0
229
+ it 'returns false if NOT defined in the configuration' do
230
+ expect(min_config.supports_context?).to eq false
242
231
  end
243
- it 'returns the number of replacements if defined' do
244
- expect(full_config.replacement_count).to eq 2
232
+ it 'returns true if defined in the configuration' do
233
+ expect(full_config.supports_context?).to eq true
245
234
  end
246
235
  end
247
236
 
248
- describe '#replacements' do
249
- it 'returns empty hash if only term configuration is defined' do
250
- empty_hash = {}
251
- expect(term_only_config.replacements).to eq empty_hash
237
+ describe '#context_map' do
238
+ it 'returns nil if only term configuration is defined' do
239
+ expect(term_only_config.context_map).to eq nil
252
240
  end
253
- it 'returns empty hash if no replacement patterns are defined' do
254
- empty_hash = {}
255
- expect(min_config.replacements).to eq empty_hash
241
+ it 'returns nil if NOT defined in the configuration' do
242
+ expect(min_config.context_map).to eq nil
256
243
  end
257
- it 'returns hash of all replacement patterns' do
258
- expected_hash = {
259
- param1: { :@type => 'IriTemplateMapping', variable: 'param1', property: 'hydra:freetextQuery', required: false, default: 'delta' },
260
- param2: { :@type => 'IriTemplateMapping', variable: 'param2', property: 'hydra:freetextQuery', required: false, default: 'echo' }
261
- }
262
- expect(full_config.replacements).to eq expected_hash
244
+ it 'returns the context map if defined in the configuration' do
245
+ expect(full_config.context_map).to be_kind_of Qa::LinkedData::Config::ContextMap
263
246
  end
264
247
  end
265
248
 
@@ -320,80 +303,4 @@ RSpec.describe Qa::Authorities::LinkedData::SearchConfig do
320
303
  expect(full_config.subauthorities).to eq expected_hash
321
304
  end
322
305
  end
323
-
324
- describe '#subauthority_replacement_pattern' do
325
- it 'returns empty hash if only term configuration is defined' do
326
- empty_hash = {}
327
- expect(term_only_config.subauthority_replacement_pattern).to eq empty_hash
328
- end
329
- it 'returns empty hash if no subauthorities are defined' do
330
- empty_hash = {}
331
- expect(min_config.subauthority_replacement_pattern).to eq empty_hash
332
- end
333
- it 'returns hash replacement pattern for subauthority and the default value' do
334
- expected_hash = { pattern: 'subauth', default: 'search_sub1_name' }
335
- expect(full_config.subauthority_replacement_pattern).to eq expected_hash
336
- end
337
- end
338
-
339
- # rubocop:disable RSpec/RepeatedExample
340
- describe '#search_url_with_replacements' do
341
- it 'returns nil if only term configuration is defined' do
342
- expect(term_only_config.url_with_replacements('Smith')).to eq nil
343
- end
344
- context 'when subauthorities ARE defined' do
345
- it 'returns the url with query substitution applied' do
346
- expected_url = 'http://localhost/test_default/search?subauth=search_sub1_name&query=Smith&param1=delta&param2=echo'
347
- expect(full_config.url_with_replacements('Smith')).to eq expected_url
348
- end
349
- it 'returns the url with default subauthority when NOT specified' do
350
- expected_url = 'http://localhost/test_default/search?subauth=search_sub1_name&query=Smith&param1=delta&param2=echo'
351
- expect(full_config.url_with_replacements('Smith')).to eq expected_url
352
- end
353
- it 'returns the url with subauthority substitution when specified' do
354
- expected_url = 'http://localhost/test_default/search?subauth=search_sub3_name&query=Smith&param1=delta&param2=echo'
355
- expect(full_config.url_with_replacements('Smith', 'search_sub3_key')).to eq expected_url
356
- end
357
- it 'returns the url with default values when replacements are NOT specified' do
358
- expected_url = 'http://localhost/test_default/search?subauth=search_sub1_name&query=Smith&param1=delta&param2=echo'
359
- expect(full_config.url_with_replacements('Smith')).to eq expected_url
360
- end
361
- it 'returns the url with replacement substitution values when replacements are specified' do
362
- expected_url = 'http://localhost/test_default/search?subauth=search_sub1_name&query=Smith&param1=golf&param2=hotel'
363
- expect(full_config.url_with_replacements('Smith', nil, param1: 'golf', param2: 'hotel')).to eq expected_url
364
- end
365
- end
366
-
367
- context 'when subauthorities are not defined' do
368
- it 'returns the url with query substitution applied' do
369
- expected_url = 'http://localhost/test_default/search?query=Smith'
370
- expect(min_config.url_with_replacements('Smith')).to eq expected_url
371
- end
372
- it 'and subauth param is included returns the url with query substitution applied ignoring the subauth' do
373
- expected_url = 'http://localhost/test_default/search?query=Smith'
374
- expect(min_config.url_with_replacements('Smith', 'fake_subauth_key')).to eq expected_url
375
- end
376
- end
377
-
378
- context 'when replacements are not defined' do
379
- it 'returns the url with query substitution applied' do
380
- expected_url = 'http://localhost/test_default/search?query=Smith'
381
- expect(min_config.url_with_replacements('Smith')).to eq expected_url
382
- end
383
- it 'and replacements param is included returns the url with query substitution applied ignoring the replacements' do
384
- expected_url = 'http://localhost/test_default/search?query=Smith'
385
- expect(min_config.url_with_replacements('Smith', nil, fake_replacement_key: 'fake_value')).to eq expected_url
386
- end
387
- end
388
-
389
- context 'with encoding specified in config' do
390
- it 'returns the uri as the url' do
391
- expected_url = 'http://localhost/test_default/search?query=encoded%20because%3Aencode%3Dtrue&yes%3Aencoded%20here&no:encoding here&defaults:to not encoded'
392
- query = 'encoded because:encode=true'
393
- replacements = { encode_true: 'yes:encoded here', encode_false: 'no:encoding here', encode_not_specified: 'defaults:to not encoded' }
394
- expect(encoding_config.url_with_replacements(query, nil, replacements)).to eq expected_url
395
- end
396
- end
397
- end
398
- # rubocop:enable RSpec/RepeatedExample
399
306
  end