fe 0.0.3 → 0.0.4

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 (303) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +36 -1
  3. data/Rakefile +22 -13
  4. data/app/assets/javascripts/application.js.erb +1 -0
  5. data/app/assets/javascripts/fe/admin.js +1 -4
  6. data/app/assets/javascripts/fe/{qe.admin.js → fe.admin.js} +15 -0
  7. data/app/assets/javascripts/fe/{qe.common.js → fe.common.js} +0 -0
  8. data/app/assets/javascripts/fe/{qe.public.js → fe.public.js} +115 -27
  9. data/app/assets/javascripts/fe/rails.extra.js +6 -0
  10. data/app/assets/stylesheets/fe/{qe.screen.css.scss.erb → fe.screen.css.scss.erb} +12 -18
  11. data/app/controllers/fe/admin/elements_controller.rb +4 -4
  12. data/app/controllers/fe/admin/email_templates_controller.rb +10 -4
  13. data/app/controllers/fe/admin/question_pages_controller.rb +3 -3
  14. data/app/controllers/fe/admin/question_sheets_controller.rb +6 -5
  15. data/app/controllers/fe/applications_controller.rb +183 -0
  16. data/app/controllers/fe/concerns/answer_pages_controller_concern.rb +5 -2
  17. data/app/controllers/fe/concerns/answer_sheets_controller_concern.rb +10 -6
  18. data/app/controllers/fe/concerns/application_controller_concern.rb +34 -0
  19. data/app/controllers/fe/payments_controller.rb +184 -0
  20. data/app/controllers/fe/reference_pages_controller.rb +41 -0
  21. data/app/controllers/fe/reference_sheets_controller.rb +1 -1
  22. data/app/controllers/fe/references_controller.rb +74 -0
  23. data/app/controllers/fe/submit_pages_controller.rb +22 -0
  24. data/app/helpers/fe/application_helper.rb +14 -5
  25. data/app/mailers/fe/notifier.rb +1 -1
  26. data/app/models/fe/address.rb +3 -0
  27. data/app/models/fe/answer_pages_presenter.rb +1 -1
  28. data/app/models/fe/answer_sheet.rb +6 -2
  29. data/app/models/fe/answer_sheet_question_sheet.rb +1 -1
  30. data/app/models/fe/application.rb +58 -0
  31. data/app/models/fe/choice_field.rb +1 -1
  32. data/app/models/fe/concerns/answer_concern.rb +10 -11
  33. data/app/models/fe/concerns/answer_pages_presenter_concern.rb +16 -7
  34. data/app/models/fe/concerns/answer_sheet_concern.rb +10 -16
  35. data/app/models/fe/concerns/choice_field_concern.rb +21 -10
  36. data/app/models/fe/condition.rb +1 -1
  37. data/app/models/fe/current_address.rb +12 -0
  38. data/app/models/fe/date_field.rb +3 -3
  39. data/app/models/fe/element.rb +66 -9
  40. data/app/models/fe/email_address.rb +7 -0
  41. data/app/models/fe/email_template.rb +1 -1
  42. data/app/models/fe/option.rb +1 -1
  43. data/app/models/fe/option_group.rb +1 -1
  44. data/app/models/fe/page.rb +13 -4
  45. data/app/models/fe/page_element.rb +13 -1
  46. data/app/models/fe/page_link.rb +1 -1
  47. data/app/models/fe/paragraph.rb +1 -1
  48. data/app/models/fe/payment.rb +32 -7
  49. data/app/models/fe/payment_question.rb +1 -1
  50. data/app/models/fe/person.rb +33 -0
  51. data/app/models/fe/phone_number.rb +5 -0
  52. data/app/models/fe/presenter.rb +3 -2
  53. data/app/models/fe/question.rb +7 -7
  54. data/app/models/fe/question_grid.rb +1 -2
  55. data/app/models/fe/question_set.rb +1 -1
  56. data/app/models/fe/question_sheet.rb +9 -3
  57. data/app/models/fe/reference_question.rb +2 -2
  58. data/app/models/fe/reference_sheet.rb +28 -4
  59. data/app/models/fe/section.rb +1 -1
  60. data/app/models/fe/state_chooser.rb +1 -1
  61. data/app/models/fe/text_field.rb +3 -3
  62. data/app/models/fe/user.rb +3 -0
  63. data/app/models/staff.rb +120 -0
  64. data/app/views/fe/admin/elements/_errors.html.erb +11 -1
  65. data/app/views/fe/admin/elements/create.js.erb +3 -3
  66. data/app/views/fe/admin/elements/destroy.js.erb +2 -2
  67. data/app/views/fe/admin/elements/drop.js.erb +1 -1
  68. data/app/views/fe/admin/elements/duplicate.js.erb +1 -1
  69. data/app/views/fe/admin/elements/edit.js.erb +1 -1
  70. data/app/views/fe/admin/elements/error.js.erb +1 -1
  71. data/app/views/fe/admin/elements/new.js.erb +3 -3
  72. data/app/views/fe/admin/elements/update.js.erb +2 -2
  73. data/app/views/fe/admin/email_templates/edit.html.erb +9 -9
  74. data/app/views/fe/admin/email_templates/index.html.erb +3 -3
  75. data/app/views/fe/admin/email_templates/new.html.erb +2 -2
  76. data/app/views/fe/admin/panels/_advanced_options.html.erb +28 -1
  77. data/app/views/fe/admin/panels/_common_fields.html.erb +1 -1
  78. data/app/views/fe/admin/panels/_condition.html.erb +1 -1
  79. data/app/views/fe/admin/panels/_insert.html.erb +13 -13
  80. data/app/views/fe/admin/panels/_nav_controls.html.erb +4 -4
  81. data/app/views/fe/admin/panels/_page.html.erb +2 -2
  82. data/app/views/fe/admin/panels/_pages_list.html.erb +4 -4
  83. data/app/views/fe/admin/panels/_prop_attachment_field.html.erb +1 -1
  84. data/app/views/fe/admin/panels/_prop_choice_field.html.erb +10 -10
  85. data/app/views/fe/admin/panels/_prop_date_field.html.erb +1 -1
  86. data/app/views/fe/admin/panels/_prop_element.html.erb +7 -7
  87. data/app/views/fe/admin/panels/_prop_page.html.erb +2 -2
  88. data/app/views/fe/admin/panels/_prop_paragraph.html.erb +1 -1
  89. data/app/views/fe/admin/panels/_prop_payment_question.html.erb +1 -0
  90. data/app/views/fe/admin/panels/_prop_question_grid.html.erb +2 -2
  91. data/app/views/fe/admin/panels/_prop_question_grid_with_total.html.erb +1 -1
  92. data/app/views/fe/admin/panels/_prop_reference_question.html.erb +2 -2
  93. data/app/views/fe/admin/panels/_prop_section.html.erb +1 -1
  94. data/app/views/fe/admin/panels/_prop_sheet.html.erb +9 -9
  95. data/app/views/fe/admin/panels/_prop_text_field.html.erb +10 -10
  96. data/app/views/fe/admin/question_pages/_element.html.erb +5 -5
  97. data/app/views/fe/admin/question_pages/_element_show.html.erb +1 -1
  98. data/app/views/fe/admin/question_pages/_errors.html.erb +10 -1
  99. data/app/views/fe/admin/question_pages/_question_page.html.erb +3 -3
  100. data/app/views/fe/admin/question_pages/create.js.erb +3 -3
  101. data/app/views/fe/admin/question_pages/destroy.js.erb +3 -3
  102. data/app/views/fe/admin/question_pages/edit.js.erb +1 -1
  103. data/app/views/fe/admin/question_pages/show.js.erb +3 -2
  104. data/app/views/fe/admin/question_pages/show_panel.js.erb +1 -1
  105. data/app/views/fe/admin/question_sheets/_errors.html.erb +11 -1
  106. data/app/views/fe/admin/question_sheets/edit.js.erb +1 -1
  107. data/app/views/fe/admin/question_sheets/error.js.erb +1 -1
  108. data/app/views/fe/admin/question_sheets/index.html.erb +8 -8
  109. data/app/views/fe/admin/question_sheets/new.html.erb +1 -1
  110. data/app/views/fe/admin/question_sheets/show.html.erb +18 -18
  111. data/app/views/fe/admin/question_sheets/update.js.erb +1 -1
  112. data/app/views/fe/answer_pages/_answer_page.html.erb +27 -30
  113. data/app/views/fe/answer_pages/_element.html.erb +5 -1
  114. data/app/views/fe/answer_pages/update.js.erb +1 -1
  115. data/app/views/fe/answer_sheets/_answer_sheet.html.erb +16 -14
  116. data/app/views/fe/answer_sheets/_element.html.erb +1 -1
  117. data/app/views/fe/answer_sheets/_incomplete.html.erb +8 -8
  118. data/app/views/fe/answer_sheets/_page_link.html.erb +2 -2
  119. data/app/views/fe/answer_sheets/_pages_list.html.erb +4 -4
  120. data/app/views/fe/answer_sheets/_title.html.erb +1 -1
  121. data/app/views/fe/answer_sheets/edit.html.erb +59 -53
  122. data/app/views/fe/answer_sheets/incomplete.js.erb +2 -2
  123. data/app/views/fe/answer_sheets/send_reference_invite.js.erb +1 -1
  124. data/app/views/fe/application/_logout.html.erb +1 -0
  125. data/app/views/fe/payment_pages/_credit.html.erb +47 -0
  126. data/app/views/fe/payment_pages/_mail.html.erb +27 -0
  127. data/app/views/fe/payment_pages/_payment.html.erb +6 -0
  128. data/app/views/fe/payment_pages/_staff.html.erb +25 -0
  129. data/app/views/fe/payment_pages/_staff_results.html.erb +17 -0
  130. data/app/views/fe/payment_pages/edit.html.erb +75 -0
  131. data/app/views/fe/payment_pages/staff_search.js.erb +2 -0
  132. data/app/views/fe/payments/_credit.html.erb +47 -0
  133. data/app/views/fe/payments/_errors.html.erb +1 -0
  134. data/app/views/fe/payments/_payment.html.erb +13 -0
  135. data/app/views/fe/payments/_staff.html.erb +21 -0
  136. data/app/views/fe/payments/_staff_results.html.erb +18 -0
  137. data/app/views/fe/payments/approve.js.erb +3 -0
  138. data/app/views/fe/payments/create.js.erb +19 -0
  139. data/app/views/fe/payments/destroy.js.erb +7 -0
  140. data/app/views/fe/payments/edit.html.erb +56 -0
  141. data/app/views/fe/payments/error.js.erb +3 -0
  142. data/app/views/fe/payments/no_access.html.erb +7 -0
  143. data/app/views/fe/payments/staff_search.js.erb +1 -0
  144. data/app/views/fe/payments/update.html.erb +24 -0
  145. data/app/views/fe/questions/{_acceptance.html.erb → fe/_acceptance.html.erb} +0 -0
  146. data/app/views/fe/questions/{_attachment_field.html.erb → fe/_attachment_field.html.erb} +2 -2
  147. data/app/views/fe/questions/{_checkbox_field.html.erb → fe/_checkbox_field.html.erb} +1 -1
  148. data/app/views/fe/questions/{_country.html.erb → fe/_country.html.erb} +1 -1
  149. data/app/views/fe/questions/{_date_field.html.erb → fe/_date_field.html.erb} +0 -0
  150. data/app/views/fe/questions/{_date_field_mmyy.html.erb → fe/_date_field_mmyy.html.erb} +0 -0
  151. data/app/views/fe/questions/{_drop_down_field.html.erb → fe/_drop_down_field.html.erb} +1 -1
  152. data/app/views/fe/questions/fe/_paragraph.html.erb +1 -0
  153. data/app/views/fe/questions/fe/_payment_question.html.erb +70 -0
  154. data/app/views/fe/questions/{_question_grid.html.erb → fe/_question_grid.html.erb} +7 -7
  155. data/app/views/fe/questions/{_question_grid_with_total.html.erb → fe/_question_grid_with_total.html.erb} +1 -1
  156. data/app/views/fe/questions/{_questions.html.erb → fe/_questions.html.erb} +2 -2
  157. data/app/views/fe/questions/{_radio_button_field.html.erb → fe/_radio_button_field.html.erb} +13 -11
  158. data/app/views/fe/questions/{_rating.html.erb → fe/_rating.html.erb} +0 -0
  159. data/app/views/fe/questions/fe/_reference_discipler.html.erb +1 -0
  160. data/app/views/fe/questions/fe/_reference_friend.html.erb +1 -0
  161. data/app/views/fe/questions/fe/_reference_parent.html.erb +1 -0
  162. data/app/views/fe/questions/fe/_reference_peer.html.erb +1 -0
  163. data/app/views/fe/questions/fe/_reference_question.html.erb +38 -0
  164. data/app/views/fe/questions/fe/_reference_roommate.html.erb +1 -0
  165. data/app/views/fe/questions/fe/_reference_spiritual.html.erb +1 -0
  166. data/app/views/fe/questions/fe/_reference_staff.html.erb +1 -0
  167. data/app/views/fe/questions/fe/_section.html.erb +1 -0
  168. data/app/views/fe/questions/{_state_chooser.html.erb → fe/_state_chooser.html.erb} +0 -0
  169. data/app/views/fe/questions/{_text_area_field.html.erb → fe/_text_area_field.html.erb} +0 -0
  170. data/app/views/fe/questions/{_text_field.html.erb → fe/_text_field.html.erb} +0 -0
  171. data/app/views/fe/questions/{_yes_no.html.erb → fe/_yes_no.html.erb} +6 -6
  172. data/app/views/fe/questions/{_yes_no_field.erb → fe/_yes_no_field.erb} +1 -1
  173. data/app/views/fe/reference_pages/_reference.html.erb +31 -0
  174. data/app/views/fe/reference_pages/edit.html.erb +24 -0
  175. data/app/views/fe/reference_sheets/done.html.erb +2 -0
  176. data/app/views/fe/reference_sheets/submitted.js.erb +1 -0
  177. data/app/views/fe/references/edit.html.erb +8 -0
  178. data/app/views/fe/references/send_invite.js.erb +7 -0
  179. data/app/views/fe/references/show.html.erb +18 -0
  180. data/app/views/fe/references/submit.js.erb +3 -0
  181. data/app/views/fe/submit_pages/_errors.html.erb +1 -0
  182. data/app/views/fe/submit_pages/_thankyou.html.erb +2 -0
  183. data/app/views/fe/submit_pages/edit.html.erb +36 -0
  184. data/app/views/fe/submit_pages/error.js.erb +1 -0
  185. data/app/views/fe/submit_pages/submit.js.erb +3 -0
  186. data/app/views/layouts/fe/application.html.erb +30 -13
  187. data/app/views/layouts/fe/{qe.admin.html.erb → fe.admin.html.erb} +1 -1
  188. data/config/locales/en.yml +37 -0
  189. data/config/routes.rb +69 -27
  190. data/db/migrate/20131003041856_core.rb +4 -4
  191. data/db/migrate/20131003044518_create_email_templates.rb +1 -1
  192. data/db/migrate/20140623153424_create_fe_people.rb +12 -0
  193. data/db/migrate/20140624180246_create_fe_addresses.rb +20 -0
  194. data/db/migrate/20140624182216_create_create_fe_phone_numbers.rb +16 -0
  195. data/db/migrate/20140625160545_create_fe_users.rb +12 -0
  196. data/db/migrate/20140808202507_add_conditional_type_to_elements.rb +5 -0
  197. data/db/migrate/20140808203609_add_conditional_answer_to_elements.rb +5 -0
  198. data/db/migrate/20140828045339_create_payments.rb +13 -0
  199. data/db/migrate/20141103204704_remove_short_value_column.rb +5 -0
  200. data/db/migrate/20141109154522_move_conditional_ids_used_for_choice_field_to_their_own_column.rb +7 -0
  201. data/db/seeds.rb +7 -0
  202. data/lib/fe.rb +1 -1
  203. data/lib/fe/engine.rb +46 -1
  204. data/lib/fe/version.rb +1 -1
  205. data/lib/tasks/fe_tasks.rake +14 -0
  206. data/spec/controllers/fe/admin/elements_controller_spec.rb +1 -1
  207. data/spec/controllers/fe/admin/email_templates_controller_spec.rb +1 -1
  208. data/spec/controllers/fe/admin/question_pages_controller_spec.rb +1 -1
  209. data/spec/controllers/fe/admin/question_sheets_controller_spec.rb +1 -1
  210. data/spec/controllers/fe/answer_pages_controller_spec.rb +1 -1
  211. data/spec/controllers/fe/answer_sheets_controller_spec.rb +1 -1
  212. data/spec/controllers/fe/reference_sheets_controller_spec.rb +1 -1
  213. data/spec/dummy/README.rdoc +28 -0
  214. data/spec/dummy/Rakefile +6 -0
  215. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  216. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  217. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  218. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  219. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  220. data/spec/dummy/bin/bundle +3 -0
  221. data/spec/dummy/bin/rails +4 -0
  222. data/spec/dummy/bin/rake +4 -0
  223. data/spec/dummy/config.ru +4 -0
  224. data/spec/dummy/config/application.rb +29 -0
  225. data/spec/dummy/config/boot.rb +5 -0
  226. data/spec/dummy/config/database.yml +25 -0
  227. data/spec/dummy/config/environment.rb +5 -0
  228. data/spec/dummy/config/environments/development.rb +37 -0
  229. data/spec/dummy/config/environments/production.rb +82 -0
  230. data/spec/dummy/config/environments/test.rb +39 -0
  231. data/spec/dummy/config/initializers/assets.rb +8 -0
  232. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  233. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  234. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  235. data/spec/dummy/config/initializers/inflections.rb +16 -0
  236. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  237. data/spec/dummy/config/initializers/session_store.rb +3 -0
  238. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  239. data/spec/dummy/config/locales/en.yml +23 -0
  240. data/spec/dummy/config/routes.rb +56 -0
  241. data/spec/dummy/config/secrets.yml +22 -0
  242. data/spec/dummy/db/schema.rb +203 -0
  243. data/spec/dummy/db/test.sqlite3 +0 -0
  244. data/spec/dummy/log/test.log +440 -0
  245. data/spec/dummy/public/404.html +67 -0
  246. data/spec/dummy/public/422.html +67 -0
  247. data/spec/dummy/public/500.html +66 -0
  248. data/spec/dummy/public/favicon.ico +0 -0
  249. data/spec/factories/answer_sheet_question_sheets.rb +4 -0
  250. data/spec/factories/answer_sheets.rb +1 -1
  251. data/spec/factories/applications.rb +7 -0
  252. data/spec/factories/elements.rb +19 -0
  253. data/spec/factories/fe_addresses.rb +14 -0
  254. data/spec/factories/fe_email_addresses.rb +7 -0
  255. data/spec/factories/fe_people.rb +10 -0
  256. data/spec/factories/fe_phone_numbers.rb +7 -0
  257. data/spec/factories/page.rb +9 -0
  258. data/spec/factories/page_elements.rb +5 -0
  259. data/spec/factories/payments.rb +7 -0
  260. data/spec/factories/question_sheet.rb +10 -0
  261. data/spec/models/fe/answer_sheet_question_sheet_spec.rb +3 -3
  262. data/spec/models/fe/answer_spec.rb +5 -5
  263. data/spec/models/fe/application_spec.rb +8 -0
  264. data/spec/models/fe/attachment_field_spec.rb +1 -1
  265. data/spec/models/fe/choice_field_spec.rb +29 -2
  266. data/spec/models/fe/condition_spec.rb +5 -5
  267. data/spec/models/fe/date_field_spec.rb +9 -9
  268. data/spec/models/fe/element_spec.rb +139 -9
  269. data/spec/models/fe/email_template_spec.rb +2 -2
  270. data/spec/models/fe/option_group_spec.rb +1 -1
  271. data/spec/models/fe/option_spec.rb +1 -1
  272. data/spec/models/fe/page_element_spec.rb +3 -3
  273. data/spec/models/fe/page_link_spec.rb +1 -1
  274. data/spec/models/fe/page_spec.rb +43 -11
  275. data/spec/models/fe/paragraph_spec.rb +4 -4
  276. data/spec/models/fe/payment_question_spec.rb +65 -0
  277. data/spec/models/fe/person_spec.rb +4 -0
  278. data/spec/models/fe/question_grid_spec.rb +1 -1
  279. data/spec/models/fe/question_grid_with_total_spec.rb +1 -1
  280. data/spec/models/fe/question_set_spec.rb +1 -1
  281. data/spec/models/fe/question_sheet_spec.rb +5 -5
  282. data/spec/models/fe/question_spec.rb +13 -12
  283. data/spec/models/fe/reference_question_spec.rb +4 -4
  284. data/spec/models/fe/reference_sheet_spec.rb +8 -8
  285. data/spec/models/fe/section_spec.rb +1 -1
  286. data/spec/models/fe/state_chooser_spec.rb +1 -1
  287. data/spec/models/fe/text_field_spec.rb +3 -3
  288. data/spec/{spec_helper.rb → rails_helper.rb} +3 -3
  289. data/spec/support/database.txt +3 -3
  290. metadata +261 -75
  291. data/app/views/fe/questions/_paragraph.html.erb +0 -1
  292. data/app/views/fe/questions/_reference_discipler.html.erb +0 -1
  293. data/app/views/fe/questions/_reference_friend.html.erb +0 -1
  294. data/app/views/fe/questions/_reference_parent.html.erb +0 -1
  295. data/app/views/fe/questions/_reference_peer.html.erb +0 -1
  296. data/app/views/fe/questions/_reference_question.html.erb +0 -38
  297. data/app/views/fe/questions/_reference_roommate.html.erb +0 -1
  298. data/app/views/fe/questions/_reference_spiritual.html.erb +0 -1
  299. data/app/views/fe/questions/_reference_staff.html.erb +0 -1
  300. data/app/views/fe/questions/_section.html.erb +0 -1
  301. data/lib/generators/fe/install_generator.rb +0 -132
  302. data/lib/tasks/qe_tasks.rake +0 -4
  303. data/spec/models/fe/answer_sheet_spec.rb +0 -8
@@ -1,12 +1,142 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::Element do
4
- it { should belong_to :question_grid }
5
- it { should belong_to :choice_field }
6
- it { should have_many :page_elements }
7
- it { should have_many :pages }
8
- it { should validate_presence_of :kind }
9
- # it { should validate_presence_of :style } # this isn't working
10
- it { should ensure_length_of :kind }
11
- it { should ensure_length_of :style }
4
+ it { expect belong_to :question_grid }
5
+ it { expect belong_to :choice_field }
6
+ it { expect have_many :page_elements }
7
+ it { expect have_many :pages }
8
+ it { expect validate_presence_of :kind }
9
+ # it { expect validate_presence_of :style } # this isn't working
10
+ it { expect ensure_length_of :kind }
11
+ it { expect ensure_length_of :style }
12
+
13
+ it "should update a conditional question if added after that question" do
14
+ question_sheet = FactoryGirl.create(:question_sheet_with_pages)
15
+ conditional_el = FactoryGirl.create(:choice_field_element, label: "This is a test for a yes/no question that will hide the next element", conditional_type: "Fe::Element")
16
+ question_sheet.pages.reload
17
+ question_sheet.pages[3].elements << conditional_el
18
+ element = FactoryGirl.create(:text_field_element, label: "This is a test of a short answer that will be hidden by the previous elemenet", conditional_type: nil, conditional_answer: nil)
19
+ question_sheet.pages[3].elements << element
20
+ conditional_el.reload
21
+ expect(conditional_el.conditional).to eq(element)
22
+ end
23
+
24
+ it "should update a conditional question if elements are moved around" do
25
+ question_sheet = FactoryGirl.create(:question_sheet_with_pages)
26
+ conditional_el = FactoryGirl.create(:choice_field_element, label: "This is a test for a yes/no question that will hide the next element", conditional_type: "Fe::Element")
27
+ question_sheet.pages.reload
28
+ question_sheet.pages[3].elements << conditional_el
29
+ element = FactoryGirl.create(:text_field_element, label: "This is a test of a short answer that will be moved", conditional_type: nil, conditional_answer: nil)
30
+ question_sheet.pages[3].elements << element
31
+ element2 = FactoryGirl.create(:text_field_element, label: "This is a test of a short answer that will be moved to become hidden", conditional_type: nil, conditional_answer: nil)
32
+ question_sheet.pages[3].elements << element2
33
+
34
+ element.reload
35
+ element2.reload
36
+ conditional_el.reload
37
+
38
+ # currently, page has elements in this order: conditional, element, element2
39
+ # now swap the last 2 elements
40
+ old_element_position = element.position(question_sheet.pages[3])
41
+ old_element2_position = element2.position(question_sheet.pages[3])
42
+ element.page_elements.first.update_attributes(position: old_element2_position)
43
+ element2.page_elements.first.update_attributes(position: old_element_position)
44
+
45
+ conditional_el.reload
46
+ expect(conditional_el.conditional).to eq(element2)
47
+ end
48
+
49
+ it "should set the conditional page if a new conditional page element is created" do
50
+ question_sheet = FactoryGirl.create(:question_sheet_with_pages)
51
+ hide_page = question_sheet.pages[4]
52
+ conditional_el = FactoryGirl.create(:choice_field_element, label: "This is a test for a yes/no question that will hide the next pag", conditional_type: "Fe::Page", conditional_id: hide_page.id)
53
+ question_sheet.pages.reload
54
+ question_sheet.pages[3].elements << conditional_el
55
+ conditional_el.reload
56
+ expect(conditional_el.conditional).to eq(hide_page)
57
+ end
58
+
59
+ it "should keep the conditional page if a page is moved" do
60
+ question_sheet = FactoryGirl.create(:question_sheet_with_pages)
61
+ hide_page = question_sheet.pages[4]
62
+ conditional_el = FactoryGirl.create(:choice_field_element, label: "This is a test for a yes/no question that will hide the next pag", conditional_type: "Fe::Page", conditional_id: hide_page.id)
63
+ question_sheet.pages.reload
64
+ question_sheet.pages[3].elements << conditional_el
65
+ conditional_el.reload
66
+ expect(conditional_el.conditional).to eq(question_sheet.pages[4])
67
+
68
+ # move some pages around
69
+ question_sheet.pages[0].update_attributes number: 1
70
+ question_sheet.pages[1].update_attributes number: 2
71
+ question_sheet.pages[2].update_attributes number: 3
72
+ question_sheet.pages[3].update_attributes number: 0 # the page the conditional element is on
73
+ question_sheet.pages[4].update_attributes number: 4
74
+ question_sheet.pages.reload
75
+
76
+ # the page after the conditional page should still be set to the same page
77
+ conditional_el.reload
78
+ expect(conditional_el.conditional).to eq(hide_page)
79
+ end
80
+
81
+ it "should not let a hidden page make the questionnaire incomplete" do
82
+ question_sheet = FactoryGirl.create(:question_sheet_with_pages)
83
+ hide_page = question_sheet.pages[4]
84
+ conditional_el = FactoryGirl.create(:choice_field_element, label: "This is a test for a yes/no question that will hide the next page", conditional_type: "Fe::Page", conditional_id: hide_page.id, conditional_answer: "yes")
85
+ question_sheet.pages.reload
86
+ question_sheet.pages[3].elements << conditional_el
87
+ conditional_el.reload
88
+ expect(conditional_el.conditional).to eq(question_sheet.pages[4])
89
+
90
+ # add required element on hidden page
91
+ element = FactoryGirl.create(:text_field_element, label: "This is a test of a short answer on a hidden page")
92
+ hide_page.elements << element
93
+
94
+ # set up an answer sheet
95
+ application = FactoryGirl.create(:answer_sheet)
96
+ application.answer_sheet_question_sheet = FactoryGirl.create(:answer_sheet_question_sheet, answer_sheet: application, question_sheet: question_sheet)
97
+ application.answer_sheet_question_sheets.first.update_attributes(question_sheet_id: question_sheet.id)
98
+
99
+ # validate the hidden page, it should be marked complete
100
+ expect(hide_page.complete?(application)).to eq(true)
101
+
102
+ # make the answer to the conditional question 'yes' so that the element shows up and is thus required
103
+ conditional_el.set_response("yes", application)
104
+ conditional_el.save_response(application)
105
+
106
+ # validate the now-visible page, it should be marked not complete
107
+ expect(hide_page.complete?(application)).to eq(false)
108
+ end
109
+
110
+ it "should not require questions in a hidden page" do
111
+ question_sheet = FactoryGirl.create(:question_sheet_with_pages)
112
+ hide_page = question_sheet.pages[4]
113
+ conditional_el = FactoryGirl.create(:choice_field_element, label: "This is a test for a yes/no question that will hide the next page", conditional_type: "Fe::Page", conditional_id: hide_page.id, conditional_answer: "yes")
114
+ question_sheet.pages.reload
115
+ question_sheet.pages[3].elements << conditional_el
116
+ conditional_el.reload
117
+ expect(conditional_el.conditional).to eq(question_sheet.pages[4])
118
+
119
+ # add required element on hidden page
120
+ element = FactoryGirl.create(:text_field_element, label: "This is a test of a short answer on a hidden page")
121
+ hide_page.elements << element
122
+
123
+ # set up an answer sheet
124
+ application = FactoryGirl.create(:answer_sheet)
125
+ application.answer_sheet_question_sheet = FactoryGirl.create(:answer_sheet_question_sheet, answer_sheet: application, question_sheet: question_sheet)
126
+ application.answer_sheet_question_sheets.first.update_attributes(question_sheet_id: question_sheet.id)
127
+
128
+ # make the answer to the conditional question 'yes' (match) so that the element is visible (and thus required)
129
+ conditional_el.set_response("yes", application)
130
+ conditional_el.save_response(application)
131
+
132
+ # validate the hidden page, it should not be complete
133
+ expect(hide_page.complete?(application)).to eq(false)
134
+
135
+ # make the answer to the conditional question 'no' (no match) so that the element is hidden
136
+ conditional_el.set_response("no", application)
137
+ conditional_el.save_response(application)
138
+
139
+ # validate the hidden page, it should be marked complete because of being hidden
140
+ expect(hide_page.complete?(application)).to eq(true)
141
+ end
12
142
  end
@@ -1,5 +1,5 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::EmailTemplate do
4
- it { should validate_presence_of :name }
4
+ it { expect validate_presence_of :name }
5
5
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::OptionGroup do
4
4
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::Option do
4
4
  end
@@ -1,6 +1,6 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::PageElement do
4
- it { should belong_to :page }
5
- it { should belong_to :element }
4
+ it { expect belong_to :page }
5
+ it { expect belong_to :element }
6
6
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::PageLink do
4
4
  end
@@ -1,14 +1,46 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::Page do
4
- it { should belong_to :question_sheet }
5
- it { should have_many :page_elements }
6
- it { should have_many :elements }
7
- it { should have_many :questions }
8
- it { should have_many :question_grids }
9
- it { should have_many :question_grid_with_totals }
10
- # it { should validate_presence_of :label } # this isn't working
11
- # it { should validate_presence_of :number } # this isn't working
12
- it { should ensure_length_of :label }
13
- it { should validate_numericality_of :number }
4
+ it { expect belong_to :question_sheet }
5
+ it { expect have_many :page_elements }
6
+ it { expect have_many :elements }
7
+ it { expect have_many :questions }
8
+ it { expect have_many :question_grids }
9
+ it { expect have_many :question_grid_with_totals }
10
+ # it { expect validate_presence_of :label } # this isn't working
11
+ # it { expect validate_presence_of :number } # this isn't working
12
+ it { expect ensure_length_of :label }
13
+ # it { expect validate_numericality_of :number }
14
+
15
+ it "should not require a hidden element" do
16
+ question_sheet = FactoryGirl.create(:question_sheet_with_pages)
17
+ conditional_el = FactoryGirl.create(:choice_field_element, label: "This is a test for a yes/no question that will hide the next element if the answer is yes", conditional_type: "Fe::Element", conditional_answer: "yes")
18
+ question_sheet.pages.reload
19
+ question_sheet.pages[3].elements << conditional_el
20
+ element = FactoryGirl.create(:text_field_element, label: "This is a test of a short answer that is made visible by the previous elemenet")
21
+ question_sheet.pages[3].elements << element
22
+ conditional_el.reload
23
+ expect(conditional_el.conditional).to eq(element)
24
+
25
+ # set up an answer sheet
26
+ application = FactoryGirl.create(:answer_sheet)
27
+ application.answer_sheet_question_sheet = FactoryGirl.create(:answer_sheet_question_sheet, answer_sheet: application, question_sheet: question_sheet)
28
+ application.answer_sheet_question_sheets.first.update_attributes(question_sheet_id: question_sheet.id)
29
+
30
+ # make the answer to the conditional question 'yes' so that the next element shows up and is thus required
31
+ conditional_el.set_response("no", application)
32
+ conditional_el.save_response(application)
33
+
34
+ # validate the page -- the next element after the conditional should not be required
35
+ page = question_sheet.pages[3]
36
+ expect(page.complete?(application)).to eq(true)
37
+
38
+ # make the answer to the conditional question 'yes' so that the next element shows up and is thus required
39
+ conditional_el.set_response("yes", application)
40
+ conditional_el.save_response(application)
41
+
42
+ # validate the page -- the next element after the conditional should not be required
43
+ page = question_sheet.pages[3]
44
+ expect(page.complete?(application)).to eq(false)
45
+ end
14
46
  end
@@ -1,17 +1,17 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::Paragraph do
4
4
  describe '#validate_presence_of :content on update' do
5
5
  it 'successfully saves with content' do
6
6
  paragraph = build(:paragraph)
7
7
  paragraph.content = "abc"
8
- paragraph.save.should be_true
8
+ expect(paragraph.save).to eq(true)
9
9
  end
10
10
 
11
11
  it 'saves with default content' do
12
12
  paragraph = build(:paragraph)
13
- paragraph.save.should be_true
14
- paragraph.content.should == "Lorem ipsum..."
13
+ expect(paragraph.save).to eq(true)
14
+ expect(paragraph.content).to eq("Lorem ipsum...")
15
15
  end
16
16
  end
17
17
  end
@@ -0,0 +1,65 @@
1
+ require 'rails_helper'
2
+
3
+ describe Fe::PaymentQuestion do
4
+ before(:all) do
5
+ @person = create(:fe_person)
6
+ @application = create(:application, applicant: @person)
7
+ @payment_question = Fe::PaymentQuestion.new
8
+ end
9
+
10
+ describe "when calling 'response' function" do
11
+ it 'returns a new payment if no application specified' do
12
+ response = @payment_question.send(:response)
13
+ expect(response.new_record?).to be_truthy
14
+ end
15
+ it 'returns the existing application payment if the application already have payments' do
16
+ payment = create(:payment, application: @application)
17
+ response = @payment_question.send(:response, @application).first
18
+ expect(response.id).to be payment.id
19
+ end
20
+ it 'returns a new application payment if the application do not have payments yet' do
21
+ response = @payment_question.send(:response, @application)
22
+ expect(response).not_to be nil
23
+ end
24
+ end
25
+
26
+ describe "when calling 'display_response' function" do
27
+ it 'returns a blank string if no application specified' do
28
+ expect(@payment_question).to receive(:response)
29
+ response = @payment_question.send(:display_response)
30
+ expect(response).to eq('')
31
+ end
32
+ it 'returns an existing application payment string if the application already have payments' do
33
+ payment = create(:payment, application: @application)
34
+ expect(@payment_question).to receive(:response).with(@application).and_return(payment)
35
+ response = @payment_question.send(:display_response, @application)
36
+ expect(response).not_to be_blank
37
+ end
38
+ it 'returns a blank string if the application do not have payments yet' do
39
+ expect(@payment_question).to receive(:response).with(@application)
40
+ response = @payment_question.send(:display_response, @application)
41
+ expect(response).to eq('')
42
+ end
43
+ end
44
+
45
+ #describe "when calling 'has_response' function" do
46
+ #before(:each) do
47
+ #question_sheet = create(:question_sheet)
48
+ #answer_sheet = create(:answer_sheet)
49
+ #answer_sheet_question_sheet = create(:answer_sheet_question_sheet, answer_sheet: answer_sheet, question_sheet: question_sheet)
50
+ #end
51
+ #it "returns a boolean 'false' if no application specified" do
52
+ #response = @payment_question.send(:has_response?)
53
+ #response.should be false
54
+ #end
55
+ #it "returns a boolean 'true' if the application already have payments" do
56
+ #payment = create(:payment, application: @application)
57
+ #response = @payment_question.send(:has_response?, @application)
58
+ #response.should be true
59
+ #end
60
+ #it "returns a boolean 'false' if the application do not have payments yet" do
61
+ #response = @payment_question.send(:has_response?, @application)
62
+ #response.should be false
63
+ #end
64
+ #end
65
+ end
@@ -0,0 +1,4 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe Fe::Person, :type => :model do
4
+ end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::QuestionGrid do
4
4
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::QuestionGridWithTotal do
4
4
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::QuestionSet do
4
4
  end
@@ -1,8 +1,8 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::QuestionSheet do
4
- it { should have_many :pages }
5
- it { should have_many :answer_sheets }
6
- it { should validate_presence_of :label }
7
- it { should validate_uniqueness_of :label }
4
+ it { expect have_many :pages }
5
+ it { expect have_many :answer_sheets }
6
+ it { expect validate_presence_of :label }
7
+ it { expect validate_uniqueness_of :label }
8
8
  end
@@ -1,19 +1,20 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
- describe Question do
4
- it { should have_many :conditions }
5
- it { should have_many :dependents }
6
- it { should have_many :sheet_answers }
7
- it { should belong_to :related_question_sheet }
3
+ describe Fe::Question do
4
+ it { expect have_many :conditions }
5
+ it { expect have_many :dependents }
6
+ it { expect have_many :sheet_answers }
7
+ it { expect belong_to :related_question_sheet }
8
8
 
9
- # it { should validate_format_of :slug }
10
- # it { should validate_length_of :slug }
11
- # it { should validate_uniqueness_of :slug }
9
+ # it { expect validate_format_of :slug }
10
+ # it { expect validate_length_of :slug }
11
+ # it { expect validate_uniqueness_of :slug }
12
12
 
13
13
  describe '#default_label?' do
14
- it 'should return true' do
15
- question = Question.new
16
- question.default_label?.should be_true
14
+ it 'expect return true' do
15
+ question = Fe::Question.new
16
+ #question.default_label?.expect be_true
17
+ expect(question.default_label?).to eq(true)
17
18
  end
18
19
  end
19
20
 
@@ -1,17 +1,17 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::ReferenceQuestion do
4
4
  describe '#ptemplate' do
5
5
  it 'default' do
6
6
  ref = create(:reference_question)
7
- ref.style.should == "peer"
8
- ref.ptemplate.should == "reference_peer"
7
+ expect(ref.style).to eq("peer")
8
+ expect(ref.ptemplate).to eq("fe/reference_peer")
9
9
  end
10
10
 
11
11
  it 'customized' do
12
12
  ref = create(:reference_question)
13
13
  ref.style = "abc"
14
- ref.ptemplate.should == "reference_abc"
14
+ expect(ref.ptemplate).to eq("fe/reference_abc")
15
15
  end
16
16
  end
17
17
  end
@@ -1,11 +1,11 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe Fe::ReferenceSheet do
4
- it { should belong_to :question }
5
- it { should belong_to :applicant_answer_sheet }
6
- # it { should validate_presence_of :first_name } # need to add started_at column
7
- # it { should validate_presence_of :last_name } # need to add started_at column
8
- # it { should validate_presence_of :phone } # need to add started_at column
9
- # it { should validate_presence_of :email } # need to add started_at column
10
- # it { should validate_presence_of :relationship } # need to add started_at column
4
+ it { expect belong_to :question }
5
+ it { expect belong_to :applicant_answer_sheet }
6
+ # it { expect validate_presence_of :first_name } # need to add started_at column
7
+ # it { expect validate_presence_of :last_name } # need to add started_at column
8
+ # it { expect validate_presence_of :phone } # need to add started_at column
9
+ # it { expect validate_presence_of :email } # need to add started_at column
10
+ # it { expect validate_presence_of :relationship } # need to add started_at column
11
11
  end