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,90 @@
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 SearchSerializer do
12
+
13
+ def facet_row(value, count)
14
+ double(:facet_row, value: value, count: count)
15
+ end
16
+
17
+ def facet_objects
18
+ [
19
+ double(:facet, name: :full_name ,rows: [
20
+ facet_row('Nick Miller', 123),
21
+ facet_row('Winston Bishop', 10)
22
+ ]),
23
+ double(:facet, name: :coffee ,rows: [
24
+ facet_row('Dark', 3022),
25
+ facet_row('Mid', 104),
26
+ facet_row('Light', 11)
27
+ ])
28
+ ]
29
+ end
30
+
31
+ before {
32
+ @facets = facet_objects
33
+ @search = double(:search, results: [], total: 10, per_page: 20, page: 1, facets: @facets,
34
+ request_url: "http://foo.com/records", collation: 'whanganui').as_null_object
35
+
36
+ # Test using RecordSearchSerializer
37
+ @serializer = RecordSearchSerializer.new(@search)
38
+ }
39
+
40
+ describe '#json_facets' do
41
+ it 'returns a hash of facets' do
42
+ expect(@serializer.json_facets).to be_a(Hash)
43
+ end
44
+
45
+ it 'should have two facets' do
46
+ expect(@serializer.json_facets.size).to eq(2)
47
+ end
48
+
49
+ it 'returns facets with name as key' do
50
+ expect(@serializer.json_facets.keys).to include(:full_name, :coffee)
51
+ end
52
+
53
+ it 'returns each facet as a hash' do
54
+ expect(@serializer.json_facets[:full_name]).to be_a(Hash)
55
+ end
56
+
57
+ it 'returns facet-values and their counts' do
58
+ expect(@serializer.json_facets[:full_name]).to include('Nick Miller' => 123, 'Winston Bishop' => 10)
59
+ end
60
+ end
61
+
62
+ describe '#xml_facets' do
63
+ it 'returns a array of facets' do
64
+ expect(@serializer.xml_facets).to be_a(Array)
65
+ end
66
+
67
+ it 'should have two facets' do
68
+ expect(@serializer.xml_facets.size).to eq(2)
69
+ end
70
+
71
+ it 'includes the name of each facet' do
72
+ facet = @serializer.xml_facets.first
73
+ expect(facet[:name]).to eq 'full_name'
74
+ end
75
+
76
+ it 'each facet should have a array of values with name and count' do
77
+ facet = @serializer.xml_facets.first
78
+ expect(facet[:values]).to eq [{ name: 'Nick Miller', count: 123 }, { name: 'Winston Bishop', count: 10 }]
79
+ end
80
+ end
81
+
82
+ describe '#to_json' do
83
+ # it 'wraps everything in a jsonp function' do
84
+ # allow(@search).to receive(:jsonp) { 'SupplejackApi.function' }
85
+ # expect(@serializer.to_json).to match(/^SupplejackApi.function\(.*\)$/)
86
+ # end
87
+ end
88
+ end
89
+
90
+ end
@@ -0,0 +1,22 @@
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 UserSerializer do
12
+ let(:user) { User.new(name: 'Fed', email: 'fed@boost.com', username: 'fede', authentication_token: '12345') }
13
+ let(:serializer) { UserSerializer.new(user) }
14
+
15
+ it 'includes the basic user information' do
16
+ allow(user).to receive(:id) { 'abc1234567' }
17
+ expect(serializer.as_json).to eq({user: {id: 'abc1234567', name: 'Fed', email: 'fed@boost.com', username: 'fede', api_key: '12345'}})
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,96 @@
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
+ class FakeSet
12
+ ATTRIBUTES = [:id, :name, :description, :tags, :count, :privacy]
13
+ def initialize(attributes={})
14
+ @attributes = attributes
15
+ end
16
+
17
+ def read_attribute_for_serialization(method)
18
+ @attributes[method]
19
+ end
20
+
21
+ def method_missing(method, *args, &block)
22
+ @attributes[method]
23
+ end
24
+ end
25
+
26
+ describe UserSetSerializer do
27
+ before :each do
28
+ @user_set = FactoryGirl.create(:user_set, name: "Dogs and cats", priority: 5)
29
+ @user_set.set_items.build(record_id: 1)
30
+ @user_set.save
31
+ end
32
+
33
+ context "with user's name" do
34
+ before :each do
35
+ allow(@user_set).to receive(:user) { double(:user, name: "John", api_key: "12345").as_null_object }
36
+ end
37
+
38
+ it "should include the user's name" do
39
+ serializer = UserSetSerializer.new(@user_set, user: true, items: false)
40
+ expect(serializer.as_json[:set]).to include({user: {name: "John"}})
41
+ end
42
+
43
+ it "includes the user api key when the user option is an admin" do
44
+ allow(RecordSchema).to receive(:roles) { { admin: double(:admin, admin: true) } }
45
+ admin = User.new(role: "admin")
46
+ serializer = UserSetSerializer.new(@user_set, user: admin, items: false)
47
+ expect(serializer.as_json[:set]).to include({user: {name: "John", api_key: "12345"}})
48
+ end
49
+ end
50
+
51
+ context "requesting a single item" do
52
+ it "should only fetch 1 record" do
53
+ serializer = UserSetSerializer.new(@user_set, featured: true, items: false)
54
+ expect(@user_set).to receive(:items_with_records).with(1) { [] }
55
+ serializer.as_json
56
+ end
57
+ end
58
+
59
+ context "not requesting set items" do
60
+ it "only returns the name, id, count and priority" do
61
+ serializer = UserSetSerializer.new(@user_set, items: false)
62
+ expect(serializer.as_json[:set]).to include({id: @user_set.id, name: "Dogs and cats", count: 0, priority: 5})
63
+ end
64
+
65
+ it "includes the set items without extra info" do
66
+ serializer = UserSetSerializer.new(@user_set, items: false)
67
+ expect(serializer.as_json[:set]).to include({records: [{record_id: 1, position: 1}]})
68
+ end
69
+ end
70
+
71
+ context "requesting set items" do
72
+ before(:each) do
73
+ @user_set = FakeSet.new(id: "1", name: "Dogs and cats", description: "Ugly dogs and cats", tags: ["dog"], count:1, privacy:"hidden", featured: true, approved: true)
74
+ allow(@user_set).to receive(:items_with_records){[double(:item, record_id: 5, position: 1, name: "John Smith", address: "Wellington").as_null_object]}
75
+ allow(@user_set).to receive(:user) { double(:user, name: "Tony").as_null_object }
76
+ end
77
+
78
+ let(:serializer) { UserSetSerializer.new(@user_set) }
79
+
80
+ it "returns the full set information" do
81
+ expect(serializer.as_json[:set]).to include({id: "1", name: "Dogs and cats", description: "Ugly dogs and cats", tags: ["dog"], count: 1, privacy: "hidden", featured: true, approved: true })
82
+ end
83
+
84
+ it "returns the set items with the records information" do
85
+ expect(serializer.as_json[:set][:records]).to eq [{record_id: 5, position: 1, name: "John Smith", address: "Wellington"}]
86
+ end
87
+
88
+ it "returns the user information" do
89
+ serializer = UserSetSerializer.new(@user_set, user: true)
90
+ expect(serializer.as_json[:set][:user]).to eq({name: "Tony"})
91
+ end
92
+ end
93
+
94
+ end
95
+
96
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ module MetricsApi
4
+ module V3
5
+ describe Api do
6
+ let!(:daily_item_metric){create(:daily_item_metric)}
7
+ let(:api) do
8
+ Api.new({
9
+ start_date: @start_date,
10
+ end_date: @end_date,
11
+ metrics: "usage,display_collection"
12
+ })
13
+ end
14
+
15
+ before do
16
+ @start_date = Date.current
17
+ @end_date = Date.current
18
+
19
+ 5.times.map{create(:usage_metrics)}
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ module MetricsApi
4
+ module V3
5
+ module Endpoints
6
+ describe Facets, search: true, slow: true do
7
+ let(:facet) {Facets.new(nil)}
8
+
9
+ before do
10
+ Sunspot.session = Sunspot.session.original_session
11
+ end
12
+
13
+ describe "#call" do
14
+ it 'returns a list of all facets' do
15
+ create(:record_with_fragment, display_collection: 'dc1')
16
+ create(:record_with_fragment, display_collection: 'dc2')
17
+ Sunspot.commit
18
+
19
+ expect(facet.call).to eq(['dc1', 'dc2'])
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ module MetricsApi
4
+ module V3
5
+ module Endpoints
6
+ describe Global do
7
+ let(:global) {Global.new({})}
8
+
9
+ describe "#call" do
10
+ it "returns an array of hashes representing the DailyMetrics for the supplied date range" do
11
+ create(:daily_metrics, date: Date.today, total_public_sets: 10)
12
+
13
+ expect(global.call).to eq([{
14
+ day: Date.today,
15
+ total_public_sets: 10
16
+ }])
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ module MetricsApi
4
+ module V3
5
+ module Endpoints
6
+ describe Root do
7
+ let(:extended) do
8
+ Root.new({
9
+ facets: @facets,
10
+ start_date: @start_date,
11
+ end_date: @end_date,
12
+ metrics: @metrics
13
+ })
14
+ end
15
+
16
+ before do
17
+ @facets = 'dc1,dc2'
18
+ @start_date = Date.current.strftime
19
+ @end_date = Date.current.strftime
20
+ @metrics = 'view,record'
21
+
22
+ create(:faceted_metrics, name: 'dc1')
23
+ create(:faceted_metrics, name: 'dc2')
24
+ create(:usage_metrics, record_field_value: 'dc1', created_at: Date.current.midday)
25
+ create(:usage_metrics, record_field_value: 'dc2', created_at: Date.current.midday)
26
+ end
27
+
28
+ describe "#call" do
29
+ it 'retrieves a range of metrics' do
30
+ result = extended.call
31
+
32
+ expect(result.first[:date]).to eq(Date.current)
33
+ expect(result.first["record"].length).to eq(2)
34
+ expect(result.first["view"].length).to eq(2)
35
+ end
36
+
37
+ it 'filters metrics based on the facets argument' do
38
+ @facets = 'dc1'
39
+ result = extended.call
40
+
41
+ expect(result.first[:date]).to eq(Date.current)
42
+ expect(result.first["record"].length).to eq(1)
43
+ expect(result.first["view"].length).to eq(1)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ module MetricsApi
4
+ module V3
5
+ module Presenters
6
+ describe ExtendedMetadata do
7
+ let(:presenter){ExtendedMetadata.new(@models, Date.yesterday, Date.current)}
8
+
9
+ before do
10
+ @models = [
11
+ {
12
+ metric: 'view',
13
+ models: {
14
+ Date.current => [
15
+ create(:usage_metrics),
16
+ create(:usage_metrics)
17
+ ],
18
+ Date.yesterday => [
19
+ create(:usage_metrics, created_at: Date.yesterday.midday)
20
+ ]
21
+ }
22
+ },
23
+ {
24
+ metric: 'record',
25
+ models: {
26
+ Date.current => [
27
+ create(:faceted_metrics),
28
+ ],
29
+ Date.yesterday => [
30
+ create(:faceted_metrics, date: Date.yesterday)
31
+ ]
32
+ }
33
+ }
34
+ ]
35
+ end
36
+
37
+ it 'presents them' do
38
+ json = presenter.to_json
39
+
40
+ expect(json.length).to eq(2)
41
+ expect(json.first[:date]).to eq(Date.yesterday)
42
+ expect(json.last[:date]).to eq(Date.current)
43
+ expect(json.first['record'].length).to eq(1)
44
+ expect(json.first['view'].length).to eq(1)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,70 @@
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
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
9
+ ENV['RAILS_ENV'] ||= 'test'
10
+
11
+ begin
12
+ require 'pry'
13
+ rescue LoadError
14
+ end
15
+
16
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
17
+ require 'rails/application'
18
+ require 'rails/mongoid'
19
+ require 'rspec/rails'
20
+ require 'factory_girl_rails'
21
+ require 'timecop'
22
+ require 'sunspot_matchers'
23
+ require 'mongoid-rspec'
24
+ require 'simplecov'
25
+ require 'rspec/active_model/mocks'
26
+ require 'sunspot_test/rspec'
27
+
28
+ require "codeclimate-test-reporter"
29
+ CodeClimate::TestReporter.start
30
+ # SimpleCov.start
31
+
32
+ Rails.backtrace_cleaner.remove_silencers!
33
+
34
+ # Load support files
35
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
36
+
37
+ RSpec.configure do |config|
38
+ config.mock_with :rspec
39
+ config.infer_spec_type_from_file_location!
40
+ config.infer_base_class_for_anonymous_controllers = false
41
+ config.order = "random"
42
+ # Ignore focus on CI
43
+ config.filter_run focus: true unless ENV['CI']
44
+ config.run_all_when_everything_filtered = true
45
+
46
+ require 'database_cleaner'
47
+ config.before(:suite) do
48
+ DatabaseCleaner[:mongoid].strategy = :truncation
49
+ end
50
+
51
+ config.before(:each) do
52
+ # We have added this as database cleaner appears to not be working for mongo
53
+ SupplejackApi::Record.destroy_all
54
+ SupplejackApi::Concept.destroy_all
55
+ DatabaseCleaner.clean
56
+ Sunspot.session = Sunspot::Rails::StubSessionProxy.new(Sunspot.session)
57
+ Timecop.return
58
+
59
+ %w(record concept).each do |model|
60
+ klass = "#{model.capitalize}Schema".constantize
61
+
62
+ allow(klass).to receive(:default_role) { double(:role, name: :developer) }
63
+ allow(klass).to receive_message_chain(:roles, :keys) { [:developer] }
64
+ end
65
+ end
66
+
67
+ config.include SunspotMatchers
68
+ config.include Mongoid::Matchers
69
+ config.include FactoryGirl::Syntax::Methods
70
+ end