fe 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +4 -4
  3. data/app/assets/config/fe/manifest.js +3 -0
  4. data/app/assets/config/manifest.js +3 -0
  5. data/app/assets/javascripts/application.js.erb +1 -1
  6. data/app/assets/javascripts/fe/admin.js +0 -1
  7. data/app/assets/javascripts/fe/fe.admin.js +2 -6
  8. data/app/assets/javascripts/fe/{fe.common.js → fe.common.js.erb} +14 -7
  9. data/app/assets/javascripts/fe/fe.public.js +1 -2
  10. data/app/assets/javascripts/fe/{fe.public.nojquery.js → fe.public.nojquery.js.erb} +152 -76
  11. data/app/assets/javascripts/fe/jquery.html5_upload.js +258 -0
  12. data/app/assets/stylesheets/fe/fe.screen.css.scss.erb +22 -1
  13. data/app/assets/stylesheets/fe/validation.css +5 -1
  14. data/app/controllers/{fe/concerns → concerns/fe}/admin/question_sheets_controller_concern.rb +15 -16
  15. data/app/controllers/concerns/fe/answer_pages_controller_concern.rb +131 -0
  16. data/app/controllers/{fe/concerns → concerns/fe}/answer_sheets_controller_concern.rb +14 -6
  17. data/app/controllers/{fe/concerns → concerns/fe}/application_controller_concern.rb +3 -3
  18. data/app/controllers/fe/admin/elements_controller.rb +46 -24
  19. data/app/controllers/fe/admin/email_templates_controller.rb +5 -5
  20. data/app/controllers/fe/admin/question_pages_controller.rb +8 -8
  21. data/app/controllers/fe/reference_pages_controller.rb +11 -11
  22. data/app/controllers/fe/reference_sheets_controller.rb +4 -4
  23. data/app/controllers/fe/references_controller.rb +19 -19
  24. data/app/controllers/fe/submit_pages_controller.rb +5 -5
  25. data/app/helpers/fe/answer_pages_helper.rb +1 -1
  26. data/app/helpers/fe/application_helper.rb +3 -3
  27. data/app/jobs/fe/update_reference_sheet_visibility_job.rb +11 -0
  28. data/app/mailers/fe/notifier.rb +4 -4
  29. data/app/models/answer_sheet.rb +1 -1
  30. data/app/models/application_record.rb +3 -0
  31. data/app/models/{fe/concerns → concerns/fe}/answer_concern.rb +2 -2
  32. data/app/models/{fe/concerns → concerns/fe}/answer_pages_presenter_concern.rb +6 -5
  33. data/app/models/concerns/fe/answer_sheet_concern.rb +125 -0
  34. data/app/models/{fe/concerns → concerns/fe}/choice_field_concern.rb +41 -23
  35. data/app/models/fe/address.rb +2 -2
  36. data/app/models/fe/answer.rb +1 -1
  37. data/app/models/fe/answer_sheet.rb +1 -1
  38. data/app/models/fe/answer_sheet_question_sheet.rb +2 -2
  39. data/app/models/fe/application.rb +14 -10
  40. data/app/models/fe/condition.rb +4 -4
  41. data/app/models/fe/date_field.rb +1 -1
  42. data/app/models/fe/element.rb +126 -44
  43. data/app/models/fe/email_address.rb +2 -2
  44. data/app/models/fe/email_template.rb +1 -1
  45. data/app/models/fe/page.rb +94 -19
  46. data/app/models/fe/page_element.rb +2 -2
  47. data/app/models/fe/paragraph.rb +1 -1
  48. data/app/models/fe/person.rb +5 -5
  49. data/app/models/fe/phone_number.rb +1 -1
  50. data/app/models/fe/question.rb +62 -38
  51. data/app/models/fe/question_grid.rb +15 -3
  52. data/app/models/fe/question_set.rb +53 -13
  53. data/app/models/fe/question_sheet.rb +49 -16
  54. data/app/models/fe/reference_question.rb +9 -3
  55. data/app/models/fe/reference_sheet.rb +102 -47
  56. data/app/models/fe/state_chooser.rb +2 -2
  57. data/app/models/fe/text_field.rb +2 -2
  58. data/app/models/fe/user.rb +1 -1
  59. data/app/models/staff.rb +6 -6
  60. data/app/views/fe/admin/elements/create.js.erb +3 -3
  61. data/app/views/fe/admin/elements/destroy.js.erb +1 -1
  62. data/app/views/fe/admin/elements/drop.js.erb +1 -1
  63. data/app/views/fe/admin/elements/duplicate.js.erb +1 -1
  64. data/app/views/fe/admin/elements/edit.js.erb +1 -1
  65. data/app/views/fe/admin/elements/error.js.erb +1 -1
  66. data/app/views/fe/admin/elements/new.js.erb +13 -6
  67. data/app/views/fe/admin/elements/update.js.erb +1 -1
  68. data/app/views/fe/admin/email_templates/_form.html.erb +3 -3
  69. data/app/views/fe/admin/email_templates/edit.html.erb +3 -3
  70. data/app/views/fe/admin/email_templates/index.html.erb +3 -3
  71. data/app/views/fe/admin/email_templates/new.html.erb +3 -3
  72. data/app/views/fe/admin/panels/_advanced_options.html.erb +8 -8
  73. data/app/views/fe/admin/panels/_common_boolean_fields.html.erb +1 -0
  74. data/app/views/fe/admin/panels/_common_boolean_fields_default.html.erb +11 -0
  75. data/app/views/fe/admin/panels/_common_fields.html.erb +2 -17
  76. data/app/views/fe/admin/panels/_condition.html.erb +1 -1
  77. data/app/views/fe/admin/panels/_insert.html.erb +25 -25
  78. data/app/views/fe/admin/panels/_nav_controls.html.erb +4 -4
  79. data/app/views/fe/admin/panels/_page.html.erb +1 -1
  80. data/app/views/fe/admin/panels/_pages_list.html.erb +3 -3
  81. data/app/views/fe/admin/panels/_prop_attachment_field.html.erb +2 -2
  82. data/app/views/fe/admin/panels/_prop_choice_field.html.erb +36 -17
  83. data/app/views/fe/admin/panels/_prop_date_field.html.erb +1 -1
  84. data/app/views/fe/admin/panels/_prop_element.html.erb +5 -5
  85. data/app/views/fe/admin/panels/_prop_page.html.erb +3 -3
  86. data/app/views/fe/admin/panels/_prop_paragraph.html.erb +8 -8
  87. data/app/views/fe/admin/panels/_prop_question_grid.html.erb +7 -2
  88. data/app/views/fe/admin/panels/_prop_question_grid_with_total.html.erb +2 -2
  89. data/app/views/fe/admin/panels/_prop_reference_question.html.erb +3 -3
  90. data/app/views/fe/admin/panels/_prop_section.html.erb +1 -1
  91. data/app/views/fe/admin/panels/_prop_sheet.html.erb +3 -3
  92. data/app/views/fe/admin/panels/_prop_text_field.html.erb +12 -12
  93. data/app/views/fe/admin/question_pages/_element.html.erb +7 -7
  94. data/app/views/fe/admin/question_pages/_element_show.html.erb +2 -2
  95. data/app/views/fe/admin/question_pages/_question_page.html.erb +4 -4
  96. data/app/views/fe/admin/question_pages/create.js.erb +3 -3
  97. data/app/views/fe/admin/question_pages/destroy.js.erb +3 -3
  98. data/app/views/fe/admin/question_pages/edit.js.erb +1 -1
  99. data/app/views/fe/admin/question_pages/error.js.erb +1 -1
  100. data/app/views/fe/admin/question_pages/show.js.erb +2 -2
  101. data/app/views/fe/admin/question_pages/show_panel.js.erb +1 -1
  102. data/app/views/fe/admin/question_pages/update.js.erb +1 -1
  103. data/app/views/fe/admin/question_sheets/edit.js.erb +1 -1
  104. data/app/views/fe/admin/question_sheets/error.js.erb +1 -1
  105. data/app/views/fe/admin/question_sheets/index.html.erb +8 -8
  106. data/app/views/fe/admin/question_sheets/new.html.erb +3 -3
  107. data/app/views/fe/admin/question_sheets/show.html.erb +5 -5
  108. data/app/views/fe/admin/question_sheets/update.js.erb +1 -1
  109. data/app/views/fe/answer_pages/_answer_page.html.erb +13 -14
  110. data/app/views/fe/answer_pages/_element.html.erb +22 -2
  111. data/app/views/fe/answer_pages/_page_name.html.erb +1 -1
  112. data/app/views/fe/answer_pages/show.html.erb +39 -0
  113. data/app/views/fe/answer_pages/update.js.erb +10 -2
  114. data/app/views/fe/answer_sheets/_answer_sheet.html.erb +4 -4
  115. data/app/views/fe/answer_sheets/_element.html.erb +9 -7
  116. data/app/views/fe/answer_sheets/_incomplete.html.erb +1 -1
  117. data/app/views/fe/answer_sheets/_page_link.html.erb +9 -7
  118. data/app/views/fe/answer_sheets/_pages_list.html.erb +3 -3
  119. data/app/views/fe/answer_sheets/_submit_to.html.erb +1 -1
  120. data/app/views/fe/answer_sheets/_title.html.erb +1 -1
  121. data/app/views/fe/answer_sheets/edit.html.erb +18 -18
  122. data/app/views/fe/answer_sheets/incomplete.js.erb +7 -4
  123. data/app/views/fe/answer_sheets/index.html.erb +1 -1
  124. data/app/views/fe/answer_sheets/show.html.erb +1 -1
  125. data/app/views/fe/applications/_logout.html.erb +1 -1
  126. data/app/views/fe/questions/fe/_acceptance.html.erb +10 -9
  127. data/app/views/fe/questions/fe/_attachment_field.html.erb +129 -10
  128. data/app/views/fe/questions/fe/_checkbox_field.html.erb +18 -16
  129. data/app/views/fe/questions/fe/_country.html.erb +6 -6
  130. data/app/views/fe/questions/fe/_date_field.html.erb +5 -4
  131. data/app/views/fe/questions/fe/_date_field_mmyy.html.erb +8 -8
  132. data/app/views/fe/questions/fe/_drop_down_field.html.erb +5 -5
  133. data/app/views/fe/questions/fe/_question_grid.html.erb +10 -10
  134. data/app/views/fe/questions/fe/_question_grid_with_total.html.erb +8 -8
  135. data/app/views/fe/questions/fe/_questions.html.erb +11 -5
  136. data/app/views/fe/questions/fe/_radio_button_field.html.erb +35 -19
  137. data/app/views/fe/questions/fe/_rating.html.erb +56 -18
  138. data/app/views/fe/questions/fe/_reference_discipler.html.erb +1 -1
  139. data/app/views/fe/questions/fe/_reference_friend.html.erb +1 -1
  140. data/app/views/fe/questions/fe/_reference_parent.html.erb +1 -1
  141. data/app/views/fe/questions/fe/_reference_peer.html.erb +1 -1
  142. data/app/views/fe/questions/fe/_reference_question.html.erb +40 -24
  143. data/app/views/fe/questions/fe/_reference_roommate.html.erb +1 -1
  144. data/app/views/fe/questions/fe/_reference_spiritual.html.erb +1 -1
  145. data/app/views/fe/questions/fe/_reference_staff.html.erb +1 -1
  146. data/app/views/fe/questions/fe/_state_chooser.html.erb +6 -6
  147. data/app/views/fe/questions/fe/_text_area_field.html.erb +14 -10
  148. data/app/views/fe/questions/fe/_text_field.html.erb +7 -6
  149. data/app/views/fe/questions/fe/_yes_no.html.erb +8 -8
  150. data/app/views/fe/questions/fe/_yes_no_field.erb +11 -8
  151. data/app/views/fe/reference_pages/_reference.html.erb +12 -12
  152. data/app/views/fe/reference_pages/edit.html.erb +4 -4
  153. data/app/views/fe/reference_sheets/done.html.erb +2 -2
  154. data/app/views/fe/reference_sheets/not_found.html.erb +3 -3
  155. data/app/views/fe/references/edit.html.erb +5 -5
  156. data/app/views/fe/references/show.html.erb +3 -3
  157. data/app/views/fe/references/submit.js.erb +3 -3
  158. data/app/views/fe/submit_pages/_thankyou.html.erb +1 -1
  159. data/app/views/fe/submit_pages/edit.html.erb +9 -9
  160. data/app/views/fe/submit_pages/error.js.erb +1 -1
  161. data/app/views/fe/submit_pages/submit.js.erb +2 -2
  162. data/app/views/layouts/fe/_error_messages_for.html.erb +1 -1
  163. data/app/views/layouts/fe/application.html.erb +3 -4
  164. data/app/views/layouts/fe/fe_admin.html.erb +30 -0
  165. data/app/views.current/fe/admin/elements/_errors.html.erb +11 -0
  166. data/app/views.current/fe/admin/elements/create.js.erb +12 -0
  167. data/app/views.current/fe/admin/elements/destroy.js.erb +4 -0
  168. data/app/views.current/fe/admin/elements/drop.js.erb +3 -0
  169. data/app/views.current/fe/admin/elements/duplicate.js.erb +3 -0
  170. data/app/views.current/fe/admin/elements/edit.js.erb +4 -0
  171. data/app/views.current/fe/admin/elements/error.js.erb +4 -0
  172. data/app/views.current/fe/admin/elements/new.js.erb +17 -0
  173. data/app/views.current/fe/admin/elements/update.js.erb +9 -0
  174. data/app/views.current/fe/admin/email_templates/_form.html.erb +8 -0
  175. data/app/views.current/fe/admin/email_templates/edit.html.erb +13 -0
  176. data/app/views.current/fe/admin/email_templates/index.html.erb +20 -0
  177. data/app/views.current/fe/admin/email_templates/new.html.erb +11 -0
  178. data/app/views.current/fe/admin/panels/_advanced_options.html.erb +49 -0
  179. data/app/views.current/fe/admin/panels/_common_boolean_fields.html.erb +1 -0
  180. data/app/views.current/fe/admin/panels/_common_boolean_fields_default.html.erb +11 -0
  181. data/app/views.current/fe/admin/panels/_common_fields.html.erb +23 -0
  182. data/app/views.current/fe/admin/panels/_condition.html.erb +6 -0
  183. data/app/views.current/fe/admin/panels/_insert.html.erb +39 -0
  184. data/app/views.current/fe/admin/panels/_nav_controls.html.erb +6 -0
  185. data/app/views.current/fe/admin/panels/_page.html.erb +3 -0
  186. data/app/views.current/fe/admin/panels/_pages_list.html.erb +16 -0
  187. data/app/views.current/fe/admin/panels/_prop_attachment_field.html.erb +2 -0
  188. data/app/views.current/fe/admin/panels/_prop_choice_field.html.erb +74 -0
  189. data/app/views.current/fe/admin/panels/_prop_date_field.html.erb +7 -0
  190. data/app/views.current/fe/admin/panels/_prop_element.html.erb +23 -0
  191. data/app/views.current/fe/admin/panels/_prop_page.html.erb +26 -0
  192. data/app/views.current/fe/admin/panels/_prop_paragraph.html.erb +46 -0
  193. data/app/views.current/fe/admin/panels/_prop_question_grid.html.erb +28 -0
  194. data/app/views.current/fe/admin/panels/_prop_question_grid_with_total.html.erb +14 -0
  195. data/app/views.current/fe/admin/panels/_prop_reference_question.html.erb +12 -0
  196. data/app/views.current/fe/admin/panels/_prop_section.html.erb +8 -0
  197. data/app/views.current/fe/admin/panels/_prop_sheet.html.erb +20 -0
  198. data/app/views.current/fe/admin/panels/_prop_text_field.html.erb +20 -0
  199. data/app/views.current/fe/admin/question_pages/_element.html.erb +28 -0
  200. data/app/views.current/fe/admin/question_pages/_element_show.html.erb +10 -0
  201. data/app/views.current/fe/admin/question_pages/_errors.html.erb +10 -0
  202. data/app/views.current/fe/admin/question_pages/_question_page.html.erb +13 -0
  203. data/app/views.current/fe/admin/question_pages/create.js.erb +11 -0
  204. data/app/views.current/fe/admin/question_pages/destroy.js.erb +5 -0
  205. data/app/views.current/fe/admin/question_pages/edit.js.erb +3 -0
  206. data/app/views.current/fe/admin/question_pages/error.js.erb +4 -0
  207. data/app/views.current/fe/admin/question_pages/show.js.erb +9 -0
  208. data/app/views.current/fe/admin/question_pages/show_panel.js.erb +3 -0
  209. data/app/views.current/fe/admin/question_pages/update.js.erb +2 -0
  210. data/app/views.current/fe/admin/question_sheets/_errors.html.erb +11 -0
  211. data/app/views.current/fe/admin/question_sheets/edit.js.erb +3 -0
  212. data/app/views.current/fe/admin/question_sheets/error.js.erb +5 -0
  213. data/app/views.current/fe/admin/question_sheets/index.html.erb +41 -0
  214. data/app/views.current/fe/admin/question_sheets/new.html.erb +15 -0
  215. data/app/views.current/fe/admin/question_sheets/show.html.erb +27 -0
  216. data/app/views.current/fe/admin/question_sheets/update.js.erb +2 -0
  217. data/app/views.current/fe/answer_pages/_answer_page.html.erb +53 -0
  218. data/app/views.current/fe/answer_pages/_element.html.erb +32 -0
  219. data/app/views.current/fe/answer_pages/_page_name.html.erb +1 -0
  220. data/app/views.current/fe/answer_pages/show.html.erb +39 -0
  221. data/app/views.current/fe/answer_pages/update.js.erb +13 -0
  222. data/app/views.current/fe/answer_sheets/_answer_sheet.html.erb +26 -0
  223. data/app/views.current/fe/answer_sheets/_element.html.erb +74 -0
  224. data/app/views.current/fe/answer_sheets/_incomplete.html.erb +10 -0
  225. data/app/views.current/fe/answer_sheets/_page_link.html.erb +9 -0
  226. data/app/views.current/fe/answer_sheets/_pages_list.html.erb +11 -0
  227. data/app/views.current/fe/answer_sheets/_submit_to.html.erb +1 -0
  228. data/app/views.current/fe/answer_sheets/_title.html.erb +1 -0
  229. data/app/views.current/fe/answer_sheets/edit.html.erb +66 -0
  230. data/app/views.current/fe/answer_sheets/incomplete.js.erb +11 -0
  231. data/app/views.current/fe/answer_sheets/index.html.erb +18 -0
  232. data/app/views.current/fe/answer_sheets/send_reference_invite.js.erb +8 -0
  233. data/app/views.current/fe/answer_sheets/show.html.erb +13 -0
  234. data/app/views.current/fe/applications/_logout.html.erb +1 -0
  235. data/app/views.current/fe/applications/show.html.erb +1 -0
  236. data/app/views.current/fe/help/builder.html +33 -0
  237. data/app/views.current/fe/help/question_grid.html +18 -0
  238. data/app/views.current/fe/questions/fe/_acceptance.html.erb +14 -0
  239. data/app/views.current/fe/questions/fe/_attachment_field.html.erb +165 -0
  240. data/app/views.current/fe/questions/fe/_checkbox_field.html.erb +53 -0
  241. data/app/views.current/fe/questions/fe/_country.html.erb +7 -0
  242. data/app/views.current/fe/questions/fe/_date_field.html.erb +7 -0
  243. data/app/views.current/fe/questions/fe/_date_field_mmyy.html.erb +9 -0
  244. data/app/views.current/fe/questions/fe/_drop_down_field.html.erb +8 -0
  245. data/app/views.current/fe/questions/fe/_paragraph.html.erb +1 -0
  246. data/app/views.current/fe/questions/fe/_question_grid.html.erb +70 -0
  247. data/app/views.current/fe/questions/fe/_question_grid_with_total.html.erb +64 -0
  248. data/app/views.current/fe/questions/fe/_questions.html.erb +15 -0
  249. data/app/views.current/fe/questions/fe/_radio_button_field.html.erb +60 -0
  250. data/app/views.current/fe/questions/fe/_rating.html.erb +64 -0
  251. data/app/views.current/fe/questions/fe/_reference_discipler.html.erb +1 -0
  252. data/app/views.current/fe/questions/fe/_reference_friend.html.erb +1 -0
  253. data/app/views.current/fe/questions/fe/_reference_parent.html.erb +1 -0
  254. data/app/views.current/fe/questions/fe/_reference_peer.html.erb +1 -0
  255. data/app/views.current/fe/questions/fe/_reference_question.html.erb +61 -0
  256. data/app/views.current/fe/questions/fe/_reference_roommate.html.erb +1 -0
  257. data/app/views.current/fe/questions/fe/_reference_spiritual.html.erb +1 -0
  258. data/app/views.current/fe/questions/fe/_reference_staff.html.erb +1 -0
  259. data/app/views.current/fe/questions/fe/_section.html.erb +1 -0
  260. data/app/views.current/fe/questions/fe/_state_chooser.html.erb +7 -0
  261. data/app/views.current/fe/questions/fe/_text_area_field.html.erb +17 -0
  262. data/app/views.current/fe/questions/fe/_text_field.html.erb +9 -0
  263. data/app/views.current/fe/questions/fe/_yes_no.html.erb +17 -0
  264. data/app/views.current/fe/questions/fe/_yes_no_field.erb +20 -0
  265. data/app/views.current/fe/reference_pages/_reference.html.erb +31 -0
  266. data/app/views.current/fe/reference_pages/edit.html.erb +24 -0
  267. data/app/views.current/fe/reference_sheets/done.html.erb +2 -0
  268. data/app/views.current/fe/reference_sheets/not_found.html.erb +5 -0
  269. data/app/views.current/fe/reference_sheets/submitted.js.erb +1 -0
  270. data/app/views.current/fe/references/edit.html.erb +8 -0
  271. data/app/views.current/fe/references/send_invite.js.erb +7 -0
  272. data/app/views.current/fe/references/show.html.erb +18 -0
  273. data/app/views.current/fe/references/submit.js.erb +3 -0
  274. data/app/views.current/fe/submit_pages/_errors.html.erb +1 -0
  275. data/app/views.current/fe/submit_pages/_thankyou.html.erb +2 -0
  276. data/app/views.current/fe/submit_pages/edit.html.erb +36 -0
  277. data/app/views.current/fe/submit_pages/error.js.erb +1 -0
  278. data/app/views.current/fe/submit_pages/submit.js.erb +3 -0
  279. data/app/views.current/layouts/fe/_error_messages_for.html.erb +7 -0
  280. data/app/views.current/layouts/fe/application.html.erb +47 -0
  281. data/app/{views/layouts/fe/fe.admin.html.erb → views.current/layouts/fe/fe_admin.html.erb} +4 -4
  282. data/config/initializers/paper_trail.rb +3 -0
  283. data/config/routes.rb +3 -1
  284. data/db/migrate/20131003041856_core.rb +23 -23
  285. data/db/migrate/20131003044250_create_reference_sheets.rb +1 -1
  286. data/db/migrate/20131003044436_add_element_and_answer_fields.rb +3 -3
  287. data/db/migrate/20131003044518_create_email_templates.rb +2 -2
  288. data/db/migrate/20131003044621_add_max_lengths.rb +1 -1
  289. data/db/migrate/20131003044714_create_join_table.rb +1 -1
  290. data/db/migrate/20131016162128_remove_question_id_from_element.rb +1 -1
  291. data/db/migrate/20140623153424_create_fe_people.rb +1 -1
  292. data/db/migrate/20140624180246_create_fe_addresses.rb +1 -1
  293. data/db/migrate/20140624182216_create_fe_phone_numbers.rb +1 -1
  294. data/db/migrate/20140625160545_create_fe_users.rb +1 -1
  295. data/db/migrate/20140808202507_add_conditional_type_to_elements.rb +1 -1
  296. data/db/migrate/20140808203609_add_conditional_answer_to_elements.rb +1 -1
  297. data/db/migrate/20141103204704_remove_short_value_column.rb +1 -1
  298. data/db/migrate/20141109154522_move_conditional_ids_used_for_choice_field_to_their_own_column.rb +1 -1
  299. data/db/migrate/20150504221439_add_all_element_ids_to_pages.rb +1 -1
  300. data/db/migrate/20150713022326_add_locale_columns.rb +1 -1
  301. data/db/migrate/20150714220730_add_locale_to_answer_sheet.rb +1 -1
  302. data/db/migrate/20150925181652_add_share_to_elements.rb +5 -0
  303. data/db/migrate/20150928085325_change_pages_all_element_ids_to_text.rb +1 -1
  304. data/db/migrate/20150930191538_add_locale_to_reference_sheets.rb +1 -1
  305. data/db/migrate/20151021181928_switch_conditional_answer_separator_to_semicolon.rb +7 -0
  306. data/db/migrate/20151021184250_add_question_sheet_id_in_refs.rb +12 -0
  307. data/db/migrate/20160201185838_add_visible_and_visibility_cache_key_to_reference_sheets.rb +6 -0
  308. data/db/migrate/20160805221415_add_rating_extra_labels.rb +10 -0
  309. data/db/migrate/20181108201746_create_versions.rb +80 -0
  310. data/db/migrate/20181218201130_increase_slug_length.rb +5 -0
  311. data/lib/fe/engine.rb +10 -10
  312. data/lib/fe/version.rb +1 -1
  313. data/lib/fe.rb +7 -1
  314. data/spec/controllers/fe/admin/elements_controller_spec.rb +30 -20
  315. data/spec/controllers/fe/admin/email_templates_controller_spec.rb +2 -2
  316. data/spec/controllers/fe/admin/question_pages_controller_spec.rb +1 -1
  317. data/spec/controllers/fe/admin/question_sheets_controller_spec.rb +4 -4
  318. data/spec/controllers/fe/answer_pages_controller_spec.rb +86 -30
  319. data/spec/controllers/fe/answer_sheets_controller_spec.rb +65 -9
  320. data/spec/dummy/app/assets/config/manifest.js +0 -0
  321. data/spec/dummy/app/models/user.rb +1 -1
  322. data/spec/dummy/app/views/layouts/application.html.erb +2 -2
  323. data/spec/dummy/config/application.rb +1 -0
  324. data/spec/dummy/config/environments/test.rb +3 -3
  325. data/spec/dummy/config/initializers/assets.rb +5 -2
  326. data/spec/dummy/config/initializers/fast_gettext.rb +1 -1
  327. data/spec/dummy/config/initializers/to_unsafe_h.rb +5 -0
  328. data/spec/dummy/config/initializers/to_unsafe_h.rb.new +5 -0
  329. data/spec/dummy/db/migrate/20141203214017_core.fe_engine.rb +23 -23
  330. data/spec/dummy/db/migrate/20141203214018_create_reference_sheets.fe_engine.rb +1 -1
  331. data/spec/dummy/db/migrate/20141203214019_add_element_and_answer_fields.fe_engine.rb +3 -3
  332. data/spec/dummy/db/migrate/20141203214020_create_email_templates.fe_engine.rb +2 -2
  333. data/spec/dummy/db/migrate/20141203214021_add_max_lengths.fe_engine.rb +1 -1
  334. data/spec/dummy/db/migrate/20141203214022_create_join_table.fe_engine.rb +1 -1
  335. data/spec/dummy/db/migrate/20141203214023_remove_question_id_from_element.fe_engine.rb +1 -1
  336. data/spec/dummy/db/migrate/20141203214024_create_fe_people.fe_engine.rb +1 -1
  337. data/spec/dummy/db/migrate/20141203214025_create_fe_addresses.fe_engine.rb +1 -1
  338. data/spec/dummy/db/migrate/20141203214027_create_fe_users.fe_engine.rb +1 -1
  339. data/spec/dummy/db/migrate/20141203214028_add_conditional_type_to_elements.fe_engine.rb +1 -1
  340. data/spec/dummy/db/migrate/20141203214029_add_conditional_answer_to_elements.fe_engine.rb +1 -1
  341. data/spec/dummy/db/migrate/20141203214030_remove_short_value_column.fe_engine.rb +1 -1
  342. data/spec/dummy/db/migrate/20141203214031_move_conditional_ids_used_for_choice_field_to_their_own_column.fe_engine.rb +1 -1
  343. data/spec/dummy/db/migrate/20150123215803_create_users.rb +1 -1
  344. data/spec/dummy/db/migrate/20150504222619_add_all_element_ids_to_pages.fe_engine.rb +1 -1
  345. data/spec/dummy/db/migrate/20150925192557_add_share_to_elements.fe_engine.rb +6 -0
  346. data/spec/dummy/db/migrate/20150930190001_create_fe_phone_numbers.fe_engine.rb +1 -1
  347. data/spec/dummy/db/migrate/20150930190002_add_locale_columns.fe_engine.rb +1 -1
  348. data/spec/dummy/db/migrate/20150930190003_add_locale_to_answer_sheet.fe_engine.rb +1 -1
  349. data/spec/dummy/db/migrate/20150930190004_change_pages_all_element_ids_to_text.fe_engine.rb +1 -1
  350. data/spec/dummy/db/migrate/20150930191756_add_locale_to_reference_sheets.fe_engine.rb +1 -1
  351. data/spec/dummy/db/migrate/20151021190027_add_question_sheet_id_in_refs.fe_engine.rb +13 -0
  352. data/spec/dummy/db/migrate/20160204164612_switch_conditional_answer_separator_to_semicolon.fe_engine.rb +8 -0
  353. data/spec/dummy/db/migrate/20160204164613_add_visible_and_visibility_cache_key_to_reference_sheets.fe_engine.rb +7 -0
  354. data/spec/dummy/db/migrate/20181108201746_create_versions.rb +80 -0
  355. data/spec/dummy/db/schema.rb +71 -79
  356. data/spec/dummy/log/test.log +101278 -419
  357. data/spec/factories/answer_sheet_question_sheets.rb +1 -1
  358. data/spec/factories/answer_sheets.rb +2 -2
  359. data/spec/factories/answers.rb +1 -1
  360. data/spec/factories/applications.rb +3 -3
  361. data/spec/factories/dummy_applications.rb +3 -3
  362. data/spec/factories/dummy_people.rb +3 -3
  363. data/spec/factories/dummy_users.rb +3 -3
  364. data/spec/factories/elements.rb +21 -21
  365. data/spec/factories/email_templates.rb +3 -3
  366. data/spec/factories/fe_addresses.rb +10 -10
  367. data/spec/factories/fe_email_addresses.rb +3 -3
  368. data/spec/factories/fe_email_templates.rb +4 -4
  369. data/spec/factories/fe_people.rb +5 -5
  370. data/spec/factories/fe_phone_numbers.rb +3 -3
  371. data/spec/factories/fe_user.rb +3 -3
  372. data/spec/factories/page.rb +1 -1
  373. data/spec/factories/page_elements.rb +1 -1
  374. data/spec/factories/paragraphs.rb +1 -1
  375. data/spec/factories/question_sheet.rb +2 -2
  376. data/spec/factories/reference_questions.rb +1 -1
  377. data/spec/factories/reference_sheets.rb +1 -1
  378. data/spec/jobs/fe/update_reference_sheet_visibility_job_spec.rb +40 -0
  379. data/spec/models/fe/answer_sheet_question_sheet_spec.rb +1 -1
  380. data/spec/models/fe/answer_spec.rb +2 -2
  381. data/spec/models/fe/application_spec.rb +94 -1
  382. data/spec/models/fe/choice_field_spec.rb +47 -1
  383. data/spec/models/fe/condition_spec.rb +2 -2
  384. data/spec/models/fe/element_spec.rb +252 -60
  385. data/spec/models/fe/email_template_spec.rb +1 -1
  386. data/spec/models/fe/page_element_spec.rb +1 -1
  387. data/spec/models/fe/page_spec.rb +57 -12
  388. data/spec/models/fe/person_spec.rb +1 -1
  389. data/spec/models/fe/question_set_spec.rb +91 -0
  390. data/spec/models/fe/question_sheet_spec.rb +11 -15
  391. data/spec/models/fe/question_spec.rb +73 -6
  392. data/spec/models/fe/reference_question_spec.rb +20 -0
  393. data/spec/models/fe/reference_sheet_spec.rb +287 -4
  394. data/spec/models/fe/text_field_spec.rb +22 -0
  395. data/spec/rails_helper.rb +79 -76
  396. metadata +195 -57
  397. data/app/assets/javascripts/fe/jquery.scrollTo-min.js +0 -7
  398. data/app/controllers/fe/concerns/answer_pages_controller_concern.rb +0 -84
  399. data/app/models/fe/concerns/answer_sheet_concern.rb +0 -85
  400. data/spec/dummy/db/migrate/20141203214026_create_create_fe_phone_numbers.fe_engine.rb +0 -17
  401. data/spec/dummy/log/development.log +0 -5
  402. /data/app/{assets/stylesheets/360front.css → views.current/fe/admin/elements/reorder.js.erb} +0 -0
@@ -1,4 +1,4 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :answer_sheet_question_sheet, class: Fe::AnswerSheetQuestionSheet do
3
3
  end
4
4
  end
@@ -1,5 +1,5 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :answer_sheet, class: Fe::Application do
3
- created_at Time.now
3
+ created_at { Time.now }
4
4
  end
5
5
  end
@@ -1,4 +1,4 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :answer, class: Fe::Answer do
3
3
  end
4
4
  end
@@ -1,6 +1,6 @@
1
- # Read about factories at https://github.com/thoughtbot/factory_girl
1
+ # Read about factories at https://github.com/thoughtbot/factory_bot
2
2
 
3
- FactoryGirl.define do
4
- factory :application, :class => 'Fe::Application' do
3
+ FactoryBot.define do
4
+ factory :application, class: 'Fe::Application' do
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
- # Read about factories at https://github.com/thoughtbot/factory_girl
1
+ # Read about factories at https://github.com/thoughtbot/factory_bot
2
2
 
3
- FactoryGirl.define do
4
- factory :dummy_application, :class => 'Application' do
3
+ FactoryBot.define do
4
+ factory :dummy_application, class: 'Application' do
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
- # Read about factories at https://github.com/thoughtbot/factory_girl
1
+ # Read about factories at https://github.com/thoughtbot/factory_bot
2
2
 
3
- FactoryGirl.define do
4
- factory :dummy_person, :class => 'Person' do
3
+ FactoryBot.define do
4
+ factory :dummy_person, class: 'Person' do
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
- # Read about factories at https://github.com/thoughtbot/factory_girl
1
+ # Read about factories at https://github.com/thoughtbot/factory_bot
2
2
 
3
- FactoryGirl.define do
4
- factory :dummy_user, :class => 'User' do
3
+ FactoryBot.define do
4
+ factory :dummy_user, class: 'User' do
5
5
  end
6
6
  end
@@ -1,44 +1,44 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :element, class: Fe::Element do
3
3
  sequence :label do |n| "Label Element #{n}" end
4
- required true
4
+ required { true }
5
5
 
6
6
  factory :choice_field_element, class: Fe::ChoiceField do
7
- kind "Fe::ChoiceField"
8
- style "yes-no"
9
- content "Choice One\r\nChoice Two\r\nChoice Three"
7
+ kind { "Fe::ChoiceField" }
8
+ style { "yes-no" }
9
+ content { "Choice One\r\nChoice Two\r\nChoice Three" }
10
10
  end
11
11
  factory :date_field_element, class: Fe::DateField do
12
- kind "Fe::DateField"
13
- style "date"
12
+ kind { "Fe::DateField" }
13
+ style { "date" }
14
14
  end
15
15
  factory :text_field_element, class: Fe::TextField do
16
- kind "Fe::TextField"
17
- style "short"
16
+ kind { "Fe::TextField" }
17
+ style { "short" }
18
18
  end
19
19
  factory :question_grid, class: Fe::QuestionGrid do
20
- kind "Fe::QuestionGrid"
21
- style "grid"
20
+ kind { "Fe::QuestionGrid" }
21
+ style { "grid" }
22
22
  end
23
23
  factory :question_grid_with_total, class: Fe::QuestionGridWithTotal do
24
- kind "Fe::QuestionGridWithTotal"
25
- style "grid"
24
+ kind { "Fe::QuestionGridWithTotal" }
25
+ style { "grid" }
26
26
  end
27
27
  factory :reference_element, class: Fe::ReferenceQuestion do
28
- kind "Fe::ReferenceQuestion"
29
- style "staff"
28
+ kind { "Fe::ReferenceQuestion" }
29
+ style { "staff" }
30
30
  end
31
31
  factory :section, class: Fe::Section do
32
- kind "Fe::Section"
33
- style "section"
32
+ kind { "Fe::Section" }
33
+ style { "section" }
34
34
  end
35
35
  factory :attachment_field_element, class: Fe::AttachmentField do
36
- kind "Fe::AttachmentField"
37
- style "section"
36
+ kind { "Fe::AttachmentField" }
37
+ style { "section" }
38
38
  end
39
39
  factory :state_chooser_element, class: Fe::StateChooser do
40
- kind "Fe::StateChooser"
41
- style "section"
40
+ kind { "Fe::StateChooser" }
41
+ style { "section" }
42
42
  end
43
43
  end
44
44
  end
@@ -1,5 +1,5 @@
1
- FactoryGirl.define do
2
- factory :email_template, :class => 'Fe::EmailTemplate' do
3
- name "Staff Payment Request"
1
+ FactoryBot.define do
2
+ factory :email_template, class: 'Fe::EmailTemplate' do
3
+ name { "Staff Payment Request" }
4
4
  end
5
5
  end
@@ -1,14 +1,14 @@
1
- # Read about factories at https://github.com/thoughtbot/factory_girl
1
+ # Read about factories at https://github.com/thoughtbot/factory_bot
2
2
 
3
- FactoryGirl.define do
3
+ FactoryBot.define do
4
4
  factory :fe_address, class: Fe::Address do
5
- address1 "MyString"
6
- address2 "MyString"
7
- address3 "MyString"
8
- address4 "MyString"
9
- city "MyString"
10
- state "MyString"
11
- zip "MyString"
12
- country "MyString"
5
+ address1 { "MyString" }
6
+ address2 { "MyString" }
7
+ address3 { "MyString" }
8
+ address4 { "MyString" }
9
+ city { "MyString" }
10
+ state { "MyString" }
11
+ zip { "MyString" }
12
+ country { "MyString" }
13
13
  end
14
14
  end
@@ -1,7 +1,7 @@
1
- # Read about factories at https://github.com/thoughtbot/factory_girl
1
+ # Read about factories at https://github.com/thoughtbot/factory_bot
2
2
 
3
- FactoryGirl.define do
4
- factory :fe_email_address, :class => Fe::EmailAddress do
3
+ FactoryBot.define do
4
+ factory :fe_email_address, class: Fe::EmailAddress do
5
5
  sequence(:email) { |n| "email_#{n}@email.com" }
6
6
  end
7
7
  end
@@ -1,9 +1,9 @@
1
- # Read about factories at https://github.com/thoughtbot/factory_girl
1
+ # Read about factories at https://github.com/thoughtbot/factory_bot
2
2
 
3
- FactoryGirl.define do
4
- factory :fe_email_template, :class => Fe::EmailTemplate do
3
+ FactoryBot.define do
4
+ factory :fe_email_template, class: Fe::EmailTemplate do
5
5
  sequence(:content) { |n| "content_#{n}" }
6
6
  sequence(:subject) { |n| "subject#{n}" }
7
- enabled true
7
+ enabled { true }
8
8
  end
9
9
  end
@@ -1,8 +1,8 @@
1
- # Read about factories at https://github.com/thoughtbot/factory_girl
1
+ # Read about factories at https://github.com/thoughtbot/factory_bot
2
2
 
3
- FactoryGirl.define do
4
- factory :fe_person, :class => 'Fe::Person' do
5
- first_name "MyString"
6
- last_name "MyString"
3
+ FactoryBot.define do
4
+ factory :fe_person, class: 'Fe::Person' do
5
+ first_name { "MyString" }
6
+ last_name { "MyString" }
7
7
  end
8
8
  end
@@ -1,7 +1,7 @@
1
- # Read about factories at https://github.com/thoughtbot/factory_girl
1
+ # Read about factories at https://github.com/thoughtbot/factory_bot
2
2
 
3
- FactoryGirl.define do
4
- factory :fe_phone_number, :class => Fe::PhoneNumber do
3
+ FactoryBot.define do
4
+ factory :fe_phone_number, class: Fe::PhoneNumber do
5
5
  sequence(:number) { |n| "#{n}" * 6 }
6
6
  end
7
7
  end
@@ -1,6 +1,6 @@
1
- # Read about factories at https://github.com/thoughtbot/factory_girl
1
+ # Read about factories at https://github.com/thoughtbot/factory_bot
2
2
 
3
- FactoryGirl.define do
4
- factory :fe_user, :class => 'Fe::User' do
3
+ FactoryBot.define do
4
+ factory :fe_user, class: 'Fe::User' do
5
5
  end
6
6
  end
@@ -1,4 +1,4 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
 
3
3
  factory :page, class: Fe::Page do
4
4
  sequence :label do |n| "Label Page #{n}" end
@@ -1,4 +1,4 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :page_element, class: Fe::PageElement do
3
3
  end
4
4
  end
@@ -1,4 +1,4 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :paragraph, class: Fe::Paragraph do
3
3
  end
4
4
  end
@@ -1,10 +1,10 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :question_sheet, class: Fe::QuestionSheet do
3
3
  sequence(:label) { |n| "Question Sheet #{n}"}
4
4
 
5
5
  factory :question_sheet_with_pages do
6
6
  transient do
7
- pages_count 5
7
+ pages_count { 5 }
8
8
  end
9
9
 
10
10
  after(:create) do |question_sheet, evaluator|
@@ -1,4 +1,4 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :reference_question, class: Fe::ReferenceQuestion do
3
3
  end
4
4
  end
@@ -1,4 +1,4 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :reference_sheet, class: Fe::ReferenceSheet do
3
3
  sequence(:email) { |n| "email_#{n}@email.com" }
4
4
  sequence(:first_name) { |n| "fn_#{n}" }
@@ -0,0 +1,40 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe Fe::UpdateReferenceSheetVisibilityJob, type: :job do
4
+ it "matches with enqueued job" do
5
+ expect {
6
+ Fe::UpdateReferenceSheetVisibilityJob.perform_later(create(:application), [1])
7
+ }.to have_enqueued_job(Fe::UpdateReferenceSheetVisibilityJob)
8
+ end
9
+
10
+ context '#perform' do
11
+ let(:qs) { create(:question_sheet_with_pages) }
12
+ let(:qs2) { create(:question_sheet_with_pages) }
13
+ let(:p) { qs.pages.first }
14
+ let(:p2) { qs.pages.first }
15
+ let(:ref_el) { create(:reference_element) }
16
+ let(:ref_el2) { create(:reference_element) }
17
+ let(:ref_el3) { create(:reference_element) }
18
+ let(:app) { create(:application) }
19
+ let(:affecting_el) { create(:text_field_element) }
20
+
21
+ before do
22
+ p.elements << ref_el
23
+ p2.elements << ref_el2
24
+ app.question_sheets << qs << qs2
25
+ end
26
+
27
+ it "calls update_visible for all refs whose visibility_affecting_element_ids include the answer's question" do
28
+ expect(app).to receive(:question_sheets_all_reference_elements).and_return([ref_el, ref_el2])
29
+ expect(ref_el).to receive(:visibility_affecting_element_ids).and_return([affecting_el.id])
30
+ expect(ref_el).to receive(:update_visible)
31
+ ref_el_arr = [ref_el]
32
+ allow(app).to receive(:all_references).and_return(ref_el_arr)
33
+ allow(ref_el_arr).to receive(:where).with(question_id: ref_el.id).and_return(ref_el_arr)
34
+ expect(ref_el2).to receive(:visibility_affecting_element_ids).and_return([])
35
+ qs = Fe::QuestionSet.new([affecting_el], app)
36
+ puts app.object_id
37
+ Fe::UpdateReferenceSheetVisibilityJob.new.perform(app, qs.questions.collect(&:id))
38
+ end
39
+ end
40
+ end
@@ -1,6 +1,6 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe Fe::AnswerSheetQuestionSheet do
3
+ describe Fe::AnswerSheetQuestionSheet, type: :model do
4
4
  it { expect belong_to :answer_sheet }
5
5
  it { expect belong_to :question_sheet }
6
6
  end
@@ -1,9 +1,9 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe Fe::Answer do
3
+ describe Fe::Answer, type: :model do
4
4
  it { expect belong_to :answer_sheet }
5
5
  it { expect belong_to :question }
6
- it { expect ensure_length_of :short_value }
6
+ it { expect validate_length_of :short_value }
7
7
 
8
8
  it '#to_s' do
9
9
  answer = Fe::Answer.new
@@ -1,8 +1,101 @@
1
1
  require 'rails_helper'
2
2
 
3
- RSpec.describe Fe::Application, :type => :model do
3
+ RSpec.describe Fe::Application, type: :model do
4
4
  it { expect have_many :answer_sheet_question_sheets }
5
5
  it { expect have_many :question_sheets }
6
6
  it { expect have_many :answers }
7
7
  it { expect have_many :reference_sheets }
8
+
9
+ let(:qs) { create(:question_sheet_with_pages) }
10
+ let(:qs2) { create(:question_sheet_with_pages) }
11
+ let(:p) { qs.pages.first }
12
+ let(:p2) { qs.pages.first }
13
+ let(:ref_el) { create(:reference_element) }
14
+ let(:ref_el2) { create(:reference_element) }
15
+ let(:ref_el3) { create(:reference_element) }
16
+ let(:app) { create(:application) }
17
+
18
+ before do
19
+ p.elements << ref_el
20
+ p2.elements << ref_el2
21
+ app.question_sheets << qs << qs2
22
+ end
23
+
24
+ context '#percentage_complete' do
25
+ before do
26
+ @q = create(:question_sheet_with_pages)
27
+ @p = @q.pages.first
28
+ @p2 = @q.pages.second
29
+
30
+ @yesno = create(:choice_field_element, required: false, label: 'yesno lvl1 hidden-gridparent') # answered
31
+ @grid = create(:question_grid, choice_field: @yesno, label: 'hidden grid')
32
+ @text1 = create(:text_field_element, label: 'lvl2 hidden required', question_grid: @grid, required: true) # NOT answered
33
+ @text2 = create(:text_field_element, label: 'lvl2 hidden required2', question_grid: @grid, required: true) # answered (but doesn't count because hidden)
34
+ @text3 = create(:text_field_element, label: 'lvl2 hidden optional', question_grid: @grid, required: false) # answered (but doesn't count because hidden)
35
+
36
+ @text4 = create(:text_field_element, label: 'lvl1 optional', required: false) # answered
37
+ @text5 = create(:text_field_element, label: 'lvl1 required', required: true, object_name: 'applicant', attribute_name: 'first_name') # answered
38
+ @text6 = create(:text_field_element, label: 'lvl1 required2', required: true) # NOT answered
39
+
40
+ @yesno2 = create(:choice_field_element, required: false, label: 'yesno2 lvl1 visible-gridparent2') # answered
41
+ @grid2 = create(:question_grid, choice_field: @yesno2, label: 'visible grid')
42
+ @text7 = create(:text_field_element, label: 'lvl2 visible required', question_grid: @grid2, required: true) # NOT answered
43
+ @text8 = create(:text_field_element, label: 'lvl2 visible required2', question_grid: @grid2, required: true) # answered
44
+ @text9 = create(:text_field_element, label: 'lvl2 visible optional', question_grid: @grid2, required: false) # answered
45
+
46
+ @p.elements << @yesno
47
+ @p.elements << @yesno2
48
+ @p.elements << @text4
49
+ @p.elements << @text5
50
+ @p2.elements << @text6
51
+
52
+ person = create(:fe_person)
53
+ @a = create(:application, applicant_id: person.id)
54
+
55
+ @yesno.set_response('no', @a)
56
+ @yesno.save_response(@a)
57
+ @yesno2.set_response('yes', @a)
58
+ @yesno2.save_response(@a)
59
+ @text2.set_response('this answer is not counted, yesno parent is no so this is hidden', @a)
60
+ @text2.save_response(@a)
61
+ @text3.set_response('this answer is not counted, yesno parent is no so this is hidden', @a)
62
+ @text3.save_response(@a)
63
+ @text4.set_response('this answer is counted when optional included', @a)
64
+ @text4.save_response(@a)
65
+ @text5.set_response('this answer is counted', @a)
66
+ @text5.save_response(@a)
67
+
68
+ @text8.set_response('this answer is counted', @a)
69
+ @text8.save_response(@a)
70
+ @text9.set_response('this answer is counted when optional included', @a)
71
+ @text9.save_response(@a)
72
+
73
+ FactoryBot.create(:answer_sheet_question_sheet, answer_sheet: @a, question_sheet: @q)
74
+ end
75
+
76
+ it 'counts only required elements by default' do
77
+ @a.reload
78
+ expect(@a.percent_complete).to eq(50) # 2 of 4
79
+ end
80
+ it 'counts all questions, not just required ones, when specified' do
81
+ @a.reload
82
+ expect(@a.percent_complete(false)).to eq(75) # 6 of 8 (2 yes/no + 3 txts within the 1 visible grid + 2 txts directly on page, 1 on other page)
83
+ end
84
+ it 'supports specifying a page' do
85
+ @a.reload
86
+ expect(@a.percent_complete(false, [@p])).to eq(85) # 6 of 7 (2 yes/no + 3 txts within the 1 visible grid + 2 txts directly on page)
87
+ end
88
+ end
89
+
90
+ context '#question_sheets_all_reference_elements' do
91
+ it 'returns all reference elements for all question sheets' do
92
+ expect(app.question_sheets_all_reference_elements).to eq([ref_el, ref_el2])
93
+ end
94
+
95
+ it 'returns a reference that was just added' do
96
+ expect(app.question_sheets_all_reference_elements).to eq([ref_el, ref_el2])
97
+ p.elements << ref_el3
98
+ expect(app.question_sheets_all_reference_elements).to eq([ref_el, ref_el2, ref_el3])
99
+ end
100
+ end
8
101
  end
@@ -42,11 +42,57 @@ describe Fe::ChoiceField do
42
42
  end
43
43
  if RUBY_VERSION =~ /^2/
44
44
  it 'should work for a remote source using rexml' do
45
- expect(Fe::ChoiceField.new(style: 'drop-down', source: 'https://raw.githubusercontent.com/CruGlobal/qe/fe/spec/support/choices.xml', text_xpath: '*/choice', value_xpath: '*/value').choices).to eq([["A","1"],["B","0"]])
45
+ expect(Fe::ChoiceField.new(style: 'drop-down', source: 'https://raw.githubusercontent.com/CruGlobal/fe/master/spec/support/choices.xml', text_xpath: '*/choice', value_xpath: '*/value').choices).to eq([["A","1"],["B","0"]])
46
46
  end
47
47
  end
48
48
  it 'should work for content set' do
49
49
  expect(Fe::ChoiceField.new(style: 'drop-down', content: "1;A\n0;B").choices).to eq([["A","1"],["B","0"]])
50
50
  end
51
51
  end
52
+
53
+ context '#conditional_match' do
54
+ it 'returns true if any of the options from conditional_answer are selected' do
55
+ qs = create(:question_sheet)
56
+ app = create(:application)
57
+ app.question_sheets << qs
58
+ e = create(:choice_field_element, conditional_answer: 'a;b', style: 'drop-down')
59
+ qs.pages << create(:page)
60
+ qs.pages.reload.first.elements << e
61
+ a = create(:answer, question: e, value: 'a', answer_sheet_id: app.id)
62
+ a = create(:answer, question: e, value: 'b', answer_sheet_id: app.id)
63
+ a = create(:answer, question: e, value: 'c', answer_sheet_id: app.id)
64
+ expect(e.conditional_match(app)).to be true
65
+ end
66
+ it 'returns false if any of none of the options match conditional_answer' do
67
+ qs = create(:question_sheet)
68
+ app = create(:application)
69
+ app.question_sheets << qs
70
+ e = create(:choice_field_element, conditional_answer: 'a;b', style: 'drop-down')
71
+ qs.pages << create(:page)
72
+ qs.pages.reload.first.elements << e
73
+ a = create(:answer, question: e, value: 'c', answer_sheet_id: app.id)
74
+ a = create(:answer, question: e, value: 'd', answer_sheet_id: app.id)
75
+ expect(e.conditional_match(app)).to be false
76
+ end
77
+ it 'returns true if the conditional_answer is empty and no options are selected' do
78
+ qs = create(:question_sheet)
79
+ app = create(:application)
80
+ app.question_sheets << qs
81
+ e = create(:choice_field_element, conditional_answer: '', style: 'drop-down')
82
+ qs.pages << create(:page)
83
+ qs.pages.reload.first.elements << e
84
+ expect(e.conditional_match(app)).to be true
85
+ end
86
+ it 'returns true regardless of whitespace separating conditional answers' do
87
+ qs = create(:question_sheet)
88
+ app = create(:application)
89
+ app.question_sheets << qs
90
+ e = create(:choice_field_element, conditional_answer: "a; b\n", style: 'drop-down')
91
+ qs.pages << create(:page)
92
+ qs.pages.reload.first.elements << e
93
+ a = create(:answer, question: e, value: 'a', answer_sheet_id: app.id)
94
+ a = create(:answer, question: e, value: 'd', answer_sheet_id: app.id)
95
+ expect(e.conditional_match(app)).to be true
96
+ end
97
+ end
52
98
  end
@@ -1,8 +1,8 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe Fe::Condition do
3
+ describe Fe::Condition, type: :model do
4
4
  it { expect belong_to :question_sheet }
5
5
  it { expect belong_to :trigger }
6
6
  it { expect validate_presence_of :expression }
7
- it { expect ensure_length_of :expression }
7
+ it { expect validate_length_of :expression }
8
8
  end