qa 2.0.0 → 2.3.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 +5 -5
- data/README.md +54 -6
- data/app/controllers/qa/application_controller.rb +24 -0
- data/app/controllers/qa/linked_data_terms_controller.rb +116 -51
- data/app/controllers/qa/terms_controller.rb +7 -2
- data/app/models/qa/mesh_tree.rb +5 -9
- data/app/models/qa/subject_mesh_term.rb +2 -7
- data/config/authorities/linked_data/agrovoc.json +8 -1
- data/config/initializers/linked_data_authorities.rb +1 -17
- data/config/routes.rb +11 -0
- data/lib/generators/qa/apidoc/USAGE +11 -0
- data/lib/generators/qa/apidoc/apidoc_generator.rb +22 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/apidoc.json +1322 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/favicon-16x16.png +0 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/favicon-32x32.png +0 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/index.html +61 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/oauth2-redirect.html +67 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui-bundle.js +93 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui-bundle.js.map +1 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui-standalone-preset.js +14 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui-standalone-preset.js.map +1 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui.css +3 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui.css.map +1 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui.js +9 -0
- data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui.js.map +1 -0
- data/lib/generators/qa/install/install_generator.rb +11 -0
- data/lib/generators/qa/install/templates/config/initializers/qa.rb +13 -0
- data/lib/generators/qa/local/tables/mysql/mysql_generator.rb +1 -1
- data/lib/generators/qa/local/tables/tables_generator.rb +1 -1
- data/lib/qa.rb +16 -0
- data/lib/qa/authorities/assign_fast_subauthority.rb +3 -3
- data/lib/qa/authorities/getty/aat.rb +13 -6
- data/lib/qa/authorities/getty/tgn.rb +11 -22
- data/lib/qa/authorities/getty/ulan.rb +13 -16
- data/lib/qa/authorities/linked_data.rb +1 -0
- data/lib/qa/authorities/linked_data/authority_service.rb +47 -0
- data/lib/qa/authorities/linked_data/config.rb +9 -3
- data/lib/qa/authorities/linked_data/config/search_config.rb +16 -2
- data/lib/qa/authorities/linked_data/config/term_config.rb +17 -3
- data/lib/qa/authorities/linked_data/find_term.rb +4 -3
- data/lib/qa/authorities/linked_data/generic_authority.rb +8 -1
- data/lib/qa/authorities/linked_data/rdf_helper.rb +15 -0
- data/lib/qa/authorities/linked_data/search_query.rb +19 -3
- data/lib/qa/authorities/loc/generic_authority.rb +2 -2
- data/lib/qa/authorities/loc_subauthority.rb +2 -2
- data/lib/qa/authorities/local.rb +2 -4
- data/lib/qa/authorities/local/file_based_authority.rb +1 -1
- data/lib/qa/authorities/local/mysql_table_based_authority.rb +11 -2
- data/lib/qa/authorities/local/table_based_authority.rb +2 -1
- data/lib/qa/authorities/mesh_tools/mesh_data_parser.rb +1 -1
- data/lib/qa/authorities/mesh_tools/mesh_importer.rb +1 -1
- data/lib/qa/authorities/oclcts/generic_oclc_authority.rb +1 -3
- data/lib/qa/configuration.rb +34 -0
- data/lib/qa/version.rb +1 -1
- data/lib/tasks/mesh.rake +3 -3
- data/spec/controllers/linked_data_terms_controller_spec.rb +247 -18
- data/spec/controllers/terms_controller_spec.rb +87 -12
- data/spec/fixtures/authorities/linked_data/lod_encoding_config.json +91 -0
- data/spec/fixtures/authorities/linked_data/lod_term_id_param_config.json +27 -0
- data/spec/fixtures/authorities/linked_data/lod_term_uri_param_config.json +27 -0
- data/spec/fixtures/{lexvo_snippet.rdf → lexvo_snippet.rdf.xml} +1 -0
- data/spec/lib/authorities/assign_fast_spec.rb +3 -1
- data/spec/lib/authorities/file_based_authority_spec.rb +19 -11
- data/spec/lib/authorities/geonames_spec.rb +3 -3
- data/spec/lib/authorities/getty/aat_spec.rb +14 -8
- data/spec/lib/authorities/getty/tgn_spec.rb +8 -15
- data/spec/lib/authorities/getty/ulan_spec.rb +8 -6
- data/spec/lib/authorities/getty_spec.rb +2 -1
- data/spec/lib/authorities/linked_data/authority_service_spec.rb +47 -0
- data/spec/lib/authorities/linked_data/generic_authority_spec.rb +56 -14
- data/spec/lib/authorities/linked_data/search_config_spec.rb +33 -19
- data/spec/lib/authorities/linked_data/search_query_spec.rb +67 -15
- data/spec/lib/authorities/linked_data/term_config_spec.rb +34 -20
- data/spec/lib/authorities/loc_spec.rb +9 -9
- data/spec/lib/authorities/local_spec.rb +7 -8
- data/spec/lib/authorities/oclcts_spec.rb +27 -20
- data/spec/lib/authorities/table_based_authority_spec.rb +5 -3
- data/spec/lib/authorities_loc_subauthorities.rb +2 -2
- data/spec/lib/configuration_spec.rb +58 -0
- data/spec/lib/mesh_data_parser_spec.rb +2 -0
- data/spec/lib/services/rdf_authority_parser_spec.rb +1 -1
- data/spec/lib/tasks/mesh.rake_spec.rb +13 -12
- data/spec/models/subject_mesh_term_spec.rb +2 -0
- data/spec/requests/cors_headers_spec.rb +118 -0
- data/spec/spec_helper.rb +2 -2
- metadata +167 -137
|
@@ -29,7 +29,16 @@ describe Qa::TermsController, type: :controller do
|
|
|
29
29
|
end
|
|
30
30
|
context "when a sub-authority does not exist" do
|
|
31
31
|
it "returns 404 if a sub-authority does not exist" do
|
|
32
|
-
|
|
32
|
+
msg = "Unable to initialize sub-authority non-existent-subauthority for Qa::Authorities::Loc. Valid sub-authorities are " \
|
|
33
|
+
"[\"subjects\", \"names\", \"classification\", \"childrensSubjects\", \"genreForms\", \"performanceMediums\", " \
|
|
34
|
+
"\"graphicMaterials\", \"organizations\", \"relators\", \"countries\", \"ethnographicTerms\", \"geographicAreas\", " \
|
|
35
|
+
"\"languages\", \"iso639-1\", \"iso639-2\", \"iso639-5\", \"preservation\", \"actionsGranted\", \"agentType\", " \
|
|
36
|
+
"\"edtf\", \"contentLocationType\", \"copyrightStatus\", \"cryptographicHashFunctions\", " \
|
|
37
|
+
"\"environmentCharacteristic\", \"environmentPurpose\", \"eventRelatedAgentRole\", \"eventRelatedObjectRole\", " \
|
|
38
|
+
"\"eventType\", \"formatRegistryRole\", \"hardwareType\", \"inhibitorTarget\", \"inhibitorType\", \"objectCategory\", " \
|
|
39
|
+
"\"preservationLevelRole\", \"relationshipSubType\", \"relationshipType\", \"rightsBasis\", \"rightsRelatedAgentRole\", " \
|
|
40
|
+
"\"signatureEncoding\", \"signatureMethod\", \"softwareType\", \"storageMedium\"]"
|
|
41
|
+
expect(Rails.logger).to receive(:warn).with(msg)
|
|
33
42
|
get :search, params: { q: "a query", vocab: "loc", subauthority: "non-existent-subauthority" }
|
|
34
43
|
expect(response.code).to eq("404")
|
|
35
44
|
end
|
|
@@ -63,25 +72,51 @@ describe Qa::TermsController, type: :controller do
|
|
|
63
72
|
end
|
|
64
73
|
it "succeeds" do
|
|
65
74
|
get :search, params: { q: "a query", vocab: "local", subauthority: "two_args" }
|
|
66
|
-
expect(response).to
|
|
75
|
+
expect(response).to be_successful
|
|
67
76
|
end
|
|
68
77
|
end
|
|
69
78
|
|
|
70
79
|
context "loc" do
|
|
71
80
|
before do
|
|
72
|
-
stub_request(:get, "
|
|
81
|
+
stub_request(:get, "https://id.loc.gov/search/?format=json&q=Berry&q=cs:http://id.loc.gov/authorities/names")
|
|
73
82
|
.with(headers: { 'Accept' => 'application/json' })
|
|
74
83
|
.to_return(body: webmock_fixture("loc-names-response.txt"), status: 200)
|
|
75
84
|
end
|
|
76
85
|
|
|
77
86
|
it "returns a set of terms for a tgnlang query" do
|
|
78
87
|
get :search, params: { q: "Tibetan", vocab: "tgnlang" }
|
|
79
|
-
expect(response).to
|
|
88
|
+
expect(response).to be_successful
|
|
80
89
|
end
|
|
81
90
|
|
|
82
91
|
it "does not return 404 if subauthority is valid" do
|
|
83
92
|
get :search, params: { q: "Berry", vocab: "loc", subauthority: "names" }
|
|
84
|
-
expect(response).to
|
|
93
|
+
expect(response).to be_successful
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
context 'when cors headers are enabled' do
|
|
97
|
+
before do
|
|
98
|
+
Qa.config.enable_cors_headers
|
|
99
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=Berry&q=cs:http://id.loc.gov/authorities/names")
|
|
100
|
+
.with(headers: { 'Accept' => 'application/json' })
|
|
101
|
+
.to_return(body: webmock_fixture("loc-names-response.txt"), status: 200)
|
|
102
|
+
end
|
|
103
|
+
it 'Access-Control-Allow-Origin is *' do
|
|
104
|
+
get :search, params: { q: "Tibetan", vocab: "tgnlang" }
|
|
105
|
+
expect(response.headers['Access-Control-Allow-Origin']).to eq '*'
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context 'when cors headers are disabled' do
|
|
110
|
+
before do
|
|
111
|
+
Qa.config.disable_cors_headers
|
|
112
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=Berry&q=cs:http://id.loc.gov/authorities/names")
|
|
113
|
+
.with(headers: { 'Accept' => 'application/json' })
|
|
114
|
+
.to_return(body: webmock_fixture("loc-names-response.txt"), status: 200)
|
|
115
|
+
end
|
|
116
|
+
it 'Access-Control-Allow-Origin is not present' do
|
|
117
|
+
get :search, params: { q: "Tibetan", vocab: "tgnlang" }
|
|
118
|
+
expect(response.headers.key?('Access-Control-Allow-Origin')).to be false
|
|
119
|
+
end
|
|
85
120
|
end
|
|
86
121
|
end
|
|
87
122
|
|
|
@@ -93,7 +128,7 @@ describe Qa::TermsController, type: :controller do
|
|
|
93
128
|
end
|
|
94
129
|
it "succeeds if authority class is camelcase" do
|
|
95
130
|
get :search, params: { q: "word", vocab: "assign_fast", subauthority: "topical" }
|
|
96
|
-
expect(response).to
|
|
131
|
+
expect(response).to be_successful
|
|
97
132
|
end
|
|
98
133
|
end
|
|
99
134
|
end
|
|
@@ -102,11 +137,31 @@ describe Qa::TermsController, type: :controller do
|
|
|
102
137
|
context "with supported authorities" do
|
|
103
138
|
it "returns all local authority state terms" do
|
|
104
139
|
get :index, params: { vocab: "local", subauthority: "states" }
|
|
105
|
-
expect(response).to
|
|
140
|
+
expect(response).to be_successful
|
|
106
141
|
end
|
|
107
142
|
it "returns all MeSH terms" do
|
|
108
143
|
get :index, params: { vocab: "mesh" }
|
|
109
|
-
expect(response).to
|
|
144
|
+
expect(response).to be_successful
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
context 'when cors headers are enabled' do
|
|
148
|
+
before do
|
|
149
|
+
Qa.config.enable_cors_headers
|
|
150
|
+
end
|
|
151
|
+
it 'Access-Control-Allow-Origin is *' do
|
|
152
|
+
get :index, params: { vocab: "local", subauthority: "states" }
|
|
153
|
+
expect(response.headers['Access-Control-Allow-Origin']).to eq '*'
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
context 'when cors headers are disabled' do
|
|
158
|
+
before do
|
|
159
|
+
Qa.config.disable_cors_headers
|
|
160
|
+
end
|
|
161
|
+
it 'Access-Control-Allow-Origin is not present' do
|
|
162
|
+
get :index, params: { vocab: "local", subauthority: "states" }
|
|
163
|
+
expect(response.headers.key?('Access-Control-Allow-Origin')).to be false
|
|
164
|
+
end
|
|
110
165
|
end
|
|
111
166
|
end
|
|
112
167
|
|
|
@@ -129,24 +184,44 @@ describe Qa::TermsController, type: :controller do
|
|
|
129
184
|
describe "#show" do
|
|
130
185
|
context "with supported authorities" do
|
|
131
186
|
before do
|
|
132
|
-
stub_request(:get, "
|
|
187
|
+
stub_request(:get, "https://id.loc.gov/authorities/subjects/sh85077565.json")
|
|
133
188
|
.with(headers: { 'Accept' => 'application/json' })
|
|
134
189
|
.to_return(status: 200, body: webmock_fixture("loc-names-response.txt"), headers: {})
|
|
135
190
|
end
|
|
136
191
|
|
|
137
192
|
it "returns an individual state term" do
|
|
138
193
|
get :show, params: { vocab: "local", subauthority: "states", id: "OH" }
|
|
139
|
-
expect(response).to
|
|
194
|
+
expect(response).to be_successful
|
|
140
195
|
end
|
|
141
196
|
|
|
142
197
|
it "returns an individual MeSH term" do
|
|
143
198
|
get :show, params: { vocab: "mesh", id: "D000001" }
|
|
144
|
-
expect(response).to
|
|
199
|
+
expect(response).to be_successful
|
|
145
200
|
end
|
|
146
201
|
|
|
147
202
|
it "returns an individual subject term" do
|
|
148
203
|
get :show, params: { vocab: "loc", subauthority: "subjects", id: "sh85077565" }
|
|
149
|
-
expect(response).to
|
|
204
|
+
expect(response).to be_successful
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
context 'when cors headers are enabled' do
|
|
208
|
+
before do
|
|
209
|
+
Qa.config.enable_cors_headers
|
|
210
|
+
end
|
|
211
|
+
it 'Access-Control-Allow-Origin is *' do
|
|
212
|
+
get :show, params: { vocab: "mesh", id: "D000001" }
|
|
213
|
+
expect(response.headers['Access-Control-Allow-Origin']).to eq '*'
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
context 'when cors headers are disabled' do
|
|
218
|
+
before do
|
|
219
|
+
Qa.config.disable_cors_headers
|
|
220
|
+
end
|
|
221
|
+
it 'Access-Control-Allow-Origin is not present' do
|
|
222
|
+
get :show, params: { vocab: "mesh", id: "D000001" }
|
|
223
|
+
expect(response.headers.key?('Access-Control-Allow-Origin')).to be false
|
|
224
|
+
end
|
|
150
225
|
end
|
|
151
226
|
end
|
|
152
227
|
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"term": {
|
|
3
|
+
"url": {
|
|
4
|
+
"@context": "http://www.w3.org/ns/hydra/context.jsonld",
|
|
5
|
+
"@type": "IriTemplate",
|
|
6
|
+
"template": "http://localhost/test_default/term?uri={?term_uri}&{?encode_true}&{?encode_false}&{?encode_not_specified}",
|
|
7
|
+
"variableRepresentation": "BasicRepresentation",
|
|
8
|
+
"mapping": [
|
|
9
|
+
{
|
|
10
|
+
"@type": "IriTemplateMapping",
|
|
11
|
+
"variable": "term_uri",
|
|
12
|
+
"property": "hydra:freetextQuery",
|
|
13
|
+
"required": true,
|
|
14
|
+
"encode": true
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"@type": "IriTemplateMapping",
|
|
18
|
+
"variable": "encode_true",
|
|
19
|
+
"property": "hydra:freetextQuery",
|
|
20
|
+
"required": true,
|
|
21
|
+
"encode": true
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"@type": "IriTemplateMapping",
|
|
25
|
+
"variable": "encode_false",
|
|
26
|
+
"property": "hydra:freetextQuery",
|
|
27
|
+
"required": true,
|
|
28
|
+
"encode": false
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"@type": "IriTemplateMapping",
|
|
32
|
+
"variable": "encode_not_specified",
|
|
33
|
+
"property": "hydra:freetextQuery",
|
|
34
|
+
"required": true
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"qa_replacement_patterns": {
|
|
39
|
+
"term_id": "term_uri"
|
|
40
|
+
},
|
|
41
|
+
"term_id": "URI",
|
|
42
|
+
"results": {
|
|
43
|
+
"id_predicate": "http://id.loc.gov/vocabulary/identifiers/lccn",
|
|
44
|
+
"label_predicate": "http://www.w3.org/2004/02/skos/core#prefLabel"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"search": {
|
|
48
|
+
"url": {
|
|
49
|
+
"@context": "http://www.w3.org/ns/hydra/context.jsonld",
|
|
50
|
+
"@type": "IriTemplate",
|
|
51
|
+
"template": "http://localhost/test_default/search?query={?query}&{?encode_true}&{?encode_false}&{?encode_not_specified}",
|
|
52
|
+
"variableRepresentation": "BasicRepresentation",
|
|
53
|
+
"mapping": [
|
|
54
|
+
{
|
|
55
|
+
"@type": "IriTemplateMapping",
|
|
56
|
+
"variable": "query",
|
|
57
|
+
"property": "hydra:freetextQuery",
|
|
58
|
+
"required": true,
|
|
59
|
+
"encode": true
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"@type": "IriTemplateMapping",
|
|
63
|
+
"variable": "encode_true",
|
|
64
|
+
"property": "hydra:freetextQuery",
|
|
65
|
+
"required": true,
|
|
66
|
+
"encode": true
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"@type": "IriTemplateMapping",
|
|
70
|
+
"variable": "encode_false",
|
|
71
|
+
"property": "hydra:freetextQuery",
|
|
72
|
+
"required": true,
|
|
73
|
+
"encode": false
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"@type": "IriTemplateMapping",
|
|
77
|
+
"variable": "encode_not_specified",
|
|
78
|
+
"property": "hydra:freetextQuery",
|
|
79
|
+
"required": true
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"qa_replacement_patterns": {
|
|
84
|
+
"query": "query"
|
|
85
|
+
},
|
|
86
|
+
"results": {
|
|
87
|
+
"id_predicate": "http://purl.org/dc/terms/identifier",
|
|
88
|
+
"label_predicate": "http://www.w3.org/2004/02/skos/core#prefLabel"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"term": {
|
|
3
|
+
"url": {
|
|
4
|
+
"@context": "http://www.w3.org/ns/hydra/context.jsonld",
|
|
5
|
+
"@type": "IriTemplate",
|
|
6
|
+
"template": "http://localhost/test_default/term/{?term_id}",
|
|
7
|
+
"variableRepresentation": "BasicRepresentation",
|
|
8
|
+
"mapping": [
|
|
9
|
+
{
|
|
10
|
+
"@type": "IriTemplateMapping",
|
|
11
|
+
"variable": "term_id",
|
|
12
|
+
"property": "hydra:freetextQuery",
|
|
13
|
+
"required": true
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"qa_replacement_patterns": {
|
|
18
|
+
"term_id": "term_id"
|
|
19
|
+
},
|
|
20
|
+
"term_id": "ID",
|
|
21
|
+
"results": {
|
|
22
|
+
"id_predicate": "http://id.loc.gov/vocabulary/identifiers/lccn",
|
|
23
|
+
"label_predicate": "http://www.w3.org/2004/02/skos/core#prefLabel"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"search": {}
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"term": {
|
|
3
|
+
"url": {
|
|
4
|
+
"@context": "http://www.w3.org/ns/hydra/context.jsonld",
|
|
5
|
+
"@type": "IriTemplate",
|
|
6
|
+
"template": "http://localhost/test_default/term?uri={?term_uri}",
|
|
7
|
+
"variableRepresentation": "BasicRepresentation",
|
|
8
|
+
"mapping": [
|
|
9
|
+
{
|
|
10
|
+
"@type": "IriTemplateMapping",
|
|
11
|
+
"variable": "term_uri",
|
|
12
|
+
"property": "hydra:freetextQuery",
|
|
13
|
+
"required": true
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"qa_replacement_patterns": {
|
|
18
|
+
"term_id": "term_uri"
|
|
19
|
+
},
|
|
20
|
+
"term_id": "URI",
|
|
21
|
+
"results": {
|
|
22
|
+
"id_predicate": "http://id.loc.gov/vocabulary/identifiers/lccn",
|
|
23
|
+
"label_predicate": "http://www.w3.org/2004/02/skos/core#prefLabel"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"search": {}
|
|
27
|
+
}
|
|
@@ -48,7 +48,9 @@ describe Qa::Authorities::AssignFast do
|
|
|
48
48
|
.to_return(status: 200, body: "", headers: {})
|
|
49
49
|
end
|
|
50
50
|
it "logs an info and returns an empty array" do
|
|
51
|
-
|
|
51
|
+
msg = "Could not parse response as JSON. Request url: " \
|
|
52
|
+
"http://fast.oclc.org/searchfast/fastsuggest?&query=word%20ling&queryIndex=suggestall&queryReturn=suggestall%2Cidroot%2Cauth%2Ctype&suggest=autoSubject&rows=20"
|
|
53
|
+
expect(Rails.logger).to receive(:info).with(msg)
|
|
52
54
|
results = authority.search("word (ling")
|
|
53
55
|
expect(results).to eq([])
|
|
54
56
|
end
|
|
@@ -7,24 +7,30 @@ describe Qa::Authorities::Local::FileBasedAuthority do
|
|
|
7
7
|
let(:authority_d) { Qa::Authorities::Local.subauthority_for("authority_D") }
|
|
8
8
|
|
|
9
9
|
describe "#all" do
|
|
10
|
-
let(:expected)
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
let(:expected) do
|
|
11
|
+
[{ 'id' => "A1", 'label' => "Abc Term A1", 'active' => true },
|
|
12
|
+
{ 'id' => "A2", 'label' => "Term A2", 'active' => false },
|
|
13
|
+
{ 'id' => "A3", 'label' => "Abc Term A3", 'active' => true }]
|
|
14
|
+
end
|
|
13
15
|
it "returns all the entries" do
|
|
14
16
|
expect(authority_a.all).to eq(expected)
|
|
15
17
|
end
|
|
16
18
|
context "when terms do not have ids" do
|
|
17
|
-
let(:expected)
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
let(:expected) do
|
|
20
|
+
[{ 'id' => "Term B1", 'label' => "Term B1", 'active' => true },
|
|
21
|
+
{ 'id' => "Term B2", 'label' => "Term B2", 'active' => true },
|
|
22
|
+
{ 'id' => "Term B3", 'label' => "Term B3", 'active' => true }]
|
|
23
|
+
end
|
|
20
24
|
it "sets the id to be same as the label" do
|
|
21
25
|
expect(authority_b.all).to eq(expected)
|
|
22
26
|
end
|
|
23
27
|
end
|
|
24
28
|
context "authority YAML file is a list of terms" do
|
|
25
|
-
let(:expected)
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
let(:expected) do
|
|
30
|
+
[{ 'id' => "Term C1", 'label' => "Term C1", 'active' => true },
|
|
31
|
+
{ 'id' => "Term C2", 'label' => "Term C2", 'active' => true },
|
|
32
|
+
{ 'id' => "Term C3", 'label' => "Term C3", 'active' => true }]
|
|
33
|
+
end
|
|
28
34
|
it "uses the terms as labels" do
|
|
29
35
|
expect(authority_c.all).to eq(expected)
|
|
30
36
|
end
|
|
@@ -44,8 +50,10 @@ describe Qa::Authorities::Local::FileBasedAuthority do
|
|
|
44
50
|
end
|
|
45
51
|
end
|
|
46
52
|
context "with at least one matching entry" do
|
|
47
|
-
let(:expected)
|
|
48
|
-
|
|
53
|
+
let(:expected) do
|
|
54
|
+
[{ 'id' => "A1", 'label' => "Abc Term A1" },
|
|
55
|
+
{ 'id' => "A3", 'label' => "Abc Term A3" }]
|
|
56
|
+
end
|
|
49
57
|
it "returns only entries matching the query term" do
|
|
50
58
|
expect(authority_a.search("Abc")).to eq(expected)
|
|
51
59
|
end
|
|
@@ -37,12 +37,12 @@ describe Qa::Authorities::Geonames do
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
context "with custom label" do
|
|
40
|
+
let!(:original_label) { described_class.label }
|
|
40
41
|
before do
|
|
41
|
-
|
|
42
|
-
described_class.label = -> (item) { item['name'] }
|
|
42
|
+
described_class.label = ->(item) { item['name'] }
|
|
43
43
|
end
|
|
44
44
|
after do
|
|
45
|
-
described_class.label =
|
|
45
|
+
described_class.label = original_label
|
|
46
46
|
end
|
|
47
47
|
it "uses the lambda" do
|
|
48
48
|
expect(subject.first['label']).to eq("Port Moresby")
|
|
@@ -65,14 +65,20 @@ describe Qa::Authorities::Getty::AAT do
|
|
|
65
65
|
subject { authority.request_options }
|
|
66
66
|
it { is_expected.to eq(accept: "application/sparql-results+json") }
|
|
67
67
|
end
|
|
68
|
-
|
|
68
|
+
# rubocop:disable Metrics/LineLength
|
|
69
69
|
describe "#sparql" do
|
|
70
|
-
subject
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
70
|
+
context "using a single subject term" do
|
|
71
|
+
subject { authority.sparql('search_term') }
|
|
72
|
+
it {
|
|
73
|
+
is_expected.to eq %(SELECT ?s ?name { ?s a skos:Concept; luc:term "search_term"; skos:inScheme <http://vocab.getty.edu/aat/> ; gvp:prefLabelGVP [skosxl:literalForm ?name]. FILTER regex(?name, "search_term", "i") . } ORDER BY ?name)
|
|
74
|
+
}
|
|
75
|
+
end
|
|
76
|
+
context "using a two subject terms" do
|
|
77
|
+
subject { authority.sparql('search term') }
|
|
78
|
+
it {
|
|
79
|
+
is_expected.to eq %(SELECT ?s ?name { ?s a skos:Concept; luc:term "search term"; skos:inScheme <http://vocab.getty.edu/aat/> ; gvp:prefLabelGVP [skosxl:literalForm ?name]. FILTER ((regex(?name, "search", "i")) && (regex(?name, "term", "i"))) . } ORDER BY ?name)
|
|
80
|
+
}
|
|
81
|
+
end
|
|
77
82
|
end
|
|
83
|
+
# rubocop:enable Metrics/LineLength
|
|
78
84
|
end
|
|
@@ -65,27 +65,20 @@ describe Qa::Authorities::Getty::TGN do
|
|
|
65
65
|
subject { authority.request_options }
|
|
66
66
|
it { is_expected.to eq(accept: "application/sparql-results+json") }
|
|
67
67
|
end
|
|
68
|
-
|
|
68
|
+
# rubocop:disable Metrics/LineLength
|
|
69
69
|
describe "#sparql" do
|
|
70
70
|
context "using a single subject term" do
|
|
71
71
|
subject { authority.sparql('search_term') }
|
|
72
|
-
it {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
gvp:prefLabelGVP [skosxl:literalForm ?name] ;
|
|
76
|
-
gvp:parentString ?par .
|
|
77
|
-
FILTER regex(?name, "search_term", "i") .
|
|
78
|
-
} ORDER BY ?name ASC(?par)' }
|
|
72
|
+
it {
|
|
73
|
+
is_expected.to eq %(SELECT DISTINCT ?s ?name ?par { ?s a skos:Concept; luc:term "search_term"; skos:inScheme <http://vocab.getty.edu/ulan/> ; gvp:prefLabelGVP [skosxl:literalForm ?name] ; gvp:parentString ?par . FILTER regex(?name, "search_term", "i") . } ORDER BY ?name ASC(?par))
|
|
74
|
+
}
|
|
79
75
|
end
|
|
80
76
|
context "using a two subject terms" do
|
|
81
77
|
subject { authority.sparql('search term') }
|
|
82
|
-
it {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
gvp:prefLabelGVP [skosxl:literalForm ?name] ;
|
|
86
|
-
gvp:parentString ?par .
|
|
87
|
-
FILTER ((regex(CONCAT(?name, ', ', REPLACE(str(?par), \",[^,]+,[^,]+$\", \"\")), \"search\",\"i\" ) && regex(CONCAT(?name, ', ', REPLACE(str(?par), \",[^,]+,[^,]+$\", \"\")), \"term\",\"i\" ) ) && (regex(?name, \"search\",\"i\" ) || regex(?name, \"term\",\"i\" ) ) ) .
|
|
88
|
-
} ORDER BY ?name ASC(?par)" }
|
|
78
|
+
it {
|
|
79
|
+
is_expected.to eq %(SELECT DISTINCT ?s ?name ?par { ?s a skos:Concept; luc:term "search term"; skos:inScheme <http://vocab.getty.edu/ulan/> ; gvp:prefLabelGVP [skosxl:literalForm ?name] ; gvp:parentString ?par . FILTER ((regex(?name, "search", "i") || regex(?alt, "search", "i")) && (regex(?name, "term", "i") || regex(?alt, "term", "i"))) . } ORDER BY ?name ASC(?par))
|
|
80
|
+
}
|
|
89
81
|
end
|
|
90
82
|
end
|
|
83
|
+
# rubocop:enable Metrics/LineLength
|
|
91
84
|
end
|