supplejack_api 1

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 (291) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +80 -0
  3. data/Rakefile +42 -0
  4. data/app/assets/javascripts/supplejack_api/application.js +26 -0
  5. data/app/assets/stylesheets/supplejack_api/application.css +30 -0
  6. data/app/controllers/supplejack_api/admin/base_controller.rb +24 -0
  7. data/app/controllers/supplejack_api/admin/sessions_controller.rb +25 -0
  8. data/app/controllers/supplejack_api/admin/site_activities_controller.rb +21 -0
  9. data/app/controllers/supplejack_api/admin/users_controller.rb +55 -0
  10. data/app/controllers/supplejack_api/application_controller.rb +70 -0
  11. data/app/controllers/supplejack_api/concepts_controller.rb +52 -0
  12. data/app/controllers/supplejack_api/concerns/ignore_metrics.rb +14 -0
  13. data/app/controllers/supplejack_api/concerns/records_controller_metrics.rb +26 -0
  14. data/app/controllers/supplejack_api/concerns/set_items_controller_metrics.rb +20 -0
  15. data/app/controllers/supplejack_api/concerns/user_sets_controller_metrics.rb +26 -0
  16. data/app/controllers/supplejack_api/harvester/concepts_controller.rb +41 -0
  17. data/app/controllers/supplejack_api/harvester/fragments_controller.rb +30 -0
  18. data/app/controllers/supplejack_api/harvester/records_controller.rb +68 -0
  19. data/app/controllers/supplejack_api/metrics_api_controller.rb +44 -0
  20. data/app/controllers/supplejack_api/partners_controller.rb +39 -0
  21. data/app/controllers/supplejack_api/records_controller.rb +71 -0
  22. data/app/controllers/supplejack_api/schema_controller.rb +19 -0
  23. data/app/controllers/supplejack_api/set_items_controller.rb +38 -0
  24. data/app/controllers/supplejack_api/sources_controller.rb +67 -0
  25. data/app/controllers/supplejack_api/status_controller.rb +67 -0
  26. data/app/controllers/supplejack_api/user_sets_controller.rb +97 -0
  27. data/app/controllers/supplejack_api/users_controller.rb +49 -0
  28. data/app/helpers/supplejack_api/application_helper.rb +39 -0
  29. data/app/helpers/supplejack_api/facets_helper.rb +30 -0
  30. data/app/mailers/supplejack_api/request_limit_mailer.rb +43 -0
  31. data/app/models/supplejack_api/api_concept/concept_fragment.rb +31 -0
  32. data/app/models/supplejack_api/api_record/record_fragment.rb +15 -0
  33. data/app/models/supplejack_api/concept.rb +46 -0
  34. data/app/models/supplejack_api/concept_search.rb +86 -0
  35. data/app/models/supplejack_api/concerns/queryable_by_date.rb +31 -0
  36. data/app/models/supplejack_api/concerns/record.rb +108 -0
  37. data/app/models/supplejack_api/concerns/record_fragmentable.rb +24 -0
  38. data/app/models/supplejack_api/concerns/searchable.rb +430 -0
  39. data/app/models/supplejack_api/concerns/user_set.rb +219 -0
  40. data/app/models/supplejack_api/daily_metrics.rb +20 -0
  41. data/app/models/supplejack_api/faceted_metrics.rb +55 -0
  42. data/app/models/supplejack_api/fragment.rb +82 -0
  43. data/app/models/supplejack_api/interaction_models/record.rb +60 -0
  44. data/app/models/supplejack_api/interaction_models/set.rb +13 -0
  45. data/app/models/supplejack_api/interaction_updaters/all_usage_metric.rb +41 -0
  46. data/app/models/supplejack_api/interaction_updaters/set_metrics.rb +32 -0
  47. data/app/models/supplejack_api/interaction_updaters/usage_metrics.rb +73 -0
  48. data/app/models/supplejack_api/partner.rb +24 -0
  49. data/app/models/supplejack_api/preview_record.rb +30 -0
  50. data/app/models/supplejack_api/record.rb +18 -0
  51. data/app/models/supplejack_api/record_search.rb +12 -0
  52. data/app/models/supplejack_api/schema_definition.rb +147 -0
  53. data/app/models/supplejack_api/search.rb +14 -0
  54. data/app/models/supplejack_api/set_item.rb +57 -0
  55. data/app/models/supplejack_api/site_activity.rb +59 -0
  56. data/app/models/supplejack_api/source.rb +28 -0
  57. data/app/models/supplejack_api/source_activity.rb +36 -0
  58. data/app/models/supplejack_api/source_authority.rb +42 -0
  59. data/app/models/supplejack_api/supplejack_schema.rb +37 -0
  60. data/app/models/supplejack_api/support/concept/searchable.rb +79 -0
  61. data/app/models/supplejack_api/support/concept/storable.rb +59 -0
  62. data/app/models/supplejack_api/support/fragment_helpers.rb +96 -0
  63. data/app/models/supplejack_api/support/harvestable.rb +105 -0
  64. data/app/models/supplejack_api/support/searchable.rb +115 -0
  65. data/app/models/supplejack_api/support/status_logger.rb +23 -0
  66. data/app/models/supplejack_api/support/storable.rb +49 -0
  67. data/app/models/supplejack_api/support/validation_logger.rb +23 -0
  68. data/app/models/supplejack_api/usage_metrics.rb +25 -0
  69. data/app/models/supplejack_api/user.rb +211 -0
  70. data/app/models/supplejack_api/user_activity.rb +65 -0
  71. data/app/models/supplejack_api/user_set.rb +17 -0
  72. data/app/serializers/supplejack_api/application_serializer.rb +12 -0
  73. data/app/serializers/supplejack_api/concept_record_serializer.rb +23 -0
  74. data/app/serializers/supplejack_api/concept_search_serializer.rb +12 -0
  75. data/app/serializers/supplejack_api/concept_serializer.rb +100 -0
  76. data/app/serializers/supplejack_api/concerns/record_serializable.rb +119 -0
  77. data/app/serializers/supplejack_api/concerns/search_serializable.rb +24 -0
  78. data/app/serializers/supplejack_api/record_search_serializer.rb +64 -0
  79. data/app/serializers/supplejack_api/record_serializer.rb +13 -0
  80. data/app/serializers/supplejack_api/search_serializer.rb +13 -0
  81. data/app/serializers/supplejack_api/source_authority_serializer.rb +23 -0
  82. data/app/serializers/supplejack_api/user_serializer.rb +13 -0
  83. data/app/serializers/supplejack_api/user_set_record_serializer.rb +14 -0
  84. data/app/serializers/supplejack_api/user_set_serializer.rb +77 -0
  85. data/app/services/metrics_api/v3/api.rb +30 -0
  86. data/app/services/metrics_api/v3/endpoints/facets.rb +23 -0
  87. data/app/services/metrics_api/v3/endpoints/global.rb +26 -0
  88. data/app/services/metrics_api/v3/endpoints/helpers.rb +14 -0
  89. data/app/services/metrics_api/v3/endpoints/root.rb +97 -0
  90. data/app/services/metrics_api/v3/presenters/daily_metric.rb +23 -0
  91. data/app/services/metrics_api/v3/presenters/extended_metadata.rb +41 -0
  92. data/app/services/metrics_api/v3/presenters/record.rb +26 -0
  93. data/app/services/metrics_api/v3/presenters/view.rb +28 -0
  94. data/app/views/layouts/supplejack_api/_head.html.erb +17 -0
  95. data/app/views/layouts/supplejack_api/_top_nav.html.erb +33 -0
  96. data/app/views/layouts/supplejack_api/application.html.erb +33 -0
  97. data/app/views/supplejack_api/admin/sessions/new.html.erb +25 -0
  98. data/app/views/supplejack_api/admin/shared/_links.erb +34 -0
  99. data/app/views/supplejack_api/admin/site_activities/index.csv.erb +22 -0
  100. data/app/views/supplejack_api/admin/site_activities/index.html.erb +54 -0
  101. data/app/views/supplejack_api/admin/users/edit.html.erb +16 -0
  102. data/app/views/supplejack_api/admin/users/index.csv.erb +22 -0
  103. data/app/views/supplejack_api/admin/users/index.html.erb +57 -0
  104. data/app/views/supplejack_api/admin/users/show.html.erb +33 -0
  105. data/app/views/supplejack_api/request_limit_mailer/at100percent.text.erb +13 -0
  106. data/app/views/supplejack_api/request_limit_mailer/at100percent_admin.text.erb +1 -0
  107. data/app/views/supplejack_api/request_limit_mailer/at90percent.text.erb +13 -0
  108. data/app/views/supplejack_api/request_limit_mailer/at90percent_admin.text.erb +1 -0
  109. data/app/workers/supplejack_api/daily_metrics_worker.rb +112 -0
  110. data/app/workers/supplejack_api/interaction_metrics_worker.rb +45 -0
  111. data/config/cucumber.yml +16 -0
  112. data/config/initializers/force_eagerload.rb +11 -0
  113. data/config/initializers/interaction_updaters.rb +7 -0
  114. data/config/routes.rb +81 -0
  115. data/db/binding_records.development.json +7 -0
  116. data/db/binding_records.staging.json +7 -0
  117. data/db/concepts.json +33 -0
  118. data/db/concepts_data.json +569745 -0
  119. data/db/source_authorities.json +119 -0
  120. data/lib/generators/supplejack_api/install_generator.rb +124 -0
  121. data/lib/mongoid/paperclip.rb +53 -0
  122. data/lib/mongoid/string.rb +20 -0
  123. data/lib/sunspot/mongoid.rb +51 -0
  124. data/lib/sunspot/resque_session_proxy.rb +72 -0
  125. data/lib/sunspot/sunspot_spellcheck.rb +98 -0
  126. data/lib/supplejack_api.rb +13 -0
  127. data/lib/supplejack_api/admin/sortable.rb +40 -0
  128. data/lib/supplejack_api/engine.rb +46 -0
  129. data/lib/supplejack_api/harvester_constraint.rb +28 -0
  130. data/lib/supplejack_api/stylesheets.rb +36 -0
  131. data/lib/supplejack_api/utils.rb +75 -0
  132. data/lib/supplejack_api/version.rb +11 -0
  133. data/lib/tasks/resque.rake +22 -0
  134. data/lib/url_validator.rb +38 -0
  135. data/spec/controllers/supplejack_api/admin/base_controller_spec.rb +55 -0
  136. data/spec/controllers/supplejack_api/admin/site_activities_controller_spec.rb +43 -0
  137. data/spec/controllers/supplejack_api/admin/users_controller_spec.rb +79 -0
  138. data/spec/controllers/supplejack_api/application_controller_spec.rb +133 -0
  139. data/spec/controllers/supplejack_api/concepts_controller_spec.rb +83 -0
  140. data/spec/controllers/supplejack_api/concerns/records_controller_metrics_spec.rb +60 -0
  141. data/spec/controllers/supplejack_api/harvester/concepts_controller_spec.rb +57 -0
  142. data/spec/controllers/supplejack_api/harvester/records_controller_spec.rb +138 -0
  143. data/spec/controllers/supplejack_api/metrics_api_controller_spec.rb +71 -0
  144. data/spec/controllers/supplejack_api/partners_controller_spec.rb +77 -0
  145. data/spec/controllers/supplejack_api/records_controller_spec.rb +143 -0
  146. data/spec/controllers/supplejack_api/set_items_controller_spec.rb +78 -0
  147. data/spec/controllers/supplejack_api/sources_controller_spec.rb +161 -0
  148. data/spec/controllers/supplejack_api/status_controller_spec.rb +120 -0
  149. data/spec/controllers/supplejack_api/user_sets_controller_spec.rb +233 -0
  150. data/spec/controllers/supplejack_api/users_controller_spec.rb +61 -0
  151. data/spec/dummy/README.rdoc +268 -0
  152. data/spec/dummy/Rakefile +7 -0
  153. data/spec/dummy/app/assets/javascripts/application.js +23 -0
  154. data/spec/dummy/app/assets/stylesheets/application.css +22 -0
  155. data/spec/dummy/app/controllers/application_controller.rb +10 -0
  156. data/spec/dummy/app/helpers/application_helper.rb +9 -0
  157. data/spec/dummy/app/supplejack_api/concept_schema.rb +83 -0
  158. data/spec/dummy/app/supplejack_api/record_schema.rb +64 -0
  159. data/spec/dummy/app/supplejack_api/record_schema.txt +66 -0
  160. data/spec/dummy/app/views/layouts/application.html.erb +23 -0
  161. data/spec/dummy/app/workers/supplejack_api/clear_index_buffer.rb +32 -0
  162. data/spec/dummy/app/workers/supplejack_api/flush_old_records_worker.rb +17 -0
  163. data/spec/dummy/app/workers/supplejack_api/index_buffer.rb +49 -0
  164. data/spec/dummy/app/workers/supplejack_api/index_source_worker.rb +39 -0
  165. data/spec/dummy/app/workers/supplejack_api/index_worker.rb +82 -0
  166. data/spec/dummy/app/workers/supplejack_api/store_user_activity_worker.rb +24 -0
  167. data/spec/dummy/config.ru +11 -0
  168. data/spec/dummy/config/application.rb +76 -0
  169. data/spec/dummy/config/application.yml +31 -0
  170. data/spec/dummy/config/application.yml.example +36 -0
  171. data/spec/dummy/config/boot.rb +17 -0
  172. data/spec/dummy/config/environment.rb +12 -0
  173. data/spec/dummy/config/environments/development.rb +42 -0
  174. data/spec/dummy/config/environments/production.rb +76 -0
  175. data/spec/dummy/config/environments/test.rb +46 -0
  176. data/spec/dummy/config/initializers/backtrace_silencers.rb +14 -0
  177. data/spec/dummy/config/initializers/devise.rb +214 -0
  178. data/spec/dummy/config/initializers/inflections.rb +22 -0
  179. data/spec/dummy/config/initializers/kaminari_config.rb +17 -0
  180. data/spec/dummy/config/initializers/mime_types.rb +12 -0
  181. data/spec/dummy/config/initializers/mongoid.rb +9 -0
  182. data/spec/dummy/config/initializers/quiet_logger.rb +23 -0
  183. data/spec/dummy/config/initializers/resque.rb +18 -0
  184. data/spec/dummy/config/initializers/secret_token.rb +14 -0
  185. data/spec/dummy/config/initializers/session_store.rb +15 -0
  186. data/spec/dummy/config/initializers/simple_form.rb +149 -0
  187. data/spec/dummy/config/initializers/simple_form_foundation.rb +33 -0
  188. data/spec/dummy/config/initializers/state_machine.rb +8 -0
  189. data/spec/dummy/config/initializers/sunspot.rb +32 -0
  190. data/spec/dummy/config/initializers/wrap_parameters.rb +17 -0
  191. data/spec/dummy/config/locales/devise.en.yml +63 -0
  192. data/spec/dummy/config/locales/en.yml +66 -0
  193. data/spec/dummy/config/locales/simple_form.en.yml +33 -0
  194. data/spec/dummy/config/mongoid.travis.yml +34 -0
  195. data/spec/dummy/config/mongoid.yml +36 -0
  196. data/spec/dummy/config/resque-pool.yml +18 -0
  197. data/spec/dummy/config/resque_schedule.yml +12 -0
  198. data/spec/dummy/config/routes.rb +11 -0
  199. data/spec/dummy/config/secrets.yml +8 -0
  200. data/spec/dummy/config/sunspot.yml +38 -0
  201. data/spec/dummy/db/concepts.json +37 -0
  202. data/spec/dummy/db/source_authorities.json +116 -0
  203. data/spec/dummy/public/404.html +35 -0
  204. data/spec/dummy/public/422.html +35 -0
  205. data/spec/dummy/public/500.html +34 -0
  206. data/spec/dummy/public/favicon.ico +8 -0
  207. data/spec/dummy/script/rails +6 -0
  208. data/spec/dummy/solr/collection1/conf/elevate.xml +36 -0
  209. data/spec/dummy/solr/collection1/conf/mapping-FoldToASCII.txt +3813 -0
  210. data/spec/dummy/solr/collection1/conf/schema.xml +292 -0
  211. data/spec/dummy/solr/collection1/conf/solrconfig.xml +1780 -0
  212. data/spec/dummy/solr/collection1/conf/spellings.txt +2 -0
  213. data/spec/dummy/solr/collection1/conf/stopwords.txt +58 -0
  214. data/spec/dummy/solr/collection1/conf/synonyms.txt +31 -0
  215. data/spec/factories/concepts.rb +16 -0
  216. data/spec/factories/daily_metrics.rb +10 -0
  217. data/spec/factories/faceted_metrics.rb +25 -0
  218. data/spec/factories/fragment.rb +14 -0
  219. data/spec/factories/partners.rb +14 -0
  220. data/spec/factories/record_interaction.rb +17 -0
  221. data/spec/factories/records.rb +47 -0
  222. data/spec/factories/set_interaction.rb +15 -0
  223. data/spec/factories/source_authorities.rb +19 -0
  224. data/spec/factories/sources.rb +16 -0
  225. data/spec/factories/usage_metrics.rb +20 -0
  226. data/spec/factories/user_activities.rb +14 -0
  227. data/spec/factories/user_sets.rb +27 -0
  228. data/spec/factories/users.rb +23 -0
  229. data/spec/helpers/application_helper_spec.rb +35 -0
  230. data/spec/models/concept_spec.rb +163 -0
  231. data/spec/models/fragment_spec.rb +15 -0
  232. data/spec/models/site_activity_spec.rb +103 -0
  233. data/spec/models/source_activity_spec.rb +56 -0
  234. data/spec/models/source_authority_spec.rb +42 -0
  235. data/spec/models/supplejack_api/api_concept/concept_fragment_spec.rb +189 -0
  236. data/spec/models/supplejack_api/api_record/record_fragment_spec.rb +189 -0
  237. data/spec/models/supplejack_api/concept_spec.rb +0 -0
  238. data/spec/models/supplejack_api/interaction_updaters/all_usage_metric_spec.rb +41 -0
  239. data/spec/models/supplejack_api/interaction_updaters/set_metrics_spec.rb +32 -0
  240. data/spec/models/supplejack_api/interaction_updaters/usage_metrics_spec.rb +44 -0
  241. data/spec/models/supplejack_api/partner_spec.rb +20 -0
  242. data/spec/models/supplejack_api/record_search_spec.rb +429 -0
  243. data/spec/models/supplejack_api/record_spec.rb +280 -0
  244. data/spec/models/supplejack_api/schema_definition_spec.rb +272 -0
  245. data/spec/models/supplejack_api/search_spec.rb +243 -0
  246. data/spec/models/supplejack_api/set_item_spec.rb +123 -0
  247. data/spec/models/supplejack_api/source_spec.rb +22 -0
  248. data/spec/models/supplejack_api/support/fragment_helpers_spec.rb +216 -0
  249. data/spec/models/supplejack_api/support/harvestable_spec.rb +177 -0
  250. data/spec/models/supplejack_api/support/searchable_spec.rb +85 -0
  251. data/spec/models/supplejack_api/support/storable_spec.rb +18 -0
  252. data/spec/models/supplejack_api/user_activity_spec.rb +88 -0
  253. data/spec/models/supplejack_api/user_set_spec.rb +559 -0
  254. data/spec/models/supplejack_api/user_spec.rb +348 -0
  255. data/spec/routing/concepts_routing_spec.rb +22 -0
  256. data/spec/routing/harvester_constraint_spec.rb +66 -0
  257. data/spec/routing/harvester_routing_spec.rb +51 -0
  258. data/spec/routing/partner_routing_spec.rb +34 -0
  259. data/spec/routing/records_routing_spec.rb +26 -0
  260. data/spec/routing/sets_routing_spec.rb +44 -0
  261. data/spec/routing/source_routing_spec.rb +38 -0
  262. data/spec/routing/users_routing_spec.rb +18 -0
  263. data/spec/serializers/concept_record_serializer_spec.rb +30 -0
  264. data/spec/serializers/supplejack_api/application_serializer_spec.rb +14 -0
  265. data/spec/serializers/supplejack_api/concept_search_serializer_spec.rb +34 -0
  266. data/spec/serializers/supplejack_api/concept_serializer_spec.rb +92 -0
  267. data/spec/serializers/supplejack_api/record_search_serializer_spec.rb +34 -0
  268. data/spec/serializers/supplejack_api/record_serializer_spec.rb +271 -0
  269. data/spec/serializers/supplejack_api/search_serializer_spec.rb +90 -0
  270. data/spec/serializers/supplejack_api/user_serializer_spec.rb +22 -0
  271. data/spec/serializers/supplejack_api/user_set_serializer_spec.rb +96 -0
  272. data/spec/services/metrics_api/v3/api_spec.rb +23 -0
  273. data/spec/services/metrics_api/v3/endpoints/facets_spec.rb +25 -0
  274. data/spec/services/metrics_api/v3/endpoints/global_spec.rb +22 -0
  275. data/spec/services/metrics_api/v3/endpoints/root_spec.rb +49 -0
  276. data/spec/services/metrics_api/v3/presenters/extended_metadata_spec.rb +49 -0
  277. data/spec/spec_helper.rb +70 -0
  278. data/spec/support/api/schemas/metrics/daily_metrics_metadata.json +24 -0
  279. data/spec/support/api/schemas/metrics/extended_metrics.json +26 -0
  280. data/spec/support/api/schemas/metrics/extended_response.json +6 -0
  281. data/spec/support/api/schemas/metrics/facets_response.json +6 -0
  282. data/spec/support/api/schemas/metrics/record_metadata.json +33 -0
  283. data/spec/support/api/schemas/metrics/top_level_response.json +6 -0
  284. data/spec/support/api/schemas/metrics/view_metadata.json +33 -0
  285. data/spec/support/api_schema_matcher.rb +14 -0
  286. data/spec/support/devise.rb +10 -0
  287. data/spec/workers/supplejack_api/daily_metrics_worker_spec.rb +140 -0
  288. data/spec/workers/supplejack_api/flush_old_records_worker_spec.rb +20 -0
  289. data/spec/workers/supplejack_api/index_worker_spec.rb +52 -0
  290. data/spec/workers/supplejack_api/source_index_worker_spec.rb +61 -0
  291. metadata +1231 -0
@@ -0,0 +1,133 @@
1
+ # The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
2
+ # and is licensed under the GNU General Public License, version 3.
3
+ # One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
4
+ #
5
+ # Supplejack was created by DigitalNZ at the National Library of NZ and
6
+ # the Department of Internal Affairs. http://digitalnz.org/supplejack
7
+
8
+ require 'spec_helper'
9
+
10
+ module SupplejackApi
11
+ describe ApplicationController, type: :controller do
12
+ routes { SupplejackApi::Engine.routes }
13
+
14
+ before(:each) do
15
+ @controller = ApplicationController.new
16
+ allow(@controller).to receive(:render) { nil }
17
+ allow(RecordSchema).to receive(:roles) { { admin: double(:admin, admin: true) } }
18
+ end
19
+
20
+ describe '#authenticate_user!' do
21
+ before(:each) do
22
+ allow(@controller).to receive(:params) { { api_key: '12345' } }
23
+ allow(@controller).to receive(:request) { double(:request, ip: '1.1.1.1', format: :json) }
24
+ @user = FactoryGirl.create(:user)
25
+ allow(@user).to receive(:update_daily_activity) { nil }
26
+ allow(@controller).to receive(:current_user) { @user }
27
+ end
28
+
29
+ it 'should set the current_user' do
30
+ @controller.authenticate_user!
31
+ expect(@controller.current_user).to eq @user
32
+ end
33
+
34
+ it 'updates the tracked fields for the user' do
35
+ expect(@user).to receive(:update_tracked_fields)
36
+ @controller.authenticate_user!
37
+ end
38
+
39
+ it 'updates the daily activity for the user' do
40
+ expect(@user).to receive(:update_daily_activity)
41
+ @controller.authenticate_user!
42
+ end
43
+
44
+ it 'verifies the user limits' do
45
+ expect(@user).to receive(:check_daily_requests)
46
+ @controller.authenticate_user!
47
+ end
48
+
49
+ it 'saves the user' do
50
+ expect(@user).to receive(:save)
51
+ @controller.authenticate_user!
52
+ end
53
+
54
+ context 'user over daily requests limit' do
55
+ it 'returns a error message' do
56
+ allow(@user).to receive(:over_limit?) { true }
57
+ expect(@controller).to receive(:render).with({ json: { errors: 'You have reached your maximum number of api requests today' }, status: :forbidden })
58
+ @controller.authenticate_user!
59
+ end
60
+ end
61
+
62
+ context 'api_key not found' do
63
+ it 'returns a error message' do
64
+ allow(@controller).to receive(:current_user) { nil }
65
+ expect(@controller).to receive(:render).with({ json: { errors: 'Invalid API Key' }, status: :forbidden})
66
+ @controller.authenticate_user!
67
+ end
68
+ end
69
+
70
+ context 'api key not provided' do
71
+ it 'returns a error message' do
72
+ allow(@controller).to receive(:params) { { api_key: ''} }
73
+ expect(@controller).to receive(:render).with({ json: { errors: 'Please provide a API Key' }, status: :forbidden })
74
+ @controller.authenticate_user!
75
+ end
76
+ end
77
+
78
+ context 'wrong format' do
79
+ it 'returns a error message in the default format' do
80
+ allow(@controller).to receive(:params) { {} }
81
+ allow(@controller).to receive(:request) { double(:request, format: :css).as_null_object }
82
+ expect(@controller).to receive(:render).with({ json: { errors: 'Please provide a API Key' }, status: :forbidden })
83
+ @controller.authenticate_user!
84
+ end
85
+ end
86
+ end
87
+
88
+ describe "#authenticate_admin!" do
89
+ before {
90
+ allow(@controller).to receive(:request) { double(:request, :ip => "1.1.1.1", :format => :json)}
91
+ }
92
+
93
+ it "returns true when the admin authentication was successful" do
94
+ allow(@controller).to receive(:current_user) { double(:user, admin?: true, role: 'admin') }
95
+ expect(@controller.authenticate_admin!).to be_truthy
96
+ end
97
+
98
+ it "returns false when the admin authentication was not successful" do
99
+ allow(@controller).to receive(:current_user) { double(:user, admin?: false, role: 'developer') }
100
+ expect(@controller.authenticate_admin!).to be_falsey
101
+ end
102
+ end
103
+
104
+ describe "#find_user_set" do
105
+ context "current_user is a admin" do
106
+ before :each do
107
+ @user_set = double(:set).as_null_object
108
+ allow(@controller).to receive(:current_user) { double(:user, admin?: true, role: 'admin').as_null_object }
109
+ allow(@controller).to receive(:params) { {:id => "12345"} }
110
+ end
111
+
112
+ it "finds the set even if it's not owned by the current_user" do
113
+ expect(UserSet).to receive(:custom_find).with("12345") { @user_set }
114
+ @controller.find_user_set
115
+ end
116
+ end
117
+
118
+ # TODO: Move this to the app
119
+ # context "current_user has dnz role" do
120
+ # before :each do
121
+ # @user_set = double(:set).as_null_object
122
+ # allow(@controller).to receive(:current_user) { double(:user, dnz?: true).as_null_object }
123
+ # allow(@controller).to receive(:params) { {:id => "12345"} }
124
+ # end
125
+
126
+ # it "finds the set even if it's not owned by the current_user" do
127
+ # expect(UserSet).to receive(:custom_find).with("12345") { @user_set }
128
+ # @controller.find_user_set
129
+ # end
130
+ # end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,83 @@
1
+ # The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
2
+ # and is licensed under the GNU General Public License, version 3.
3
+ # One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
4
+ #
5
+ # Supplejack was created by DigitalNZ at the National Library of NZ and
6
+ # the Department of Internal Affairs. http://digitalnz.org/supplejack
7
+
8
+ require 'spec_helper'
9
+
10
+ module SupplejackApi
11
+ describe ConceptsController, type: :controller do
12
+ routes { SupplejackApi::Engine.routes }
13
+
14
+ before { @user = FactoryGirl.create(:user, authentication_token: 'apikey', role: 'developer') }
15
+
16
+ describe 'GET show' do
17
+ before {
18
+ @concept = FactoryGirl.create(:concept)
19
+ allow(controller).to receive(:current_user) { @user }
20
+ }
21
+
22
+ it 'should find the concept and assign it' do
23
+ expect(Concept).to receive(:custom_find).with('123', @user, {}).and_return(@concept)
24
+ get :show, id: 123, search: {}, api_key: 'abc123', format: "json"
25
+ expect(assigns(:concept)).to eq(@concept)
26
+ end
27
+
28
+ it 'renders a error when records is not found' do
29
+ allow(Concept).to receive(:custom_find).and_raise(Mongoid::Errors::DocumentNotFound.new(Concept, ['123'], ['123']))
30
+ get :show, id: 123, search: {}, api_key: 'abc123', :format => 'json'
31
+ expect(response.body).to eq({:errors => 'Concept with ID 123 was not found'}.to_json)
32
+ end
33
+ end
34
+
35
+ # describe 'GET index' do
36
+ # before {
37
+ # @search = ConceptSearch.new
38
+ # allow(@search).to receive(:valid?) { false }
39
+ # allow(@search).to receive(:new) { @search }
40
+ # }
41
+
42
+ # it 'initializes a new search instance' do
43
+ # expect(ConceptSearch).to receive(:new).with(hash_including(text: 'dogs')).and_return(@search)
44
+ # get :index, api_key: 'apikey', text: 'dogs'
45
+ # expect(assigns(:search)).to eq(@search)
46
+ # end
47
+
48
+ # it 'sets the request url on search object' do
49
+ # allow_any_instance_of(ConceptSearch).to receive(:valid?) { false }
50
+ # allow(controller.request).to receive(:original_url).and_return('http://foo.com/blah')
51
+ # get :index, api_key: 'apikey', format: "json"
52
+ # expect(assigns(:search).request_url).to eq 'http://foo.com/blah'
53
+ # end
54
+
55
+ # it 'should set the current_user on the search' do
56
+ # allow_any_instance_of(ConceptSearch).to receive(:valid?) { false }
57
+ # get :index, api_key: 'apikey', format: "json"
58
+ # expect(assigns(:search).scope).to eq @user
59
+ # end
60
+
61
+ # it 'renders a the solr error when the query is invalid' do
62
+ # allow(ConceptSearchSerializer).to receive(:new).and_raise(RSolr::Error::Http.new({}, {}))
63
+ # allow(controller).to receive(:solr_error_message).and_return('Error')
64
+ # get :index, api_key: 'apikey', format: 'json'
65
+ # expect(response.body).to eq({errors: 'Error'}.to_json)
66
+ # end
67
+
68
+ # it 'renders a error when the requested field doesn\'t exist' do
69
+ # allow(ConceptSearchSerializer).to receive(:new).and_raise(Sunspot::UnrecognizedFieldError.new('No field configured for Concept with name "something"'))
70
+ # get :index, api_key: 'apikey', format: 'json', and: { something: true }
71
+ # expect(response.body).to eq({ errors: 'No field configured for Concept with name "something"' }.to_json)
72
+ # end
73
+
74
+ # it 'should return an error if the search request is invalid' do
75
+ # allow_any_instance_of(ConceptSearch).to receive(:valid?) { false }
76
+ # allow_any_instance_of(ConceptSearch).to receive(:errors) { ['The page parameter can not exceed 100,000'] }
77
+ # get :index, api_key: 'apikey', page: 100001, format: 'json'
78
+ # expect(response.body).to eq({ errors: ['The page parameter can not exceed 100,000'] }.to_json)
79
+ # end
80
+ # end
81
+
82
+ end
83
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe ApplicationController, type: :controller do
4
+
5
+ class DummySearch < BasicObject
6
+ def initialize(results)
7
+ @results = results
8
+ end
9
+
10
+ def results
11
+ @results
12
+ end
13
+
14
+ def valid?
15
+ true
16
+ end
17
+ end
18
+
19
+ controller do
20
+ include SupplejackApi::Concerns::RecordsControllerMetrics
21
+
22
+ def index
23
+ @search = DummySearch.new(SupplejackApi::Record.all.to_a)
24
+ render nothing: true
25
+ end
26
+
27
+ def show
28
+ @record = SupplejackApi::Record.first
29
+ render nothing: true
30
+ end
31
+ end
32
+
33
+ before do
34
+ create(:record_with_fragment)
35
+ end
36
+
37
+ describe 'GET#index' do
38
+ it 'creates an interation model when ignore_metrics is not set' do
39
+ get :index
40
+ expect(SupplejackApi::InteractionModels::Record.first.request_type).to eq "search"
41
+ end
42
+
43
+ it 'does not create an interaction model when ignore_metrics :true' do
44
+ get :index, ignore_metrics: true
45
+ expect(SupplejackApi::InteractionModels::Record.count).to eq 0
46
+ end
47
+ end
48
+
49
+ describe 'GET#show' do
50
+ it 'creates an interaction model when ignore_metrics is not set' do
51
+ get :show, id: 1
52
+ expect(SupplejackApi::InteractionModels::Record.first.request_type).to eq "get"
53
+ end
54
+
55
+ it 'does not create an interaction model when ignore_metrics :true' do
56
+ get :show, id: 1, ignore_metrics: true
57
+ expect(SupplejackApi::InteractionModels::Record.count).to eq 0
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,57 @@
1
+ # The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
2
+ # and is licensed under the GNU General Public License, version 3.
3
+ # One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
4
+ #
5
+ # Supplejack was created by DigitalNZ at the National Library of NZ and
6
+ # the Department of Internal Affairs. http://digitalnz.org/supplejack
7
+
8
+ require "spec_helper"
9
+
10
+ module SupplejackApi
11
+ describe Harvester::ConceptsController, type: :controller do
12
+ # routes { SupplejackApi::Engine.routes }
13
+
14
+ # let(:concept) { FactoryGirl.build(:concept) }
15
+
16
+ # describe "POST create" do
17
+ # before(:each) do
18
+ # allow(Concept).to receive(:find_or_initialize_by_identifier) { concept }
19
+ # end
20
+
21
+ # context "preview is false" do
22
+ # it "finds or initializes a concept by identifier" do
23
+ # expect(Concept).to receive(:find_or_initialize_by_identifier).with("internal_identifier" => "1234") { concept }
24
+ # post :create, concept: {internal_identifier: "1234"}
25
+ # expect(assigns(:concept)).to eq concept
26
+ # end
27
+ # end
28
+
29
+ # context "preview is true" do
30
+ # it "finds or initializes a preview record by identifier" do
31
+ # expect(PreviewRecord).to receive(:find_or_initialize_by_identifier).with("internal_identifier" => "1234") { concept }
32
+ # post :create, concept: {internal_identifier: "1234"}, preview: true
33
+ # expect(assigns(:concept)).to eq concept
34
+ # end
35
+ # end
36
+ # end
37
+
38
+ # describe "PUT update" do
39
+ # let(:concept) { double(:concept).as_null_object }
40
+
41
+ # before do
42
+ # allow(Concept).to receive(:custom_find) { concept }
43
+ # end
44
+
45
+ # it 'finds the record and assigns it' do
46
+ # expect(Concept).to receive(:custom_find).with('123', nil, {status: :all}) { concept }
47
+ # put :update, id: 123, concept: { status: 'supressed' }, format: :json
48
+ # expect(assigns(:concept)).to eq(concept)
49
+ # end
50
+
51
+ # it "updates the status of the record" do
52
+ # expect(concept).to receive(:update_attribute).with(:status, 'supressed')
53
+ # put :update, id: 123, concept: { status: 'supressed' }, format: :json
54
+ # end
55
+ # end
56
+ end
57
+ end
@@ -0,0 +1,138 @@
1
+ # The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
2
+ # and is licensed under the GNU General Public License, version 3.
3
+ # One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
4
+ #
5
+ # Supplejack was created by DigitalNZ at the National Library of NZ and
6
+ # the Department of Internal Affairs. http://digitalnz.org/supplejack
7
+
8
+ require "spec_helper"
9
+
10
+ module SupplejackApi
11
+ describe Harvester::RecordsController, type: :controller do
12
+ routes { SupplejackApi::Engine.routes }
13
+
14
+ let(:record) { FactoryGirl.build(:record) }
15
+
16
+ describe "POST create" do
17
+ before(:each) do
18
+ allow(Record).to receive(:find_or_initialize_by_identifier) { record }
19
+ end
20
+
21
+ context "preview is false" do
22
+ it "finds or initializes a record by identifier" do
23
+ expect(Record).to receive(:find_or_initialize_by_identifier).with("internal_identifier" => "1234") { record }
24
+ post :create, record: {internal_identifier: "1234"}
25
+ expect(assigns(:record)).to eq record
26
+ end
27
+ end
28
+
29
+ context "preview is true" do
30
+ it "finds or initializes a preview record by identifier" do
31
+ expect(PreviewRecord).to receive(:find_or_initialize_by_identifier).with("internal_identifier" => "1234") { record }
32
+ post :create, record: {internal_identifier: "1234"}, preview: true
33
+ expect(assigns(:record)).to eq record
34
+ end
35
+ end
36
+
37
+ context "record has a priority other then 0" do
38
+ it "creates or updates the fragment" do
39
+ rec = {
40
+ "internal_identifier" => "1234",
41
+ "title" => "Hi",
42
+ "priority" => "10"
43
+ }
44
+ expect(record).to receive(:create_or_update_fragment).with(rec)
45
+ post :create, record: rec
46
+ end
47
+ end
48
+
49
+ it "sets the status based on the required fragments" do
50
+ expect(record).to receive(:set_status).with(['ndha_rights'])
51
+ post :create, record: {"internal_identifier" => "1234"}, required_fragments: ['ndha_rights']
52
+ end
53
+
54
+ it "saves the record" do
55
+ expect(record).to receive(:save)
56
+ post :create, record: {"internal_identifier" => "1234"}
57
+ end
58
+
59
+ it "unsets null fields" do
60
+ expect(record).to receive(:unset_null_fields)
61
+ post :create, record: {"internal_identifier" => "1234"}
62
+ end
63
+ end
64
+
65
+ describe "PUT delete" do
66
+ it "should find the record by internal_identifier" do
67
+ expect(Record).to receive(:where).with({internal_identifier: "abc123"}) { [record] }
68
+ put :delete, id: "abc123"
69
+ expect(assigns(:record)).to eq record
70
+ end
71
+
72
+ it "should update the records status attribute to deleted" do
73
+ allow(Record).to receive(:where) { [record] }
74
+ expect(record).to receive(:update_attribute).with(:status, "deleted")
75
+ put :delete, id: "abc123"
76
+ end
77
+
78
+ it "handles a nil record" do
79
+ allow(Record).to receive(:where) { [] }
80
+ expect { put :delete, id: "abc123" }.to_not raise_exception
81
+ end
82
+ end
83
+
84
+ describe "DELETE flush" do
85
+ before do
86
+ allow(Record).to receive(:flush_old_records)
87
+ end
88
+
89
+ it "calls flush_old_records" do
90
+ expect(Resque).to receive(:enqueue).with(FlushOldRecordsWorker, 'tapuhi', 'abc123')
91
+ delete :flush, source_id: 'tapuhi', job_id: 'abc123'
92
+ end
93
+
94
+ it "returns a 204" do
95
+ delete :flush, source_id: 'tapuhi', job_id: 'abc123'
96
+ expect(response.code).to eq '204'
97
+ end
98
+ end
99
+
100
+ describe 'GET #show' do
101
+ it 'should find the record by internal_identifier' do
102
+ expect(Record).to receive(:where).with({ record_id: 'abc123' }) { [record] }
103
+ get :show, id: 'abc123'
104
+ end
105
+
106
+ it 'should assign the record to @record' do
107
+ allow(Record).to receive(:where) { [record] }
108
+ get :show, id: 'abc123'
109
+ expect(assigns(:record)).to eq record
110
+ end
111
+
112
+ it 'should handle a nil record' do
113
+ allow(Record).to receive(:where) { [] }
114
+ expect { get :show, id: 'abc123' }.to_not raise_exception
115
+ end
116
+ end
117
+
118
+ describe "PUT update" do
119
+ let(:record) { double(:record).as_null_object }
120
+
121
+ before do
122
+ allow(controller).to receive(:authenticate_user!) { true }
123
+ allow(Record).to receive(:custom_find) { record }
124
+ end
125
+
126
+ it 'finds the record and asigns it' do
127
+ expect(Record).to receive(:custom_find).with('123', nil, {status: :all}) { record }
128
+ put :update, id: 123, record: { status: 'supressed' }, format: :json
129
+ expect(assigns(:record)).to eq(record)
130
+ end
131
+
132
+ it "updates the status of the record" do
133
+ expect(record).to receive(:update_attribute).with(:status, 'supressed')
134
+ put :update, id: 123, record: { status: 'supressed' }, format: :json
135
+ end
136
+ end
137
+ end
138
+ end