qa 5.5.0 → 5.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 73811a2b2371ead4042bab0a11e4b4b0f496e94eb6e92a2f6ddb550ac90f9d41
4
- data.tar.gz: a8888e0db1aa46b562eaab6d45be5fd0de8df52ac9753189416a3ca0fc0d44a3
3
+ metadata.gz: 3fb01e5ca2c9435b8c22af76ace78a1486d2ad22ee54f0a8e1a40ba24b64e218
4
+ data.tar.gz: '0825479f37ac4eb299c944981fff9b670e8efd86eb8b05c3341f7d2a9300361c'
5
5
  SHA512:
6
- metadata.gz: e4aaecb73516d38ddca2ed4dc61571aa1c70fc4fdedee75d4aa1a7763193147303b97124d4e858471508f09ba6adb6158fb63111c5f2ca817d4cf4ec7164690f
7
- data.tar.gz: 9446f03eeaad6aa21890f97d4def246a6915f932f83b764a1bea2b6c9a818c8eb43c45f5d3b8b8235cd57d1efc59c4c08caab93fe1ed1ab5bea65d5a690f23cf
6
+ metadata.gz: 80792bf55b1f8cf6f7401657d7b7844fbeff0dbc4e4597e16869a63a65a6cf1e271d88d631bd0dd9f4f8dbcdda2caadac47974d8d282f21ee1696308022bb201
7
+ data.tar.gz: 7d700e24566d6047cb061731e941affa72d3c260eb7822c421421986127ddfd819f2d6d4cd1c968cd9e527b3276c392a7403564ebce8e5ee4210fb86863072d0
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Questioning Authority
2
2
 
3
- Code: [![Gem Version](https://badge.fury.io/rb/qa.png)](http://badge.fury.io/rb/qa) [![Build Status](https://circleci.com/gh/samvera/questioning_authority.svg?style=svg)](https://circleci.com/gh/samvera/questioning_authority) [![Coverage Status](https://coveralls.io/repos/github/samvera/questioning_authority/badge.svg?branch=master)](https://coveralls.io/github/samvera/questioning_authority?branch=master)
3
+ Code: [![Gem Version](https://badge.fury.io/rb/qa.png)](http://badge.fury.io/rb/qa) [![Build Status](https://circleci.com/gh/samvera/questioning_authority.svg?style=svg)](https://circleci.com/gh/samvera/questioning_authority) [![Coverage Status](https://coveralls.io/repos/github/samvera/questioning_authority/badge.svg?branch=main)](https://coveralls.io/github/samvera/questioning_authority?branch=main)
4
4
 
5
5
  Docs: [![Contribution Guidelines](http://img.shields.io/badge/CONTRIBUTING-Guidelines-blue.svg)](./CONTRIBUTING.md) [![Apache 2.0 License](http://img.shields.io/badge/APACHE2-license-blue.svg)](./LICENSE)
6
6
 
@@ -145,6 +145,12 @@ rake ci
145
145
 
146
146
  Commit your features into a new branch and submit a pull request.
147
147
 
148
+ ## Contributing
149
+
150
+ If you're working on PR for this project, create a feature branch off of `main`.
151
+
152
+ This repository follows the [Samvera Community Code of Conduct](https://samvera.atlassian.net/wiki/spaces/samvera/pages/405212316/Code+of+Conduct) and [language recommendations](https://github.com/samvera/maintenance/blob/main/templates/CONTRIBUTING.md#language). Please ***do not*** create a branch called `master` for this repository or as part of your pull request; the branch will either need to be removed or renamed before it can be considered for inclusion in the code base and history of this repository.
153
+
148
154
  ## Compatibility
149
155
 
150
156
  - Ruby 2.5 or the latest 2.4 version is recommended. Later versions may also work.
@@ -169,7 +175,7 @@ Questioning Authority is a Core Component of the Samvera community. The document
169
175
  github_changelog_generator --user samvera --project questioning_authority --token YOUR_GITHUB_TOKEN_HERE
170
176
  ```
171
177
 
172
- 5. Commit these changes to the master branch
178
+ 5. Commit these changes to the main branch
173
179
 
174
180
  6. Run `rake release`
175
181
 
@@ -27,12 +27,21 @@ class Qa::TermsController < ::ApplicationController
27
27
  end
28
28
 
29
29
  # If the subauthority supports it, return all the information for a given term
30
+ # Expects id to be part of the request path (e.g. http://my.app/qa/show/auth/subauth/{:id})
30
31
  def show
31
32
  term = @authority.method(:find).arity == 2 ? @authority.find(params[:id], self) : @authority.find(params[:id])
32
33
  cors_allow_origin_header(response)
33
34
  render json: term, content_type: content_type_for_format
34
35
  end
35
36
 
37
+ # If the subauthority supports it, return all the information for a given term
38
+ # Expects uri to be a request parameter (e.g. http://my.app/qa/show/auth/subauth?uri={:uri})
39
+ def fetch
40
+ term = @authority.method(:find).arity == 2 ? @authority.find(params[:uri], self) : @authority.find(params[:uri])
41
+ cors_allow_origin_header(response)
42
+ render json: term, content_type: content_type_for_format
43
+ end
44
+
36
45
  def check_vocab_param
37
46
  return if params[:vocab].present?
38
47
  msg = "Required param 'vocab' is missing or empty"
@@ -29,7 +29,7 @@ module Qa
29
29
  end
30
30
 
31
31
  def combined_substitutions(action_config, action, action_request, request_header)
32
- substitutions = request_header.fetch(:replacements, {})
32
+ substitutions = request_header.fetch(:replacements, {}).clone
33
33
  substitutions[action_request_variable(action_config, action)] = action_request
34
34
  substitutions[action_subauth_variable(action_config)] = action_subauth_variable_value(action_config, request_header)
35
35
  substitutions[action_language_variable(action_config)] = language_value(action_config, request_header)
@@ -2,14 +2,13 @@
2
2
  "QA_CONFIG_VERSION": "2.1",
3
3
  "prefixes": {
4
4
  "dcterms": "http://purl.org/dc/terms/",
5
- "skos": "http://www.w3.org/2004/02/skos/core#",
6
- "schema": "http://schema.org/"
5
+ "schema": "http://schema.org/"
7
6
  },
8
7
  "term": {
9
8
  "url": {
10
9
  "@context": "http://www.w3.org/ns/hydra/context.jsonld",
11
10
  "@type": "IriTemplate",
12
- "template": "http://id.worldcat.org/fast/{term_id}",
11
+ "template": "http://id.worldcat.org/fast/{term_id}.rdf.xml",
13
12
  "variableRepresentation": "BasicRepresentation",
14
13
  "mapping": [
15
14
  {
@@ -35,14 +34,15 @@
35
34
  "url": {
36
35
  "@context": "http://www.w3.org/ns/hydra/context.jsonld",
37
36
  "@type": "IriTemplate",
38
- "template": "http://experimental.worldcat.org/fast/search?query={subauth}+all+%22{query}%22&sortKeys=usage&{?maximumRecords}",
37
+ "template": "http://experimental.worldcat.org/fast/search?query={subauth}+all+%22{query}%22&sortKeys=usage&maximumRecords={maximumRecords}",
39
38
  "variableRepresentation": "BasicRepresentation",
40
39
  "mapping": [
41
40
  {
42
41
  "@type": "IriTemplateMapping",
43
42
  "variable": "query",
44
43
  "property": "hydra:freetextQuery",
45
- "required": true
44
+ "required": true,
45
+ "encode": true
46
46
  },
47
47
  {
48
48
  "@type": "IriTemplateMapping",
data/config/routes.rb CHANGED
@@ -9,6 +9,8 @@ Qa::Engine.routes.draw do
9
9
  get "/search/:vocab(/:subauthority)", controller: :terms, action: :search
10
10
  get "/show/:vocab/:id", controller: :terms, action: :show
11
11
  get "/show/:vocab/:subauthority/:id", controller: :terms, action: :show
12
+ get "/fetch/:vocab", controller: :terms, action: :fetch
13
+ get "/fetch/:vocab/:subauthority", controller: :terms, action: :fetch
12
14
 
13
15
  match "/search/linked_data/:vocab(/:subauthority)", to: 'application#options', via: [:options]
14
16
  match "/show/linked_data/:vocab/:id", to: 'application#options', via: [:options]
@@ -17,4 +19,6 @@ Qa::Engine.routes.draw do
17
19
  match "/search/:vocab(/:subauthority)", to: 'application#options', via: [:options]
18
20
  match "/show/:vocab/:id", to: 'application#options', via: [:options]
19
21
  match "/show/:vocab/:subauthority/:id", to: 'application#options', via: [:options]
22
+ match "/fetch/:vocab", to: 'application#options', via: [:options]
23
+ match "/fetch/:vocab/:subauthority", to: 'application#options', via: [:options]
20
24
  end
@@ -70,18 +70,18 @@ module Qa::Authorities::LocSubauthority
70
70
  private
71
71
 
72
72
  def vocab_base_url
73
- "cs%3Ahttps%3A%2F%2Fid.loc.gov%2Fvocabulary%2F"
73
+ "cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fvocabulary%2F"
74
74
  end
75
75
 
76
76
  def authority_base_url
77
- "cs%3Ahttps%3A%2F%2Fid.loc.gov%2Fauthorities%2F"
77
+ "cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fauthorities%2F"
78
78
  end
79
79
 
80
80
  def datatype_base_url
81
- "cs%3Ahttps%3A%2F%2Fid.loc.gov%2Fdatatypes%2F"
81
+ "cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fdatatypes%2F"
82
82
  end
83
83
 
84
84
  def vocab_preservation_base_url
85
- "cs%3Ahttps%3A%2F%2Fid.loc.gov%2Fvocabulary%2Fpreservation%2F"
85
+ "cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fvocabulary%2Fpreservation%2F"
86
86
  end
87
87
  end
@@ -8,13 +8,14 @@ module Qa::Authorities
8
8
  def search(q)
9
9
  r = q.blank? ? [] : terms.select { |term| /\b#{q.downcase}/.match(term[:term].downcase) }
10
10
  r.map do |res|
11
- { id: res[:id], label: res[:term] }.with_indifferent_access
11
+ { id: res[:id], label: res[:term], uri: res.fetch(:uri, nil) }.compact.with_indifferent_access
12
12
  end
13
13
  end
14
14
 
15
15
  def all
16
16
  terms.map do |res|
17
- { id: res[:id], label: res[:term], active: res.fetch(:active, true) }.with_indifferent_access
17
+ { id: res[:id], label: res[:term], active: res.fetch(:active, true), uri: res.fetch(:uri, nil) }
18
+ .compact.with_indifferent_access
18
19
  end
19
20
  end
20
21
 
data/lib/qa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Qa
2
- VERSION = "5.5.0".freeze
2
+ VERSION = "5.7.0".freeze
3
3
  end
@@ -357,7 +357,7 @@ describe Qa::LinkedDataTermsController, type: :controller do
357
357
  context 'producing internal server error' do
358
358
  context 'when server returns 500' do
359
359
  before do
360
- stub_request(:get, 'http://id.worldcat.org/fast/530369').to_return(status: 500)
360
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml').to_return(status: 500)
361
361
  end
362
362
  it 'returns 500' do
363
363
  expect(Rails.logger).to receive(:warn).with(graph_load_failure)
@@ -369,7 +369,7 @@ describe Qa::LinkedDataTermsController, type: :controller do
369
369
 
370
370
  context 'when data normalization error' do
371
371
  before do
372
- stub_request(:get, 'http://id.worldcat.org/fast/530369')
372
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml')
373
373
  .to_return(status: 200, body: webmock_fixture('lod_oclc_term_bad_id.nt'), headers: { 'Content-Type' => 'application/ntriples' })
374
374
  end
375
375
  it 'returns 500' do
@@ -381,7 +381,7 @@ describe Qa::LinkedDataTermsController, type: :controller do
381
381
 
382
382
  context 'when rdf format error' do
383
383
  before do
384
- stub_request(:get, 'http://id.worldcat.org/fast/530369').to_return(status: 200)
384
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml').to_return(status: 200)
385
385
  allow(RDF::Graph).to receive(:load).and_raise(RDF::FormatError)
386
386
  end
387
387
  it 'returns 500' do
@@ -395,7 +395,7 @@ describe Qa::LinkedDataTermsController, type: :controller do
395
395
 
396
396
  context "when error isn't specifically handled" do
397
397
  before do
398
- stub_request(:get, 'http://id.worldcat.org/fast/530369').to_return(status: 501)
398
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml').to_return(status: 501)
399
399
  end
400
400
  it 'returns 500' do
401
401
  expect(Rails.logger).to receive(:warn).with(graph_load_failure)
@@ -408,7 +408,7 @@ describe Qa::LinkedDataTermsController, type: :controller do
408
408
 
409
409
  context 'when service unavailable' do
410
410
  before do
411
- stub_request(:get, 'http://id.worldcat.org/fast/530369').to_return(status: 503)
411
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml').to_return(status: 503)
412
412
  end
413
413
  it 'returns 503' do
414
414
  expect(Rails.logger).to receive(:warn).with(graph_load_failure)
@@ -420,7 +420,7 @@ describe Qa::LinkedDataTermsController, type: :controller do
420
420
 
421
421
  context 'when requested term is not found at the server' do
422
422
  before do
423
- stub_request(:get, 'http://id.worldcat.org/fast/FAKE_ID').to_return(status: 404, body: '', headers: {})
423
+ stub_request(:get, 'http://id.worldcat.org/fast/FAKE_ID.rdf.xml').to_return(status: 404, body: '', headers: {})
424
424
  end
425
425
  it 'returns 404' do
426
426
  expect(Rails.logger).to receive(:warn).with(graph_load_failure)
@@ -433,7 +433,7 @@ describe Qa::LinkedDataTermsController, type: :controller do
433
433
  context 'in OCLC_FAST authority' do
434
434
  context 'term found' do
435
435
  before do
436
- stub_request(:get, 'http://id.worldcat.org/fast/530369')
436
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml')
437
437
  .to_return(status: 200, body: webmock_fixture('lod_oclc_term_found.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
438
438
  end
439
439
  it 'succeeds and defaults to json content type' do
@@ -481,7 +481,7 @@ describe Qa::LinkedDataTermsController, type: :controller do
481
481
  context 'when cors headers are enabled' do
482
482
  before do
483
483
  Qa.config.enable_cors_headers
484
- stub_request(:get, 'http://id.worldcat.org/fast/530369')
484
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml')
485
485
  .to_return(status: 200, body: webmock_fixture('lod_oclc_term_found.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
486
486
  end
487
487
  it 'Access-Control-Allow-Origin is *' do
@@ -493,7 +493,7 @@ describe Qa::LinkedDataTermsController, type: :controller do
493
493
  context 'when cors headers are disabled' do
494
494
  before do
495
495
  Qa.config.disable_cors_headers
496
- stub_request(:get, 'http://id.worldcat.org/fast/530369')
496
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml')
497
497
  .to_return(status: 200, body: webmock_fixture('lod_oclc_term_found.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
498
498
  end
499
499
  it 'Access-Control-Allow-Origin is not present' do
@@ -82,7 +82,7 @@ describe Qa::TermsController, type: :controller do
82
82
 
83
83
  context "loc" do
84
84
  before do
85
- stub_request(:get, "https://id.loc.gov/search/?format=json&q=Berry&q=cs:https://id.loc.gov/authorities/names")
85
+ stub_request(:get, "https://id.loc.gov/search/?format=json&q=Berry&q=cs:http://id.loc.gov/authorities/names")
86
86
  .with(headers: { 'Accept' => 'application/json' })
87
87
  .to_return(body: webmock_fixture("loc-names-response.txt"), status: 200)
88
88
  end
@@ -253,4 +253,33 @@ describe Qa::TermsController, type: :controller do
253
253
  end
254
254
  end
255
255
  end
256
+
257
+ describe "#fetch" do
258
+ context "with supported authorities" do
259
+ it "returns an individual state term" do
260
+ get :fetch, params: { vocab: "local", subauthority: "authority_U", uri: "http://my.domain/terms/a2" }
261
+ expect(response).to be_successful
262
+ end
263
+
264
+ context 'when cors headers are enabled' do
265
+ before do
266
+ Qa.config.enable_cors_headers
267
+ end
268
+ it 'Access-Control-Allow-Origin is *' do
269
+ get :fetch, params: { vocab: "local", subauthority: "authority_U", uri: "http://my.domain/terms/a2" }
270
+ expect(response.headers['Access-Control-Allow-Origin']).to eq '*'
271
+ end
272
+ end
273
+
274
+ context 'when cors headers are disabled' do
275
+ before do
276
+ Qa.config.disable_cors_headers
277
+ end
278
+ it 'Access-Control-Allow-Origin is not present' do
279
+ get :fetch, params: { vocab: "local", subauthority: "authority_U", uri: "http://my.domain/terms/a2" }
280
+ expect(response.headers.key?('Access-Control-Allow-Origin')).to be false
281
+ end
282
+ end
283
+ end
284
+ end
256
285
  end
@@ -0,0 +1,13 @@
1
+ :terms:
2
+ - :id: A1
3
+ :term: Abc Term A1
4
+ :uri: http://my.domain/terms/a1
5
+ :active: true
6
+ - :id: A2
7
+ :term: Term A2
8
+ :uri: http://my.domain/terms/a2
9
+ :active: false
10
+ - :id: A3
11
+ :term: Abc Term A3
12
+ :uri: http://my.domain/terms/a3
13
+ :active: true
@@ -8,18 +8,18 @@ RSpec.describe Qa::Authorities::LinkedData::FindTerm do
8
8
  context 'basic parameter testing' do
9
9
  context 'with bad id' do
10
10
  before do
11
- stub_request(:get, 'http://id.worldcat.org/fast/FAKE_ID')
11
+ stub_request(:get, 'http://id.worldcat.org/fast/FAKE_ID.rdf.xml')
12
12
  .to_return(status: 404, body: '', headers: {})
13
13
  end
14
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./
15
+ expect { lod_oclc.find('FAKE_ID') }.to raise_error Qa::TermNotFound, /.*\/FAKE_ID.rdf.xml\ Not Found - Term may not exist at LOD Authority./
16
16
  end
17
17
  end
18
18
  end
19
19
 
20
20
  context 'performance stats' do
21
21
  before do
22
- stub_request(:get, 'http://id.worldcat.org/fast/530369')
22
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml')
23
23
  .to_return(status: 200, body: webmock_fixture('lod_oclc_term_found.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
24
24
  end
25
25
  context 'when set to true' do
@@ -55,7 +55,7 @@ RSpec.describe Qa::Authorities::LinkedData::FindTerm do
55
55
 
56
56
  context 'response header' do
57
57
  before do
58
- stub_request(:get, 'http://id.worldcat.org/fast/530369')
58
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml')
59
59
  .to_return(status: 200, body: webmock_fixture('lod_oclc_term_found.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
60
60
  end
61
61
  context 'when set to true' do
@@ -91,7 +91,7 @@ RSpec.describe Qa::Authorities::LinkedData::FindTerm do
91
91
  context 'in OCLC_FAST authority' do
92
92
  context 'term found' do
93
93
  let :results do
94
- stub_request(:get, 'http://id.worldcat.org/fast/530369')
94
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml')
95
95
  .to_return(status: 200, body: webmock_fixture('lod_oclc_term_found.rdf.xml'), headers: { 'Content-Type' => 'application/rdf+xml' })
96
96
  lod_oclc.find('530369')
97
97
  end
@@ -128,7 +128,7 @@ RSpec.describe Qa::Authorities::LinkedData::FindTerm do
128
128
 
129
129
  context "ID in graph doesn't match ID in request URI" do
130
130
  before do
131
- stub_request(:get, 'http://id.worldcat.org/fast/530369')
131
+ stub_request(:get, 'http://id.worldcat.org/fast/530369.rdf.xml')
132
132
  .to_return(status: 200, body: webmock_fixture('lod_oclc_term_bad_id.nt'), headers: { 'Content-Type' => 'application/ntriples' })
133
133
  end
134
134
 
@@ -28,7 +28,7 @@ describe Qa::Authorities::Loc do
28
28
  end
29
29
 
30
30
  context "for searching" do
31
- let(:url) { 'https://id.loc.gov/search/?q=foo&q=cs%3Ahttps%3A%2F%2Fid.loc.gov%2Fauthorities%2Fsubjects&format=json' }
31
+ let(:url) { 'https://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
@@ -49,15 +49,15 @@ describe Qa::Authorities::Loc do
49
49
  end
50
50
 
51
51
  before do
52
- stub_request(:get, "https://id.loc.gov/search/?format=json&q=cs:https://id.loc.gov/authorities/subjects")
52
+ stub_request(:get, "https://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) { 'https://id.loc.gov/search/?q=foo&q=cs%3Ahttps%3A%2F%2Fid.loc.gov%2Fauthorities%2Fsubjects&format=json' }
58
+ let(:url) { 'https://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 = "https://id.loc.gov/search/?format=json&q=foo&q=cs%3Ahttps%3A%2F%2Fid.loc.gov%2Fauthorities%2Fsubjects"
60
+ flat_params_url = "https://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, "https://id.loc.gov/search/?format=json&q=s&q=cs:https://id.loc.gov/vocabulary/geographicAreas")
69
+ stub_request(:get, "https://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, "https://id.loc.gov/search/?format=json&q=History--&q=cs:https://id.loc.gov/authorities/subjects")
98
+ stub_request(:get, "https://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, "https://id.loc.gov/search/?format=json&q=Berry&q=cs:https://id.loc.gov/authorities/names")
114
+ stub_request(:get, "https://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")
@@ -5,6 +5,7 @@ describe Qa::Authorities::Local::FileBasedAuthority do
5
5
  let(:authority_b) { Qa::Authorities::Local.subauthority_for("authority_B") }
6
6
  let(:authority_c) { Qa::Authorities::Local.subauthority_for("authority_C") }
7
7
  let(:authority_d) { Qa::Authorities::Local.subauthority_for("authority_D") }
8
+ let(:authority_u) { Qa::Authorities::Local.subauthority_for("authority_U") }
8
9
 
9
10
  describe "#all" do
10
11
  let(:expected) do
@@ -35,6 +36,16 @@ describe Qa::Authorities::Local::FileBasedAuthority do
35
36
  expect(authority_c.all).to eq(expected)
36
37
  end
37
38
  end
39
+ context "when terms have uris" do
40
+ let(:expected) do
41
+ [{ 'id' => "A1", 'label' => "Abc Term A1", 'active' => true, 'uri' => 'http://my.domain/terms/a1' },
42
+ { 'id' => "A2", 'label' => "Term A2", 'active' => false, 'uri' => 'http://my.domain/terms/a2' },
43
+ { 'id' => "A3", 'label' => "Abc Term A3", 'active' => true, 'uri' => 'http://my.domain/terms/a3' }]
44
+ end
45
+ it "sets the id to be same as the label" do
46
+ expect(authority_u.all).to eq(expected)
47
+ end
48
+ end
38
49
  context "YAML file is malformed" do
39
50
  it "raises an error" do
40
51
  expect { authority_d.all }.to raise_error Psych::SyntaxError
@@ -33,7 +33,9 @@ describe Qa::Authorities::Local do
33
33
 
34
34
  describe "#names" do
35
35
  it "returns a list of yaml files" do
36
- expect(described_class.names).to include("authority_A", "authority_B", "authority_C", "authority_D", "states")
36
+ expect(described_class.names)
37
+ .to include("authority_A", "authority_B", "authority_C",
38
+ "authority_D", "authority_U", "states")
37
39
  end
38
40
 
39
41
  context "when the path doesn't exist" do
@@ -83,16 +83,22 @@ RSpec.describe Qa::LinkedData::AuthorityUrlService do
83
83
  let(:action_request) { 'mark twain' }
84
84
 
85
85
  it 'returns template with substitutions' do
86
- expected_url = 'http://experimental.worldcat.org/fast/search?query=oclc.personalName+all+%22mark twain%22&sortKeys=usage&maximumRecords=10'
86
+ expected_url = 'http://experimental.worldcat.org/fast/search?query=oclc.personalName+all+%22mark%20twain%22&sortKeys=usage&maximumRecords=10'
87
87
  expect(subject).to eq expected_url
88
88
  end
89
+
90
+ it 'does not mutate substitutions hash' do
91
+ before_substitutions = substitutions.clone
92
+ subject
93
+ expect(substitutions).to eq before_substitutions
94
+ end
89
95
  end
90
96
 
91
97
  context 'when no substitutions specified' do
92
98
  let(:action_request) { 'mark twain' }
93
99
 
94
100
  it 'returns template with substitutions' do
95
- expected_url = 'http://experimental.worldcat.org/fast/search?query=cql.any+all+%22mark twain%22&sortKeys=usage&maximumRecords=20'
101
+ expected_url = 'http://experimental.worldcat.org/fast/search?query=cql.any+all+%22mark%20twain%22&sortKeys=usage&maximumRecords=20'
96
102
  expect(subject).to eq expected_url
97
103
  end
98
104
  end
@@ -104,7 +110,7 @@ RSpec.describe Qa::LinkedData::AuthorityUrlService do
104
110
  let(:action_request) { 'n79021164' }
105
111
 
106
112
  it 'returns template with substitutions' do
107
- expected_url = 'http://id.worldcat.org/fast/n79021164'
113
+ expected_url = 'http://id.worldcat.org/fast/n79021164.rdf.xml'
108
114
  expect(subject).to eq expected_url
109
115
  end
110
116
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qa
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.5.0
4
+ version: 5.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Anderson
@@ -16,7 +16,7 @@ authors:
16
16
  autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
- date: 2020-08-13 00:00:00.000000000 Z
19
+ date: 2021-11-04 00:00:00.000000000 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: activerecord-import
@@ -111,7 +111,7 @@ dependencies:
111
111
  version: '5.0'
112
112
  - - "<"
113
113
  - !ruby/object:Gem::Version
114
- version: '6.1'
114
+ version: '6.2'
115
115
  type: :runtime
116
116
  prerelease: false
117
117
  version_requirements: !ruby/object:Gem::Requirement
@@ -121,7 +121,7 @@ dependencies:
121
121
  version: '5.0'
122
122
  - - "<"
123
123
  - !ruby/object:Gem::Version
124
- version: '6.1'
124
+ version: '6.2'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rdf
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -479,6 +479,7 @@ files:
479
479
  - spec/fixtures/authorities/authority_B.yml
480
480
  - spec/fixtures/authorities/authority_C.yml
481
481
  - spec/fixtures/authorities/authority_D.yml
482
+ - spec/fixtures/authorities/authority_U.yml
482
483
  - spec/fixtures/authorities/linked_data/lod_encoding_config.json
483
484
  - spec/fixtures/authorities/linked_data/lod_full_config.json
484
485
  - spec/fixtures/authorities/linked_data/lod_full_config_1_0.json
@@ -559,7 +560,6 @@ files:
559
560
  - spec/lib/authorities/crossref_spec.rb
560
561
  - spec/lib/authorities/discogs/generic_authority_spec.rb
561
562
  - spec/lib/authorities/discogs_spec.rb
562
- - spec/lib/authorities/file_based_authority_spec.rb
563
563
  - spec/lib/authorities/geonames_spec.rb
564
564
  - spec/lib/authorities/getty/aat_spec.rb
565
565
  - spec/lib/authorities/getty/tgn_spec.rb
@@ -572,12 +572,13 @@ files:
572
572
  - spec/lib/authorities/linked_data/search_query_spec.rb
573
573
  - spec/lib/authorities/linked_data/term_config_spec.rb
574
574
  - spec/lib/authorities/loc_spec.rb
575
+ - spec/lib/authorities/local/file_based_authority_spec.rb
576
+ - spec/lib/authorities/local/mysql_table_based_authority_spec.rb
577
+ - spec/lib/authorities/local/table_based_authority_spec.rb
575
578
  - spec/lib/authorities/local_spec.rb
576
579
  - spec/lib/authorities/mesh_spec.rb
577
- - spec/lib/authorities/mysql_table_based_authority_spec.rb
578
580
  - spec/lib/authorities/oclcts_spec.rb
579
581
  - spec/lib/authorities/space_fix_encoder.rb
580
- - spec/lib/authorities/table_based_authority_spec.rb
581
582
  - spec/lib/authorities/tgnlang_spec.rb
582
583
  - spec/lib/authorities_loc_subauthorities.rb
583
584
  - spec/lib/configuration_spec.rb
@@ -662,16 +663,16 @@ test_files:
662
663
  - spec/lib/authorities/tgnlang_spec.rb
663
664
  - spec/lib/authorities/crossref_spec.rb
664
665
  - spec/lib/authorities/oclcts_spec.rb
665
- - spec/lib/authorities/file_based_authority_spec.rb
666
+ - spec/lib/authorities/local/file_based_authority_spec.rb
667
+ - spec/lib/authorities/local/table_based_authority_spec.rb
668
+ - spec/lib/authorities/local/mysql_table_based_authority_spec.rb
666
669
  - spec/lib/authorities/space_fix_encoder.rb
667
670
  - spec/lib/authorities/assign_fast_spec.rb
668
- - spec/lib/authorities/table_based_authority_spec.rb
669
671
  - spec/lib/authorities/getty/tgn_spec.rb
670
672
  - spec/lib/authorities/getty/ulan_spec.rb
671
673
  - spec/lib/authorities/getty/aat_spec.rb
672
674
  - spec/lib/authorities/discogs_spec.rb
673
675
  - spec/lib/authorities/mesh_spec.rb
674
- - spec/lib/authorities/mysql_table_based_authority_spec.rb
675
676
  - spec/lib/authorities/local_spec.rb
676
677
  - spec/lib/authorities/discogs/generic_authority_spec.rb
677
678
  - spec/lib/authorities/geonames_spec.rb
@@ -750,6 +751,7 @@ test_files:
750
751
  - spec/fixtures/authorities/authority_D.yml
751
752
  - spec/fixtures/authorities/authority_A.yml
752
753
  - spec/fixtures/authorities/authority_C.yml
754
+ - spec/fixtures/authorities/authority_U.yml
753
755
  - spec/fixtures/authorities/authority_B.yml
754
756
  - spec/fixtures/geonames-response.json
755
757
  - spec/fixtures/tgn-response.txt