umlaut 3.0.5 → 3.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (385) hide show
  1. checksums.yaml +15 -0
  2. data/README.md +48 -5
  3. data/app/assets/images/umlaut_icons.png +0 -0
  4. data/app/assets/images/umlaut_icons/famfamfam-book-go.png +0 -0
  5. data/app/assets/images/{famfamfam/book_open.png → umlaut_icons/famfamfam-book-open.png} +0 -0
  6. data/app/assets/images/umlaut_icons/famfamfam-book.png +0 -0
  7. data/app/assets/images/{famfamfam/cross.png → umlaut_icons/famfamfam-cross.png} +0 -0
  8. data/app/assets/images/umlaut_icons/famfamfam-error.png +0 -0
  9. data/app/assets/images/umlaut_icons/famfamfam-help.png +0 -0
  10. data/app/assets/images/umlaut_icons/famfamfam-information.png +0 -0
  11. data/app/assets/images/umlaut_icons/famfamfam-link.png +0 -0
  12. data/app/assets/images/umlaut_icons/famfamfam-page-sound.png +0 -0
  13. data/app/assets/images/umlaut_icons/famfamfam-page-text.png +0 -0
  14. data/app/assets/images/umlaut_icons/famfamfam-page-up.png +0 -0
  15. data/app/assets/images/{famfamfam/page_white.png → umlaut_icons/famfamfam-page-white.png} +0 -0
  16. data/app/assets/images/{famfamfam/readme.html → umlaut_icons/famfamfam-readme.html} +0 -0
  17. data/app/assets/images/{famfamfam/tiny_cross.png → umlaut_icons/famfamfam-tiny-cross.png} +0 -0
  18. data/app/assets/images/{list_closed.png → umlaut_icons/list-closed.png} +0 -0
  19. data/app/assets/images/{list_open.png → umlaut_icons/list-open.png} +0 -0
  20. data/app/assets/javascripts/umlaut.js +5 -4
  21. data/app/assets/javascripts/umlaut/ajax_windows.js +41 -23
  22. data/app/assets/javascripts/umlaut/expand_contract_toggle.js +21 -29
  23. data/app/assets/javascripts/umlaut/load_permalink.js +26 -0
  24. data/app/assets/javascripts/umlaut/search_autocomplete.js +103 -44
  25. data/app/assets/stylesheets/umlaut.css.scss +19 -0
  26. data/app/assets/stylesheets/umlaut/_admin.scss +14 -0
  27. data/app/assets/stylesheets/umlaut/_az.scss +29 -0
  28. data/app/assets/stylesheets/umlaut/_forms.scss +31 -0
  29. data/app/assets/stylesheets/umlaut/_icons.scss +64 -0
  30. data/app/assets/stylesheets/umlaut/_layout.scss +52 -0
  31. data/app/assets/stylesheets/umlaut/_misc.scss +59 -0
  32. data/app/assets/stylesheets/umlaut/_mixins.scss +65 -0
  33. data/app/assets/stylesheets/umlaut/_modal.scss +4 -0
  34. data/app/assets/stylesheets/umlaut/_resolve.scss +308 -0
  35. data/app/assets/stylesheets/umlaut/_results.scss +34 -0
  36. data/app/assets/stylesheets/umlaut/_search.scss +14 -0
  37. data/app/assets/stylesheets/umlaut/_spinner.scss +12 -0
  38. data/app/assets/stylesheets/umlaut/_variables.scss +72 -0
  39. data/app/controllers/export_email_controller.rb +22 -39
  40. data/app/controllers/journal_tocs_controller +90 -0
  41. data/app/controllers/js_helper_controller.rb +2 -3
  42. data/app/controllers/link_router_controller.rb +32 -43
  43. data/app/controllers/open_search_controller.rb +3 -4
  44. data/app/controllers/resolve_controller.rb +68 -107
  45. data/app/controllers/resource_controller.rb +14 -20
  46. data/app/controllers/search_controller.rb +75 -94
  47. data/app/controllers/search_methods/README.md +28 -0
  48. data/app/controllers/search_methods/sfx4.rb +50 -119
  49. data/app/controllers/search_methods/sfx4_solr/README.md +57 -0
  50. data/app/controllers/search_methods/sfx4_solr/local.rb +40 -0
  51. data/app/controllers/search_methods/sfx4_solr/searcher.rb +90 -0
  52. data/app/controllers/store_controller.rb +24 -30
  53. data/app/controllers/umlaut/controller_behavior.rb +45 -17
  54. data/app/controllers/umlaut/error_handling.rb +20 -25
  55. data/{lib → app/controllers}/umlaut_configurable.rb +35 -21
  56. data/app/controllers/umlaut_controller.rb +43 -46
  57. data/app/helpers/emailer_helper.rb +9 -16
  58. data/app/helpers/export_email_helper.rb +8 -8
  59. data/app/helpers/open_search_helper.rb +2 -3
  60. data/app/helpers/resolve_helper.rb +130 -100
  61. data/app/helpers/search_helper.rb +17 -5
  62. data/app/helpers/umlaut/footer_helper.rb +1 -1
  63. data/app/helpers/umlaut/helper.rb +34 -0
  64. data/app/helpers/umlaut/html_head_helper.rb +12 -21
  65. data/{lib → app/mixin_logic}/marc_helper.rb +1 -1
  66. data/{lib → app/mixin_logic}/metadata_helper.rb +6 -5
  67. data/{lib → app/mixin_logic}/umlaut_http.rb +0 -0
  68. data/{lib → app/mixin_logic}/xml_schema_helper.rb +0 -0
  69. data/app/models/collection.rb +97 -95
  70. data/{lib → app/models}/hip3/bib.rb +0 -0
  71. data/{lib → app/models}/hip3/bib_searcher.rb +0 -0
  72. data/{lib → app/models}/hip3/custom_field_lookup.rb +0 -0
  73. data/{lib → app/models}/hip3/holding.rb +0 -0
  74. data/{lib → app/models}/hip3/item.rb +0 -0
  75. data/{lib → app/models}/hip3/receipt.rb +0 -0
  76. data/{lib → app/models}/hip3/serial_copy.rb +0 -0
  77. data/app/models/permalink.rb +3 -8
  78. data/app/models/referent.rb +29 -21
  79. data/app/models/request.rb +19 -8
  80. data/app/models/service_response.rb +24 -3
  81. data/app/models/service_store.rb +108 -39
  82. data/app/models/service_store.rb-NEW +73 -0
  83. data/app/models/service_wave.rb +2 -0
  84. data/app/models/sfx4/abstract/README.md +68 -0
  85. data/app/models/sfx4/abstract/az_extra_info.rb +44 -0
  86. data/app/models/sfx4/abstract/az_letter_group.rb +24 -0
  87. data/app/models/sfx4/abstract/az_title.rb +96 -0
  88. data/app/models/sfx4/abstract/az_title_search.rb +24 -0
  89. data/app/models/sfx4/abstract/base.rb +77 -0
  90. data/app/models/sfx4/global/base.rb +24 -0
  91. data/app/models/sfx4/global/kb_objects.rb +34 -0
  92. data/app/models/sfx4/local/az_extra_info.rb +7 -0
  93. data/app/models/sfx4/local/az_letter_group.rb +7 -0
  94. data/app/models/sfx4/local/az_title.rb +7 -0
  95. data/app/models/sfx4/local/az_title_search.rb +7 -0
  96. data/app/models/sfx4/local/base.rb +26 -0
  97. data/{lib → app/presentation}/section_renderer.rb +0 -12
  98. data/app/referent_filters/dissertation_catch.rb +67 -0
  99. data/{lib → app/referent_filters}/referent_filter.rb +0 -0
  100. data/{lib → app}/service_adaptors/ajax_export.rb +0 -0
  101. data/{lib → app}/service_adaptors/amazon.rb +2 -0
  102. data/{lib → app}/service_adaptors/blacklight.rb +22 -10
  103. data/{lib → app}/service_adaptors/book_finder.rb +0 -0
  104. data/{lib → app}/service_adaptors/bx.rb +0 -0
  105. data/{lib → app}/service_adaptors/cover_thing.rb +0 -0
  106. data/{lib → app}/service_adaptors/dummy_service.rb +0 -0
  107. data/{lib → app}/service_adaptors/elsevier_cover.rb +0 -0
  108. data/{lib → app}/service_adaptors/email_export.rb +0 -0
  109. data/{lib → app}/service_adaptors/ezproxy.rb +0 -0
  110. data/{lib → app}/service_adaptors/google_book_search.rb +0 -0
  111. data/app/service_adaptors/google_scholar_link.rb +71 -0
  112. data/{lib → app}/service_adaptors/gpo.rb +0 -0
  113. data/{lib → app}/service_adaptors/hathi_trust.rb +0 -0
  114. data/{lib → app}/service_adaptors/hip3_service.rb +0 -0
  115. data/{lib → app}/service_adaptors/hip_holding_search.rb +0 -0
  116. data/{lib → app}/service_adaptors/internet_archive.rb +0 -0
  117. data/{lib → app}/service_adaptors/isbn_db.rb +0 -0
  118. data/{lib → app}/service_adaptors/isi.rb +22 -13
  119. data/{lib → app}/service_adaptors/jcr.rb +0 -0
  120. data/{lib → app}/service_adaptors/opac.rb +0 -0
  121. data/{lib → app}/service_adaptors/open_library.rb +0 -0
  122. data/{lib → app}/service_adaptors/open_library_cover.rb +0 -0
  123. data/{lib → app}/service_adaptors/pubmed.rb +0 -0
  124. data/{lib → app}/service_adaptors/request_to_fixture.rb +0 -0
  125. data/{lib → app}/service_adaptors/scopus.rb +0 -0
  126. data/{lib → app/service_adaptors}/service.rb +3 -3
  127. data/{lib → app}/service_adaptors/sfx.rb +154 -11
  128. data/{lib → app}/service_adaptors/sfx_backchannel_record.rb +0 -0
  129. data/app/service_adaptors/tr_link.rb +267 -0
  130. data/app/service_adaptors/tr_links.rb +278 -0
  131. data/{lib → app}/service_adaptors/txt_holding_export.rb +0 -0
  132. data/{lib → app}/service_adaptors/ulrichs_cover.rb +0 -0
  133. data/{lib → app}/service_adaptors/ulrichs_link.rb +0 -0
  134. data/{lib → app}/service_adaptors/worldcat.rb +0 -0
  135. data/{lib → app}/service_adaptors/worldcat_identities.rb +0 -0
  136. data/app/views/admin/service_errors/_dispatched_service.html.erb +13 -13
  137. data/app/views/admin/service_errors/index.html.erb +11 -21
  138. data/app/views/export_email/email.html.erb +17 -2
  139. data/app/views/export_email/send_email.html.erb +2 -1
  140. data/app/views/export_email/send_txt.html.erb +2 -1
  141. data/app/views/export_email/txt.html.erb +30 -2
  142. data/app/views/layouts/umlaut.html.erb +29 -49
  143. data/app/views/resolve/_background_progress.html.erb +43 -50
  144. data/app/views/resolve/_background_updater.html.erb +23 -36
  145. data/app/views/resolve/_citation.html.erb +63 -87
  146. data/app/views/resolve/_compact_citation.html.erb +15 -33
  147. data/app/views/resolve/_cover_image.html.erb +34 -43
  148. data/app/views/resolve/_fulltext.html.erb +29 -50
  149. data/app/views/resolve/_help.html.erb +17 -14
  150. data/app/views/resolve/_holding.html.erb +65 -82
  151. data/app/views/resolve/_manually_entered_warning.html.erb +7 -0
  152. data/app/views/resolve/_modal.html.erb +19 -0
  153. data/app/views/resolve/_related_items.html.erb +20 -35
  154. data/app/views/resolve/_search_inside.html.erb +34 -57
  155. data/app/views/resolve/_section_display.html.erb +34 -46
  156. data/app/views/resolve/_section_heading.html.erb +17 -0
  157. data/app/views/resolve/_service_errors.html.erb +27 -28
  158. data/app/views/resolve/_standard_response_item.html.erb +42 -72
  159. data/app/views/resolve/background_status.html.erb +19 -23
  160. data/app/views/resolve/get_permalink.html.erb +6 -0
  161. data/app/views/resolve/index.html.erb +47 -73
  162. data/app/views/search/_a_to_z.html.erb +9 -6
  163. data/app/views/search/_citation.html.erb +73 -94
  164. data/app/views/search/_pager.html.erb +6 -6
  165. data/app/views/search/books.html.erb +34 -102
  166. data/app/views/search/journal_search.html.erb +53 -90
  167. data/app/views/search/journals.html.erb +73 -167
  168. data/app/views/umlaut/_header.html.erb +9 -0
  169. data/app/views/umlaut/error.html.erb +44 -44
  170. data/config/locales/en.yml +5 -0
  171. data/lib/{CronTab.rb → cron_tab.rb} +0 -0
  172. data/lib/generators/templates/umlaut_services.yml +57 -43
  173. data/lib/generators/umlaut/install_generator.rb +12 -0
  174. data/lib/service_adaptors/README.md +0 -0
  175. data/lib/tasks/umlaut.rake +8 -24
  176. data/lib/umlaut.rb +1 -21
  177. data/lib/umlaut/version.rb +1 -1
  178. data/test/README.md +75 -0
  179. data/test/dummy/app/controllers/umlaut_controller.rb +3 -3
  180. data/test/dummy/config/application.rb +3 -0
  181. data/test/dummy/config/sunspot.yml +20 -0
  182. data/test/dummy/config/travis_database.yml +96 -0
  183. data/test/dummy/config/umlaut_services.yml +16 -23
  184. data/test/dummy/db/migrate/20120927163304_sfx4_global.rb +26 -0
  185. data/test/dummy/db/migrate/20120927164040_sfx4_local.rb +54 -0
  186. data/test/dummy/tmp/cache/assets/BBA/6A0/sprockets%2F2a335471966f33256b321f8324041981 +0 -0
  187. data/test/dummy/tmp/cache/assets/C2A/410/sprockets%2Fd654b74912b4773a2534616863fb6565 +0 -0
  188. data/test/dummy/tmp/cache/assets/C45/A30/sprockets%2F39494895e462697b478d3d0c79298a26 +0 -0
  189. data/test/dummy/tmp/cache/assets/C49/730/sprockets%2F212d35831188417b5131e3e693aa69a6 +0 -0
  190. data/test/dummy/tmp/cache/assets/C55/1D0/sprockets%2F5af2f2a3403040f736981863fd278529 +0 -0
  191. data/test/dummy/tmp/cache/assets/C5A/A80/sprockets%2F2328c7370b56b4151776981a5f6d394e +0 -0
  192. data/test/dummy/tmp/cache/assets/C5F/340/sprockets%2F99692920160b7a279b86a80415b79db7 +0 -0
  193. data/test/dummy/tmp/cache/assets/C70/4D0/sprockets%2F034ad2036e623081bd352800786dfe80 +0 -0
  194. data/test/dummy/tmp/cache/assets/C80/980/sprockets%2Fc94807409c1523d43e18d25f35d93c41 +0 -0
  195. data/test/dummy/tmp/cache/assets/C94/E20/sprockets%2F19579abc248373f419b1c3e287d74598 +0 -0
  196. data/test/dummy/tmp/cache/assets/C98/330/sprockets%2F0c81574ba94abc10657315d4190c201f +0 -0
  197. data/test/dummy/tmp/cache/assets/CA4/440/sprockets%2F0feb4425db6319d7d0582192a503671b +0 -0
  198. data/test/dummy/tmp/cache/assets/CA7/E80/sprockets%2F33310f455a870eaedd6d938e30620714 +0 -0
  199. data/test/dummy/tmp/cache/assets/CB8/3C0/sprockets%2F697cd846490fda9f0e20c558320610f8 +0 -0
  200. data/test/dummy/tmp/cache/assets/CBF/B60/sprockets%2F08ca89671549936265dcb673bf02e36f +0 -0
  201. data/test/dummy/tmp/cache/assets/CC7/F10/sprockets%2F939637f806eef3f0f21584659458ab2e +0 -0
  202. data/test/dummy/tmp/cache/assets/CC9/9F0/sprockets%2F306166316e2cafd13c15e62b51a2339d +0 -0
  203. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  204. data/test/dummy/tmp/cache/assets/CF7/2B0/sprockets%2F25a7c73655bd3598173b39d9f98bcd46 +0 -0
  205. data/test/dummy/tmp/cache/assets/CF8/DA0/sprockets%2Ff5b8c8499d3da954d392fa57739503c5 +0 -0
  206. data/test/dummy/tmp/cache/assets/CF9/590/sprockets%2F096bcc45cd31b3796fa2121cd203215f +0 -0
  207. data/test/dummy/tmp/cache/assets/CFE/080/sprockets%2F37fe9f4255baddbd549a659914929398 +0 -0
  208. data/test/dummy/tmp/cache/assets/D04/CC0/sprockets%2Fe9c1b92f2e437e1bbbe020d718739220 +0 -0
  209. data/test/dummy/tmp/cache/assets/D0B/090/sprockets%2F58009091c95e3ac328c91c68fca30e0e +0 -0
  210. data/test/dummy/tmp/cache/assets/D1A/B50/sprockets%2F2db5892438129fe94da8429b8be114ec +0 -0
  211. data/test/dummy/tmp/cache/assets/D2D/1A0/sprockets%2F376426b4896a3cff7969ce6c7b387e0e +0 -0
  212. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  213. data/test/dummy/tmp/cache/assets/D37/2B0/sprockets%2F40834fb07d7318c1fddd5003bd9e04f6 +0 -0
  214. data/test/dummy/tmp/cache/assets/D43/0D0/sprockets%2F682843a8d0795a5fbcfeb2f0c81727d0 +0 -0
  215. data/test/dummy/tmp/cache/assets/D46/F80/sprockets%2Fb15c08e749067d7aad9baf5e9388221c +0 -0
  216. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  217. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  218. data/test/dummy/tmp/cache/assets/D6C/7D0/sprockets%2F8a05d6981ec0d38c51739bef0b3a9c2b +0 -0
  219. data/test/dummy/tmp/cache/assets/D6E/CF0/sprockets%2F5661c6e4f0cea86fe4523f27261aade5 +0 -0
  220. data/test/dummy/tmp/cache/assets/D94/FF0/sprockets%2F3b56a1aa77de0d570c38a4a9d5f4b1d6 +0 -0
  221. data/test/dummy/tmp/cache/assets/D97/6B0/sprockets%2Fb070e8c799d1a4ad5e62e0a1ae3b83e6 +0 -0
  222. data/test/dummy/tmp/cache/assets/D9A/2F0/sprockets%2Fbba0f4b972dc53c15ce6c8c1993b82a4 +0 -0
  223. data/test/dummy/tmp/cache/assets/D9C/860/sprockets%2Fec2d9f20b270d70e698ff33e53c21fca +0 -0
  224. data/test/dummy/tmp/cache/assets/DA6/A80/sprockets%2F92e26d8e58d5bcc8b8f6c25d1b05b9c1 +0 -0
  225. data/test/dummy/tmp/cache/assets/DA8/BB0/sprockets%2F0cf1c7e9f966dce425517c0e2a844efe +0 -0
  226. data/test/dummy/tmp/cache/assets/DA9/BC0/sprockets%2Fcb9062b73291befe5e5bf2a70978dec8 +0 -0
  227. data/test/dummy/tmp/cache/assets/DB6/ED0/sprockets%2Ff4482d9b9f76fb65eef16430bde2f8e6 +0 -0
  228. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  229. data/test/dummy/tmp/cache/assets/DE8/790/sprockets%2Fd1333bde2b9aafcc712d11dd09ab35d8 +0 -0
  230. data/test/dummy/tmp/cache/assets/DF7/960/sprockets%2F99ac6db10b44a64fbba4ee847b35ba8b +0 -0
  231. data/test/dummy/tmp/cache/assets/DFD/300/sprockets%2Fabac9489cf7f1db8ef00d72a1571ee1e +0 -0
  232. data/test/dummy/tmp/cache/assets/E02/C10/sprockets%2F1463cadfce3fc70e61d482f9fcb75ac7 +0 -0
  233. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  234. data/test/dummy/tmp/cache/assets/E38/FE0/sprockets%2Fe1fc875efa817cbb94a5d8de25ea4e6b +0 -0
  235. data/test/dummy/tmp/cache/assets/E50/F00/sprockets%2Fec61afdbb1cc4df075e3dad46f0af571 +0 -0
  236. data/test/dummy/tmp/cache/assets/E5E/5F0/sprockets%2Feffaeb4d7f9bf4c0cc840ff320fde046 +0 -0
  237. data/test/dummy/tmp/cache/assets/E5F/960/sprockets%2Fdc007b6cad5c7ef08e33ec28cfff0ef6 +0 -0
  238. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_accordion.scssc +0 -0
  239. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_alerts.scssc +0 -0
  240. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_breadcrumbs.scssc +0 -0
  241. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_button-groups.scssc +0 -0
  242. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_buttons.scssc +0 -0
  243. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_carousel.scssc +0 -0
  244. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_close.scssc +0 -0
  245. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_code.scssc +0 -0
  246. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_component-animations.scssc +0 -0
  247. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_dropdowns.scssc +0 -0
  248. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_forms.scssc +0 -0
  249. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_grid.scssc +0 -0
  250. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_hero-unit.scssc +0 -0
  251. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_labels-badges.scssc +0 -0
  252. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_layouts.scssc +0 -0
  253. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_media.scssc +0 -0
  254. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_mixins.scssc +0 -0
  255. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_modals.scssc +0 -0
  256. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_navbar.scssc +0 -0
  257. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_navs.scssc +0 -0
  258. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_pager.scssc +0 -0
  259. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_pagination.scssc +0 -0
  260. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_popovers.scssc +0 -0
  261. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_progress-bars.scssc +0 -0
  262. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_reset.scssc +0 -0
  263. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-1200px-min.scssc +0 -0
  264. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-767px-max.scssc +0 -0
  265. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-768px-979px.scssc +0 -0
  266. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-navbar.scssc +0 -0
  267. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-utilities.scssc +0 -0
  268. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_scaffolding.scssc +0 -0
  269. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_sprites.scssc +0 -0
  270. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_tables.scssc +0 -0
  271. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_thumbnails.scssc +0 -0
  272. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_tooltip.scssc +0 -0
  273. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_type.scssc +0 -0
  274. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_utilities.scssc +0 -0
  275. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_variables.scssc +0 -0
  276. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_wells.scssc +0 -0
  277. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/bootstrap.scssc +0 -0
  278. data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/responsive.scssc +0 -0
  279. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_admin.scssc +0 -0
  280. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_az.scssc +0 -0
  281. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_base.scssc +0 -0
  282. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_forms.scssc +0 -0
  283. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_icons.scssc +0 -0
  284. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_misc.scssc +0 -0
  285. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_mixins.scssc +0 -0
  286. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_modal.scssc +0 -0
  287. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_resolve.scssc +0 -0
  288. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_results.scssc +0 -0
  289. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_search.scssc +0 -0
  290. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_spinner.scssc +0 -0
  291. data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_variables.scssc +0 -0
  292. data/test/dummy/tmp/cache/sass/93d65682d6bddb0b2e6788c1232f4849af20a35e/bootstrap-responsive.scssc +0 -0
  293. data/test/dummy/tmp/cache/sass/93d65682d6bddb0b2e6788c1232f4849af20a35e/bootstrap.scssc +0 -0
  294. data/test/dummy/tmp/cache/sass/fb58c04fd15fcc38a8c4d91b7070bcfeaf1c3799/umlaut.css.scssc +0 -0
  295. data/test/fixtures/dispatched_services.yml +0 -4
  296. data/test/fixtures/permalinks.yml +23 -4
  297. data/test/fixtures/referent_values.yml +226 -1493
  298. data/test/fixtures/referents.yml +14 -137
  299. data/test/fixtures/requests.yml +22 -260
  300. data/test/fixtures/service_responses.yml +169 -5
  301. data/test/fixtures/sfx4/global/KB_OBJECTS.yml +46 -0
  302. data/test/fixtures/sfx4/local/AZ_EXTRA_INFO.yml +4802 -0
  303. data/test/fixtures/sfx4/local/AZ_LETTER_GROUP.yml +105 -0
  304. data/test/fixtures/sfx4/local/AZ_TITLE.yml +165 -0
  305. data/test/fixtures/sfx4/local/AZ_TITLE_SEARCH.yml +341 -0
  306. data/test/fixtures/sfx_urls.yml +3 -0
  307. data/test/functional/export_email_controller_test.rb +43 -0
  308. data/test/functional/link_router_controller_test.rb +16 -0
  309. data/test/functional/resolve_controller_test.rb +102 -0
  310. data/test/functional/search_controller_test.rb +40 -0
  311. data/test/functional/store_controller_test.rb +29 -0
  312. data/test/helper/list_with_limit_test.rb +90 -0
  313. data/test/integration/permalinks_test.rb +14 -0
  314. data/test/support/search_methods/test_case.rb +0 -0
  315. data/test/support/service_adaptors/test_case.rb +0 -0
  316. data/test/support/test_with_cassette.rb +37 -0
  317. data/test/test_helper.rb +76 -30
  318. data/test/unit/aws_product_sign_test.rb +2 -0
  319. data/test/unit/determine_services_test.rb +163 -0
  320. data/test/unit/google_book_search_test.rb +8 -25
  321. data/test/unit/google_scholar_link_test.rb +81 -0
  322. data/test/unit/internet_archive_test.rb +33 -0
  323. data/test/unit/permalink_test.rb +15 -0
  324. data/test/unit/service_store_test.rb +47 -0
  325. data/test/unit/service_test.rb +28 -13
  326. data/test/unit/sfx/sfx_target_roll_up_test.rb +369 -0
  327. data/test/unit/sfx4_search_test.rb +102 -0
  328. data/test/unit/sfx4_solr_search_test.rb +77 -0
  329. data/test/unit/sfx_test.rb +38 -0
  330. data/test/unit/worldcat_test.rb +7 -0
  331. data/test/vcr_cassettes/google_book_search/frankenstein_by_OCLC_number.yml +107 -0
  332. data/test/vcr_cassettes/internet_archive/momo_by_title_author.yml +116 -0
  333. data/test/vcr_cassettes/resolve/fulltext_with_edition_warning.yml +44 -0
  334. data/test/vcr_cassettes/resolve/no_holdings.yml +649 -0
  335. data/test/vcr_cassettes/resolve/nytimes_by_issn.yml +224 -0
  336. data/test/vcr_cassettes/sfx/nytimes_by_issn.yml +1395 -0
  337. data/test/vcr_cassettes/sfx4_solr/find_by_group.yml +109 -0
  338. data/test/vcr_cassettes/sfx4_solr/find_by_title_begins_with.yml +33 -0
  339. data/test/vcr_cassettes/sfx4_solr/find_by_title_contains.yml +34 -0
  340. data/test/vcr_cassettes/sfx4_solr/find_by_title_exact.yml +32 -0
  341. data/test/view/holding_test.rb +30 -0
  342. metadata +435 -179
  343. data/app/assets/images/export_bg_bot.gif +0 -0
  344. data/app/assets/images/export_bg_mid.gif +0 -0
  345. data/app/assets/images/export_bg_top.gif +0 -0
  346. data/app/assets/images/famfamfam/page_sound.gif +0 -0
  347. data/app/assets/images/famfamfam/page_text.gif +0 -0
  348. data/app/assets/images/famfamfam/page_up.gif +0 -0
  349. data/app/assets/images/ico_go.gif +0 -0
  350. data/app/assets/images/more_info.gif +0 -0
  351. data/app/assets/images/rails.png +0 -0
  352. data/app/assets/images/request.gif +0 -0
  353. data/app/assets/javascripts/umlaut/simple_visible_toggle.js +0 -8
  354. data/app/assets/stylesheets/umlaut.css +0 -900
  355. data/app/assets/stylesheets/umlaut/_background_progress_spinner.scss +0 -21
  356. data/app/assets/stylesheets/umlaut/_expand_contract.scss +0 -28
  357. data/app/controllers/search_methods/sfx3.rb +0 -148
  358. data/app/models/sfx_db.rb +0 -10
  359. data/app/models/sfx_db/az_additional_title.rb +0 -11
  360. data/app/models/sfx_db/az_letter_group.rb +0 -11
  361. data/app/models/sfx_db/az_title.rb +0 -40
  362. data/app/models/sfx_db/az_title_v2.rb +0 -34
  363. data/app/models/sfx_db/isbn.rb +0 -12
  364. data/app/models/sfx_db/issn.rb +0 -12
  365. data/app/models/sfx_db/object.rb +0 -35
  366. data/app/models/sfx_db/object_portfolio.rb +0 -6
  367. data/app/models/sfx_db/publisher.rb +0 -10
  368. data/app/models/sfx_db/sfx_db_base.rb +0 -58
  369. data/app/models/sfx_db/target.rb +0 -10
  370. data/app/models/sfx_db/target_service.rb +0 -10
  371. data/app/models/sfx_db/title.rb +0 -10
  372. data/app/views/export_email/_email.html.erb +0 -25
  373. data/app/views/export_email/_send_email.html.erb +0 -3
  374. data/app/views/export_email/_send_txt.html.erb +0 -3
  375. data/app/views/export_email/_txt.html.erb +0 -62
  376. data/lib/holding.rb +0 -32
  377. data/lib/opensearch_feed.rb +0 -398
  378. data/lib/opensearch_query.rb +0 -98
  379. data/lib/referent_filters/dissertation_catch.rb +0 -45
  380. data/lib/service_adaptors/journal_tocs.progress +0 -68
  381. data/lib/service_adaptors/primo_service.rb +0 -452
  382. data/lib/service_adaptors/primo_source.rb +0 -82
  383. data/lib/umlaut/default_configuration.rb +0 -5
  384. data/test/dummy/config/primo.yml +0 -271
  385. data/test/unit/primo_service_test.rb +0 -947
@@ -2,3 +2,6 @@
2
2
  gateway:
3
3
  id: 1
4
4
  url: gateway.ovid.com
5
+ proquest:
6
+ id: 2
7
+ url: proquest.umi.com
@@ -0,0 +1,43 @@
1
+ require 'test_helper'
2
+
3
+
4
+ # The ExportEmailController provides custom interactions
5
+ # for the ExportEmail service.
6
+ class ExportEmailControllerTest < ActionController::TestCase
7
+ fixtures :requests, :referents, :referent_values, :dispatched_services, :service_responses
8
+
9
+ setup do
10
+ @email_service_response = service_responses(:service_response3)
11
+ @txt_holding_service_response = service_responses(:service_response9)
12
+ end
13
+
14
+ test "layout" do
15
+ get(:email, :id => @email_service_response.id)
16
+ assert_response :success
17
+ assert_select "body div.umlaut-container", 1
18
+ assert_select "div.email", 1
19
+ end
20
+
21
+ test "layout xhr" do
22
+ xhr :get, :email, :id => @email_service_response.id
23
+ assert_response :success
24
+ # Assert that no layout was included in the request
25
+ assert_select "body", 0
26
+ assert_select "div.umlaut-container", 0
27
+ assert_select "div.email", 1
28
+ end
29
+
30
+ test "send email" do
31
+ to_addr = "nobody@example.org"
32
+ post :send_email, :id => @email_service_response.id, :email => to_addr
33
+
34
+
35
+ # Mail was sent
36
+ assert !ActionMailer::Base.deliveries.empty?
37
+ assert ActionMailer::Base.deliveries.find do |message|
38
+ message.to.include? to_addr
39
+ end
40
+
41
+ assert_select "div", :text => /Sent to #{to_addr}/
42
+ end
43
+ end
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+ class LinkRouterControllerTest < ActionController::TestCase
3
+ fixtures :service_responses
4
+ test "index" do
5
+ service_response = service_responses(:service_response8)
6
+ get :index, {id: service_response.id}
7
+ assert_response :redirect
8
+ assert_redirected_to "http://holding.library.edu/DOCID"
9
+ end
10
+
11
+ test "error" do
12
+ assert_raises(ActiveRecord::RecordNotFound) {
13
+ get :index, {id: "this should throw an error"}
14
+ }
15
+ end
16
+ end
@@ -0,0 +1,102 @@
1
+ # encoding: UTF-8
2
+ require 'test_helper'
3
+ class ResolveControllerTest < ActionController::TestCase
4
+ extend TestWithCassette
5
+ fixtures :requests, :referents, :referent_values, :dispatched_services, :service_responses
6
+
7
+ setup do
8
+ @controller = ResolveController.new
9
+ end
10
+
11
+ test_with_cassette("nytimes by issn", :resolve, :match_requests_on => [:method, :uri_without_ctx_tim]) do
12
+ get :index, "umlaut.request_id" => 80
13
+ assert_response :success
14
+ assert_select "title", "Find It | The New York times"
15
+ assert_select "h1", "Find It"
16
+ assert_select "h2.title", "The New York times"
17
+
18
+ assert_select ".umlaut-main .umlaut-resource-info dl.citation-info" do |dls|
19
+ assert_equal 1, dls.size
20
+ dls.each do |dl|
21
+ assert_select dl, "dt", 1
22
+ assert_select dl, "dt" do |dts|
23
+ assert dts.last, "ISSN:"
24
+ end
25
+ assert_select dl, "dd", 1
26
+ assert_select dl, "dd" do |dds|
27
+ assert dds.last, "0362-4331"
28
+ end
29
+ end
30
+ end
31
+ # puts @response.body
32
+ assert_select ".umlaut-main .umlaut-section.fulltext" do |sections|
33
+ assert_equal 1, sections.size
34
+ sections.each do |section|
35
+ assert_select section, ".response_list", 1
36
+ assert_select section, ".response_list" do |response_lists|
37
+ assert_select section, "li.response_item", 4
38
+ end
39
+ end
40
+ end
41
+ assert_select ".umlaut-main .umlaut-section.holding" do |sections|
42
+ assert_equal 1, sections.size
43
+ sections.each do |section|
44
+ assert_select section, ".umlaut-holdings", 1
45
+ assert_select section, ".umlaut-holdings .umlaut-holding" do |holdings|
46
+ # This record only has 1 holding
47
+ assert_equal 1, holdings.size
48
+ holdings.each do |holding|
49
+ # Make sure the edition warning shows up.
50
+ assert_select holding, ".umlaut-holding-match-reliability", 1
51
+ # Make sure the coverage shows up.
52
+ assert_select holding, ".umlaut-holding-coverage", 1
53
+ assert_select holding, ".umlaut-holding-coverage li", 2
54
+ # Make sure the notes show up.
55
+ assert_select holding, ".umlaut-holding-notes", 1
56
+ end
57
+ end
58
+ end
59
+ end
60
+ assert_select ".umlaut-sidebar .umlaut-section.export_citation" do |sections|
61
+ assert_equal 1, sections.size
62
+ sections.each do |section|
63
+ assert_select section, ".response_list", 1
64
+ end
65
+ end
66
+ assert_select ".umlaut-sidebar .umlaut-section.highlighted_link" do |sections|
67
+ assert_equal 1, sections.size
68
+ sections.each do |section|
69
+ assert_select section, ".response_list", 1
70
+ end
71
+ end
72
+ end
73
+
74
+ test_with_cassette("fulltext with edition warning", :resolve, :match_requests_on => [:method, :uri_without_ctx_tim]) do
75
+ umlaut_request = requests(:momo)
76
+ get(:index, {'umlaut.request_id' => umlaut_request.id})
77
+ assert_response :success
78
+ assert_select 'div#fulltext ul.response_list li.response_item' do |elements|
79
+ assert_equal(1, elements.size)
80
+ elements.each do |element|
81
+ assert_select element, "a", {:count => 1, :href => "", :text => "the Internet Archive: Open Source Book"}
82
+ assert_select element, 'div.edition_warning', {:count => 1,
83
+ :text => "Edition information Momo, ovvero l&#x27;arcana storia dei ladri di tempo e della bambina che restituì agli uomini il tempo trafugato"}
84
+ end
85
+ end
86
+ end
87
+
88
+ test_with_cassette("no holdings", :resolve, :match_requests_on => [:method, :uri_without_ctx_tim]) do
89
+ umlaut_request = requests(:advocate)
90
+ get(:index, {'umlaut.request_id' => umlaut_request.id, "umlaut.institution" => "NYU"})
91
+ assert_response :success
92
+ assert_select 'div#fulltext ul.response_list li.response_item' do |elements|
93
+ assert_equal(1, elements.size)
94
+ elements.each do |element|
95
+ assert_select element, "a", {:count => 1, :href => "", :text => "Gale Cengage Newsstand"}
96
+ assert_select element, 'div.response_coverage_statement', {:count => 1, :text => "Available from 2009."}
97
+ end
98
+ end
99
+ # Assert no holdings
100
+ assert_select 'div#holding div.umlaut-holdings', :count => 0
101
+ end
102
+ end
@@ -0,0 +1,40 @@
1
+ require 'test_helper'
2
+ class SearchControllerTest < ActionController::TestCase
3
+ setup do
4
+ @controller = SearchController.new
5
+ end
6
+
7
+ test "index" do
8
+ get :index
9
+ assert_response :success
10
+ assert_select "title", "Find It | Journals"
11
+ assert_select ".umlaut-search-form", 2
12
+ assert_select ".umlaut-results", 0
13
+ end
14
+
15
+ # Tests don't currently support contains searching because sdalton can't/won't
16
+ # figure out FULLTEXT indexing in MySQL, so we'll test begins with searching.
17
+ test "journal search" do
18
+ return unless Sfx4::Local::AzTitle.connection_configured?
19
+ get :journal_search, "rft.jtitle"=>"Account", "umlaut.title_search_type"=>"begins"
20
+ assert_response :success
21
+ assert_select "title", "Find It | Journal titles that begin with &#x27;Account&#x27;"
22
+ assert_select ".umlaut-search-form", 1
23
+ assert_select ".umlaut-results", 1
24
+ assert_select ".umlaut-results .umlaut-result", :minimum => 1
25
+ assert_select ".umlaut-pagination", 2
26
+ assert_select ".umlaut-az", 0
27
+ end
28
+
29
+ test "journal list" do
30
+ return unless Sfx4::Local::AzTitle.connection_configured?
31
+ get :journal_list, :id => "A"
32
+ assert_response :success
33
+ assert_select "title", "Find It | Browse by Journal Title: A"
34
+ assert_select ".umlaut-search-form", 1
35
+ assert_select ".umlaut-results", 1
36
+ assert_select ".umlaut-results .umlaut-result", :minimum => 1
37
+ assert_select ".umlaut-pagination", 2
38
+ assert_select ".umlaut-az", 1
39
+ end
40
+ end
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+ class StoreControllerTest < ActionController::TestCase
3
+ fixtures :permalinks, :requests, :referents, :referent_values
4
+ test "index with permalink referent" do
5
+ permalink = permalinks(:nytimes)
6
+ referent = permalink.referent
7
+ get :index, {id: permalink.id}
8
+ # assert_redirected_to doesn't work as advertised so HACK!
9
+ assert(@controller.location.starts_with?("http://test.host/resolve?umlaut.referent_id=#{referent.id}&url_ver=Z39.88-2004&url_ctx_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Actx&ctx_ver=Z39.88-2004&"), "Not redirecting to the correct location.")
10
+ assert(/rft\.issn=0362-4331/===@controller.location, "In the redirect url, rft.issn is expected to be \"0362-4331\", but isn't. Actual location: #{@controller.location}")
11
+ assert(/rft\.jtitle=The\+New\+York\+times/===@controller.location, "In the redirect url, rft.jtitle is expected to be \"The New York times\", but isn't. Actual location: #{@controller.location}")
12
+ end
13
+
14
+ test "index without permalink referent" do
15
+ permalink = permalinks(:expired_referent)
16
+ get :index, {id: permalink.id}
17
+ assert_response :redirect
18
+ # assert_redirected_to doesn't work as advertised so HACK!
19
+ assert(@controller.location.starts_with?("http://test.host/resolve?umlaut.referent_id="), "Not redirecting to the correct location.")
20
+ assert(/rft\.issn=0028792X/===@controller.location, "In the redirect url, rft.issn is expected to be \"0028792X\", but isn't. Actual location: #{@controller.location}")
21
+ assert(/rft\.jtitle=The\+New\+Yorker/===@controller.location, "In the redirect url, rft.jtitle is expected to be \"The New Yorker\", but isn't. Actual location: #{@controller.location}")
22
+ end
23
+
24
+ test "error" do
25
+ get :index, {id: "this should not be found"}
26
+ assert_response :not_found
27
+ assert_select 'title', "The page you were looking for doesn't exist (404)"
28
+ end
29
+ end
@@ -0,0 +1,90 @@
1
+ require 'test_helper'
2
+ require 'nokogiri'
3
+
4
+ class ListWithLimitTest < ActionView::TestCase
5
+ include ResolveHelper
6
+
7
+ def setup
8
+ @user_request = Request.new(:id => 999999)
9
+ end
10
+
11
+ # the visible 'ul', and the one hidden under expand-contract.
12
+ # second one may be empty.
13
+ def both_lists(str)
14
+ dom = Nokogiri::HTML::fragment(str)
15
+
16
+ first = dom.at_css("ul")
17
+ second = dom.at_css("div.collapse ul")
18
+
19
+ return [first, second, dom]
20
+ end
21
+
22
+ @@li_lambda = lambda do |item, index|
23
+ "<li data-value='#{item}'>#{item}</li>".html_safe
24
+ end
25
+
26
+ def test_list_under_limit
27
+ out = list_with_limit("foo", %w{1 2 3 4}, :limit => 5, &@@li_lambda)
28
+
29
+ visible_list, hidden_list = both_lists(out)
30
+
31
+ assert_not_nil visible_list
32
+ assert_length 4, visible_list.css("li")
33
+
34
+ assert_nil hidden_list
35
+ end
36
+
37
+ def test_list_at_limit
38
+ out = list_with_limit("foo", %w{1 2 3 4 5}, :limit => 5, &@@li_lambda)
39
+
40
+ visible_list, hidden_list = both_lists(out)
41
+
42
+ assert_not_nil visible_list
43
+ assert_length 5, visible_list.css("li")
44
+
45
+ assert_nil hidden_list
46
+ end
47
+
48
+ def test_list_one_more_than_limit
49
+ # Only FOUR orig items in visible list, then the 'more' link, then two
50
+ # in hidden -- this makes sense for screen real estate purposes of the limit.
51
+ out = list_with_limit("foo", %w{1 2 3 4 5 6}, :limit => 5, &@@li_lambda)
52
+
53
+ visible_list, hidden_list, dom = both_lists(out)
54
+
55
+ assert_not_nil visible_list
56
+ assert_length 4, visible_list.css("li")
57
+
58
+ assert_present dom.at_css("ul + div.collapsible a.collapse-toggle")
59
+
60
+ assert_not_nil hidden_list
61
+ assert_length 2, hidden_list.css("li")
62
+
63
+ assert dom.at_css(".collapsible").text.include?("Show 2 more")
64
+ end
65
+
66
+ def test_list_many_more_than_limit
67
+ out = list_with_limit("foo", %w{1 2 3 4 5 6 7 8 9 10}, :limit => 5, &@@li_lambda)
68
+
69
+ visible_list, hidden_list, dom = both_lists(out)
70
+
71
+ assert_not_nil visible_list
72
+ assert_length 4, visible_list.css("li")
73
+
74
+ assert_present dom.at_css("ul + div.collapsible a.collapse-toggle")
75
+
76
+ assert_not_nil hidden_list
77
+ assert_length 6, hidden_list.css("li")
78
+ end
79
+
80
+ def test_html_unsafety_maintained
81
+ out = list_with_limit("foo", %w{1 2 3 4 5 6 7 8 9 10}, :limit => 5) do |item|
82
+ "<should be escaped> #{item}"
83
+ end
84
+
85
+ assert ! out.include?("<should be escaped>"), "Does not include un-escaped angle brackets"
86
+ assert_equal 10, out.scan("&lt;should be escaped&gt;").length, "Includes escaped angle brackets"
87
+ end
88
+
89
+ end
90
+
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ class PermalinksTest < ActionDispatch::IntegrationTest
4
+
5
+
6
+ test "missing id" do
7
+ get "/go/999999999"
8
+
9
+ assert_response(:missing)
10
+ end
11
+
12
+
13
+
14
+ end
File without changes
File without changes
@@ -0,0 +1,37 @@
1
+ # Copied from jrochkind's bento search.
2
+ # TODO: Investigate a DRYer way to copy from jrochkind's bento search.
3
+ module TestWithCassette
4
+ def test_with_cassette(name, group = nil, vcr_options ={}, &block)
5
+ # cribbed from Rails and modified for VCR
6
+ # https://github.com/rails/rails/blob/b451de0d6de4df6bc66b274cec73b919f823d5ae/activesupport/lib/active_support/testing/declarative.rb#L25
7
+
8
+ test_name_safe = name.gsub(/\s+/,'_')
9
+
10
+ test_method_name = "test_#{test_name_safe}".to_sym
11
+
12
+ raise "#{test_method_name} is already defined in #{self}" if methods.include?(test_method_name)
13
+
14
+ cassette_name = vcr_options.delete(:cassette)
15
+ unless cassette_name
16
+ # calculate default cassette name from test name
17
+ cassette_name = test_name_safe
18
+ # put in group subdir if group
19
+ cassette_name = "#{group}/#{cassette_name}" if group
20
+ end
21
+
22
+ # default tag with groupname, can be over-ridden.
23
+ vcr_options = {:tag => group}.merge(vcr_options) if group
24
+
25
+ if block_given?
26
+ define_method(test_method_name) do
27
+ VCR.use_cassette(cassette_name , vcr_options) do
28
+ instance_eval &block
29
+ end
30
+ end
31
+ else
32
+ define_method(test_method_name) do
33
+ flunk "No implementation provided for #{name}"
34
+ end
35
+ end
36
+ end
37
+ end
data/test/test_helper.rb CHANGED
@@ -1,9 +1,10 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
1
3
  # Configure Rails Environment
2
4
  ENV["RAILS_ENV"] = "test"
3
5
 
4
6
  require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
7
  require "rails/test_help"
6
-
7
8
  ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
8
9
 
9
10
  Rails.backtrace_cleaner.remove_silencers!
@@ -14,37 +15,82 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
14
15
  # Complete stack trace with deprecation warnings from rails
15
16
  ActiveSupport::Deprecation.debug = true
16
17
 
17
- # Custom method for NYU-only tests. We still have a bunch of tests for aleph/
18
- # primo that work against live nyu services and can only succeed if you are
19
- # nyu. Oops. We provide this convenience function to wrap test_* class
20
- # method bodies for nyu only tests, so they'll only be run if
21
- # ENV variable NYU_TEST is set, otherwise you'll get a little message
22
- # and a fake test.
23
-
24
-
25
- # 'skip' only works in ruby 1.9.x, plus outputs a bunch of annoying stuff.
26
- #, plus doesn't give NYU any good way to run em without editing 'skip' out
27
- # of a buncha places.
28
-
29
- # nyu_only_test("AlephTests") do
30
- # def test_something
31
- # assert_something
32
- # end
33
- # def test_something_else
34
- # assert_else
35
- # end
36
- # end
37
- def nyu_only_tests(test_name="Some")
38
-
39
- run_tests = ENV['NYU_TEST'] || false
18
+ class ActiveSupport::TestCase
19
+ # Load SFX 4 fixtures only if we are explicitly creating a mock_instance
20
+ # which should really only be the case for travis-ci.org
21
+ def self.sfx4_fixtures(*fixture_names)
22
+ # Load SFX 4 fixtures only if we are explicitly creating a mock_instance
23
+ # which should really only be the case for travis-ci.org
24
+ if (sfx4_mock_instance?)
25
+ warn "Loading SFX4 fixtures."
26
+ sfx4s = ["Global", "Local"]
27
+ sfx4s.each do |sfx4|
28
+ # Get the db module associate with this sfx4 instance
29
+ sfx4_module = Sfx4.const_get(sfx4.to_sym)
30
+ # Get the connection from the :Base class for each sfx4
31
+ # Set the path
32
+ path = "#{File.dirname(__FILE__)}/fixtures/#{sfx4_module.to_s.underscore}"
33
+ # Get class names hash of table_name => class_name
34
+ class_names = {}
35
+ connection = nil
36
+ fixture_names.collect{|t|t.to_s}.each do |table|
37
+ next unless sfx4_module.const_defined?(table.classify)
38
+ #Find class from table name
39
+ klass = sfx4_module.const_get table.classify
40
+ connection ||= klass.connection
41
+ class_names[klass.table_name.downcase.to_sym] = klass.name
42
+ end
43
+ # Table names are just the keys of the class names
44
+ table_names = class_names.keys.collect{|t| t.to_s.upcase}
45
+ # Create and Instantiate Fixtures
46
+ ActiveRecord::Fixtures.create_fixtures(path, table_names, class_names){connection}.first.fixtures
47
+ end
48
+ else
49
+ warn "Skipping SFX4 fixtures since the SFX DB specified is not a mock instance."
50
+ end
51
+ end
40
52
 
41
- unless run_tests
42
- warn("#{test_name} tests can't be run outside of NYU, skipping.")
43
- def test_nothing
44
- # avoid "no tests were specified" error.
53
+ def self.sfx4_mock_instance?
54
+ (Sfx4::Local::Base.connection_configured? and
55
+ Sfx4::Local::Base.connection_config[:mock_instance] and
56
+ Sfx4::Global::Base.connection_configured? and
57
+ Sfx4::Global::Base.connection_config[:mock_instance])
58
+ end
59
+ end
60
+
61
+ # VCR is used to 'record' HTTP interactions with
62
+ # third party services used in tests, and play em
63
+ # back. Useful for efficiency, also useful for
64
+ # testing code against API's that not everyone
65
+ # has access to -- the responses can be cached
66
+ # and re-used.
67
+ require 'vcr'
68
+ require 'webmock'
69
+
70
+ # To allow us to do real HTTP requests in a VCR.turned_off, we
71
+ # have to tell webmock to let us.
72
+ WebMock.allow_net_connect!
73
+
74
+ without_ctx_tim = VCR.request_matchers.uri_without_param(:ctx_tim)
75
+ VCR.configure do |c|
76
+ c.cassette_library_dir = 'test/vcr_cassettes'
77
+ # webmock needed for HTTPClient testing
78
+ c.hook_into :webmock
79
+ c.register_request_matcher(:uri_without_ctx_tim, &without_ctx_tim)
80
+ # c.debug_logger = $stderr
81
+ end
82
+
83
+ # Silly way to not have to rewrite all our tests if we
84
+ # temporarily disable VCR, make VCR.use_cassette a no-op
85
+ # instead of no-such-method.
86
+ if ! defined? VCR
87
+ module VCR
88
+ def self.use_cassette(*args)
89
+ yield
45
90
  end
46
- else
47
- yield
48
91
  end
49
92
  end
50
93
 
94
+ def assert_length(size, list)
95
+ assert_equal size, list.length, "Expected size of #{size} for #{list}"
96
+ end