decidim 0.0.2 → 0.0.3

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 (439) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +12 -0
  3. data/Dockerfile +2 -0
  4. data/Gemfile.lock +80 -54
  5. data/README.md +15 -2
  6. data/decidim-admin/app/assets/javascripts/decidim/admin/application.js.es6 +3 -2
  7. data/decidim-admin/app/assets/javascripts/decidim/admin/tab_focus.js.es6 +1 -1
  8. data/decidim-admin/app/assets/stylesheets/decidim/admin/_foundation_and_overrides.scss +1 -1
  9. data/decidim-admin/app/commands/decidim/admin/{create_participatory_process_attachment.rb → create_attachment.rb} +6 -7
  10. data/decidim-admin/app/commands/decidim/admin/create_participatory_process.rb +12 -3
  11. data/decidim-admin/app/commands/decidim/admin/{update_participatory_process_attachment.rb → update_attachment.rb} +7 -6
  12. data/decidim-admin/app/commands/decidim/admin/update_feature.rb +2 -1
  13. data/decidim-admin/app/commands/decidim/admin/update_organization.rb +1 -0
  14. data/decidim-admin/app/commands/decidim/admin/update_participatory_process.rb +16 -4
  15. data/decidim-admin/app/constraints/decidim/admin/organization_dashboard_constraint.rb +1 -1
  16. data/decidim-admin/app/controllers/decidim/admin/application_controller.rb +2 -2
  17. data/decidim-admin/app/controllers/decidim/admin/concerns/has_attachments.rb +116 -0
  18. data/decidim-admin/app/controllers/decidim/admin/participatory_process_attachments_controller.rb +5 -67
  19. data/decidim-admin/app/controllers/decidim/admin/users_controller.rb +5 -5
  20. data/decidim-admin/app/forms/decidim/admin/{participatory_process_attachment_form.rb → attachment_form.rb} +2 -2
  21. data/decidim-admin/app/forms/decidim/admin/feature_form.rb +1 -0
  22. data/decidim-admin/app/forms/decidim/admin/organization_form.rb +1 -0
  23. data/decidim-admin/app/forms/decidim/admin/participatory_process_form.rb +8 -1
  24. data/decidim-admin/app/helpers/decidim/admin/application_helper.rb +1 -0
  25. data/decidim-admin/app/helpers/decidim/admin/feature_settings_helper.rb +29 -0
  26. data/decidim-admin/app/models/decidim/admin/abilities/admin_user.rb +4 -4
  27. data/decidim-admin/app/models/decidim/admin/abilities/base.rb +3 -3
  28. data/decidim-admin/app/models/decidim/admin/abilities/participatory_process_admin.rb +15 -7
  29. data/decidim-admin/app/views/decidim/admin/{participatory_process_attachments → attachments}/_form.html.erb +0 -0
  30. data/decidim-admin/app/views/decidim/admin/attachments/edit.html.erb +9 -0
  31. data/decidim-admin/app/views/decidim/admin/attachments/index.html.erb +37 -0
  32. data/decidim-admin/app/views/decidim/admin/attachments/new.html.erb +9 -0
  33. data/decidim-admin/app/views/decidim/admin/attachments/show.html.erb +25 -0
  34. data/decidim-admin/app/views/decidim/admin/features/_form.html.erb +1 -0
  35. data/decidim-admin/app/views/decidim/admin/features/_settings_fields.html.erb +6 -3
  36. data/decidim-admin/app/views/decidim/admin/organization/_form.html.erb +4 -0
  37. data/decidim-admin/app/views/decidim/admin/participatory_processes/_form.html.erb +16 -0
  38. data/decidim-admin/app/views/decidim/admin/participatory_processes/show.html.erb +11 -1
  39. data/decidim-admin/app/views/layouts/decidim/admin/_header.html.erb +2 -2
  40. data/decidim-admin/app/views/layouts/decidim/admin/_sidebar.html.erb +1 -1
  41. data/decidim-admin/app/views/layouts/decidim/admin/participatory_process.html.erb +2 -2
  42. data/decidim-admin/config/locales/ca.yml +29 -27
  43. data/decidim-admin/config/locales/en.yml +29 -27
  44. data/decidim-admin/config/locales/es.yml +29 -27
  45. data/decidim-admin/config/routes.rb +1 -1
  46. data/decidim-admin/db/migrate/20170128112958_change_user_groups_verified_to_timestamp.rb +9 -0
  47. data/decidim-admin/decidim-admin.gemspec +0 -1
  48. data/decidim-admin/lib/decidim/admin/engine.rb +2 -2
  49. data/decidim-admin/lib/decidim/admin/test/manage_attachments_examples.rb +103 -0
  50. data/decidim-admin/spec/commands/create_category_spec.rb +1 -1
  51. data/decidim-admin/spec/commands/create_feature_spec.rb +1 -1
  52. data/decidim-admin/spec/commands/create_participatory_process_spec.rb +32 -2
  53. data/decidim-admin/spec/commands/create_static_page_spec.rb +1 -1
  54. data/decidim-admin/spec/commands/destroy_category_spec.rb +1 -1
  55. data/decidim-admin/spec/commands/destroy_feature_spec.rb +2 -2
  56. data/decidim-admin/spec/commands/destroy_participatory_process_step_spec.rb +1 -1
  57. data/decidim-admin/spec/commands/update_category_spec.rb +1 -1
  58. data/decidim-admin/spec/commands/update_feature_spec.rb +3 -1
  59. data/decidim-admin/spec/commands/update_organization_spec.rb +12 -2
  60. data/decidim-admin/spec/commands/update_static_page_spec.rb +1 -1
  61. data/decidim-admin/spec/features/admin_manages_organization_admins_spec.rb +1 -1
  62. data/decidim-admin/spec/features/admin_manages_organization_scopes_spec.rb +1 -1
  63. data/decidim-admin/spec/features/admin_manages_participatory_processes_spec.rb +1 -1
  64. data/decidim-admin/spec/features/static_pages_spec.rb +1 -1
  65. data/decidim-admin/spec/forms/participatory_process_form_spec.rb +32 -2
  66. data/decidim-admin/spec/forms/participatory_process_step_form_spec.rb +3 -3
  67. data/decidim-admin/spec/forms/scope_form_spec.rb +2 -2
  68. data/decidim-admin/spec/forms/static_page_form_spec.rb +2 -2
  69. data/decidim-admin/spec/helpers/feature_settings_helper_spec.rb +56 -0
  70. data/decidim-admin/spec/models/abilities/admin_user_spec.rb +7 -6
  71. data/decidim-admin/spec/models/abilities/participatory_process_admin_spec.rb +5 -8
  72. data/decidim-admin/spec/shared/manage_process_admins_examples.rb +1 -1
  73. data/decidim-admin/spec/shared/manage_process_attachments_examples.rb +4 -94
  74. data/decidim-admin/spec/shared/manage_process_categories_examples.rb +2 -1
  75. data/decidim-admin/spec/shared/manage_process_steps_examples.rb +1 -1
  76. data/decidim-admin/spec/shared/manage_processes_examples.rb +4 -3
  77. data/decidim-admin/spec/views/decidim/static_pages/_form.html.erb_spec.rb +2 -2
  78. data/decidim-api/app/views/layouts/decidim/api/documentation.html.erb +1 -1
  79. data/decidim-api/decidim-api.gemspec +1 -1
  80. data/decidim-api/lib/decidim/api.rb +1 -0
  81. data/decidim-api/lib/decidim/api/schema.rb +5 -0
  82. data/decidim-api/lib/decidim/api/test/type_context.rb +1 -0
  83. data/decidim-api/lib/decidim/api/types/author_interface.rb +13 -0
  84. data/decidim-api/spec/types/query_type_spec.rb +1 -1
  85. data/decidim-api/spec/types/translated_field_type_spec.rb +1 -1
  86. data/decidim-budgets/.gitignore +7 -0
  87. data/decidim-budgets/README.md +23 -0
  88. data/decidim-budgets/Rakefile +2 -0
  89. data/decidim-budgets/app/assets/config/decidim_budgets_manifest.js +1 -0
  90. data/decidim-budgets/app/assets/images/decidim/budgets/icon.svg +4 -0
  91. data/decidim-budgets/app/assets/javascripts/decidim/budgets/projects.js.es6 +28 -0
  92. data/decidim-budgets/app/assets/stylesheets/decidim/budgets/_budgets.scss +1 -0
  93. data/decidim-budgets/app/assets/stylesheets/decidim/budgets/budget/_budget-list.scss +32 -0
  94. data/decidim-budgets/app/assets/stylesheets/decidim/budgets/budget/_budget-meter.scss +78 -0
  95. data/decidim-budgets/app/assets/stylesheets/decidim/budgets/budget/_progress.scss +17 -0
  96. data/decidim-budgets/app/commands/decidim/budgets/add_line_item.rb +43 -0
  97. data/decidim-budgets/app/commands/decidim/budgets/admin/create_project.rb +52 -0
  98. data/decidim-budgets/app/commands/decidim/budgets/admin/update_project.rb +56 -0
  99. data/decidim-budgets/app/commands/decidim/budgets/cancel_order.rb +36 -0
  100. data/decidim-budgets/app/commands/decidim/budgets/checkout.rb +34 -0
  101. data/decidim-budgets/app/commands/decidim/budgets/remove_line_item.rb +35 -0
  102. data/decidim-budgets/app/controllers/concerns/decidim/budgets/needs_current_order.rb +27 -0
  103. data/decidim-budgets/app/controllers/decidim/budgets/admin/application_controller.rb +14 -0
  104. data/decidim-budgets/app/controllers/decidim/budgets/admin/projects_controller.rb +69 -0
  105. data/decidim-budgets/app/controllers/decidim/budgets/application_controller.rb +13 -0
  106. data/decidim-budgets/app/controllers/decidim/budgets/line_items_controller.rb +43 -0
  107. data/decidim-budgets/app/controllers/decidim/budgets/orders_controller.rb +38 -0
  108. data/decidim-budgets/app/controllers/decidim/budgets/projects_controller.rb +44 -0
  109. data/decidim-budgets/app/forms/decidim/budgets/admin/project_form.rb +44 -0
  110. data/decidim-budgets/app/helpers/decidim/budgets/application_helper.rb +12 -0
  111. data/decidim-budgets/app/helpers/decidim/budgets/projects_helper.rb +29 -0
  112. data/decidim-budgets/app/models/decidim/budgets/application_record.rb +9 -0
  113. data/decidim-budgets/app/models/decidim/budgets/line_item.rb +20 -0
  114. data/decidim-budgets/app/models/decidim/budgets/order.rb +52 -0
  115. data/decidim-budgets/app/models/decidim/budgets/project.rb +15 -0
  116. data/decidim-budgets/app/services/decidim/budgets/project_search.rb +58 -0
  117. data/decidim-budgets/app/views/decidim/budgets/admin/projects/_form.html.erb +31 -0
  118. data/decidim-budgets/app/views/decidim/budgets/admin/projects/edit.html.erb +9 -0
  119. data/decidim-budgets/app/views/decidim/budgets/admin/projects/index.html.erb +27 -0
  120. data/{decidim-admin/app/views/decidim/admin/participatory_process_attachments → decidim-budgets/app/views/decidim/budgets/admin/projects}/new.html.erb +0 -0
  121. data/decidim-budgets/app/views/decidim/budgets/line_items/update_budget.js.erb +21 -0
  122. data/decidim-budgets/app/views/decidim/budgets/projects/_budget_confirm.html.erb +30 -0
  123. data/decidim-budgets/app/views/decidim/budgets/projects/_budget_excess.html.erb +14 -0
  124. data/decidim-budgets/app/views/decidim/budgets/projects/_budget_summary.html.erb +46 -0
  125. data/decidim-budgets/app/views/decidim/budgets/projects/_count.html.erb +1 -0
  126. data/decidim-budgets/app/views/decidim/budgets/projects/_filters.html.erb +24 -0
  127. data/decidim-budgets/app/views/decidim/budgets/projects/_linked_projects.html.erb +12 -0
  128. data/decidim-budgets/app/views/decidim/budgets/projects/_order_progress.html.erb +34 -0
  129. data/decidim-budgets/app/views/decidim/budgets/projects/_order_selected_projects.html.erb +25 -0
  130. data/decidim-budgets/app/views/decidim/budgets/projects/_order_total_budget.html.erb +1 -0
  131. data/decidim-budgets/app/views/decidim/budgets/projects/_project.html.erb +40 -0
  132. data/decidim-budgets/app/views/decidim/budgets/projects/_project_budget_button.html.erb +9 -0
  133. data/decidim-budgets/app/views/decidim/budgets/projects/_projects.html.erb +8 -0
  134. data/decidim-budgets/app/views/decidim/budgets/projects/_tags.html.erb +10 -0
  135. data/decidim-budgets/app/views/decidim/budgets/projects/index.html.erb +26 -0
  136. data/decidim-budgets/app/views/decidim/budgets/projects/index.js.erb +2 -0
  137. data/decidim-budgets/app/views/decidim/budgets/projects/show.html.erb +48 -0
  138. data/decidim-budgets/bin/rails +14 -0
  139. data/decidim-budgets/config/i18n-tasks.yml +4 -0
  140. data/decidim-budgets/config/locales/ca.yml +84 -0
  141. data/decidim-budgets/config/locales/en.yml +95 -0
  142. data/decidim-budgets/config/locales/es.yml +84 -0
  143. data/decidim-budgets/db/migrate/20170127114122_create_projects.rb +15 -0
  144. data/decidim-budgets/db/migrate/20170130095615_create_orders.rb +13 -0
  145. data/decidim-budgets/db/migrate/20170130101825_create_line_items.rb +10 -0
  146. data/decidim-budgets/decidim-budgets.gemspec +24 -0
  147. data/decidim-budgets/lib/decidim/budgets.rb +11 -0
  148. data/decidim-budgets/lib/decidim/budgets/admin.rb +9 -0
  149. data/decidim-budgets/lib/decidim/budgets/admin_engine.rb +22 -0
  150. data/decidim-budgets/lib/decidim/budgets/feature.rb +59 -0
  151. data/decidim-budgets/lib/decidim/budgets/list_engine.rb +30 -0
  152. data/decidim-budgets/lib/decidim/budgets/test/factories.rb +43 -0
  153. data/decidim-budgets/spec/commands/add_line_item_spec.rb +48 -0
  154. data/decidim-budgets/spec/commands/cancel_order_spec.rb +42 -0
  155. data/decidim-budgets/spec/commands/checkout_spec.rb +45 -0
  156. data/decidim-budgets/spec/commands/create_project_spec.rb +72 -0
  157. data/decidim-budgets/spec/commands/remove_line_item_spec.rb +31 -0
  158. data/decidim-budgets/spec/commands/update_project_spec.rb +65 -0
  159. data/decidim-budgets/spec/factories.rb +4 -0
  160. data/decidim-budgets/spec/features/admin_manages_projects_spec.rb +16 -0
  161. data/decidim-budgets/spec/features/orders_spec.rb +149 -0
  162. data/decidim-budgets/spec/features/process_admin_manages_projects_spec.rb +17 -0
  163. data/decidim-budgets/spec/forms/project_form_spec.rb +115 -0
  164. data/decidim-budgets/spec/models/line_item_spec.rb +35 -0
  165. data/decidim-budgets/spec/models/order_spec.rb +45 -0
  166. data/decidim-budgets/spec/models/project_spec.rb +30 -0
  167. data/decidim-budgets/spec/services/project_search_spec.rb +97 -0
  168. data/decidim-budgets/spec/shared/admin_shared_context.rb +11 -0
  169. data/decidim-budgets/spec/shared/manage_projects_examples.rb +104 -0
  170. data/decidim-budgets/spec/spec_helper.rb +2 -0
  171. data/decidim-comments/app/assets/javascripts/decidim/comments/bundle.js +0 -0
  172. data/decidim-comments/app/commands/decidim/comments/create_comment.rb +2 -1
  173. data/decidim-comments/app/forms/decidim/comments/comment_form.rb +1 -0
  174. data/decidim-comments/app/frontend/application/apollo_client.js +1 -1
  175. data/decidim-comments/app/frontend/application/application.component.jsx +1 -1
  176. data/decidim-comments/app/frontend/comments/add_comment_form.component.jsx +76 -20
  177. data/decidim-comments/app/frontend/comments/add_comment_form.component.test.jsx +77 -22
  178. data/decidim-comments/app/frontend/comments/add_comment_form.fragment.graphql +6 -0
  179. data/decidim-comments/app/frontend/comments/add_comment_form.mutation.graphql +2 -2
  180. data/decidim-comments/app/frontend/comments/comment.component.jsx +15 -15
  181. data/decidim-comments/app/frontend/comments/comment.component.test.jsx +42 -41
  182. data/decidim-comments/app/frontend/comments/comment_order_selector.component.jsx +1 -1
  183. data/decidim-comments/app/frontend/comments/comment_thread.component.jsx +7 -7
  184. data/decidim-comments/app/frontend/comments/comment_thread.component.test.jsx +21 -19
  185. data/decidim-comments/app/frontend/comments/comments.component.jsx +21 -17
  186. data/decidim-comments/app/frontend/comments/comments.component.test.jsx +47 -32
  187. data/decidim-comments/app/frontend/comments/comments.query.graphql +6 -3
  188. data/decidim-comments/app/frontend/comments/down_vote_button.component.jsx +21 -10
  189. data/decidim-comments/app/frontend/comments/up_vote_button.component.jsx +23 -12
  190. data/decidim-comments/app/frontend/comments/vote_button.component.jsx +15 -7
  191. data/decidim-comments/app/frontend/comments/vote_button_component.test.jsx +7 -2
  192. data/decidim-comments/app/frontend/entry.js +1 -8
  193. data/decidim-comments/app/frontend/support/generate_user_data.js +13 -0
  194. data/decidim-comments/app/frontend/support/generate_user_group_data.js +14 -0
  195. data/decidim-comments/app/helpers/decidim/comments/comments_helper.rb +10 -15
  196. data/decidim-comments/app/models/decidim/comments/comment.rb +5 -7
  197. data/decidim-comments/app/types/decidim/comments/comment_type.rb +5 -1
  198. data/decidim-comments/config/locales/ca.yml +5 -1
  199. data/decidim-comments/config/locales/en.yml +4 -1
  200. data/decidim-comments/config/locales/es.yml +5 -1
  201. data/decidim-comments/db/migrate/20170123102043_add_user_group_id_to_comments.rb +5 -0
  202. data/decidim-comments/decidim-comments.gemspec +0 -1
  203. data/decidim-comments/lib/decidim/comments/engine.rb +0 -1
  204. data/decidim-comments/lib/decidim/comments/mutation_extensions.rb +2 -1
  205. data/decidim-comments/spec/commands/create_comment_spec.rb +6 -3
  206. data/decidim-comments/spec/commands/vote_comment_spec.rb +4 -4
  207. data/decidim-comments/spec/features/comments_spec.rb +27 -3
  208. data/decidim-comments/spec/forms/comment_form_spec.rb +6 -3
  209. data/decidim-comments/spec/models/comment_spec.rb +25 -32
  210. data/decidim-comments/spec/queries/comments_with_replies_spec.rb +2 -2
  211. data/decidim-comments/spec/types/comment_type_spec.rb +2 -2
  212. data/decidim-comments/spec/types/query_type_spec.rb +5 -5
  213. data/decidim-dev/app/views/decidim/dummy_resource/_linked_dummys.html.erb +5 -0
  214. data/decidim-dev/config/locales/en.yml +5 -0
  215. data/decidim-dev/decidim-dev.gemspec +3 -3
  216. data/decidim-dev/lib/decidim/dev/assets/avatar.jpg +0 -0
  217. data/decidim-dev/lib/decidim/dev/assets/icon.png +0 -0
  218. data/decidim-dev/lib/decidim/dev/test/base_spec_helper.rb +1 -0
  219. data/decidim-dev/lib/decidim/dev/test/rspec_support/action_mailer.rb +1 -1
  220. data/decidim-dev/lib/decidim/dev/test/rspec_support/engine_routes.rb +9 -5
  221. data/decidim-dev/lib/decidim/dev/test/rspec_support/feature.rb +24 -0
  222. data/decidim-meetings/app/assets/config/decidim_meetings_manifest.js +2 -0
  223. data/decidim-meetings/app/assets/javascripts/decidim/meetings/map.js.es6.erb +92 -0
  224. data/decidim-meetings/app/assets/stylesheets/decidim/meetings/map.css +1 -0
  225. data/decidim-meetings/app/commands/decidim/meetings/admin/close_meeting.rb +53 -0
  226. data/decidim-meetings/app/commands/decidim/meetings/admin/create_meeting.rb +15 -3
  227. data/decidim-meetings/app/commands/decidim/meetings/admin/update_meeting.rb +15 -3
  228. data/decidim-meetings/app/controllers/decidim/meetings/admin/application_controller.rb +9 -0
  229. data/decidim-meetings/app/controllers/decidim/meetings/admin/attachments_controller.rb +29 -0
  230. data/decidim-meetings/app/controllers/decidim/meetings/admin/meeting_closes_controller.rb +38 -0
  231. data/decidim-meetings/app/controllers/decidim/meetings/admin/meetings_controller.rb +0 -12
  232. data/decidim-meetings/app/controllers/decidim/meetings/meetings_controller.rb +11 -9
  233. data/decidim-meetings/app/forms/decidim/meetings/admin/close_meeting_form.rb +31 -0
  234. data/decidim-meetings/app/forms/decidim/meetings/admin/meeting_form.rb +0 -2
  235. data/decidim-meetings/app/helpers/decidim/meetings/admin/application_helper.rb +12 -0
  236. data/decidim-meetings/app/helpers/decidim/meetings/application_helper.rb +1 -0
  237. data/decidim-meetings/app/helpers/decidim/meetings/map_helper.rb +46 -0
  238. data/decidim-meetings/app/models/decidim/meetings/meeting.rb +11 -15
  239. data/decidim-meetings/app/services/decidim/meetings/meeting_search.rb +0 -1
  240. data/decidim-meetings/app/services/decidim/meetings/static_map_generator.rb +50 -0
  241. data/decidim-meetings/app/views/decidim/meetings/admin/meeting_closes/_form.html.erb +23 -0
  242. data/decidim-meetings/app/views/decidim/meetings/admin/meeting_closes/edit.html.erb +9 -0
  243. data/decidim-meetings/app/views/decidim/meetings/admin/meetings/_form.html.erb +2 -6
  244. data/decidim-meetings/app/views/decidim/meetings/admin/meetings/index.html.erb +14 -0
  245. data/decidim-meetings/app/views/decidim/meetings/meetings/_datetime.html.erb +8 -0
  246. data/decidim-meetings/app/views/decidim/meetings/meetings/_filters.html.erb +2 -2
  247. data/decidim-meetings/app/views/decidim/meetings/meetings/_filters_small_view.html.erb +18 -0
  248. data/decidim-meetings/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +22 -0
  249. data/decidim-meetings/app/views/decidim/meetings/meetings/_meetings.html.erb +3 -10
  250. data/decidim-meetings/app/views/decidim/meetings/meetings/index.html.erb +42 -0
  251. data/decidim-meetings/app/views/decidim/meetings/meetings/index.js.erb +6 -0
  252. data/decidim-meetings/app/views/decidim/meetings/meetings/show.html.erb +33 -7
  253. data/decidim-meetings/bin/rails +1 -1
  254. data/decidim-meetings/config/i18n-tasks.yml +2 -0
  255. data/decidim-meetings/config/locales/ca.yml +37 -4
  256. data/decidim-meetings/config/locales/en.yml +34 -1
  257. data/decidim-meetings/config/locales/es.yml +36 -3
  258. data/decidim-meetings/db/migrate/20170110142105_close_a_meeting.rb +9 -0
  259. data/decidim-meetings/db/migrate/20170123151650_add_latitude_and_longitude_to_meetings.rb +6 -0
  260. data/decidim-meetings/db/migrate/20170129153716_remove_short_description_from_meetings.rb +5 -0
  261. data/decidim-meetings/decidim-meetings.gemspec +7 -0
  262. data/decidim-meetings/lib/decidim/meetings/admin_engine.rb +31 -1
  263. data/decidim-meetings/lib/decidim/meetings/feature.rb +20 -6
  264. data/decidim-meetings/lib/decidim/meetings/list_engine.rb +10 -1
  265. data/decidim-meetings/lib/decidim/meetings/seeds/Exampledocument.pdf +0 -0
  266. data/decidim-meetings/lib/decidim/meetings/seeds/city.jpeg +0 -0
  267. data/decidim-meetings/lib/decidim/meetings/test/factories.rb +23 -0
  268. data/decidim-meetings/spec/commands/close_meeting_spec.rb +78 -0
  269. data/decidim-meetings/spec/commands/create_meeting_spec.rb +22 -3
  270. data/decidim-meetings/spec/commands/update_meeting_spec.rb +32 -3
  271. data/decidim-meetings/spec/controllers/meetings_controller_spec.rb +41 -0
  272. data/decidim-meetings/spec/factories.rb +3 -13
  273. data/decidim-meetings/spec/features/admin_manages_meetings_attachments_spec.rb +10 -0
  274. data/decidim-meetings/spec/features/explore_meetings_spec.rb +55 -1
  275. data/decidim-meetings/spec/features/process_admin_manages_meetings_attachments_spec.rb +12 -0
  276. data/decidim-meetings/spec/forms/close_meeting_form_spec.rb +90 -0
  277. data/decidim-meetings/spec/forms/meeting_form_spec.rb +1 -7
  278. data/decidim-meetings/spec/models/meeting_spec.rb +42 -24
  279. data/decidim-meetings/spec/services/meeting_search_spec.rb +1 -17
  280. data/decidim-meetings/spec/services/static_map_generator_spec.rb +33 -0
  281. data/decidim-meetings/spec/shared/manage_attachments_examples.rb +17 -0
  282. data/decidim-meetings/spec/shared/manage_meetings_examples.rb +58 -8
  283. data/decidim-meetings/spec/spec_helper.rb +5 -0
  284. data/decidim-meetings/spec/support/geocoder.rb +7 -0
  285. data/decidim-meetings/vendor/assets/javascripts/leaflet-svg-icon.js +179 -0
  286. data/decidim-meetings/vendor/assets/javascripts/leaflet-tilelayer-here.js +166 -0
  287. data/decidim-meetings/vendor/assets/javascripts/leaflet.js +9 -0
  288. data/decidim-meetings/vendor/assets/stylesheets/leaflet.css +624 -0
  289. data/decidim-pages/app/models/decidim/pages/page.rb +10 -1
  290. data/decidim-pages/app/views/decidim/pages/application/show.html.erb +2 -1
  291. data/decidim-pages/spec/commands/create_page_spec.rb +2 -2
  292. data/decidim-pages/spec/commands/destroy_page_spec.rb +1 -1
  293. data/decidim-pages/spec/commands/update_page_spec.rb +1 -1
  294. data/decidim-pages/spec/factories.rb +1 -1
  295. data/decidim-pages/spec/features/admin_spec.rb +1 -0
  296. data/decidim-pages/spec/models/page_spec.rb +15 -0
  297. data/decidim-proposals/app/assets/stylesheets/decidim/proposals/social_share.css.scss +5 -0
  298. data/decidim-proposals/app/commands/decidim/proposals/admin/answer_proposal.rb +43 -0
  299. data/decidim-proposals/app/commands/decidim/proposals/create_proposal.rb +1 -0
  300. data/decidim-proposals/app/controllers/decidim/proposals/admin/proposal_answers_controller.rb +37 -0
  301. data/decidim-proposals/app/controllers/decidim/proposals/admin/proposals_controller.rb +1 -0
  302. data/decidim-proposals/app/controllers/decidim/proposals/proposal_votes_controller.rb +18 -7
  303. data/decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb +8 -7
  304. data/decidim-proposals/app/forms/decidim/proposals/admin/proposal_answer_form.rb +18 -0
  305. data/decidim-proposals/app/forms/decidim/proposals/proposal_form.rb +1 -0
  306. data/decidim-proposals/app/helpers/decidim/proposals/application_helper.rb +17 -0
  307. data/decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb +19 -0
  308. data/decidim-proposals/app/models/decidim/proposals/abilities/current_user.rb +59 -0
  309. data/decidim-proposals/app/models/decidim/proposals/proposal.rb +30 -33
  310. data/decidim-proposals/app/models/decidim/proposals/proposal_vote.rb +2 -0
  311. data/decidim-proposals/app/services/decidim/proposals/proposal_search.rb +11 -0
  312. data/decidim-proposals/app/views/decidim/proposals/admin/proposal_answers/edit.html.erb +15 -0
  313. data/decidim-proposals/app/views/decidim/proposals/admin/proposals/index.html.erb +8 -0
  314. data/decidim-proposals/app/views/decidim/proposals/proposal_votes/update_buttons_and_counters.js.erb +20 -0
  315. data/decidim-proposals/app/views/decidim/proposals/proposals/_filters.html.erb +3 -1
  316. data/decidim-proposals/app/views/decidim/proposals/proposals/_filters_small_view.html.erb +18 -0
  317. data/decidim-proposals/app/views/decidim/proposals/proposals/_linked_proposals.html.erb +27 -0
  318. data/decidim-proposals/app/views/decidim/proposals/proposals/_proposal.html.erb +3 -2
  319. data/decidim-proposals/app/views/decidim/proposals/proposals/_proposal_badge.html.erb +3 -0
  320. data/decidim-proposals/app/views/decidim/proposals/proposals/_remaining_votes_count.html.erb +1 -0
  321. data/decidim-proposals/app/views/decidim/proposals/proposals/_share.html.erb +1 -1
  322. data/decidim-proposals/app/views/decidim/proposals/proposals/_vote_button.html.erb +16 -4
  323. data/decidim-proposals/app/views/decidim/proposals/proposals/_votes_limit.html.erb +23 -0
  324. data/decidim-proposals/app/views/decidim/proposals/proposals/index.html.erb +13 -3
  325. data/decidim-proposals/app/views/decidim/proposals/proposals/new.html.erb +6 -0
  326. data/decidim-proposals/app/views/decidim/proposals/proposals/show.html.erb +15 -2
  327. data/decidim-proposals/config/i18n-tasks.yml +3 -0
  328. data/decidim-proposals/config/locales/ca.yml +54 -1
  329. data/decidim-proposals/config/locales/en.yml +54 -0
  330. data/decidim-proposals/config/locales/es.yml +54 -1
  331. data/decidim-proposals/db/migrate/20170120151202_add_user_group_id_to_proposals.rb +5 -0
  332. data/decidim-proposals/db/migrate/20170131092413_add_answers_to_proposals.rb +7 -0
  333. data/decidim-proposals/decidim-proposals.gemspec +3 -0
  334. data/decidim-proposals/lib/decidim/proposals/admin_engine.rb +3 -1
  335. data/decidim-proposals/lib/decidim/proposals/engine.rb +7 -1
  336. data/decidim-proposals/lib/decidim/proposals/feature.rb +28 -1
  337. data/decidim-proposals/lib/decidim/proposals/test/factories.rb +83 -0
  338. data/decidim-proposals/spec/commands/decidim/proposals/admin_create_proposal_spec.rb +14 -0
  339. data/decidim-proposals/spec/commands/decidim/proposals/answer_proposal_spec.rb +53 -0
  340. data/decidim-proposals/spec/commands/decidim/proposals/create_proposal_spec.rb +3 -56
  341. data/decidim-proposals/spec/controllers/decidim/admin/proposal_answers_controller_spec.rb +45 -0
  342. data/decidim-proposals/spec/controllers/decidim/proposal_votes_controller_spec.rb +113 -0
  343. data/decidim-proposals/spec/controllers/decidim/proposals_controller_spec.rb +53 -0
  344. data/decidim-proposals/spec/factories.rb +1 -23
  345. data/decidim-proposals/spec/features/proposals_spec.rb +201 -38
  346. data/decidim-proposals/spec/features/vote_proposal_spec.rb +83 -11
  347. data/decidim-proposals/spec/forms/decidim/proposals/admin_proposal_form_spec.rb +13 -0
  348. data/decidim-proposals/spec/forms/decidim/proposals/proposal_answer_form_spec.rb +50 -0
  349. data/decidim-proposals/spec/forms/decidim/proposals/proposal_form_spec.rb +5 -93
  350. data/decidim-proposals/spec/helpers/application_helper_spec.rb +33 -0
  351. data/decidim-proposals/spec/helpers/proposal_votes_helper_spec.rb +53 -0
  352. data/decidim-proposals/spec/lib/decidim/proposals/feature_spec.rb +1 -1
  353. data/decidim-proposals/spec/models/decidim/proposals/proposal_spec.rb +21 -19
  354. data/decidim-proposals/spec/models/decidim/proposals/proposal_vote_spec.rb +19 -1
  355. data/decidim-proposals/spec/services/decidim/proposals/proposal_search_spec.rb +66 -25
  356. data/decidim-proposals/spec/shared/create_proposal_examples.rb +69 -0
  357. data/decidim-proposals/spec/shared/manage_proposals_examples.rb +49 -0
  358. data/decidim-proposals/spec/shared/proposal_form_examples.rb +100 -0
  359. data/decidim-results/.gitignore +7 -0
  360. data/decidim-results/README.md +23 -0
  361. data/decidim-results/Rakefile +2 -0
  362. data/decidim-results/app/assets/images/decidim/results/icon.svg +1 -0
  363. data/decidim-results/app/commands/decidim/results/admin/create_result.rb +65 -0
  364. data/decidim-results/app/commands/decidim/results/admin/update_result.rb +69 -0
  365. data/decidim-results/app/controllers/decidim/results/admin/application_controller.rb +14 -0
  366. data/decidim-results/app/controllers/decidim/results/admin/results_controller.rb +69 -0
  367. data/decidim-results/app/controllers/decidim/results/application_controller.rb +13 -0
  368. data/decidim-results/app/controllers/decidim/results/results_controller.rb +42 -0
  369. data/decidim-results/app/forms/decidim/results/admin/result_form.rb +40 -0
  370. data/decidim-results/app/helpers/decidim/results/application_helper.rb +11 -0
  371. data/decidim-results/app/models/decidim/results/application_record.rb +9 -0
  372. data/decidim-results/app/models/decidim/results/result.rb +15 -0
  373. data/decidim-results/app/services/decidim/results/result_search.rb +44 -0
  374. data/decidim-results/app/services/decidim/results/result_stats_calculator.rb +51 -0
  375. data/decidim-results/app/views/decidim/results/admin/results/_form.html.erb +23 -0
  376. data/decidim-results/app/views/decidim/results/admin/results/edit.html.erb +9 -0
  377. data/decidim-results/app/views/decidim/results/admin/results/index.html.erb +27 -0
  378. data/decidim-results/app/views/decidim/results/admin/results/new.html.erb +9 -0
  379. data/decidim-results/app/views/decidim/results/results/_count.html.erb +1 -0
  380. data/decidim-results/app/views/decidim/results/results/_filters.html.erb +22 -0
  381. data/decidim-results/app/views/decidim/results/results/_linked_results.html.erb +12 -0
  382. data/decidim-results/app/views/decidim/results/results/_results.html.erb +16 -0
  383. data/decidim-results/app/views/decidim/results/results/_tags.html.erb +10 -0
  384. data/decidim-results/app/views/decidim/results/results/index.html.erb +22 -0
  385. data/decidim-results/app/views/decidim/results/results/index.js.erb +2 -0
  386. data/decidim-results/app/views/decidim/results/results/show.html.erb +52 -0
  387. data/decidim-results/bin/rails +14 -0
  388. data/decidim-results/config/i18n-tasks.yml +5 -0
  389. data/decidim-results/config/locales/ca.yml +61 -0
  390. data/decidim-results/config/locales/en.yml +62 -0
  391. data/decidim-results/config/locales/es.yml +61 -0
  392. data/decidim-results/db/migrate/20170116104125_create_results.rb +14 -0
  393. data/decidim-results/db/migrate/20170129164553_remove_short_description_from_results.rb +5 -0
  394. data/decidim-results/decidim-results.gemspec +26 -0
  395. data/decidim-results/lib/decidim/results.rb +11 -0
  396. data/decidim-results/lib/decidim/results/admin.rb +9 -0
  397. data/decidim-results/lib/decidim/results/admin_engine.rb +22 -0
  398. data/decidim-results/lib/decidim/results/feature.rb +52 -0
  399. data/decidim-results/lib/decidim/results/list_engine.rb +19 -0
  400. data/decidim-results/lib/decidim/results/test/factories.rb +11 -0
  401. data/decidim-results/spec/commands/create_result_spec.rb +90 -0
  402. data/decidim-results/spec/commands/update_result_spec.rb +83 -0
  403. data/decidim-results/spec/factories.rb +6 -0
  404. data/decidim-results/spec/features/admin_manages_results_spec.rb +16 -0
  405. data/decidim-results/spec/features/explore_results_spec.rb +186 -0
  406. data/decidim-results/spec/features/process_admin_manages_results_spec.rb +17 -0
  407. data/decidim-results/spec/forms/result_form_spec.rb +91 -0
  408. data/decidim-results/spec/models/result_spec.rb +18 -0
  409. data/decidim-results/spec/services/result_search_spec.rb +97 -0
  410. data/decidim-results/spec/services/result_stats_calculator_spec.rb +93 -0
  411. data/decidim-results/spec/shared/admin_shared_context.rb +11 -0
  412. data/decidim-results/spec/shared/manage_results_examples.rb +96 -0
  413. data/decidim-results/spec/spec_helper.rb +2 -0
  414. data/decidim-system/app/assets/javascripts/decidim/system/application.js.es6 +1 -3
  415. data/decidim-system/app/views/layouts/decidim/system/_header.html.erb +2 -2
  416. data/decidim-system/decidim-system.gemspec +0 -1
  417. data/decidim-system/lib/decidim/system/engine.rb +0 -1
  418. data/decidim-system/spec/features/manage_admins_spec.rb +1 -1
  419. data/decidim-system/spec/features/organizations_spec.rb +1 -1
  420. data/decidim.gemspec +2 -0
  421. data/docs/how_to_create_a_plugin.md +0 -2
  422. data/lib/decidim.rb +2 -0
  423. data/lib/generators/decidim/install_generator.rb +1 -0
  424. data/lib/generators/decidim/templates/Gemfile.erb +10 -1
  425. data/lib/generators/decidim/templates/initializer.rb +9 -0
  426. data/lib/generators/decidim/templates/secrets.yml.erb +3 -0
  427. data/lib/generators/decidim/templates/social_share_button.rb +1 -1
  428. data/package.json +2 -3
  429. data/yarn.lock +10 -8
  430. metadata +265 -32
  431. data/decidim-admin/app/helpers/decidim/admin/aria_selected_link_to_helper.rb +0 -28
  432. data/decidim-admin/app/views/decidim/admin/participatory_process_attachments/edit.html.erb +0 -9
  433. data/decidim-admin/app/views/decidim/admin/participatory_process_attachments/index.html.erb +0 -37
  434. data/decidim-admin/app/views/decidim/admin/participatory_process_attachments/show.html.erb +0 -25
  435. data/decidim-comments/app/frontend/support/generate_current_user_data.js +0 -13
  436. data/decidim-comments/app/types/decidim/comments/author_type.rb +0 -15
  437. data/decidim-comments/spec/types/author_type_spec.rb +0 -21
  438. data/decidim-dev/lib/decidim/dev/assets/avatar.svg +0 -14
  439. data/decidim-proposals/app/views/decidim/proposals/proposal_votes/create.js.erb +0 -5
@@ -1,65 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
  require "spec_helper"
3
+ require_relative "../../../shared/create_proposal_examples"
3
4
 
4
5
  module Decidim
5
6
  module Proposals
6
7
  describe CreateProposal do
7
- describe "call" do
8
- let(:organization) { create(:organization) }
9
- let(:participatory_process) { create :participatory_process, organization: organization }
10
- let(:feature) { create(:feature, participatory_process: participatory_process) }
11
- let(:form_params) do
12
- {
13
- title: "Proposal title",
14
- body: "Proposal body",
15
- feature: feature
16
- }
17
- end
18
-
19
- let(:author) do
20
- create(:user, organization: organization)
21
- end
22
-
23
- let(:form) do
24
- ProposalForm.from_params(
25
- form_params
26
- ).with_context(
27
- current_organization: organization,
28
- current_feature: feature,
29
- current_process: participatory_process
30
- )
31
- end
32
-
33
- let(:command) { described_class.new(form, author) }
34
-
35
- describe "when the form is not valid" do
36
- before do
37
- expect(form).to receive(:invalid?).and_return(true)
38
- end
39
-
40
- it "broadcasts invalid" do
41
- expect { command.call }.to broadcast(:invalid)
42
- end
43
-
44
- it "doesn't create a proposal" do
45
- expect do
46
- command.call
47
- end.to_not change { Proposal.count }
48
- end
49
- end
50
-
51
- describe "when the form is valid" do
52
- it "broadcasts ok" do
53
- expect { command.call }.to broadcast(:ok)
54
- end
55
-
56
- it "creates a new proposal" do
57
- expect do
58
- command.call
59
- end.to change { Proposal.count }.by(1)
60
- end
61
- end
62
- end
8
+ let(:form_klass) { ProposalForm }
9
+ it_behaves_like "create a proposal", true
63
10
  end
64
11
  end
65
12
  end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ module Decidim
5
+ module Proposals
6
+ module Admin
7
+ describe ProposalAnswersController, type: :controller do
8
+ let(:feature) { proposal.feature }
9
+ let(:proposal) { create(:proposal) }
10
+ let(:user) { create(:user, :confirmed, :admin, organization: feature.organization) }
11
+
12
+ routes do
13
+ Decidim::Proposals::AdminEngine.routes
14
+ end
15
+
16
+ before do
17
+ @request.env["decidim.current_organization"] = feature.organization
18
+ @request.env["decidim.current_participatory_process"] = feature.participatory_process
19
+ @request.env["decidim.current_feature"] = feature
20
+ sign_in user
21
+ end
22
+
23
+ let(:params) do
24
+ {
25
+ id: proposal.id,
26
+ proposal_id: proposal.id,
27
+ feature_id: feature.id,
28
+ participatory_process_id: feature.participatory_process.id,
29
+ state: "rejected"
30
+ }
31
+ end
32
+
33
+ describe "PUT update" do
34
+ context "when the command fails" do
35
+ it "renders the edit template" do
36
+ put :update, params: params
37
+
38
+ expect(response).to render_template(:edit)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,113 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ module Decidim
5
+ module Proposals
6
+ describe ProposalVotesController, type: :controller do
7
+ let(:proposal) { create(:proposal, feature: feature) }
8
+ let(:user) { create(:user, :confirmed, organization: feature.organization) }
9
+
10
+ routes do
11
+ Decidim::Proposals::Engine.routes
12
+ end
13
+
14
+ before do
15
+ @request.env["decidim.current_organization"] = feature.organization
16
+ @request.env["decidim.current_participatory_process"] = feature.participatory_process
17
+ @request.env["decidim.current_feature"] = feature
18
+ sign_in user
19
+ end
20
+
21
+ let(:params) do
22
+ {
23
+ proposal_id: proposal.id,
24
+ feature_id: feature.id,
25
+ participatory_process_id: feature.participatory_process.id
26
+ }
27
+ end
28
+
29
+ describe "POST create" do
30
+ context "with votes enabled" do
31
+ let(:feature) do
32
+ create(:proposal_feature, :with_votes_enabled)
33
+ end
34
+
35
+ it "allows voting" do
36
+ expect do
37
+ post :create, format: :js, params: params
38
+ end.to change { ProposalVote.count }.by(1)
39
+
40
+ expect(ProposalVote.last.author).to eq(user)
41
+ expect(ProposalVote.last.proposal).to eq(proposal)
42
+ end
43
+ end
44
+
45
+ context "with votes disabled" do
46
+ let(:feature) do
47
+ create(:proposal_feature)
48
+ end
49
+
50
+ it "doesn't allow voting" do
51
+ expect do
52
+ post :create, format: :js, params: params
53
+ end.not_to change { ProposalVote.count }
54
+
55
+ expect(flash[:alert]).not_to be_empty
56
+ expect(response).to have_http_status(302)
57
+ end
58
+ end
59
+
60
+ context "with votes enabled but votes blocked" do
61
+ let(:feature) do
62
+ create(:proposal_feature, :with_votes_blocked)
63
+ end
64
+
65
+ it "doesn't allow voting" do
66
+ expect do
67
+ post :create, format: :js, params: params
68
+ end.not_to change { ProposalVote.count }
69
+
70
+ expect(flash[:alert]).not_to be_empty
71
+ expect(response).to have_http_status(302)
72
+ end
73
+ end
74
+ end
75
+
76
+ describe "destroy" do
77
+ before do
78
+ create(:proposal_vote, proposal: proposal, author: user)
79
+ end
80
+
81
+ context "with vote limit enabled" do
82
+ let(:feature) do
83
+ create(:proposal_feature, :with_votes_enabled, :with_vote_limit)
84
+ end
85
+
86
+ it "deletes the vote" do
87
+ expect do
88
+ delete :destroy, format: :js, params: params
89
+ end.to change { ProposalVote.count }.by(-1)
90
+
91
+ expect(ProposalVote.count).to eq(0)
92
+ end
93
+ end
94
+
95
+ context "with vote limit disabled" do
96
+ let(:feature) do
97
+ create(:proposal_feature, :with_votes_enabled)
98
+ end
99
+
100
+ it "does not allow deleting a vote" do
101
+ expect do
102
+ delete :destroy, format: :js, params: params
103
+ end.not_to change { ProposalVote.count }
104
+
105
+ expect(flash[:alert]).not_to be_empty
106
+ expect(response).to have_http_status(302)
107
+ expect(ProposalVote.count).to eq(1)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ module Decidim
5
+ module Proposals
6
+ describe ProposalsController, type: :controller do
7
+ let(:user) { create(:user, :confirmed, organization: feature.organization) }
8
+
9
+ routes do
10
+ Decidim::Proposals::Engine.routes
11
+ end
12
+
13
+ before do
14
+ @request.env["decidim.current_organization"] = feature.organization
15
+ @request.env["decidim.current_participatory_process"] = feature.participatory_process
16
+ @request.env["decidim.current_feature"] = feature
17
+ sign_in user
18
+ end
19
+
20
+ let(:params) do
21
+ {
22
+ feature_id: feature.id,
23
+ participatory_process_id: feature.participatory_process.id
24
+ }
25
+ end
26
+
27
+ describe "POST create" do
28
+ context "when creation is not enabled" do
29
+ let(:feature) { create(:proposal_feature) }
30
+
31
+ it "raises an error" do
32
+ expect(CreateProposal).not_to receive(:call)
33
+
34
+ post :create, params: params
35
+
36
+ expect(flash[:alert]).not_to be_empty
37
+ expect(response).to have_http_status(302)
38
+ end
39
+ end
40
+
41
+ context "when creation is enabled" do
42
+ let(:feature) { create(:proposal_feature, :with_creation_enabled) }
43
+
44
+ it "creates a proposal" do
45
+ expect(CreateProposal).to receive(:call)
46
+
47
+ post :create, params: params
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,23 +1 @@
1
- require "decidim/core/test/factories"
2
- require "decidim/admin/test/factories"
3
- require "decidim/comments/test/factories"
4
-
5
- FactoryGirl.define do
6
- factory :proposal_feature, class: Decidim::Feature do
7
- name { Decidim::Features::Namer.new(participatory_process.organization.available_locales, :proposals).i18n_name }
8
- manifest_name :proposals
9
- participatory_process
10
- end
11
-
12
- factory :proposal, class: Decidim::Proposals::Proposal do
13
- title { Faker::Lorem.sentence }
14
- body { Faker::Lorem.sentences(3).join("\n") }
15
- feature
16
- author { create(:user, organization: feature.organization) }
17
- end
18
-
19
- factory :proposal_vote, class: Decidim::Proposals::ProposalVote do
20
- proposal { build(:proposal) }
21
- author { build(:user, organization: proposal.organization) }
22
- end
23
- end
1
+ require "decidim/proposals/test/factories"
@@ -18,52 +18,189 @@ describe "Proposals", type: :feature do
18
18
  context "when the user is logged in" do
19
19
  before do
20
20
  login_as user, scope: :user
21
- visit_feature
21
+ visit_feature
22
22
  end
23
23
 
24
- it "creates a new proposal" do
25
- click_link "New proposal"
24
+ context "with creation enabled" do
25
+ let!(:feature) do
26
+ create(:proposal_feature,
27
+ :with_creation_enabled,
28
+ manifest: manifest,
29
+ participatory_process: participatory_process)
30
+ end
31
+
32
+ it "creates a new proposal" do
33
+ click_link "New proposal"
26
34
 
27
- within ".new_proposal" do
28
- fill_in :proposal_title, with: "Oriol for president"
29
- fill_in :proposal_body, with: "He will solve everything"
30
- select category.name["en"], from: :proposal_category_id
31
- select scope.name, from: :proposal_scope_id
35
+ within ".new_proposal" do
36
+ fill_in :proposal_title, with: "Oriol for president"
37
+ fill_in :proposal_body, with: "He will solve everything"
38
+ select category.name["en"], from: :proposal_category_id
39
+ select scope.name, from: :proposal_scope_id
32
40
 
33
- find("*[type=submit]").click
41
+ find("*[type=submit]").click
42
+ end
43
+
44
+ expect(page).to have_content("successfully")
45
+ expect(page).to have_content("Oriol for president")
46
+ expect(page).to have_content("He will solve everything")
47
+ expect(page).to have_content(category.name["en"])
48
+ expect(page).to have_content(scope.name)
49
+ expect(page).to have_content(user.name)
34
50
  end
35
51
 
36
- expect(page).to have_content("successfully")
37
- expect(page).to have_content("Oriol for president")
38
- expect(page).to have_content("He will solve everything")
39
- expect(page).to have_content(category.name["en"])
40
- expect(page).to have_content(scope.name)
52
+ context "when the user has verified organizations" do
53
+ let(:user_group) { create(:user_group, :verified) }
54
+
55
+ before do
56
+ create(:user_group_membership, user: user, user_group: user_group)
57
+ end
58
+
59
+ it "creates a new proposal as a user group" do
60
+ click_link "New proposal"
61
+
62
+ within ".new_proposal" do
63
+ fill_in :proposal_title, with: "Oriol for president"
64
+ fill_in :proposal_body, with: "He will solve everything"
65
+ select category.name["en"], from: :proposal_category_id
66
+ select scope.name, from: :proposal_scope_id
67
+ select user_group.name, from: :proposal_user_group_id
68
+
69
+ find("*[type=submit]").click
70
+ end
71
+
72
+ expect(page).to have_content("successfully")
73
+ expect(page).to have_content("Oriol for president")
74
+ expect(page).to have_content("He will solve everything")
75
+ expect(page).to have_content(category.name["en"])
76
+ expect(page).to have_content(scope.name)
77
+ expect(page).to have_content(user_group.name)
78
+ end
79
+ end
80
+ end
81
+
82
+ context "when creation is not enabled" do
83
+ it "does not show the creation button" do
84
+ expect(page).to have_no_link("New proposal")
85
+ end
41
86
  end
42
87
  end
43
88
  end
44
89
 
45
- context "when it is an official proposal" do
46
- let!(:official_proposal) { create(:proposal, feature: feature, author: nil) }
90
+ context "viewing a single proposal" do
91
+ it "allows viewing a single proposal" do
92
+ proposal = proposals.first
47
93
 
48
- it "shows the author as official" do
49
- visit_feature
50
- click_link official_proposal.title
51
- expect(page).to have_content("Official proposal")
94
+ click_link proposal.title
95
+
96
+ expect(page).to have_content(proposal.title)
97
+ expect(page).to have_content(proposal.body)
98
+ expect(page).to have_content(proposal.author.name)
99
+ end
100
+
101
+ context "when it is an official proposal" do
102
+ let!(:official_proposal) { create(:proposal, feature: feature, author: nil) }
103
+
104
+ it "shows the author as official" do
105
+ visit_feature
106
+ click_link official_proposal.title
107
+ expect(page).to have_content("Official proposal")
108
+ end
109
+ end
110
+
111
+ context "when a proposal has comments" do
112
+ let(:proposal) { create(:proposal, feature: feature) }
113
+ let(:author) { create(:user, :confirmed, organization: feature.organization) }
114
+ let!(:comments) { create_list(:comment, 3, commentable: proposal) }
115
+
116
+ it "shows the comments" do
117
+ visit_feature
118
+ click_link proposal.title
119
+
120
+ comments.each do |comment|
121
+ expect(page).to have_content(comment.body)
122
+ end
123
+ end
124
+ end
125
+
126
+ context "when a proposal has been linked in a meeting" do
127
+ let(:proposal) { create(:proposal, feature: feature) }
128
+ let(:meeting_feature) do
129
+ create(:feature, manifest_name: :meetings, participatory_process: proposal.feature.participatory_process)
130
+ end
131
+ let(:meeting) { create(:meeting, feature: meeting_feature) }
132
+
133
+ before do
134
+ meeting.link_resources([proposal], "proposals_from_meeting")
135
+ end
136
+
137
+ it "shows related meetings" do
138
+ visit_feature
139
+ click_link proposal.title
140
+
141
+ expect(page).to have_i18n_content(meeting.title)
142
+ end
143
+ end
144
+
145
+ context "when a proposal has been linked in a result" do
146
+ let(:proposal) { create(:proposal, feature: feature) }
147
+ let(:result_feature) do
148
+ create(:feature, manifest_name: :results, participatory_process: proposal.feature.participatory_process)
149
+ end
150
+ let(:result) { create(:result, feature: result_feature) }
151
+
152
+ before do
153
+ result.link_resources([proposal], "included_proposals")
154
+ end
155
+
156
+ it "shows related results" do
157
+ visit_feature
158
+ click_link proposal.title
159
+
160
+ expect(page).to have_i18n_content(result.title)
161
+ end
162
+ end
163
+
164
+ context "when a proposal has been accepted" do
165
+ let!(:proposal) { create(:proposal, :accepted, feature: feature) }
166
+
167
+ it "shows a badge" do
168
+ visit_feature
169
+ click_link proposal.title
170
+
171
+ expect(page).to have_content("Accepted")
172
+ end
173
+ end
174
+
175
+ context "when a proposal has been rejected" do
176
+ let!(:proposal) { create(:proposal, :rejected, feature: feature) }
177
+
178
+ it "shows the rejection reason" do
179
+ visit_feature
180
+ click_link proposal.title
181
+
182
+ expect(page).to have_content("Rejected")
183
+ expect(page).to have_i18n_content(proposal.answer)
184
+ end
52
185
  end
53
186
  end
54
187
 
55
- context "when a proposal has comments" do
188
+ context "when a proposal has been linked in a project" do
56
189
  let(:proposal) { create(:proposal, feature: feature)}
57
- let(:author) { create(:user, :confirmed, organization: feature.organization)}
58
- let!(:comments) { create_list(:comment, 3, commentable: proposal) }
190
+ let(:budget_feature) do
191
+ create(:feature, manifest_name: :budgets, participatory_process: proposal.feature.participatory_process)
192
+ end
193
+ let(:project) { create(:project, feature: budget_feature) }
194
+
195
+ before do
196
+ project.link_resources([proposal], "included_proposals")
197
+ end
59
198
 
60
- it "shows the comments" do
199
+ it "shows related projects" do
61
200
  visit_feature
62
201
  click_link proposal.title
63
202
 
64
- comments.each do |comment|
65
- expect(page).to have_content(comment.body)
66
- end
203
+ expect(page).to have_i18n_content(project.title)
67
204
  end
68
205
  end
69
206
 
@@ -72,16 +209,6 @@ describe "Proposals", type: :feature do
72
209
  expect(page).to have_css(".card--proposal", count: 3)
73
210
  end
74
211
 
75
- it "allows viewing a single proposal" do
76
- proposal = proposals.first
77
-
78
- click_link proposal.title
79
-
80
- expect(page).to have_content(proposal.title)
81
- expect(page).to have_content(proposal.body)
82
- expect(page).to have_content(proposal.author.name)
83
- end
84
-
85
212
  context "when there are a lot of proposals" do
86
213
  before do
87
214
  create_list(:proposal, 17, feature: feature)
@@ -100,7 +227,7 @@ describe "Proposals", type: :feature do
100
227
  context "when filtering" do
101
228
  context "by origin 'official'" do
102
229
  it "lists the filtered proposals" do
103
- create(:proposal, feature: feature, scope: scope, decidim_author_id: nil)
230
+ create(:proposal, :official, feature: feature, scope: scope)
104
231
  visit_feature
105
232
 
106
233
  within ".filters" do
@@ -122,6 +249,42 @@ describe "Proposals", type: :feature do
122
249
  expect(page).to have_content("#{proposals.size} PROPOSALS")
123
250
  end
124
251
  end
252
+
253
+ context "by accepted" do
254
+ it "lists the filtered proposals" do
255
+ create(:proposal, :accepted, feature: feature, scope: scope)
256
+ visit_feature
257
+
258
+ within ".filters" do
259
+ choose "Accepted"
260
+ end
261
+
262
+ expect(page).to have_css(".card--proposal", count: 1)
263
+ expect(page).to have_content("1 PROPOSAL")
264
+
265
+ within ".card--proposal" do
266
+ expect(page).to have_content("Accepted")
267
+ end
268
+ end
269
+ end
270
+
271
+ context "by rejected" do
272
+ it "lists the filtered proposals" do
273
+ create(:proposal, :rejected, feature: feature, scope: scope)
274
+ visit_feature
275
+
276
+ within ".filters" do
277
+ choose "Rejected"
278
+ end
279
+
280
+ expect(page).to have_css(".card--proposal", count: 1)
281
+ expect(page).to have_content("1 PROPOSAL")
282
+
283
+ within ".card--proposal" do
284
+ expect(page).to have_content("Rejected")
285
+ end
286
+ end
287
+ end
125
288
  end
126
289
  end
127
290
  end