qa 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -21
  3. data/Rakefile +1 -1
  4. data/app/controllers/qa/terms_controller.rb +22 -53
  5. data/config/routes.rb +4 -7
  6. data/lib/qa/authorities.rb +3 -1
  7. data/lib/qa/authorities/base.rb +27 -8
  8. data/lib/qa/authorities/getty.rb +56 -0
  9. data/lib/qa/authorities/loc.rb +27 -131
  10. data/lib/qa/authorities/loc_subauthority.rb +90 -0
  11. data/lib/qa/authorities/local.rb +38 -21
  12. data/lib/qa/authorities/local_subauthority.rb +18 -0
  13. data/lib/qa/authorities/mesh.rb +16 -23
  14. data/lib/qa/authorities/mesh_tools/mesh_data_parser.rb +0 -25
  15. data/lib/qa/authorities/mesh_tools/mesh_importer.rb +0 -2
  16. data/lib/qa/authorities/oclcts.rb +17 -24
  17. data/lib/qa/authorities/tgnlang.rb +4 -18
  18. data/lib/qa/authorities/web_service_base.rb +3 -10
  19. data/lib/qa/version.rb +1 -1
  20. data/spec/controllers/terms_controller_spec.rb +93 -44
  21. data/spec/fixtures/aat-response.txt +108 -0
  22. data/spec/fixtures/getty-aat-find-response.json +2494 -0
  23. data/spec/fixtures/loc-response.txt +1521 -17
  24. data/spec/fixtures/loc-subject-find-response.txt +24 -0
  25. data/spec/internal/Gemfile +16 -13
  26. data/spec/internal/Gemfile.lock +121 -86
  27. data/spec/internal/app/assets/javascripts/application.js +1 -1
  28. data/spec/internal/app/assets/stylesheets/application.css +1 -1
  29. data/spec/internal/bin/rails +1 -5
  30. data/spec/internal/bin/rake +0 -4
  31. data/spec/internal/bin/setup +29 -0
  32. data/spec/internal/config.ru +1 -1
  33. data/spec/internal/config/application.rb +3 -0
  34. data/spec/internal/config/boot.rb +1 -2
  35. data/spec/internal/config/environments/development.rb +4 -0
  36. data/spec/internal/config/environments/production.rb +14 -18
  37. data/spec/internal/config/environments/test.rb +5 -2
  38. data/spec/internal/config/initializers/assets.rb +11 -0
  39. data/spec/internal/config/initializers/cookies_serializer.rb +1 -1
  40. data/spec/internal/config/secrets.yml +2 -2
  41. data/spec/internal/db/development.sqlite3 +0 -0
  42. data/spec/internal/db/migrate/{20140620210534_create_qa_subject_mesh_terms.qa.rb → 20150311214117_create_qa_subject_mesh_terms.qa.rb} +0 -0
  43. data/spec/internal/db/migrate/{20140620210535_create_qa_mesh_tree.qa.rb → 20150311214118_create_qa_mesh_tree.qa.rb} +0 -0
  44. data/spec/internal/db/migrate/{20140620210536_add_term_lower_to_qa_subject_mesh_terms.qa.rb → 20150311214119_add_term_lower_to_qa_subject_mesh_terms.qa.rb} +0 -0
  45. data/spec/internal/db/schema.rb +3 -3
  46. data/spec/internal/db/test.sqlite3 +0 -0
  47. data/spec/internal/lib/generators/test_app_generator.rb +0 -1
  48. data/spec/internal/log/development.log +498 -207
  49. data/spec/internal/test/test_helper.rb +0 -3
  50. data/spec/lib/authorities_getty_spec.rb +71 -0
  51. data/spec/lib/authorities_loc_spec.rb +98 -65
  52. data/spec/lib/authorities_loc_subauthorities.rb +81 -0
  53. data/spec/lib/authorities_local_spec.rb +53 -79
  54. data/spec/lib/authorities_local_subauthorities_spec.rb +43 -0
  55. data/spec/lib/authorities_mesh_spec.rb +16 -12
  56. data/spec/lib/authorities_oclcts_spec.rb +17 -17
  57. data/spec/lib/authorities_tgnlang_spec.rb +4 -7
  58. data/spec/lib/mesh_data_parser_spec.rb +13 -13
  59. data/spec/lib/tasks/mesh.rake_spec.rb +4 -4
  60. data/spec/models/subject_mesh_term_spec.rb +5 -5
  61. data/spec/routing/route_spec.rb +34 -0
  62. data/spec/spec_helper.rb +5 -22
  63. data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -1
  64. metadata +44 -12
  65. data/lib/qa/authorities/local/subauthority.rb +0 -65
  66. data/spec/internal/bin/spring +0 -18
@@ -4,9 +4,6 @@ require 'rails/test_help'
4
4
 
5
5
  class ActiveSupport::TestCase
6
6
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
7
- #
8
- # Note: You'll currently still have to declare fixtures explicitly in integration tests
9
- # -- they do not yet inherit this setting
10
7
  fixtures :all
11
8
 
12
9
  # Add more helper methods to be used by all tests here...
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ describe Qa::Authorities::Getty do
4
+
5
+ describe "#new" do
6
+ context "without a sub-authority" do
7
+ it "should raise an exception" do
8
+ expect { described_class.new }.to raise_error
9
+ end
10
+ end
11
+ context "with an invalid sub-authority" do
12
+ it "should raise an exception" do
13
+ expect { described_class.new("foo") }.to raise_error
14
+ end
15
+ end
16
+ context "with a valid sub-authority" do
17
+ it "should create the authority" do
18
+ expect(described_class.new("aat")).to be_kind_of described_class
19
+ end
20
+ end
21
+ end
22
+
23
+ let(:authority) { described_class.new("aat") }
24
+ describe "#build_query_url" do
25
+ subject { authority.build_query_url("foo") }
26
+ it { is_expected.to match /^http:\/\/vocab\.getty\.edu\// }
27
+ end
28
+
29
+ describe "#find_url" do
30
+ subject { authority.find_url("300053264") }
31
+ it { is_expected.to eq "http://vocab.getty.edu/aat/300053264.json" }
32
+ end
33
+
34
+ describe "#search" do
35
+ context "authorities" do
36
+ before do
37
+ stub_request(:get, /vocab\.getty\.edu.*/).
38
+ with(:headers => {'Accept'=>'application/json'}).
39
+ to_return(:body => webmock_fixture("aat-response.txt"), :status => 200)
40
+ end
41
+
42
+ subject { authority.search('whatever') }
43
+
44
+ it "should have id and label keys" do
45
+ expect(subject.first).to eq("id" => 'http://vocab.getty.edu/aat/300053264', "label" => "photocopying")
46
+ expect(subject.last).to eq("id" => 'http://vocab.getty.edu/aat/300265560', "label" => "photoscreenprints")
47
+ expect(subject.size).to eq(10)
48
+ end
49
+ end
50
+ end
51
+
52
+ describe "#find" do
53
+ context "using a subject id" do
54
+ before do
55
+ stub_request(:get, "http://vocab.getty.edu/aat/300265560.json").
56
+ with(headers: { 'Accept'=>'application/json' }).
57
+ to_return(status: 200, body: webmock_fixture("getty-aat-find-response.json"))
58
+ end
59
+ subject { described_class.new("aat").find("300265560") }
60
+
61
+ it "returns the complete record for a given subject" do
62
+ expect(subject['results']['bindings'].size).to eq 189
63
+ expect(subject['results']['bindings']).to all(have_key('Subject'))
64
+ expect(subject['results']['bindings']).to all(have_key('Predicate'))
65
+ expect(subject['results']['bindings']).to all(have_key('Object'))
66
+ end
67
+ end
68
+ end
69
+
70
+ end
71
+
@@ -2,90 +2,123 @@ require 'spec_helper'
2
2
 
3
3
  describe Qa::Authorities::Loc do
4
4
 
5
- before :all do
6
- stub_request(:get, "http://id.loc.gov/search/?format=json&q=haw*&q=cs:http://id.loc.gov/vocabulary/geographicAreas").
7
- with(:headers => {'Accept'=>'application/json'}).
8
- to_return(:body => webmock_fixture("loc-response.txt"), :status => 200)
9
- @authority = Qa::Authorities::Loc.new
10
- @authority.search("haw*", "geographicAreas")
5
+ describe "#new" do
6
+ context "without a sub-authority" do
7
+ it "should raise an exception" do
8
+ expect { Qa::Authorities::Loc.new }.to raise_error
9
+ end
10
+ end
11
+ context "with an invalid sub-authority" do
12
+ it "should raise an exception" do
13
+ expect { Qa::Authorities::Loc.new("foo") }.to raise_error
14
+ end
15
+ end
16
+ context "with a valid sub-authority" do
17
+ it "should create the authority" do
18
+ expect(Qa::Authorities::Loc.new("subjects")).to be_kind_of Qa::Authorities::Loc
19
+ end
20
+ end
11
21
  end
22
+
23
+ describe "urls" do
12
24
 
13
- describe "geographic areas" do
14
-
15
- it "should instantiate with a query and return data" do
16
- expect(@authority).not_to be_nil
17
- @authority.raw_response.to_s.should include("id")
18
- end
19
-
20
- it "should return a sub_authority url" do
21
- @authority.should_not be_nil
22
- url = @authority.sub_authorityURL("geographicAreas")
23
- expect(url).not_to be_nil
25
+ let :authority do
26
+ Qa::Authorities::Loc.new("subjects")
24
27
  end
25
-
26
- it "should not return a url for an invalid sub_authority" do
27
- @authority.should_not be_nil
28
- url = @authority.sub_authorityURL("invalid sub_authority")
29
- expect(url).to eq("")
30
- end
31
-
32
- it "should return JSON" do
33
- @authority.should_not be_nil
34
- json = @authority.parse_authority_response(@authority.raw_response)
35
- expect(json).not_to be_empty
28
+
29
+ context "for searching" do
30
+ it "should return a url" do
31
+ url = 'http://id.loc.gov/search/?q=foo&q=cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fauthorities%2Fsubjects&format=json'
32
+ expect(authority.build_query_url("foo")).to eq(url)
33
+ end
36
34
  end
37
35
 
36
+ context "for returning single terms" do
37
+ it "returns a url with an authority and id" do
38
+ url = "http://id.loc.gov/authorities/subjects/sh2002003586.json"
39
+ expect(authority.find_url("sh2002003586")).to eq(url)
40
+ end
41
+ end
42
+
38
43
  end
39
44
 
40
- describe "subject headings" do
45
+ describe "#search" do
41
46
 
42
- before :all do
43
- stub_request(:get, "http://id.loc.gov/search/?format=json&q=History--&q=cs:http://id.loc.gov/authorities/subjects").
44
- with(:headers => {'Accept'=>'application/json'}).
45
- to_return(:body => webmock_fixture("loc-subjects-response.txt"), :status => 200)
46
- end
47
+ context "any LOC authorities" do
48
+ let :authority do
49
+ stub_request(:get, "http://id.loc.gov/search/?format=json&q=s&q=cs:http://id.loc.gov/vocabulary/geographicAreas").
50
+ with(:headers => {'Accept'=>'application/json'}).
51
+ to_return(:body => webmock_fixture("loc-response.txt"), :status => 200)
52
+ Qa::Authorities::Loc.new("geographicAreas")
53
+ end
47
54
 
48
- it "should be retrieved via search" do
49
- @authority.search("History--", "subjects")
50
- @authority.results.first["label"].should == "History--Philosophy--History--20th century"
51
- end
55
+ it "should retain the raw respsonse from the LC service in JSON" do
56
+ expect(authority.raw_response).to be_nil
57
+ json = Qa::Authorities::WebServiceBase.new.get_json(authority.build_query_url("s"))
58
+ authority.search("s")
59
+ expect(authority.raw_response).to eq(json)
60
+ end
52
61
 
53
- end
62
+ describe "the returned results" do
54
63
 
55
- describe "name headings" do
64
+ let :results do
65
+ authority.search("s")
66
+ end
56
67
 
57
- before :all do
58
- stub_request(:get, "http://id.loc.gov/search/?format=json&q=Berry&q=cs:http://id.loc.gov/authorities/names").
59
- with(:headers => {'Accept'=>'application/json'}).
60
- to_return(:body => webmock_fixture("loc-names-response.txt"), :status => 200)
61
- end
68
+ it "should have :id and :label elements" do
69
+ expect(results.first["label"]).to eq("West (U.S.)")
70
+ expect(results.first["id"]).to eq("info:lc/vocabulary/geographicAreas/n-usp")
71
+ expect(results.last["label"]).to eq("Baltic States")
72
+ expect(results.last["id"]).to eq("info:lc/vocabulary/geographicAreas/eb")
73
+ expect(results.size).to eq(20)
74
+ end
62
75
 
63
- it "should be retrieved via search" do
64
- @authority.search("Berry", "names")
65
- @authority.results.first["label"].should == "Berry, James W. (James William), 1938-"
76
+ end
66
77
  end
67
-
68
- end
69
78
 
70
- describe "#parse_authority_response" do
71
- before :all do
72
- stub_request(:get, "http://id.loc.gov/search/?format=json&q=h&q=cs:http://id.loc.gov/authorities/subjects").
73
- with(:headers => {'Accept'=>'application/json'}).
74
- to_return(:body => webmock_fixture("loc-response.txt"), :status => 200)
75
- @authority.search("h", "subjects")
79
+ context "subject terms" do
80
+ let :results do
81
+ stub_request(:get, "http://id.loc.gov/search/?format=json&q=History--&q=cs:http://id.loc.gov/authorities/subjects").
82
+ with(:headers => {'Accept'=>'application/json'}).
83
+ to_return(:body => webmock_fixture("loc-subjects-response.txt"), :status => 200)
84
+ Qa::Authorities::Loc.new("subjects").search("History--")
85
+ end
86
+ it "should have a URI for the id and a string label" do
87
+ expect(results.count).to eq(20)
88
+ expect(results.first["label"]).to eq("History--Philosophy--History--20th century")
89
+ expect(results.first["id"]).to eq("info:lc/authorities/subjects/sh2008121753")
90
+ expect(results[1]["label"]).to eq("History--Philosophy--History--19th century")
91
+ expect(results[1]["id"]).to eq("info:lc/authorities/subjects/sh2008121752")
92
+ end
76
93
  end
77
94
 
78
- let(:parsed_response) { @authority.parse_authority_response(@authority.raw_response) }
79
-
80
- it "should return an array of entries returned in the JSON" do
81
- expect(parsed_response.length).to eq(2)
95
+ context "name terms" do
96
+ let :results do
97
+ stub_request(:get, "http://id.loc.gov/search/?format=json&q=Berry&q=cs:http://id.loc.gov/authorities/names").
98
+ with(:headers => {'Accept'=>'application/json'}).
99
+ to_return(:body => webmock_fixture("loc-names-response.txt"), :status => 200)
100
+ Qa::Authorities::Loc.new("names").search("Berry")
101
+ end
102
+ it "should retrieve names via search" do
103
+ expect(results.first["label"]).to eq("Berry, James W. (James William), 1938-")
104
+ end
82
105
  end
83
106
 
84
- it "should have a URI for the id and a string label" do
85
- expect(parsed_response[0]["id"]).to eq("info:lc/authorities/names/n2008008718")
86
- expect(parsed_response[0]["label"]).to eq("Haw, Lily, 1890?-1915")
87
- expect(parsed_response[1]["id"]).to eq("info:lc/vocabulary/geographicAreas/n-us-hi")
88
- expect(parsed_response[1]["label"]).to eq("Hawaii")
107
+ end
108
+
109
+ describe "#find" do
110
+ context "using a subject id" do
111
+ let :results do
112
+ stub_request(:get, "http://id.loc.gov/authorities/subjects/sh2002003586.json").
113
+ with(:headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip, deflate', 'User-Agent'=>'Ruby'}).
114
+ to_return(:status => 200, :body => webmock_fixture("loc-subject-find-response.txt"), :headers => {})
115
+ Qa::Authorities::Loc.new("subjects").find("sh2002003586")
116
+ end
117
+ it "returns the complete record for a given subject" do
118
+ expect(results.count).to eq(20)
119
+ expect(results.first).to be_kind_of(Hash)
120
+ end
89
121
  end
90
122
  end
123
+
91
124
  end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ describe Qa::Authorities::LocSubauthority do
4
+
5
+ let(:subject) do
6
+ class TestAuthority
7
+ include Qa::Authorities::LocSubauthority
8
+ end
9
+ TestAuthority.new
10
+ end
11
+
12
+ context "with a valid subauthority" do
13
+ it "should return a url" do
14
+ sub_authority_table.keys.each do |authority|
15
+ expect(subject.get_url_for_authority(authority)).to eq(sub_authority_table[authority])
16
+ end
17
+ end
18
+ end
19
+
20
+ context "with a non-existent subauthority" do
21
+ it "should return nil" do
22
+ expect(subject.get_url_for_authority("fake")).to be_nil
23
+ end
24
+ end
25
+
26
+ # This is the original data structure that was used to define subauthority urls
27
+ # It is retained here to ensure our refactor succeeded
28
+ def sub_authority_table
29
+ begin
30
+ vocab_base_url = 'cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fvocabulary%2F'
31
+ authority_base_url = 'cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fauthorities%2F'
32
+ datatype_base_url = 'cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fdatatypes%2F'
33
+ vocab_preservation_base_url = 'cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fvocabulary%2Fpreservation%2F'
34
+ {
35
+ 'subjects' => authority_base_url,
36
+ 'names' => authority_base_url,
37
+ 'classification' => authority_base_url,
38
+ 'childrensSubjects' => authority_base_url,
39
+ 'genreForms' => authority_base_url,
40
+ 'performanceMediums' => authority_base_url,
41
+ 'graphicMaterials' => vocab_base_url,
42
+ 'organizations' => vocab_base_url,
43
+ 'relators' => vocab_base_url,
44
+ 'countries' => vocab_base_url,
45
+ 'ethnographicTerms' => vocab_base_url,
46
+ 'geographicAreas' => vocab_base_url,
47
+ 'languages' => vocab_base_url,
48
+ 'iso639-1' => vocab_base_url,
49
+ 'iso639-2' => vocab_base_url,
50
+ 'iso639-5' => vocab_base_url,
51
+ 'edtf' => datatype_base_url,
52
+ 'preservation' => vocab_base_url,
53
+ 'actionsGranted' => vocab_base_url,
54
+ 'agentType' => vocab_base_url,
55
+ 'contentLocationType' => vocab_preservation_base_url,
56
+ 'copyrightStatus' => vocab_preservation_base_url,
57
+ 'cryptographicHashFunctions' => vocab_preservation_base_url,
58
+ 'environmentCharacteristic' => vocab_preservation_base_url,
59
+ 'environmentPurpose' => vocab_preservation_base_url,
60
+ 'eventRelatedAgentRole' => vocab_preservation_base_url,
61
+ 'eventRelatedObjectRole' => vocab_preservation_base_url,
62
+ 'eventType' => vocab_preservation_base_url,
63
+ 'formatRegistryRole' => vocab_preservation_base_url,
64
+ 'hardwareType' => vocab_preservation_base_url,
65
+ 'inhibitorTarget' => vocab_preservation_base_url,
66
+ 'inhibitorType' => vocab_preservation_base_url,
67
+ 'objectCategory' => vocab_preservation_base_url,
68
+ 'preservationLevelRole' => vocab_preservation_base_url,
69
+ 'relationshipSubType' => vocab_preservation_base_url,
70
+ 'relationshipType' => vocab_preservation_base_url,
71
+ 'rightsBasis' => vocab_preservation_base_url,
72
+ 'rightsRelatedAgentRole' => vocab_preservation_base_url,
73
+ 'signatureEncoding' => vocab_preservation_base_url,
74
+ 'signatureMethod' => vocab_preservation_base_url,
75
+ 'softwareType' => vocab_preservation_base_url,
76
+ 'storageMedium' => vocab_preservation_base_url
77
+ }
78
+ end
79
+ end
80
+
81
+ end
@@ -2,136 +2,110 @@ require 'spec_helper'
2
2
 
3
3
  describe Qa::Authorities::Local do
4
4
 
5
- context "valid local sub_authorities" do
6
- it "should validate the sub_authority" do
7
- Qa::Authorities::Local.sub_authorities.should include "authority_A"
8
- Qa::Authorities::Local.sub_authorities.should include "authority_B"
9
- end
5
+ let(:authority_a) { Qa::Authorities::Local.new("authority_A") }
6
+ let(:authority_b) { Qa::Authorities::Local.new("authority_B") }
7
+ let(:authority_c) { Qa::Authorities::Local.new("authority_C") }
8
+ let(:authority_d) { Qa::Authorities::Local.new("authority_D") }
10
9
 
11
- describe "the class" do
12
- subject { Qa::Authorities::Local }
13
- it "should return a sub_authority" do
14
- expect { subject.sub_authority('authority_Z')}.to raise_error ArgumentError, "Invalid sub-authority 'authority_Z'"
15
- expect(subject.sub_authority('authority_A')).to be_kind_of Qa::Authorities::Subauthority
10
+ describe "::new" do
11
+ context "without a sub-authority" do
12
+ it "should raise an error is the sub-authority is not provided" do
13
+ expect { Qa::Authorities::Local.new }.to raise_error
14
+ end
15
+ it "should raise an error is the sub-authority does not exist" do
16
+ expect { Qa::Authorities::Local.new("foo") }.to raise_error
16
17
  end
17
- end
18
-
19
- it "should return a sub_authority" do
20
- expect { subject.sub_authority('authority_Z')}.to raise_error ArgumentError, "Invalid sub-authority 'authority_Z'"
21
- expect(subject.sub_authority('authority_A')).to be_kind_of Qa::Authorities::Subauthority
22
18
  end
23
19
  end
24
20
 
25
- context "retrieve all entries for a local sub_authority" do
21
+ describe "#all" do
26
22
  let(:expected) { [ { 'id'=> "A1", 'label' => "Abc Term A1" },
27
23
  { 'id' => "A2", 'label'=> "Term A2" },
28
24
  { 'id' => "A3", 'label' => "Abc Term A3" } ] }
29
25
  it "should return all the entries" do
30
- authorities = Qa::Authorities::Local.new
31
- expect(authorities.search("", "authority_A")).to eq(expected)
26
+ expect(authority_a.all).to eq(expected)
32
27
  end
33
- end
34
-
35
- context "a malformed authority file " do
36
- it "should raise an error" do
37
- authorities = Qa::Authorities::Local.new
38
- expect{ authorities.search("", "authority_D") }.to raise_error Psych::SyntaxError
28
+ context "when terms do not have ids" do
29
+ let(:expected) { [ { 'id' => "Term B1", 'label' => "Term B1" },
30
+ { 'id' => "Term B2", 'label' => "Term B2" },
31
+ { 'id' => "Term B3", 'label' => "Term B3" } ] }
32
+ it "should set the id to be same as the label" do
33
+ expect(authority_b.all).to eq(expected)
34
+ end
35
+ end
36
+ context "authority YAML file is a list of terms" do
37
+ let(:expected) { [ { 'id' => "Term C1", 'label' => "Term C1" },
38
+ { 'id' => "Term C2", 'label' => "Term C2" },
39
+ { 'id' => "Term C3", 'label' => "Term C3" } ] }
40
+ it "should use the terms as labels" do
41
+ expect(authority_c.all).to eq(expected)
42
+ end
43
+ end
44
+ context "YAML file is malformed" do
45
+ it "should raise an error" do
46
+ expect { authority_d.all }.to raise_error
47
+ end
39
48
  end
40
49
  end
41
-
42
- context "retrieve a subset of entries for a local sub_authority" do
43
50
 
44
- context "at least one matching entry" do
51
+ describe "#search" do
52
+ context "with an empty query string" do
53
+ let(:expected) { [] }
54
+ it "should return no results" do
55
+ expect(authority_a.search("")).to eq(expected)
56
+ end
57
+ end
58
+ context "with at least one matching entry" do
45
59
  let(:expected) { [ { 'id' => "A1", 'label' => "Abc Term A1" },
46
60
  { 'id' => "A3", 'label' => "Abc Term A3" } ] }
47
61
  it "should return only entries matching the query term" do
48
- authorities = Qa::Authorities::Local.new
49
- expect(authorities.search("Abc", "authority_A")).to eq(expected)
62
+ expect(authority_a.search("Abc")).to eq(expected)
50
63
  end
51
-
52
64
  it "should match parts of words in the middle of the term" do
53
- authorities = Qa::Authorities::Local.new
54
- expect(authorities.search("Term A1", "authority_A")).to eq([{"id"=>"A1", "label"=>"Abc Term A1"}])
65
+ expect(authority_a.search("Term A1")).to eq([{"id"=>"A1", "label"=>"Abc Term A1"}])
66
+ end
67
+ it "should be case insensitive" do
68
+ expect(authority_a.search("aBc")).to eq(expected)
55
69
  end
56
70
  end
57
-
58
- context "no matching entries" do
71
+ context "with no matching entries" do
59
72
  let(:expected) { [] }
60
73
  it "should return an empty array" do
61
- authorities = Qa::Authorities::Local.new
62
- expect(authorities.search("def", "authority_A")).to eq(expected)
74
+ expect(authority_a.search("def")).to eq(expected)
63
75
  end
64
76
  end
65
-
66
- context "search not case-sensitive" do
67
- let(:expected) { [ { 'id' => "A1", 'label' => "Abc Term A1" },
68
- { 'id' => "A3", 'label' => "Abc Term A3" } ] }
69
- it "should return entries matching the query term without regard to case" do
70
- authorities = Qa::Authorities::Local.new
71
- expect(authorities.search("aBc", "authority_A")).to eq(expected)
72
- end
73
- end
74
-
75
77
  end
76
78
 
77
- context "retrieve full record for term" do
78
-
79
- let(:authorities) { Qa::Authorities::Local.new }
80
-
79
+ describe "#find" do
81
80
  context "source is a hash" do
82
81
  let(:id) { "A2" }
83
82
  let(:expected) { { 'id' => "A2", 'term' => "Term A2", 'active' => false } }
84
83
  it "should return the full term record" do
85
- record = authorities.full_record(id, "authority_A")
84
+ record = authority_a.find(id)
86
85
  expect(record).to be_a HashWithIndifferentAccess
87
86
  expect(record).to eq(expected)
88
87
  end
89
88
  end
90
89
  context "source is a list" do
91
90
  it "should be indifferent access" do
92
- record = authorities.full_record('Term C1', "authority_C")
91
+ record = authority_c.find("Term C1")
93
92
  expect(record).to be_a HashWithIndifferentAccess
94
93
  end
95
94
  end
96
-
97
95
  context "term does not exist" do
98
96
  let(:id) { "NonID" }
99
97
  let(:expected) { {} }
100
98
  it "should return an empty hash" do
101
- expect(authorities.full_record(id, "authority_A")).to eq(expected)
99
+ expect(authority_a.find(id)).to eq(expected)
102
100
  end
103
101
  end
104
-
105
102
  context "on a sub-authority" do
106
103
  it "should return the full term record" do
107
- record = authorities.sub_authority('authority_A').full_record('A2')
104
+ record = authority_a.find("A2")
108
105
  expect(record).to be_a HashWithIndifferentAccess
109
106
  expect(record).to eq('id' => "A2", 'term' => "Term A2", 'active' => false)
110
107
  end
111
108
  end
112
-
113
- end
114
-
115
- context "term does not an id" do
116
- let(:authorities) { Qa::Authorities::Local.new }
117
- let(:expected) { [ { 'id' => "Term B1", 'label' => "Term B1" },
118
- { 'id' => "Term B2", 'label' => "Term B2" },
119
- { 'id' => "Term B3", 'label' => "Term B3" } ] }
120
- it "should set the id to be same as the label" do
121
- expect(authorities.search("", "authority_B")).to eq(expected)
122
- end
123
- end
124
-
125
- context "authority YAML is a list of terms" do
126
- let(:authorities) { Qa::Authorities::Local.new }
127
- let(:expected) { [ { 'id' => "Term C1", 'label' => "Term C1" },
128
- { 'id' => "Term C2", 'label' => "Term C2" },
129
- { 'id' => "Term C3", 'label' => "Term C3" } ] }
130
-
131
- it "should use the terms as labels" do
132
- expect(authorities.search("", "authority_C")).to eq(expected)
133
- end
134
-
135
109
  end
136
110
 
137
111
  end