blacklight-access_controls 0.1.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.
Files changed (99) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/Gemfile +32 -0
  4. data/README.textile +74 -0
  5. data/Rakefile +47 -0
  6. data/VERSION +1 -0
  7. data/blacklight-access_controls.gemspec +29 -0
  8. data/lib/blacklight-access_controls.rb +23 -0
  9. data/lib/blacklight/access_controls.rb +14 -0
  10. data/lib/blacklight/access_controls/ability.rb +148 -0
  11. data/lib/blacklight/access_controls/catalog.rb +27 -0
  12. data/lib/blacklight/access_controls/config.rb +39 -0
  13. data/lib/blacklight/access_controls/enforcement.rb +103 -0
  14. data/lib/blacklight/access_controls/permissions_cache.rb +19 -0
  15. data/lib/blacklight/access_controls/permissions_query.rb +53 -0
  16. data/lib/blacklight/access_controls/permissions_solr_document.rb +2 -0
  17. data/lib/blacklight/access_controls/user.rb +23 -0
  18. data/lib/generators/blacklight/ability.rb +4 -0
  19. data/lib/generators/blacklight/access_controls_generator.rb +49 -0
  20. data/solr_conf/conf/abc123 +0 -0
  21. data/solr_conf/conf/admin-extra.html +24 -0
  22. data/solr_conf/conf/admin-extra.menu-bottom.html +25 -0
  23. data/solr_conf/conf/admin-extra.menu-top.html +25 -0
  24. data/solr_conf/conf/clustering/carrot2/kmeans-attributes.xml +19 -0
  25. data/solr_conf/conf/clustering/carrot2/lingo-attributes.xml +24 -0
  26. data/solr_conf/conf/clustering/carrot2/stc-attributes.xml +19 -0
  27. data/solr_conf/conf/currency.xml +67 -0
  28. data/solr_conf/conf/dataimport.properties +3 -0
  29. data/solr_conf/conf/db-data-config.xml +93 -0
  30. data/solr_conf/conf/elevate.xml +38 -0
  31. data/solr_conf/conf/lang/contractions_ca.txt +8 -0
  32. data/solr_conf/conf/lang/contractions_fr.txt +15 -0
  33. data/solr_conf/conf/lang/contractions_ga.txt +5 -0
  34. data/solr_conf/conf/lang/contractions_it.txt +23 -0
  35. data/solr_conf/conf/lang/hyphenations_ga.txt +5 -0
  36. data/solr_conf/conf/lang/stemdict_nl.txt +6 -0
  37. data/solr_conf/conf/lang/stoptags_ja.txt +420 -0
  38. data/solr_conf/conf/lang/stopwords_ar.txt +125 -0
  39. data/solr_conf/conf/lang/stopwords_bg.txt +193 -0
  40. data/solr_conf/conf/lang/stopwords_ca.txt +220 -0
  41. data/solr_conf/conf/lang/stopwords_ckb.txt +136 -0
  42. data/solr_conf/conf/lang/stopwords_cz.txt +172 -0
  43. data/solr_conf/conf/lang/stopwords_da.txt +110 -0
  44. data/solr_conf/conf/lang/stopwords_de.txt +294 -0
  45. data/solr_conf/conf/lang/stopwords_el.txt +78 -0
  46. data/solr_conf/conf/lang/stopwords_en.txt +54 -0
  47. data/solr_conf/conf/lang/stopwords_es.txt +356 -0
  48. data/solr_conf/conf/lang/stopwords_eu.txt +99 -0
  49. data/solr_conf/conf/lang/stopwords_fa.txt +313 -0
  50. data/solr_conf/conf/lang/stopwords_fi.txt +97 -0
  51. data/solr_conf/conf/lang/stopwords_fr.txt +186 -0
  52. data/solr_conf/conf/lang/stopwords_ga.txt +110 -0
  53. data/solr_conf/conf/lang/stopwords_gl.txt +161 -0
  54. data/solr_conf/conf/lang/stopwords_hi.txt +235 -0
  55. data/solr_conf/conf/lang/stopwords_hu.txt +211 -0
  56. data/solr_conf/conf/lang/stopwords_hy.txt +46 -0
  57. data/solr_conf/conf/lang/stopwords_id.txt +359 -0
  58. data/solr_conf/conf/lang/stopwords_it.txt +303 -0
  59. data/solr_conf/conf/lang/stopwords_ja.txt +127 -0
  60. data/solr_conf/conf/lang/stopwords_lv.txt +172 -0
  61. data/solr_conf/conf/lang/stopwords_nl.txt +119 -0
  62. data/solr_conf/conf/lang/stopwords_no.txt +194 -0
  63. data/solr_conf/conf/lang/stopwords_pt.txt +253 -0
  64. data/solr_conf/conf/lang/stopwords_ro.txt +233 -0
  65. data/solr_conf/conf/lang/stopwords_ru.txt +243 -0
  66. data/solr_conf/conf/lang/stopwords_sv.txt +133 -0
  67. data/solr_conf/conf/lang/stopwords_th.txt +119 -0
  68. data/solr_conf/conf/lang/stopwords_tr.txt +212 -0
  69. data/solr_conf/conf/lang/userdict_ja.txt +29 -0
  70. data/solr_conf/conf/mapping-FoldToASCII.txt +3813 -0
  71. data/solr_conf/conf/mapping-ISOLatin1Accent.txt +246 -0
  72. data/solr_conf/conf/protwords.txt +21 -0
  73. data/solr_conf/conf/schema.blacklight.xml +724 -0
  74. data/solr_conf/conf/schema.xml +1268 -0
  75. data/solr_conf/conf/schema.xml.orig +1524 -0
  76. data/solr_conf/conf/solrconfig.adams.xml +1903 -0
  77. data/solr_conf/conf/solrconfig.blacklight.xml +411 -0
  78. data/solr_conf/conf/solrconfig.old.xml +1634 -0
  79. data/solr_conf/conf/solrconfig.xml +332 -0
  80. data/solr_conf/conf/solrconfig.xml.orig +3531 -0
  81. data/solr_conf/conf/spellings.txt +2 -0
  82. data/solr_conf/conf/stopwords.txt +14 -0
  83. data/solr_conf/conf/synonyms.txt +29 -0
  84. data/solr_conf/conf/update-script.js +53 -0
  85. data/solr_conf/conf/xslt/example.xsl +132 -0
  86. data/solr_conf/conf/xslt/example_atom.xsl +67 -0
  87. data/solr_conf/conf/xslt/example_rss.xsl +66 -0
  88. data/solr_conf/conf/xslt/luke.xsl +337 -0
  89. data/solr_conf/conf/xslt/updateXml.xsl +70 -0
  90. data/spec/factories/user.rb +6 -0
  91. data/spec/spec_helper.rb +29 -0
  92. data/spec/support/solr_support.rb +11 -0
  93. data/spec/test_app_templates/blacklight.yml +18 -0
  94. data/spec/test_app_templates/lib/generators/test_app_generator.rb +25 -0
  95. data/spec/unit/ability_spec.rb +202 -0
  96. data/spec/unit/catalog_spec.rb +41 -0
  97. data/spec/unit/config_spec.rb +69 -0
  98. data/spec/unit/enforcement_spec.rb +147 -0
  99. metadata +265 -0
@@ -0,0 +1,147 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blacklight::AccessControls::Enforcement do
4
+ let(:controller) { CatalogController.new }
5
+ let(:search_builder) { SearchBuilder.new(method_chain, context) }
6
+ let(:method_chain) { CatalogController.search_params_logic }
7
+ let(:context) { controller }
8
+
9
+ let(:user) { User.new }
10
+ let(:ability) { Ability.new(user) }
11
+
12
+ subject { search_builder }
13
+
14
+ describe "When I am searching for content" do
15
+ before do
16
+ @solr_parameters = {}
17
+ end
18
+
19
+ context "Given I am not logged in" do
20
+ before do
21
+ subject.current_ability = ability
22
+ subject.send(:apply_gated_discovery, @solr_parameters)
23
+ end
24
+
25
+ it "Then I should be treated as a member of the 'public' group" do
26
+ expect(@solr_parameters[:fq].first).to eq 'discover_access_group_ssim:public OR read_access_group_ssim:public'
27
+ end
28
+
29
+ it "Then I should not be treated as a member of the 'registered' group" do
30
+ expect(@solr_parameters[:fq].first).to_not match(/registered/)
31
+ end
32
+ end
33
+
34
+ context "Given I am a registered user" do
35
+ let(:user) { create(:user) }
36
+
37
+ before do
38
+ allow(user).to receive(:groups) { ["faculty", "africana-faculty"] }
39
+ subject.current_ability = Ability.new(user)
40
+ subject.send(:apply_gated_discovery, @solr_parameters)
41
+ end
42
+
43
+ it "Then I should be treated as a member of the 'public' and 'registered' groups" do
44
+ ["discover","read"].each do |type|
45
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_group_ssim\:public/)
46
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_group_ssim\:registered/)
47
+ end
48
+ end
49
+
50
+ it "Then I should see assets that I have discover or read access to" do
51
+ ["discover","read"].each do |type|
52
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_person_ssim\:#{user.user_key}/)
53
+ end
54
+ end
55
+
56
+ it "Then I should see assets that my groups have discover or read access to" do
57
+ ["faculty", "africana-faculty"].each do |group_id|
58
+ ["discover","read"].each do |type|
59
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_group_ssim\:#{group_id}/)
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ describe "apply_gated_discovery" do
67
+ let(:user) { create(:user) }
68
+ let(:groups) { ["archivist","researcher"] }
69
+
70
+ before do
71
+ allow(user).to receive(:groups) { groups }
72
+ subject.current_ability = Ability.new(user)
73
+ @solr_parameters = {}
74
+ end
75
+
76
+ it "should set query fields for the user id checking against the discover, read fields" do
77
+ subject.send(:apply_gated_discovery, @solr_parameters)
78
+ ["discover","read"].each do |type|
79
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_person_ssim\:#{user.user_key}/)
80
+ end
81
+ end
82
+
83
+ it "should set query fields for all roles the user is a member of checking against the discover, read fields" do
84
+ subject.send(:apply_gated_discovery, @solr_parameters)
85
+ ["discover","read"].each do |type|
86
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_group_ssim\:archivist/)
87
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_group_ssim\:researcher/)
88
+ end
89
+ end
90
+
91
+ context 'slashes in the group names' do
92
+ let(:groups) { ["abc/123","cde/567"] }
93
+
94
+ it "should escape slashes" do
95
+ subject.send(:apply_gated_discovery, @solr_parameters)
96
+ ["discover","read"].each do |type|
97
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_group_ssim\:abc\\\/123/)
98
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_group_ssim\:cde\\\/567/)
99
+ end
100
+ end
101
+ end
102
+
103
+ context 'spaces in the group names' do
104
+ let(:groups) { ["abc 123","cd/e 567"] }
105
+
106
+ it "should escape spaces" do
107
+ subject.send(:apply_gated_discovery, @solr_parameters)
108
+ ["discover","read"].each do |type|
109
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_group_ssim\:abc\\ 123/)
110
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_group_ssim\:cd\\\/e\\ 567/)
111
+ end
112
+ end
113
+ end
114
+
115
+ context 'colons in the groups names' do
116
+ let(:groups) { ["abc:123","cde:567"] }
117
+
118
+ it "should escape colons" do
119
+ subject.send(:apply_gated_discovery, @solr_parameters)
120
+ ["discover","read"].each do |type|
121
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_group_ssim\:abc\\:123/)
122
+ expect(@solr_parameters[:fq].first).to match(/#{type}_access_group_ssim\:cde\\:567/)
123
+ end
124
+ end
125
+ end
126
+ end
127
+
128
+ describe "apply_user_permissions" do
129
+ describe "when the user is a guest user (user key nil)" do
130
+ before { subject.current_ability = ability }
131
+
132
+ it "should not create filters" do
133
+ expect(subject.send(:apply_user_permissions, ["discover","read"])).to eq []
134
+ end
135
+ end
136
+
137
+ describe "when the user is a guest user (user key empty string)" do
138
+ let(:user) { User.new(email: '') }
139
+ before { subject.current_ability = ability }
140
+
141
+ it "should not create filters" do
142
+ expect(subject.send(:apply_user_permissions, ["discover","read"])).to eq []
143
+ end
144
+ end
145
+ end
146
+
147
+ end
metadata ADDED
@@ -0,0 +1,265 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: blacklight-access_controls
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Beer
8
+ - Justin Coyne
9
+ - Matt Zumwalt
10
+ - Valerie Maher
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2015-12-01 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: cancancan
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '1.8'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.8'
30
+ - !ruby/object:Gem::Dependency
31
+ name: blacklight
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - "~>"
35
+ - !ruby/object:Gem::Version
36
+ version: '5.16'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '5.16'
44
+ - !ruby/object:Gem::Dependency
45
+ name: rake
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - "~>"
49
+ - !ruby/object:Gem::Version
50
+ version: '10.1'
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '10.1'
58
+ - !ruby/object:Gem::Dependency
59
+ name: rspec
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - "~>"
63
+ - !ruby/object:Gem::Version
64
+ version: '3.1'
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '3.1'
72
+ - !ruby/object:Gem::Dependency
73
+ name: engine_cart
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: '0.8'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '0.8'
86
+ - !ruby/object:Gem::Dependency
87
+ name: solr_wrapper
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ - !ruby/object:Gem::Dependency
101
+ name: factory_girl_rails
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - "~>"
105
+ - !ruby/object:Gem::Version
106
+ version: '4.0'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '4.0'
114
+ - !ruby/object:Gem::Dependency
115
+ name: database_cleaner
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ description: Access controls for blacklight-based applications
129
+ email:
130
+ - blacklight-development@googlegroups.com
131
+ executables: []
132
+ extensions: []
133
+ extra_rdoc_files: []
134
+ files:
135
+ - ".gitignore"
136
+ - Gemfile
137
+ - README.textile
138
+ - Rakefile
139
+ - VERSION
140
+ - blacklight-access_controls.gemspec
141
+ - lib/blacklight-access_controls.rb
142
+ - lib/blacklight/access_controls.rb
143
+ - lib/blacklight/access_controls/ability.rb
144
+ - lib/blacklight/access_controls/catalog.rb
145
+ - lib/blacklight/access_controls/config.rb
146
+ - lib/blacklight/access_controls/enforcement.rb
147
+ - lib/blacklight/access_controls/permissions_cache.rb
148
+ - lib/blacklight/access_controls/permissions_query.rb
149
+ - lib/blacklight/access_controls/permissions_solr_document.rb
150
+ - lib/blacklight/access_controls/user.rb
151
+ - lib/generators/blacklight/ability.rb
152
+ - lib/generators/blacklight/access_controls_generator.rb
153
+ - solr_conf/conf/abc123
154
+ - solr_conf/conf/admin-extra.html
155
+ - solr_conf/conf/admin-extra.menu-bottom.html
156
+ - solr_conf/conf/admin-extra.menu-top.html
157
+ - solr_conf/conf/clustering/carrot2/kmeans-attributes.xml
158
+ - solr_conf/conf/clustering/carrot2/lingo-attributes.xml
159
+ - solr_conf/conf/clustering/carrot2/stc-attributes.xml
160
+ - solr_conf/conf/currency.xml
161
+ - solr_conf/conf/dataimport.properties
162
+ - solr_conf/conf/db-data-config.xml
163
+ - solr_conf/conf/elevate.xml
164
+ - solr_conf/conf/lang/contractions_ca.txt
165
+ - solr_conf/conf/lang/contractions_fr.txt
166
+ - solr_conf/conf/lang/contractions_ga.txt
167
+ - solr_conf/conf/lang/contractions_it.txt
168
+ - solr_conf/conf/lang/hyphenations_ga.txt
169
+ - solr_conf/conf/lang/stemdict_nl.txt
170
+ - solr_conf/conf/lang/stoptags_ja.txt
171
+ - solr_conf/conf/lang/stopwords_ar.txt
172
+ - solr_conf/conf/lang/stopwords_bg.txt
173
+ - solr_conf/conf/lang/stopwords_ca.txt
174
+ - solr_conf/conf/lang/stopwords_ckb.txt
175
+ - solr_conf/conf/lang/stopwords_cz.txt
176
+ - solr_conf/conf/lang/stopwords_da.txt
177
+ - solr_conf/conf/lang/stopwords_de.txt
178
+ - solr_conf/conf/lang/stopwords_el.txt
179
+ - solr_conf/conf/lang/stopwords_en.txt
180
+ - solr_conf/conf/lang/stopwords_es.txt
181
+ - solr_conf/conf/lang/stopwords_eu.txt
182
+ - solr_conf/conf/lang/stopwords_fa.txt
183
+ - solr_conf/conf/lang/stopwords_fi.txt
184
+ - solr_conf/conf/lang/stopwords_fr.txt
185
+ - solr_conf/conf/lang/stopwords_ga.txt
186
+ - solr_conf/conf/lang/stopwords_gl.txt
187
+ - solr_conf/conf/lang/stopwords_hi.txt
188
+ - solr_conf/conf/lang/stopwords_hu.txt
189
+ - solr_conf/conf/lang/stopwords_hy.txt
190
+ - solr_conf/conf/lang/stopwords_id.txt
191
+ - solr_conf/conf/lang/stopwords_it.txt
192
+ - solr_conf/conf/lang/stopwords_ja.txt
193
+ - solr_conf/conf/lang/stopwords_lv.txt
194
+ - solr_conf/conf/lang/stopwords_nl.txt
195
+ - solr_conf/conf/lang/stopwords_no.txt
196
+ - solr_conf/conf/lang/stopwords_pt.txt
197
+ - solr_conf/conf/lang/stopwords_ro.txt
198
+ - solr_conf/conf/lang/stopwords_ru.txt
199
+ - solr_conf/conf/lang/stopwords_sv.txt
200
+ - solr_conf/conf/lang/stopwords_th.txt
201
+ - solr_conf/conf/lang/stopwords_tr.txt
202
+ - solr_conf/conf/lang/userdict_ja.txt
203
+ - solr_conf/conf/mapping-FoldToASCII.txt
204
+ - solr_conf/conf/mapping-ISOLatin1Accent.txt
205
+ - solr_conf/conf/protwords.txt
206
+ - solr_conf/conf/schema.blacklight.xml
207
+ - solr_conf/conf/schema.xml
208
+ - solr_conf/conf/schema.xml.orig
209
+ - solr_conf/conf/solrconfig.adams.xml
210
+ - solr_conf/conf/solrconfig.blacklight.xml
211
+ - solr_conf/conf/solrconfig.old.xml
212
+ - solr_conf/conf/solrconfig.xml
213
+ - solr_conf/conf/solrconfig.xml.orig
214
+ - solr_conf/conf/spellings.txt
215
+ - solr_conf/conf/stopwords.txt
216
+ - solr_conf/conf/synonyms.txt
217
+ - solr_conf/conf/update-script.js
218
+ - solr_conf/conf/xslt/example.xsl
219
+ - solr_conf/conf/xslt/example_atom.xsl
220
+ - solr_conf/conf/xslt/example_rss.xsl
221
+ - solr_conf/conf/xslt/luke.xsl
222
+ - solr_conf/conf/xslt/updateXml.xsl
223
+ - spec/factories/user.rb
224
+ - spec/spec_helper.rb
225
+ - spec/support/solr_support.rb
226
+ - spec/test_app_templates/blacklight.yml
227
+ - spec/test_app_templates/lib/generators/test_app_generator.rb
228
+ - spec/unit/ability_spec.rb
229
+ - spec/unit/catalog_spec.rb
230
+ - spec/unit/config_spec.rb
231
+ - spec/unit/enforcement_spec.rb
232
+ homepage: https://github.com/projectblacklight/blacklight-access_controls
233
+ licenses:
234
+ - APACHE2
235
+ metadata: {}
236
+ post_install_message:
237
+ rdoc_options: []
238
+ require_paths:
239
+ - lib
240
+ required_ruby_version: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: 1.9.3
245
+ required_rubygems_version: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: '0'
250
+ requirements: []
251
+ rubyforge_project:
252
+ rubygems_version: 2.4.5.1
253
+ signing_key:
254
+ specification_version: 4
255
+ summary: Access controls for blacklight-based applications
256
+ test_files:
257
+ - spec/factories/user.rb
258
+ - spec/spec_helper.rb
259
+ - spec/support/solr_support.rb
260
+ - spec/test_app_templates/blacklight.yml
261
+ - spec/test_app_templates/lib/generators/test_app_generator.rb
262
+ - spec/unit/ability_spec.rb
263
+ - spec/unit/catalog_spec.rb
264
+ - spec/unit/config_spec.rb
265
+ - spec/unit/enforcement_spec.rb