decidim 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim might be problematic. Click here for more details.

Files changed (251) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +23 -4
  3. data/.travis.yml +4 -1
  4. data/Gemfile.lock +56 -48
  5. data/Rakefile +1 -1
  6. data/decidim-admin/app/commands/decidim/admin/create_participatory_process_admin.rb +3 -0
  7. data/decidim-admin/app/commands/decidim/admin/update_feature_permissions.rb +46 -0
  8. data/decidim-admin/app/commands/decidim/admin/update_organization.rb +17 -2
  9. data/decidim-admin/app/commands/decidim/admin/update_participatory_process.rb +4 -2
  10. data/decidim-admin/app/controllers/decidim/admin/application_controller.rb +3 -0
  11. data/decidim-admin/app/controllers/decidim/admin/feature_permissions_controller.rb +59 -0
  12. data/decidim-admin/app/controllers/decidim/admin/features_controller.rb +20 -0
  13. data/decidim-admin/app/controllers/decidim/admin/users_controller.rb +3 -1
  14. data/decidim-admin/app/forms/decidim/admin/organization_form.rb +10 -0
  15. data/decidim-admin/app/forms/decidim/admin/participatory_process_form.rb +8 -5
  16. data/decidim-admin/app/forms/decidim/admin/permission_form.rb +31 -0
  17. data/decidim-admin/app/forms/decidim/admin/permissions_form.rb +16 -0
  18. data/decidim-admin/app/helpers/decidim/admin/application_helper.rb +1 -0
  19. data/decidim-admin/app/models/decidim/admin/participatory_process_user_role.rb +1 -1
  20. data/decidim-admin/app/views/decidim/admin/attachments/edit.html.erb +1 -1
  21. data/decidim-admin/app/views/decidim/admin/attachments/new.html.erb +1 -1
  22. data/decidim-admin/app/views/decidim/admin/categories/edit.html.erb +1 -1
  23. data/decidim-admin/app/views/decidim/admin/categories/new.html.erb +1 -1
  24. data/decidim-admin/app/views/decidim/admin/dashboard/show.html.erb +1 -1
  25. data/decidim-admin/app/views/decidim/admin/feature_permissions/edit.html.erb +27 -0
  26. data/decidim-admin/app/views/decidim/admin/features/_feature.html.erb +10 -0
  27. data/decidim-admin/app/views/decidim/admin/features/edit.html.erb +1 -1
  28. data/decidim-admin/app/views/decidim/admin/features/new.html.erb +1 -1
  29. data/decidim-admin/app/views/decidim/admin/organization/_form.html.erb +34 -0
  30. data/decidim-admin/app/views/decidim/admin/organization/edit.html.erb +2 -2
  31. data/decidim-admin/app/views/decidim/admin/participatory_process_steps/edit.html.erb +1 -1
  32. data/decidim-admin/app/views/decidim/admin/participatory_process_steps/new.html.erb +1 -1
  33. data/decidim-admin/app/views/decidim/admin/participatory_process_user_roles/index.html.erb +1 -1
  34. data/decidim-admin/app/views/decidim/admin/participatory_processes/_form.html.erb +17 -4
  35. data/decidim-admin/app/views/decidim/admin/participatory_processes/edit.html.erb +1 -1
  36. data/decidim-admin/app/views/decidim/admin/participatory_processes/index.html.erb +1 -1
  37. data/decidim-admin/app/views/decidim/admin/participatory_processes/new.html.erb +2 -2
  38. data/decidim-admin/app/views/decidim/admin/participatory_processes/show.html.erb +5 -2
  39. data/decidim-admin/app/views/decidim/admin/scopes/edit.html.erb +2 -2
  40. data/decidim-admin/app/views/decidim/admin/scopes/index.html.erb +1 -1
  41. data/decidim-admin/app/views/decidim/admin/scopes/new.html.erb +2 -2
  42. data/decidim-admin/app/views/decidim/admin/static_pages/_form.html.erb +1 -1
  43. data/decidim-admin/app/views/decidim/admin/static_pages/edit.html.erb +2 -2
  44. data/decidim-admin/app/views/decidim/admin/static_pages/index.html.erb +1 -1
  45. data/decidim-admin/app/views/decidim/admin/static_pages/new.html.erb +2 -2
  46. data/decidim-admin/app/views/decidim/admin/static_pages/show.html.erb +1 -1
  47. data/decidim-admin/app/views/decidim/admin/user_groups/index.html.erb +1 -1
  48. data/decidim-admin/app/views/decidim/admin/users/index.html.erb +1 -1
  49. data/decidim-admin/app/views/decidim/admin/users/new.html.erb +2 -2
  50. data/decidim-admin/app/views/layouts/decidim/admin/participatory_process.html.erb +1 -1
  51. data/decidim-admin/config/i18n-tasks.yml +4 -3
  52. data/decidim-admin/config/locales/ca.yml +20 -1
  53. data/decidim-admin/config/locales/en.yml +19 -0
  54. data/decidim-admin/config/locales/es.yml +19 -0
  55. data/decidim-admin/config/locales/eu.yml +5 -0
  56. data/decidim-admin/config/routes.rb +8 -1
  57. data/decidim-admin/db/seeds.rb +3 -1
  58. data/decidim-admin/spec/commands/create_participatory_process_admin_spec.rb +19 -0
  59. data/decidim-admin/spec/commands/update_organization_spec.rb +20 -0
  60. data/decidim-admin/spec/features/admin_invite_spec.rb +5 -3
  61. data/decidim-admin/spec/features/admin_manages_feature_permissions_spec.rb +44 -0
  62. data/decidim-admin/spec/features/admin_manages_features_spec.rb +38 -0
  63. data/decidim-admin/spec/features/admin_manages_participatory_process_admins_spec.rb +0 -2
  64. data/decidim-admin/spec/features/admin_manages_participatory_process_attachments_spec.rb +0 -2
  65. data/decidim-admin/spec/features/admin_manages_participatory_process_categories_spec.rb +0 -2
  66. data/decidim-admin/spec/features/admin_manages_participatory_process_steps_spec.rb +0 -2
  67. data/decidim-admin/spec/features/admin_manages_participatory_processes_spec.rb +0 -2
  68. data/decidim-admin/spec/features/admin_manages_user_groups_spec.rb +1 -3
  69. data/decidim-admin/spec/features/participatory_process_admin_manages_participatory_process_admins_spec.rb +0 -2
  70. data/decidim-admin/spec/features/participatory_process_admin_manages_participatory_process_attachments_spec.rb +0 -2
  71. data/decidim-admin/spec/features/participatory_process_admin_manages_participatory_process_steps_spec.rb +0 -2
  72. data/decidim-admin/spec/features/participatory_process_admin_manages_participatory_processes_spec.rb +0 -2
  73. data/decidim-admin/spec/features/process_admin_manages_participatory_process_categories_spec.rb +0 -2
  74. data/decidim-admin/spec/forms/organization_form_spec.rb +11 -2
  75. data/decidim-admin/spec/models/participatory_process_user_role_spec.rb +17 -0
  76. data/decidim-admin/spec/shared/manage_process_steps_examples.rb +3 -2
  77. data/decidim-budgets/app/assets/images/decidim/budgets/icon.svg +16 -4
  78. data/decidim-budgets/app/assets/javascripts/decidim/budgets/progressFixed.js.es6 +23 -0
  79. data/decidim-budgets/app/assets/javascripts/decidim/budgets/projects.js.es6 +1 -0
  80. data/decidim-budgets/app/assets/stylesheets/decidim/budgets/budget/_budget-list.scss +1 -1
  81. data/decidim-budgets/app/commands/decidim/budgets/admin/create_project.rb +0 -1
  82. data/decidim-budgets/app/commands/decidim/budgets/admin/update_project.rb +0 -1
  83. data/decidim-budgets/app/controllers/decidim/budgets/admin/application_controller.rb +9 -0
  84. data/decidim-budgets/app/controllers/decidim/budgets/admin/attachments_controller.rb +29 -0
  85. data/decidim-budgets/app/controllers/decidim/budgets/line_items_controller.rb +2 -0
  86. data/decidim-budgets/app/controllers/decidim/budgets/orders_controller.rb +2 -0
  87. data/decidim-budgets/app/forms/decidim/budgets/admin/project_form.rb +1 -2
  88. data/decidim-budgets/app/models/decidim/budgets/project.rb +1 -0
  89. data/decidim-budgets/app/services/decidim/budgets/project_search.rb +0 -1
  90. data/decidim-budgets/app/views/decidim/budgets/admin/projects/_form.html.erb +0 -4
  91. data/decidim-budgets/app/views/decidim/budgets/admin/projects/edit.html.erb +1 -1
  92. data/decidim-budgets/app/views/decidim/budgets/admin/projects/index.html.erb +1 -0
  93. data/decidim-budgets/app/views/decidim/budgets/admin/projects/new.html.erb +1 -1
  94. data/decidim-budgets/app/views/decidim/budgets/line_items/update_budget.js.erb +2 -0
  95. data/decidim-budgets/app/views/decidim/budgets/projects/_project.html.erb +2 -2
  96. data/decidim-budgets/app/views/decidim/budgets/projects/_project_budget_button.html.erb +2 -2
  97. data/decidim-budgets/app/views/decidim/budgets/projects/index.html.erb +3 -2
  98. data/decidim-budgets/app/views/decidim/budgets/projects/show.html.erb +3 -7
  99. data/decidim-budgets/config/i18n-tasks.yml +1 -0
  100. data/decidim-budgets/config/locales/ca.yml +24 -5
  101. data/decidim-budgets/config/locales/en.yml +12 -3
  102. data/decidim-budgets/config/locales/es.yml +22 -3
  103. data/decidim-budgets/config/locales/eu.yml +5 -0
  104. data/decidim-budgets/db/migrate/20170207101750_remove_short_description_from_decidim_projects.rb +5 -0
  105. data/decidim-budgets/decidim-budgets.gemspec +1 -0
  106. data/decidim-budgets/lib/decidim/budgets/admin_engine.rb +4 -1
  107. data/decidim-budgets/lib/decidim/budgets/feature.rb +15 -4
  108. data/decidim-budgets/lib/decidim/budgets/test/factories.rb +2 -3
  109. data/decidim-budgets/spec/commands/create_project_spec.rb +0 -1
  110. data/decidim-budgets/spec/commands/update_project_spec.rb +0 -1
  111. data/decidim-budgets/spec/features/admin_manages_project_attachments_spec.rb +10 -0
  112. data/decidim-budgets/spec/features/admin_manages_projects_spec.rb +0 -2
  113. data/decidim-budgets/spec/features/orders_spec.rb +43 -5
  114. data/decidim-budgets/spec/features/process_admin_manages_project_attachments_spec.rb +12 -0
  115. data/decidim-budgets/spec/features/process_admin_manages_projects_spec.rb +0 -2
  116. data/decidim-budgets/spec/forms/project_form_spec.rb +0 -10
  117. data/decidim-budgets/spec/shared/manage_attachments_examples.rb +17 -0
  118. data/decidim-budgets/spec/shared/manage_projects_examples.rb +0 -7
  119. data/decidim-comments/app/assets/javascripts/decidim/comments/bundle.js +0 -0
  120. data/decidim-comments/app/commands/decidim/comments/create_comment.rb +10 -0
  121. data/decidim-comments/app/forms/decidim/comments/comment_form.rb +1 -1
  122. data/decidim-comments/app/frontend/comments/add_comment_form.component.jsx +33 -12
  123. data/decidim-comments/app/frontend/comments/add_comment_form.component.test.jsx +6 -0
  124. data/decidim-comments/app/frontend/comments/comment.component.jsx +7 -5
  125. data/decidim-comments/app/frontend/comments/comment_order_selector.component.jsx +2 -2
  126. data/decidim-comments/app/frontend/comments/comment_thread.component.jsx +5 -0
  127. data/decidim-comments/app/frontend/comments/comments.component.jsx +11 -0
  128. data/decidim-comments/app/frontend/comments/vote_button.component.jsx +5 -0
  129. data/decidim-comments/app/frontend/comments/vote_button_component.test.jsx +1 -1
  130. data/decidim-comments/app/frontend/entry.test.js +2 -0
  131. data/decidim-comments/app/mailers/decidim/comments/comment_notification_mailer.rb +31 -0
  132. data/decidim-comments/app/models/decidim/comments/comment.rb +6 -0
  133. data/decidim-comments/app/views/decidim/comments/comment_notification_mailer/comment_created.html.erb +18 -0
  134. data/decidim-comments/app/views/decidim/comments/comment_notification_mailer/reply_created.html.erb +18 -0
  135. data/decidim-comments/config/locales/ca.yml +17 -3
  136. data/decidim-comments/config/locales/en.yml +17 -3
  137. data/decidim-comments/config/locales/es.yml +17 -3
  138. data/decidim-comments/config/locales/eu.yml +5 -0
  139. data/decidim-comments/lib/decidim/comments.rb +1 -0
  140. data/decidim-comments/{app/helpers → lib}/decidim/comments/comments_helper.rb +0 -0
  141. data/decidim-comments/spec/commands/create_comment_spec.rb +68 -1
  142. data/decidim-comments/spec/features/comments_spec.rb +27 -20
  143. data/decidim-comments/spec/features/notifications_spec.rb +45 -0
  144. data/decidim-comments/spec/forms/comment_form_spec.rb +6 -0
  145. data/decidim-comments/spec/mailers/comment_notification_mailer_spec.rb +36 -0
  146. data/decidim-comments/spec/models/comment_spec.rb +8 -0
  147. data/decidim-comments/spec/spec_helper.rb +0 -1
  148. data/decidim-comments/spec/types/mutation_type_spec.rb +8 -7
  149. data/decidim-dev/config/locales/ca.yml +5 -0
  150. data/decidim-dev/config/locales/es.yml +5 -0
  151. data/decidim-dev/config/locales/eu.yml +5 -0
  152. data/decidim-dev/decidim-dev.gemspec +2 -1
  153. data/decidim-dev/lib/decidim/dev.rb +2 -0
  154. data/decidim-dev/lib/decidim/dev/dummy_authorization_handler.rb +1 -0
  155. data/decidim-dev/lib/decidim/dev/test/base_spec_helper.rb +4 -1
  156. data/decidim-dev/lib/decidim/dev/test/rspec_support/action_mailer.rb +19 -0
  157. data/decidim-dev/lib/decidim/dev/test/rspec_support/feature.rb +26 -3
  158. data/decidim-dev/lib/decidim/dev/test/rspec_support/translation_helpers.rb +1 -1
  159. data/decidim-meetings/app/forms/decidim/meetings/admin/meeting_form.rb +2 -2
  160. data/decidim-meetings/app/views/decidim/meetings/admin/meeting_closes/edit.html.erb +1 -1
  161. data/decidim-meetings/app/views/decidim/meetings/admin/meetings/edit.html.erb +1 -1
  162. data/decidim-meetings/app/views/decidim/meetings/admin/meetings/new.html.erb +1 -1
  163. data/decidim-meetings/app/views/decidim/meetings/meetings/index.html.erb +3 -1
  164. data/decidim-meetings/app/views/decidim/meetings/meetings/show.html.erb +11 -1
  165. data/decidim-meetings/config/locales/ca.yml +3 -3
  166. data/decidim-meetings/config/locales/en.yml +1 -1
  167. data/decidim-meetings/config/locales/es.yml +1 -1
  168. data/decidim-meetings/config/locales/eu.yml +5 -0
  169. data/decidim-meetings/decidim-meetings.gemspec +1 -1
  170. data/decidim-meetings/lib/decidim/meetings/feature.rb +1 -0
  171. data/decidim-meetings/spec/features/admin_manages_meetings_attachments_spec.rb +0 -2
  172. data/decidim-meetings/spec/features/admin_manages_meetings_spec.rb +0 -2
  173. data/decidim-meetings/spec/features/process_admin_manages_meetings_attachments_spec.rb +0 -2
  174. data/decidim-meetings/spec/features/process_admin_manages_meetings_spec.rb +0 -2
  175. data/decidim-pages/app/assets/images/decidim/pages/icon.svg +1 -3
  176. data/decidim-pages/app/views/decidim/pages/admin/pages/edit.html.erb +1 -1
  177. data/decidim-pages/app/views/decidim/pages/application/show.html.erb +4 -1
  178. data/decidim-pages/config/locales/eu.yml +7 -0
  179. data/decidim-pages/lib/decidim/pages/feature.rb +1 -0
  180. data/decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb +42 -5
  181. data/decidim-proposals/app/forms/decidim/proposals/proposal_form.rb +3 -1
  182. data/decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb +1 -1
  183. data/decidim-proposals/app/models/decidim/proposals/abilities/current_user.rb +22 -4
  184. data/decidim-proposals/app/models/decidim/proposals/proposal.rb +2 -2
  185. data/decidim-proposals/app/services/decidim/proposals/proposal_search.rb +25 -13
  186. data/decidim-proposals/app/views/decidim/proposals/admin/proposal_answers/edit.html.erb +1 -1
  187. data/decidim-proposals/app/views/decidim/proposals/admin/proposals/new.html.erb +1 -1
  188. data/decidim-proposals/app/views/decidim/proposals/proposals/_filters.html.erb +9 -1
  189. data/decidim-proposals/app/views/decidim/proposals/proposals/_proposal.html.erb +2 -6
  190. data/decidim-proposals/app/views/decidim/proposals/proposals/_proposals.html.erb +2 -1
  191. data/decidim-proposals/app/views/decidim/proposals/proposals/_tags.html.erb +10 -0
  192. data/decidim-proposals/app/views/decidim/proposals/proposals/_vote_button.html.erb +9 -9
  193. data/decidim-proposals/app/views/decidim/proposals/proposals/_votes_count.html.erb +2 -2
  194. data/decidim-proposals/app/views/decidim/proposals/proposals/index.html.erb +7 -3
  195. data/decidim-proposals/app/views/decidim/proposals/proposals/index.js.erb +6 -1
  196. data/decidim-proposals/app/views/decidim/proposals/proposals/new.html.erb +1 -1
  197. data/decidim-proposals/app/views/decidim/proposals/proposals/show.html.erb +22 -23
  198. data/decidim-proposals/config/i18n-tasks.yml +2 -0
  199. data/decidim-proposals/config/locales/ca.yml +23 -15
  200. data/decidim-proposals/config/locales/en.yml +12 -4
  201. data/decidim-proposals/config/locales/es.yml +12 -4
  202. data/decidim-proposals/config/locales/eu.yml +5 -0
  203. data/decidim-proposals/db/migrate/20170205082832_add_index_to_decidim_proposals_proposals_proposal_votes_count.rb +7 -0
  204. data/decidim-proposals/lib/decidim/proposals/feature.rb +10 -1
  205. data/decidim-proposals/lib/decidim/proposals/test/factories.rb +1 -1
  206. data/decidim-proposals/spec/commands/decidim/proposals/admin_create_proposal_spec.rb +0 -1
  207. data/decidim-proposals/spec/commands/decidim/proposals/create_proposal_spec.rb +0 -1
  208. data/decidim-proposals/spec/features/admin_manages_proposals_spec.rb +0 -2
  209. data/decidim-proposals/spec/features/process_admin_manages_proposals_spec.rb +0 -2
  210. data/decidim-proposals/spec/features/proposals_spec.rb +77 -0
  211. data/decidim-proposals/spec/features/vote_proposal_spec.rb +16 -1
  212. data/decidim-proposals/spec/forms/decidim/proposals/admin_proposal_form_spec.rb +0 -1
  213. data/decidim-proposals/spec/forms/decidim/proposals/proposal_form_spec.rb +0 -1
  214. data/decidim-proposals/spec/helpers/proposal_votes_helper_spec.rb +10 -0
  215. data/decidim-proposals/spec/services/decidim/proposals/proposal_search_spec.rb +56 -31
  216. data/decidim-proposals/spec/shared/create_proposal_examples.rb +2 -2
  217. data/decidim-results/app/views/decidim/results/admin/results/edit.html.erb +1 -1
  218. data/decidim-results/app/views/decidim/results/admin/results/new.html.erb +1 -1
  219. data/decidim-results/app/views/decidim/results/results/index.html.erb +3 -1
  220. data/decidim-results/app/views/decidim/results/results/show.html.erb +11 -1
  221. data/decidim-results/config/locales/ca.yml +2 -2
  222. data/decidim-results/config/locales/en.yml +1 -1
  223. data/decidim-results/config/locales/es.yml +1 -1
  224. data/decidim-results/config/locales/eu.yml +5 -0
  225. data/decidim-results/lib/decidim/results/feature.rb +1 -0
  226. data/decidim-results/spec/features/admin_manages_results_spec.rb +0 -2
  227. data/decidim-results/spec/features/process_admin_manages_results_spec.rb +0 -2
  228. data/decidim-system/app/assets/stylesheets/decidim/system/_foundation_and_overrides.scss +1 -1
  229. data/decidim-system/app/controllers/decidim/system/application_controller.rb +1 -0
  230. data/decidim-system/app/controllers/decidim/system/devise/sessions_controller.rb +1 -0
  231. data/decidim-system/app/views/decidim/system/admins/edit.html.erb +2 -2
  232. data/decidim-system/app/views/decidim/system/admins/index.html.erb +1 -1
  233. data/decidim-system/app/views/decidim/system/admins/new.html.erb +2 -2
  234. data/decidim-system/app/views/decidim/system/admins/show.html.erb +1 -1
  235. data/decidim-system/app/views/decidim/system/dashboard/show.html.erb +1 -1
  236. data/decidim-system/app/views/decidim/system/devise/passwords/edit.html.erb +1 -1
  237. data/decidim-system/app/views/decidim/system/devise/passwords/new.html.erb +1 -1
  238. data/decidim-system/app/views/decidim/system/devise/sessions/new.html.erb +1 -1
  239. data/decidim-system/app/views/decidim/system/organizations/edit.html.erb +1 -1
  240. data/decidim-system/app/views/decidim/system/organizations/index.html.erb +1 -1
  241. data/decidim-system/app/views/decidim/system/organizations/new.html.erb +2 -2
  242. data/decidim-system/app/views/decidim/system/organizations/show.html.erb +1 -1
  243. data/decidim-system/config/locales/eu.yml +7 -0
  244. data/decidim-system/spec/features/organizations_spec.rb +1 -2
  245. data/lib/generators/decidim/install_generator.rb +9 -0
  246. data/lib/generators/decidim/templates/initializer.rb +1 -0
  247. data/package.json +6 -6
  248. data/yarn.lock +743 -738
  249. metadata +53 -25
  250. data/decidim-comments/spec/support/dummy.rb +0 -20
  251. data/decidim-proposals/app/views/decidim/proposals/proposals/_share.html.erb +0 -33
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe "Comment notifications", type: :feature do
5
+ let!(:organization) { create(:organization) }
6
+ let!(:feature) { create(:feature, organization: organization) }
7
+ let!(:user) { create(:user, :confirmed, organization: organization) }
8
+ let!(:commentable) { create(:dummy_resource, feature: feature) }
9
+ let!(:comments) {
10
+ 3.times.map do
11
+ create(:comment, commentable: commentable)
12
+ end
13
+ }
14
+
15
+ before do
16
+ switch_to_host(organization.host)
17
+ login_as user, scope: :user
18
+ end
19
+
20
+ it "commentable author receives an email with a link to the comment", perform_enqueued: true do
21
+ visit decidim_dummy.dummy_resource_path(commentable, feature_id: commentable.feature, participatory_process_id: commentable.feature.participatory_process)
22
+ expect(page).to have_selector(".add-comment form")
23
+
24
+ within ".add-comment form" do
25
+ fill_in "add-comment-#{commentable.class.name}-#{commentable.id}", with: "This is a new comment"
26
+ click_button "Send"
27
+ end
28
+
29
+ within "#comments" do
30
+ expect(page).to have_content user.name
31
+ expect(page).to have_content "This is a new comment"
32
+ end
33
+
34
+ wait_for_email subject: "a new comment"
35
+
36
+ login_as commentable.author, scope: :user
37
+
38
+ visit last_email_first_link
39
+
40
+ within "#comments" do
41
+ expect(page).to have_content user.name
42
+ expect(page).to have_content "This is a new comment"
43
+ end
44
+ end
45
+ end
@@ -35,6 +35,12 @@ module Decidim
35
35
  it { is_expected.not_to be_valid }
36
36
  end
37
37
 
38
+ context "when body is too long" do
39
+ let(:body) { "c" * 1001 }
40
+
41
+ it { is_expected.not_to be_valid }
42
+ end
43
+
38
44
  context "when alignment is not present" do
39
45
  let(:alignment) { nil }
40
46
 
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ require "spec_helper"
3
+
4
+ module Decidim
5
+ module Comments
6
+ describe CommentNotificationMailer, type: :mailer do
7
+ let(:commentable) { create(:dummy_resource) }
8
+ let(:comment) { create(:comment, commentable: commentable) }
9
+ let(:reply) { create(:comment, commentable: comment)}
10
+
11
+ describe "comment_created" do
12
+ let(:mail) { described_class.comment_created(user, comment, commentable) }
13
+
14
+ let(:subject) { "Tens un nou comentari" }
15
+ let(:default_subject) { "You have a new comment" }
16
+
17
+ let(:body) { "Hi ha un nou comentari d" }
18
+ let(:default_body) { "There is a new comment" }
19
+
20
+ include_examples "localised email"
21
+ end
22
+
23
+ describe "reply_created" do
24
+ let(:mail) { described_class.reply_created(user, reply, comment, commentable) }
25
+
26
+ let(:subject) { "Tens una nova resposta del teu comentari" }
27
+ let(:default_subject) { "You have a new reply of your comment" }
28
+
29
+ let(:body) { "Hi ha una nova resposta de" }
30
+ let(:default_body) { "There is a new reply of your comment" }
31
+
32
+ include_examples "localised email"
33
+ end
34
+ end
35
+ end
36
+ end
@@ -86,6 +86,14 @@ module Decidim
86
86
  expect(subject.down_voted_by?(user)).to be_falsy
87
87
  end
88
88
  end
89
+
90
+ describe "#root_commentable" do
91
+ let(:reply) { create(:comment, commentable: subject) }
92
+
93
+ it "returns the commentable object from the parent comment" do
94
+ expect(reply.root_commentable).to eq(subject.commentable)
95
+ end
96
+ end
89
97
  end
90
98
  end
91
99
  end
@@ -1,4 +1,3 @@
1
1
  ENV["ENGINE_NAME"] = File.dirname(File.dirname(__FILE__)).split("/").last
2
2
 
3
3
  require "decidim/dev/test/base_spec_helper"
4
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -8,22 +8,23 @@ module Decidim
8
8
  include_context "graphql type"
9
9
 
10
10
  describe "addComment" do
11
- let!(:participatory_process) { create(:participatory_process, organization: current_organization) }
11
+ let!(:feature) { create(:feature, organization: current_organization)}
12
+ let!(:dummy_resource) { create(:dummy_resource, feature: feature) }
12
13
 
13
- let(:query) {
14
- "{ addComment(commentableId: \"#{participatory_process.id}\", commentableType: \"Decidim::ParticipatoryProcess\", body: \"This is a new comment\") { id, body } }"
14
+ let(:query) {
15
+ "{ addComment(commentableId: \"#{dummy_resource.id}\", commentableType: \"Decidim::DummyResource\", body: \"This is a new comment\") { id, body } }"
15
16
  }
16
17
 
17
18
  it "should create a new comment for the given commentable" do
18
19
  expect(response["addComment"]).to include("body" => "This is a new comment")
19
20
  comment = Decidim::Comments::Comment.last
20
- expect(comment.commentable).to eq(participatory_process)
21
+ expect(comment.commentable).to eq(dummy_resource)
21
22
  expect(response["addComment"]).to include("id" => comment.id.to_s)
22
23
  end
23
24
 
24
25
  context "if the query contains an argument alignment" do
25
- let(:query) {
26
- "{ addComment(commentableId: \"#{participatory_process.id}\", commentableType: \"Decidim::ParticipatoryProcess\", body: \"This is positive comment\", alignment: 1) { alignment } }"
26
+ let(:query) {
27
+ "{ addComment(commentableId: \"#{dummy_resource.id}\", commentableType: \"Decidim::DummyResource\", body: \"This is positive comment\", alignment: 1) { alignment } }"
27
28
  }
28
29
 
29
30
  it "should create a comment with that alignment" do
@@ -38,7 +39,7 @@ module Decidim
38
39
  let!(:comment) { create(:comment) }
39
40
  let(:query) {
40
41
  "{ comment(id: \"#{comment.id}\") { id } }"
41
- }
42
+ }
42
43
 
43
44
  it "should fetch the comment given its id" do
44
45
  expect(response["comment"]).to include("id" => comment.id.to_s)
@@ -0,0 +1,5 @@
1
+ ca:
2
+ decidim:
3
+ resource_links:
4
+ test_link:
5
+ dummy: Element fictici relacionat
@@ -0,0 +1,5 @@
1
+ es:
2
+ decidim:
3
+ resource_links:
4
+ test_link:
5
+ dummy: Ficticio relacionado
@@ -0,0 +1,5 @@
1
+ eu:
2
+ decidim:
3
+ resource_links:
4
+ test_link:
5
+ dummy: Related gezurrezko
@@ -26,11 +26,12 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency "listen", "~> 3.1.0"
27
27
  s.add_dependency "launchy"
28
28
  s.add_dependency "i18n-tasks", "0.9.8"
29
- s.add_dependency "faker", "~> 1.7.2"
29
+ s.add_dependency "faker", "~> 1.7.3"
30
30
  s.add_dependency "poltergeist", "~> 1.13.0"
31
31
  s.add_dependency "rails-controller-testing", "~> 1.0.1"
32
32
  s.add_dependency "simplecov", "~> 0.13"
33
33
  s.add_dependency "codecov", "~> 0.1.9"
34
34
  s.add_dependency "rubocop", "~> 0.47"
35
35
  s.add_dependency "db-query-matchers", "~> 0.7.0"
36
+ s.add_dependency "letter_opener_web", "~> 1.3.0"
36
37
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "letter_opener_web"
4
+
3
5
  module Decidim
4
6
  # Decidim::Dev holds all the convenience logic and libraries to be able to
5
7
  # create external libraries that create test apps and test themselves against
@@ -3,6 +3,7 @@ module Decidim
3
3
  # An example implementation of an AuthorizationHandler to be used in tests.
4
4
  class DummyAuthorizationHandler < AuthorizationHandler
5
5
  attribute :document_number, String
6
+ attribute :postal_code, String
6
7
  attribute :birthday, Date
7
8
 
8
9
  validates :document_number, presence: true
@@ -2,7 +2,8 @@
2
2
  ENV["RAILS_ENV"] ||= "test"
3
3
 
4
4
  engine_name = ENV["ENGINE_NAME"]
5
- dummy_app_path = File.expand_path(File.join(Dir.pwd, "spec", "#{engine_name}_dummy_app"))
5
+ engine_spec_dir = File.join(Dir.pwd, "spec")
6
+ dummy_app_path = File.expand_path(File.join(engine_spec_dir, "#{engine_name}_dummy_app"))
6
7
 
7
8
  if ENV["CI"]
8
9
  require "simplecov"
@@ -52,6 +53,8 @@ require "db-query-matchers"
52
53
  # Requires supporting files with custom matchers and macros, etc,
53
54
  # in ./support/ and its subdirectories.
54
55
  Dir["#{File.dirname(__FILE__)}/rspec_support/**/*.rb"].each { |f| require f }
56
+ Dir["#{engine_spec_dir}/support/**/*.rb"].each { |f| require f }
57
+ Dir["#{engine_spec_dir}/shared/**/*.rb"].each { |f| require f }
55
58
 
56
59
  RSpec.configure do |config|
57
60
  config.color = true
@@ -26,6 +26,25 @@ module MailerHelpers
26
26
  def last_email_link
27
27
  Nokogiri::HTML(last_email_body).css("table.content a").last["href"]
28
28
  end
29
+
30
+ def last_email_first_link
31
+ Nokogiri::HTML(last_email_body).css("table.content a").first["href"]
32
+ end
33
+
34
+ def wait_for_email(options = {})
35
+ options[:max_attempts] ||= 3
36
+ attempts = 0
37
+ loop do
38
+ if attempts >= options[:max_attempts]
39
+ raise StandardError, "An email with subject containing '#{options[:subject]}' wasn't sent.'"
40
+ end
41
+
42
+ return if last_email&.subject&.include? options[:subject]
43
+
44
+ sleep 1
45
+ attempts += 1
46
+ end
47
+ end
29
48
  end
30
49
 
31
50
  RSpec.configure do |config|
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "decidim/feature_validator"
4
+ require "decidim/comments/comments_helper"
5
+
3
6
  module Decidim
4
7
  # Dummy engine to be able to test components.
5
8
  class DummyEngine < Rails::Engine
@@ -7,20 +10,39 @@ module Decidim
7
10
 
8
11
  routes do
9
12
  root to: proc { [200, {}, ["DUMMY ENGINE"]] }
10
- resources :dummy_resource
13
+ resources :dummy_resources, controller: "decidim/dummy_resources"
11
14
  end
12
15
  end
13
16
 
14
17
  class DummyResource < ActiveRecord::Base
18
+ include HasFeature
15
19
  include Resourceable
16
- belongs_to :feature, foreign_key: "decidim_feature_id", class_name: "Decidim::Feature"
17
- has_one :organization, through: :feature
20
+ include Authorable
21
+
22
+ feature_manifest_name "dummy"
23
+ end
24
+
25
+ class DummyResourcesController < ActionController::Base
26
+ helper Decidim::Comments::CommentsHelper
27
+ skip_authorization_check
28
+
29
+ def show
30
+ @commentable = DummyResource.find(params[:id])
31
+ @options = params.slice(:arguable, :votable)
32
+ @options.each { |key, val| @options[key] = val === "true" }
33
+ render inline: %{
34
+ <%= javascript_include_tag 'application' %>
35
+ <%= comments_for(@commentable, @options) %>
36
+ }.html_safe
37
+ end
18
38
  end
19
39
  end
20
40
 
21
41
  Decidim.register_feature(:dummy) do |feature|
22
42
  feature.engine = Decidim::DummyEngine
23
43
 
44
+ feature.actions = %w(foo bar)
45
+
24
46
  feature.settings(:global) do |settings|
25
47
  settings.attribute :dummy_global_attribute_1, type: :boolean
26
48
  settings.attribute :dummy_global_attribute_2, type: :boolean
@@ -44,6 +66,7 @@ RSpec.configure do |config|
44
66
  ActiveRecord::Migration.create_table :decidim_dummy_resources do |t|
45
67
  t.string :title
46
68
  t.references :decidim_feature, index: true
69
+ t.references :decidim_author, index: true
47
70
 
48
71
  t.timestamps
49
72
  end
@@ -67,7 +67,7 @@ module TranslationHelpers
67
67
  def fill_in_i18n_fields(field, tab_selector, localized_values)
68
68
  localized_values.each do |locale, value|
69
69
  within tab_selector do
70
- click_link I18n.t(locale, scope: "locales")
70
+ click_link I18n.with_locale(locale) { I18n.t("name", scope: "locale") }
71
71
  end
72
72
  yield "#{field}_#{locale}", value
73
73
  end
@@ -11,8 +11,8 @@ module Decidim
11
11
  translatable_attribute :location, String
12
12
  translatable_attribute :location_hints, String
13
13
  attribute :address, String
14
- attribute :start_time, DateTime
15
- attribute :end_time, DateTime
14
+ attribute :start_time, Decidim::Attributes::TimeWithZone
15
+ attribute :end_time, Decidim::Attributes::TimeWithZone
16
16
  attribute :decidim_scope_id, Integer
17
17
  attribute :decidim_category_id, Integer
18
18
 
@@ -1,6 +1,6 @@
1
1
  <h3><%= t ".title" %></h3>
2
2
 
3
- <%= form_for(@form, url: meeting_meeting_close_path(meeting, @form)) do |f| %>
3
+ <%= decidim_form_for(@form, url: meeting_meeting_close_path(meeting, @form)) do |f| %>
4
4
  <%= render partial: 'form', object: f %>
5
5
 
6
6
  <div class="actions">
@@ -1,6 +1,6 @@
1
1
  <h3><%= t ".title" %></h3>
2
2
 
3
- <%= form_for(@form) do |f| %>
3
+ <%= decidim_form_for(@form) do |f| %>
4
4
  <%= render partial: 'form', object: f %>
5
5
 
6
6
  <div class="actions">
@@ -1,6 +1,6 @@
1
1
  <h3><%= t ".title" %></h3>
2
2
 
3
- <%= form_for(@form) do |f| %>
3
+ <%= decidim_form_for(@form) do |f| %>
4
4
  <%= render partial: 'form', object: f %>
5
5
 
6
6
  <div class="actions">
@@ -1,4 +1,6 @@
1
- <% content_for(:title, t(".title")) %>
1
+ <% add_meta_tags({
2
+ title: t(".meta_title", feature_name: translated_attribute(current_feature.name))
3
+ }) %>
2
4
 
3
5
  <% if Decidim.geocoder.present? %>
4
6
  <div class="row column">
@@ -1,4 +1,10 @@
1
- <% content_for(:title, translated_attribute(meeting.title)) %>
1
+ <% provide(:title, translated_attribute(meeting.title)) %>
2
+
3
+ <% add_meta_tags({
4
+ title: translated_attribute(meeting.title),
5
+ description: translated_attribute(meeting.description),
6
+ url: meeting_url(meeting.id)
7
+ }) %>
2
8
 
3
9
  <div class="row column view-header">
4
10
  <h2 class="heading2"><%= translated_attribute meeting.title %></h2>
@@ -32,6 +38,7 @@
32
38
  </div>
33
39
  </div>
34
40
  <% end %>
41
+ <%= render partial: "decidim/shared/share_modal" %>
35
42
  </div>
36
43
  <div class="columns mediumlarge-8 mediumlarge-pull-4">
37
44
  <div class="section">
@@ -64,3 +71,6 @@
64
71
  </div>
65
72
  </div>
66
73
  <%= attachments_for meeting %>
74
+
75
+ <%= javascript_include_tag "decidim/proposals/social_share" %>
76
+ <%= stylesheet_link_tag "decidim/proposals/social_share" %>
@@ -10,7 +10,7 @@ ca:
10
10
  decidim:
11
11
  features:
12
12
  meetings:
13
- name: Llistat de trobades
13
+ name: Trobades
14
14
  meetings:
15
15
  actions:
16
16
  attachments: Adjunts
@@ -38,7 +38,7 @@ ca:
38
38
  title: Edita trobada
39
39
  update: Actualitzar trobada
40
40
  index:
41
- title: Llistat de trobades
41
+ title: Trobades
42
42
  new:
43
43
  create: Crear trobada
44
44
  title: Nova trobada
@@ -62,7 +62,7 @@ ca:
62
62
  filter_for: Filtra per
63
63
  unfold: Desplegar
64
64
  index:
65
- title: Llistat de trobades
65
+ meta_title: "%{feature_name}"
66
66
  view_meeting: Veure trobada
67
67
  show:
68
68
  attendees: Nombre d'assistents
@@ -63,7 +63,7 @@ en:
63
63
  filter_for: Filter by
64
64
  unfold: Unfold
65
65
  index:
66
- title: Meetings
66
+ meta_title: "%{feature_name}"
67
67
  view_meeting: View meeting
68
68
  show:
69
69
  attendees: Attendees count
@@ -62,7 +62,7 @@ es:
62
62
  filter_for: Filtrar por
63
63
  unfold: Desplegar
64
64
  index:
65
- title: Lista de encuentros
65
+ meta_title: "%{feature_name}"
66
66
  view_meeting: Ver encuentro
67
67
  show:
68
68
  attendees: Número de asistentes