decidim 0.0.1 → 0.0.2

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 (313) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +4 -5
  3. data/.eslintignore +2 -0
  4. data/.eslintrc.json +2 -0
  5. data/.gitignore +1 -0
  6. data/.inch.yml +5 -0
  7. data/.mention-bot +8 -0
  8. data/.rubocop.yml +8 -31
  9. data/.ruby-version +1 -1
  10. data/.travis.yml +24 -14
  11. data/Dockerfile +1 -3
  12. data/Gemfile +1 -3
  13. data/Gemfile.lock +175 -138
  14. data/README.md +63 -5
  15. data/Rakefile +1 -1
  16. data/codecov.yml +1 -0
  17. data/decidim-admin/Rakefile +1 -1
  18. data/decidim-admin/app/assets/javascripts/decidim/admin/application.js.es6 +0 -1
  19. data/decidim-admin/app/assets/stylesheets/decidim/admin/_foundation_and_overrides.scss +1 -0
  20. data/decidim-admin/app/assets/stylesheets/decidim/admin/_icons.scss +9 -0
  21. data/decidim-admin/app/assets/stylesheets/decidim/admin/application.scss +1 -0
  22. data/decidim-admin/app/commands/decidim/admin/create_feature.rb +3 -1
  23. data/decidim-admin/app/commands/decidim/admin/create_participatory_process.rb +26 -14
  24. data/decidim-admin/app/commands/decidim/admin/destroy_feature.rb +5 -0
  25. data/decidim-admin/app/commands/decidim/admin/destroy_participatory_process_step.rb +29 -0
  26. data/decidim-admin/app/commands/decidim/admin/update_feature.rb +47 -0
  27. data/decidim-admin/app/commands/decidim/admin/update_organization.rb +3 -1
  28. data/decidim-admin/app/controllers/decidim/admin/features_controller.rb +37 -2
  29. data/decidim-admin/app/controllers/decidim/admin/participatory_process_step_activations_controller.rb +0 -16
  30. data/decidim-admin/app/controllers/decidim/admin/participatory_process_steps_controller.rb +10 -3
  31. data/decidim-admin/app/controllers/decidim/admin/static_pages_controller.rb +4 -4
  32. data/decidim-admin/app/controllers/decidim/admin/user_groups_controller.rb +32 -0
  33. data/decidim-admin/app/controllers/decidim/admin/users_controller.rb +87 -0
  34. data/decidim-admin/app/forms/decidim/admin/category_form.rb +1 -7
  35. data/decidim-admin/app/forms/decidim/admin/feature_form.rb +26 -0
  36. data/decidim-admin/app/forms/decidim/admin/organization_form.rb +2 -0
  37. data/decidim-admin/app/forms/decidim/admin/participatory_process_step_form.rb +1 -1
  38. data/decidim-admin/app/forms/decidim/admin/static_page_form.rb +2 -3
  39. data/decidim-admin/app/models/decidim/admin/abilities/admin_user.rb +6 -0
  40. data/decidim-admin/app/views/decidim/admin/features/_feature.html.erb +4 -1
  41. data/decidim-admin/app/views/decidim/admin/features/_form.html.erb +49 -0
  42. data/decidim-admin/app/views/decidim/admin/features/_settings_fields.html.erb +5 -0
  43. data/decidim-admin/app/views/decidim/admin/features/edit.html.erb +9 -0
  44. data/decidim-admin/app/views/decidim/admin/features/index.html.erb +6 -0
  45. data/decidim-admin/app/views/decidim/admin/features/new.html.erb +1 -1
  46. data/decidim-admin/app/views/decidim/admin/organization/_form.html.erb +8 -0
  47. data/decidim-admin/app/views/decidim/admin/participatory_process_attachments/_form.html.erb +1 -1
  48. data/decidim-admin/app/views/decidim/admin/participatory_process_steps/index.html.erb +2 -6
  49. data/decidim-admin/app/views/decidim/admin/user_groups/index.html.erb +32 -0
  50. data/decidim-admin/app/views/decidim/admin/users/_form.html.erb +6 -0
  51. data/decidim-admin/app/views/decidim/admin/users/index.html.erb +54 -0
  52. data/decidim-admin/app/views/decidim/admin/users/new.html.erb +11 -0
  53. data/decidim-admin/app/views/layouts/decidim/admin/_sidebar.html.erb +2 -0
  54. data/decidim-admin/app/views/layouts/decidim/admin/participatory_process.html.erb +1 -1
  55. data/decidim-admin/config/i18n-tasks.yml +1 -0
  56. data/decidim-admin/config/locales/ca.yml +103 -5
  57. data/decidim-admin/config/locales/en.yml +57 -4
  58. data/decidim-admin/config/locales/es.yml +103 -5
  59. data/decidim-admin/config/routes.rb +11 -0
  60. data/decidim-admin/decidim-admin.gemspec +2 -3
  61. data/decidim-admin/lib/decidim/admin/features/base_controller.rb +7 -3
  62. data/decidim-admin/lib/decidim/admin/test/factories.rb +8 -0
  63. data/decidim-admin/spec/commands/create_category_spec.rb +2 -1
  64. data/decidim-admin/spec/commands/create_feature_spec.rb +21 -2
  65. data/decidim-admin/spec/commands/create_participatory_process_spec.rb +13 -1
  66. data/decidim-admin/spec/commands/create_static_page_spec.rb +1 -1
  67. data/decidim-admin/spec/commands/destroy_participatory_process_step_spec.rb +45 -0
  68. data/decidim-admin/spec/commands/update_category_spec.rb +2 -1
  69. data/decidim-admin/spec/commands/update_feature_spec.rb +79 -0
  70. data/decidim-admin/spec/commands/update_organization_spec.rb +3 -2
  71. data/decidim-admin/spec/commands/update_static_page_spec.rb +3 -2
  72. data/decidim-admin/spec/factories.rb +2 -9
  73. data/decidim-admin/spec/features/admin_manages_features_spec.rb +84 -2
  74. data/decidim-admin/spec/features/admin_manages_organization_admins_spec.rb +71 -0
  75. data/decidim-admin/spec/features/admin_manages_user_groups_spec.rb +24 -0
  76. data/decidim-admin/spec/forms/category_form_spec.rb +3 -7
  77. data/decidim-admin/spec/forms/organization_form_spec.rb +8 -2
  78. data/decidim-admin/spec/forms/participatory_process_form_spec.rb +2 -1
  79. data/decidim-admin/spec/forms/participatory_process_step_form_spec.rb +2 -21
  80. data/decidim-admin/spec/forms/scope_form_spec.rb +1 -1
  81. data/decidim-admin/spec/forms/static_page_form_spec.rb +2 -7
  82. data/decidim-admin/spec/models/abilities/admin_user_spec.rb +22 -0
  83. data/decidim-admin/spec/shared/manage_process_attachments_examples.rb +2 -1
  84. data/decidim-admin/spec/shared/manage_process_steps_examples.rb +2 -15
  85. data/decidim-admin/spec/spec_helper.rb +3 -1
  86. data/decidim-api/Rakefile +1 -1
  87. data/decidim-api/decidim-api.gemspec +3 -3
  88. data/decidim-api/spec/factories.rb +2 -2
  89. data/decidim-api/spec/spec_helper.rb +3 -1
  90. data/decidim-comments/Rakefile +1 -1
  91. data/decidim-comments/app/assets/javascripts/decidim/comments/bundle.js +0 -0
  92. data/decidim-comments/app/commands/decidim/comments/vote_comment.rb +38 -0
  93. data/decidim-comments/app/frontend/application/icon.component.jsx +9 -4
  94. data/decidim-comments/app/frontend/application/icon.component.test.jsx +12 -2
  95. data/decidim-comments/app/frontend/comments/add_comment_form.component.jsx +43 -11
  96. data/decidim-comments/app/frontend/comments/add_comment_form.mutation.graphql +1 -4
  97. data/decidim-comments/app/frontend/comments/comment.component.jsx +67 -7
  98. data/decidim-comments/app/frontend/comments/comment.component.test.jsx +49 -1
  99. data/decidim-comments/app/frontend/comments/comment_data.fragment.graphql +3 -0
  100. data/decidim-comments/app/frontend/comments/comment_order_selector.component.jsx +51 -6
  101. data/decidim-comments/app/frontend/comments/comment_order_selector.component.test.jsx +12 -1
  102. data/decidim-comments/app/frontend/comments/comment_thread.component.jsx +11 -5
  103. data/decidim-comments/app/frontend/comments/comment_thread.component.test.jsx +13 -3
  104. data/decidim-comments/app/frontend/comments/comment_thread.fragment.graphql +1 -3
  105. data/decidim-comments/app/frontend/comments/comments.component.jsx +37 -11
  106. data/decidim-comments/app/frontend/comments/comments.component.test.jsx +44 -7
  107. data/decidim-comments/app/frontend/comments/comments.query.graphql +2 -2
  108. data/decidim-comments/app/frontend/comments/down_vote.fragment.graphql +6 -0
  109. data/decidim-comments/app/frontend/comments/down_vote.mutation.graphql +7 -0
  110. data/decidim-comments/app/frontend/comments/down_vote_button.component.jsx +84 -0
  111. data/decidim-comments/app/frontend/comments/down_vote_button.component.test.jsx +48 -0
  112. data/decidim-comments/app/frontend/comments/up_vote.fragment.graphql +6 -0
  113. data/decidim-comments/app/frontend/comments/up_vote.mutation.graphql +7 -0
  114. data/decidim-comments/app/frontend/comments/up_vote_button.component.jsx +84 -0
  115. data/decidim-comments/app/frontend/comments/up_vote_button.component.test.jsx +48 -0
  116. data/decidim-comments/app/frontend/comments/vote_button.component.jsx +19 -0
  117. data/decidim-comments/app/frontend/comments/vote_button_component.test.jsx +38 -0
  118. data/decidim-comments/app/frontend/support/generate_comments_data.js +7 -2
  119. data/decidim-comments/app/helpers/decidim/comments/comments_helper.rb +1 -1
  120. data/decidim-comments/app/models/decidim/comments/application_record.rb +9 -0
  121. data/decidim-comments/app/models/decidim/comments/comment.rb +19 -4
  122. data/decidim-comments/app/models/decidim/comments/comment_vote.rb +22 -0
  123. data/decidim-comments/app/models/decidim/comments/seed.rb +27 -0
  124. data/decidim-comments/app/queries/decidim/comments/comments_with_replies.rb +88 -0
  125. data/decidim-comments/app/resolvers/decidim/comments/vote_comment_resolver.rb +20 -0
  126. data/decidim-comments/app/types/decidim/comments/comment_mutation_type.rb +19 -0
  127. data/decidim-comments/app/types/decidim/comments/comment_type.rb +38 -2
  128. data/decidim-comments/config/locales/en.yml +1 -0
  129. data/decidim-comments/db/migrate/20161130143508_create_comments.rb +4 -2
  130. data/decidim-comments/db/migrate/20161219150806_create_comment_votes.rb +13 -0
  131. data/decidim-comments/decidim-comments.gemspec +0 -3
  132. data/decidim-comments/lib/decidim/comments/mutation_extensions.rb +9 -0
  133. data/decidim-comments/lib/decidim/comments/query_extensions.rb +3 -5
  134. data/decidim-comments/lib/decidim/comments/test/factories.rb +22 -0
  135. data/decidim-comments/spec/commands/vote_comment_spec.rb +124 -0
  136. data/decidim-comments/spec/factories.rb +2 -9
  137. data/decidim-comments/spec/features/comments_spec.rb +37 -0
  138. data/decidim-comments/spec/models/comment_spec.rb +34 -0
  139. data/decidim-comments/spec/models/comment_vote_spec.rb +44 -0
  140. data/decidim-comments/spec/models/seed_spec.rb +19 -0
  141. data/decidim-comments/spec/queries/comments_with_replies_spec.rb +86 -0
  142. data/decidim-comments/spec/spec_helper.rb +3 -1
  143. data/decidim-comments/spec/support/dummy.rb +1 -1
  144. data/decidim-comments/spec/types/comment_mutation_type_spec.rb +46 -0
  145. data/decidim-comments/spec/types/comment_type_spec.rb +57 -3
  146. data/{decidim-api → decidim-comments}/spec/types/mutation_type_spec.rb +11 -0
  147. data/decidim-dev/README.md +7 -11
  148. data/decidim-dev/decidim-dev.gemspec +5 -4
  149. data/decidim-dev/lib/decidim/dev.rb +20 -0
  150. data/decidim-dev/lib/decidim/dev/assets/Exampledocument.docx +0 -0
  151. data/decidim-dev/lib/decidim/dev/assets/Exampledocument.odt +0 -0
  152. data/decidim-dev/lib/decidim/dev/assets/Exampledocument.pdf +0 -0
  153. data/decidim-dev/lib/decidim/dev/assets/avatar.svg +14 -0
  154. data/decidim-dev/lib/decidim/dev/assets/city.jpeg +0 -0
  155. data/decidim-dev/lib/decidim/dev/assets/city2.jpeg +0 -0
  156. data/decidim-dev/lib/decidim/dev/assets/city3.jpeg +0 -0
  157. data/decidim-dev/lib/decidim/dev/assets/malicious.jpg +0 -0
  158. data/decidim-dev/lib/decidim/{common_rake.rb → dev/common_rake.rb} +1 -1
  159. data/decidim-dev/lib/decidim/{dummy_authorization_handler.rb → dev/dummy_authorization_handler.rb} +4 -4
  160. data/decidim-dev/lib/decidim/{test → dev/test}/authorization_shared_examples.rb +0 -8
  161. data/decidim-dev/lib/decidim/{test → dev/test}/base_spec_helper.rb +4 -1
  162. data/decidim-dev/lib/decidim/{test → dev/test}/i18n_spec.rb +1 -1
  163. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/action_mailer.rb +0 -0
  164. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/active_job.rb +0 -0
  165. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/authenticated_controller_context.rb +0 -0
  166. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/authorization_handlers.rb +1 -1
  167. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/capybara.rb +3 -10
  168. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/database_cleaner.rb +0 -0
  169. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/engine_routes.rb +0 -0
  170. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/factory_girl.rb +0 -0
  171. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/feature.rb +10 -0
  172. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/feature_context.rb +2 -2
  173. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/helpers.rb +4 -0
  174. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/i18n.rb +1 -0
  175. data/decidim-dev/lib/decidim/dev/test/rspec_support/phantomjs_polyfills/bind-polyfill.js +18 -0
  176. data/decidim-dev/lib/decidim/dev/test/rspec_support/phantomjs_polyfills/object-assign-polyfill.js +24 -0
  177. data/decidim-dev/lib/decidim/dev/test/rspec_support/phantomjs_polyfills/promise.js +233 -0
  178. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/translation_helpers.rb +0 -0
  179. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/warden.rb +0 -0
  180. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/wisper.rb +0 -0
  181. data/decidim-dev/lib/generators/decidim/dummy_generator.rb +2 -2
  182. data/decidim-dev/lib/generators/decidim/templates/decidim_dev.rb +2 -0
  183. data/decidim-meetings/Rakefile +1 -1
  184. data/decidim-meetings/app/assets/images/decidim/meetings/icon.svg +1 -0
  185. data/decidim-meetings/app/commands/decidim/meetings/admin/create_meeting.rb +2 -0
  186. data/decidim-meetings/app/commands/decidim/meetings/admin/update_meeting.rb +2 -0
  187. data/decidim-meetings/app/controllers/decidim/meetings/meetings_controller.rb +30 -6
  188. data/decidim-meetings/app/forms/decidim/meetings/admin/meeting_form.rb +14 -0
  189. data/decidim-meetings/app/helpers/decidim/meetings/application_helper.rb +10 -0
  190. data/decidim-meetings/app/models/decidim/meetings/meeting.rb +18 -1
  191. data/decidim-meetings/app/services/decidim/meetings/meeting_search.rb +48 -0
  192. data/decidim-meetings/app/views/decidim/meetings/admin/meetings/_form.html.erb +9 -2
  193. data/decidim-meetings/app/views/decidim/meetings/meetings/_filters.html.erb +24 -0
  194. data/decidim-meetings/app/views/decidim/meetings/meetings/_meetings.html.erb +30 -0
  195. data/decidim-meetings/app/views/decidim/meetings/meetings/_tags.html.erb +10 -0
  196. data/decidim-meetings/app/views/decidim/meetings/meetings/index.html.erb +8 -26
  197. data/decidim-meetings/app/views/decidim/meetings/meetings/index.js.erb +2 -0
  198. data/decidim-meetings/app/views/decidim/meetings/meetings/show.html.erb +1 -0
  199. data/decidim-meetings/config/locales/ca.yml +7 -0
  200. data/decidim-meetings/config/locales/en.yml +7 -0
  201. data/decidim-meetings/config/locales/es.yml +7 -0
  202. data/decidim-meetings/db/migrate/20161130121354_create_meetings.rb +2 -0
  203. data/decidim-meetings/decidim-meetings.gemspec +2 -0
  204. data/decidim-meetings/lib/decidim/meetings/feature.rb +7 -2
  205. data/decidim-meetings/lib/decidim/meetings/list_engine.rb +3 -0
  206. data/decidim-meetings/spec/commands/create_meeting_spec.rb +21 -0
  207. data/decidim-meetings/spec/commands/update_meeting_spec.rb +17 -2
  208. data/decidim-meetings/spec/factories.rb +3 -3
  209. data/decidim-meetings/spec/features/explore_meetings_spec.rb +53 -0
  210. data/decidim-meetings/spec/forms/meeting_form_spec.rb +19 -1
  211. data/decidim-meetings/spec/models/meeting_spec.rb +20 -0
  212. data/decidim-meetings/spec/services/meeting_search_spec.rb +146 -0
  213. data/decidim-meetings/spec/shared/admin_shared_context.rb +4 -2
  214. data/decidim-meetings/spec/shared/manage_meetings_examples.rb +5 -2
  215. data/decidim-meetings/spec/spec_helper.rb +1 -1
  216. data/decidim-pages/Rakefile +1 -1
  217. data/decidim-pages/app/assets/images/decidim/pages/icon.svg +3 -0
  218. data/decidim-pages/app/commands/decidim/pages/admin/update_page.rb +1 -2
  219. data/decidim-pages/app/forms/decidim/pages/admin/page_form.rb +0 -1
  220. data/decidim-pages/app/views/decidim/pages/admin/pages/_form.html.erb +0 -1
  221. data/decidim-pages/app/views/decidim/pages/application/show.html.erb +3 -3
  222. data/decidim-pages/config/i18n-tasks.yml +1 -0
  223. data/decidim-pages/config/locales/ca.yml +5 -1
  224. data/decidim-pages/config/locales/en.yml +5 -1
  225. data/decidim-pages/config/locales/es.yml +5 -1
  226. data/decidim-pages/db/migrate/20170110145040_remove_commentable_flag_from_pages.rb +5 -0
  227. data/decidim-pages/lib/decidim/pages/feature.rb +13 -3
  228. data/decidim-pages/spec/commands/update_page_spec.rb +2 -1
  229. data/decidim-pages/spec/factories.rb +2 -2
  230. data/decidim-pages/spec/features/admin_spec.rb +0 -11
  231. data/decidim-pages/spec/features/page_show_spec.rb +13 -10
  232. data/decidim-pages/spec/forms/page_form_spec.rb +4 -4
  233. data/decidim-pages/spec/spec_helper.rb +3 -1
  234. data/decidim-proposals/Rakefile +1 -1
  235. data/decidim-proposals/app/assets/config/decidim_proposals_manifest.css +1 -0
  236. data/decidim-proposals/app/assets/config/decidim_proposals_manifest.js +1 -0
  237. data/decidim-proposals/app/assets/images/decidim/proposals/icon.svg +1 -0
  238. data/decidim-proposals/app/assets/javascripts/decidim/proposals/social_share.js +2 -0
  239. data/decidim-proposals/app/assets/stylesheets/decidim/proposals/social_share.css.scss +14 -0
  240. data/decidim-proposals/app/commands/decidim/proposals/create_proposal.rb +5 -3
  241. data/decidim-proposals/app/controllers/decidim/proposals/admin/proposals_controller.rb +3 -3
  242. data/decidim-proposals/app/controllers/decidim/proposals/proposal_votes_controller.rb +25 -0
  243. data/decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb +33 -6
  244. data/decidim-proposals/app/forms/decidim/proposals/admin/proposal_form.rb +7 -6
  245. data/decidim-proposals/app/forms/decidim/proposals/proposal_form.rb +6 -6
  246. data/decidim-proposals/app/helpers/decidim/proposals/application_helper.rb +3 -1
  247. data/decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb +27 -0
  248. data/decidim-proposals/app/models/decidim/proposals/proposal.rb +8 -0
  249. data/decidim-proposals/app/models/decidim/proposals/proposal_vote.rb +20 -0
  250. data/decidim-proposals/app/services/decidim/proposals/proposal_search.rb +39 -11
  251. data/decidim-proposals/app/views/decidim/proposals/admin/proposals/_form.html.erb +2 -2
  252. data/decidim-proposals/app/views/decidim/proposals/proposal_votes/create.js.erb +5 -0
  253. data/decidim-proposals/app/views/decidim/proposals/proposals/_count.html.erb +1 -0
  254. data/decidim-proposals/app/views/decidim/proposals/proposals/_filters.html.erb +26 -0
  255. data/decidim-proposals/app/views/decidim/proposals/proposals/_proposal.html.erb +11 -2
  256. data/decidim-proposals/app/views/decidim/proposals/proposals/_proposals.html.erb +4 -0
  257. data/decidim-proposals/app/views/decidim/proposals/proposals/_share.html.erb +33 -0
  258. data/decidim-proposals/app/views/decidim/proposals/proposals/_vote_button.html.erb +13 -0
  259. data/decidim-proposals/app/views/decidim/proposals/proposals/_votes_count.html.erb +6 -0
  260. data/decidim-proposals/app/views/decidim/proposals/proposals/index.html.erb +11 -11
  261. data/decidim-proposals/app/views/decidim/proposals/proposals/index.js.erb +5 -0
  262. data/decidim-proposals/app/views/decidim/proposals/proposals/show.html.erb +31 -4
  263. data/decidim-proposals/config/i18n-tasks.yml +1 -0
  264. data/decidim-proposals/config/initializers/social_share_button.rb +4 -0
  265. data/decidim-proposals/config/locales/ca.yml +28 -2
  266. data/decidim-proposals/config/locales/en.yml +27 -1
  267. data/decidim-proposals/config/locales/es.yml +28 -2
  268. data/decidim-proposals/db/migrate/20170112115253_create_proposal_votes.rb +12 -0
  269. data/decidim-proposals/db/migrate/20170113114245_add_text_search_indexes.rb +6 -0
  270. data/decidim-proposals/db/migrate/20170118120151_add_counter_cache_votes_to_proposals.rb +5 -0
  271. data/decidim-proposals/decidim-proposals.gemspec +2 -1
  272. data/decidim-proposals/lib/decidim/proposals/engine.rb +8 -1
  273. data/decidim-proposals/lib/decidim/proposals/feature.rb +30 -4
  274. data/decidim-proposals/spec/commands/decidim/proposals/create_proposal_spec.rb +10 -3
  275. data/decidim-proposals/spec/factories.rb +9 -4
  276. data/decidim-proposals/spec/features/admin_manages_proposals_spec.rb +2 -0
  277. data/decidim-proposals/spec/features/process_admin_manages_proposals_spec.rb +2 -0
  278. data/decidim-proposals/spec/features/proposals_spec.rb +41 -31
  279. data/decidim-proposals/spec/features/vote_proposal_spec.rb +78 -0
  280. data/decidim-proposals/spec/forms/decidim/proposals/proposal_form_spec.rb +11 -10
  281. data/decidim-proposals/spec/helpers/proposal_votes_helper_spec.rb +28 -0
  282. data/decidim-proposals/spec/lib/decidim/proposals/feature_spec.rb +1 -1
  283. data/decidim-proposals/spec/models/decidim/proposals/proposal_spec.rb +20 -3
  284. data/decidim-proposals/spec/models/decidim/proposals/proposal_vote_spec.rb +43 -0
  285. data/decidim-proposals/spec/services/decidim/proposals/proposal_search_spec.rb +50 -4
  286. data/decidim-proposals/spec/shared/manage_proposals_examples.rb +1 -1
  287. data/decidim-proposals/spec/spec_helper.rb +1 -1
  288. data/decidim-system/Rakefile +1 -1
  289. data/decidim-system/app/commands/decidim/system/register_organization.rb +13 -12
  290. data/decidim-system/decidim-system.gemspec +2 -3
  291. data/decidim-system/spec/factories.rb +1 -1
  292. data/decidim-system/spec/spec_helper.rb +3 -1
  293. data/docs/social_providers.md +41 -0
  294. data/karma.conf.js +4 -2
  295. data/lib/generators/decidim/app_generator.rb +6 -0
  296. data/lib/generators/decidim/demo_generator.rb +2 -2
  297. data/lib/generators/decidim/install_generator.rb +5 -4
  298. data/lib/generators/decidim/templates/Gemfile.erb +3 -5
  299. data/lib/generators/decidim/templates/initializer.rb +1 -1
  300. data/lib/generators/decidim/templates/secrets.yml.erb +26 -0
  301. data/lib/generators/decidim/templates/social_share_button.rb +7 -0
  302. data/package.json +16 -6
  303. data/webpack.config.js +23 -8
  304. data/yarn.lock +401 -345
  305. metadata +130 -48
  306. data/Gemfile.common +0 -1
  307. data/decidim-admin/Gemfile +0 -6
  308. data/decidim-comments/Gemfile +0 -6
  309. data/decidim-comments/package.json +0 -21
  310. data/decidim-dev/Gemfile +0 -6
  311. data/decidim-dev/lib/decidim/test/rspec_support/bullet.rb +0 -15
  312. data/decidim-dev/lib/generators/decidim/templates/bullet.rb +0 -6
  313. data/decidim-system/Gemfile +0 -6
@@ -7,4 +7,24 @@ describe Decidim::Meetings::Meeting do
7
7
  subject { meeting }
8
8
 
9
9
  it { is_expected.to be_valid }
10
+
11
+ context "without a title" do
12
+ let(:meeting) { build :meeting, title: nil }
13
+
14
+ it { is_expected.not_to be_valid }
15
+ end
16
+
17
+ context "when the scope is from another organization" do
18
+ let(:scope) { create :scope }
19
+ let(:meeting) { build :meeting, scope: scope }
20
+
21
+ it { is_expected.not_to be_valid }
22
+ end
23
+
24
+ context "when the category is from another organization" do
25
+ let(:category) { create :category }
26
+ let(:meeting) { build :meeting, category: category }
27
+
28
+ it { is_expected.not_to be_valid }
29
+ end
10
30
  end
@@ -0,0 +1,146 @@
1
+ require "spec_helper"
2
+
3
+ describe Decidim::Meetings::MeetingSearch do
4
+ let(:current_feature) { create :feature }
5
+ let(:scope1) { create :scope, organization: current_feature.organization }
6
+ let(:scope2) { create :scope, organization: current_feature.organization }
7
+ let(:parent_category) { create :category, participatory_process: current_feature.participatory_process }
8
+ let(:subcategory) { create :subcategory, parent: parent_category }
9
+ let!(:meeting1) do
10
+ create(
11
+ :meeting,
12
+ feature: current_feature,
13
+ start_time: 1.day.from_now,
14
+ category: parent_category,
15
+ scope: scope1,
16
+ description: Decidim::Faker::Localized.literal("Nulla TestCheck accumsan tincidunt.")
17
+ )
18
+ end
19
+ let!(:meeting2) do
20
+ create(
21
+ :meeting,
22
+ feature: current_feature,
23
+ start_time: 2.day.from_now,
24
+ category: subcategory,
25
+ scope: scope2,
26
+ description: Decidim::Faker::Localized.literal("Curabitur arcu erat, accumsan id imperdiet et.")
27
+ )
28
+ end
29
+ let(:external_meeting) { create :meeting }
30
+ let(:feature_id) { current_feature.id }
31
+ let(:organization_id) { current_feature.organization.id }
32
+ let(:default_params) { { feature: current_feature, organization: current_feature.organization } }
33
+ let(:params) { default_params }
34
+
35
+ subject { described_class.new(params) }
36
+
37
+ describe "base query" do
38
+ context "when no feature is passed" do
39
+ let(:default_params) { { feature: nil } }
40
+
41
+ it "raises an error" do
42
+ expect{ subject.results }.to raise_error(StandardError, "Missing feature")
43
+ end
44
+ end
45
+ end
46
+
47
+ describe "filters" do
48
+ context "feature_id" do
49
+ it "only returns meetings from the given feature" do
50
+ external_meeting = create(:meeting)
51
+
52
+ expect(subject.results).not_to include(external_meeting)
53
+ end
54
+ end
55
+
56
+ context "order_start_time" do
57
+ let(:params) { default_params.merge(order_start_time: order) }
58
+
59
+ context "is :asc" do
60
+ let(:order) { :asc }
61
+
62
+ it "sorts the meetings by start_time asc" do
63
+ expect(subject.results).to eq [meeting1, meeting2]
64
+ end
65
+ end
66
+
67
+ context "is :desc" do
68
+ let(:order) { :desc }
69
+
70
+ it "sorts the meetings by start_time desc" do
71
+ expect(subject.results).to eq [meeting2, meeting1]
72
+ end
73
+ end
74
+ end
75
+
76
+ context "search_text" do
77
+ let(:params) { default_params.merge(search_text: "TestCheck") }
78
+
79
+ it "show only the meeting containing the search_text" do
80
+ expect(subject.results).to include(meeting1)
81
+ expect(subject.results.length).to eq(1)
82
+ end
83
+ end
84
+
85
+ context "scope_id" do
86
+ context "when a single id is being sent" do
87
+ let(:params) { default_params.merge(scope_id: scope1.id) }
88
+
89
+ it "filters meetings by scope" do
90
+ expect(subject.results).to eq [meeting1]
91
+ end
92
+ end
93
+
94
+ context "when multiple ids are sent" do
95
+ let(:params) { default_params.merge(scope_id: [scope2.id, scope1.id]) }
96
+
97
+ it "filters meetings by scope" do
98
+ expect(subject.results).to match_array [meeting1,meeting2]
99
+ end
100
+ end
101
+ end
102
+
103
+ context "category_id" do
104
+ context "when the given category has no subcategories" do
105
+ let(:params) { default_params.merge(category_id: subcategory.id) }
106
+
107
+ it "returns only meetings from the given category" do
108
+ expect(subject.results).to eq [meeting2]
109
+ end
110
+ end
111
+
112
+ context "when the given category has some subcategories" do
113
+ let(:params) { default_params.merge(category_id: parent_category.id) }
114
+
115
+ it "returns meetings from this category and its children's" do
116
+ expect(subject.results).to match_array [meeting2, meeting1]
117
+ end
118
+ end
119
+
120
+ context "when the category does not belong to the current feature" do
121
+ let(:external_category) { create :category }
122
+ let(:params) { default_params.merge(category_id: external_category.id) }
123
+
124
+ it "returns an empty array" do
125
+ expect(subject.results).to eq []
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ context "pagination" do
132
+ let(:params) do
133
+ default_params.merge(
134
+ per_page: 2
135
+ )
136
+ end
137
+
138
+ it "filters the meetings per page" do
139
+ create(:meeting, feature: current_feature)
140
+ meetings = subject.results
141
+
142
+ expect(meetings.total_pages).to eq(2)
143
+ expect(meetings.total_count).to eq(3)
144
+ end
145
+ end
146
+ end
@@ -1,9 +1,11 @@
1
1
  RSpec.shared_context "admin" do
2
2
  let(:organization) { create(:organization) }
3
- let!(:user) { create(:user, :admin, :confirmed, organization: organization) }
3
+ let!(:user) { create(:user, :admin, :confirmed, organization: organization, email: "admin@decidim.org") }
4
4
  let(:participatory_process) { create(:participatory_process, organization: organization) }
5
5
  let(:process_admin) { create :user, :confirmed, organization: organization }
6
6
  let!(:user_role) { create :participatory_process_user_role, user: process_admin, participatory_process: participatory_process }
7
7
  let(:current_feature) { create :feature, participatory_process: participatory_process, manifest_name: "meetings" }
8
- let!(:meeting) { create :meeting, feature: current_feature }
8
+ let(:scope) { create :scope, organization: organization }
9
+ let!(:category) { create :category, participatory_process: participatory_process }
10
+ let!(:meeting) { create :meeting, scope: scope, feature: current_feature }
9
11
  end
@@ -49,14 +49,14 @@ RSpec.shared_examples "manage meetings" do
49
49
  es: "Mi meeting",
50
50
  ca: "El meu meeting"
51
51
  )
52
- fill_in_i18n_editor(
52
+ fill_in_i18n(
53
53
  :meeting_location,
54
54
  "#location-tabs",
55
55
  en: "Location",
56
56
  es: "Location",
57
57
  ca: "Location"
58
58
  )
59
- fill_in_i18n_editor(
59
+ fill_in_i18n(
60
60
  :meeting_location_hints,
61
61
  "#location_hints-tabs",
62
62
  en: "Location hints",
@@ -82,6 +82,9 @@ RSpec.shared_examples "manage meetings" do
82
82
  fill_in :meeting_start_time, with: 1.day.from_now
83
83
  fill_in :meeting_end_time, with: 1.day.from_now + 2.hours
84
84
 
85
+ select scope.name, from: :meeting_decidim_scope_id
86
+ select translated(category.name), from: :meeting_decidim_category_id
87
+
85
88
  find("*[type=submit]").click
86
89
  end
87
90
 
@@ -1,2 +1,2 @@
1
1
  ENV["ENGINE_NAME"] = File.dirname(File.dirname(__FILE__)).split("/").last
2
- require "decidim/test/base_spec_helper"
2
+ require "decidim/dev/test/base_spec_helper"
@@ -1,2 +1,2 @@
1
1
  # frozen_string_literal: true
2
- require "decidim/common_rake"
2
+ require "decidim/dev/common_rake"
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
2
+ <path d="M0 0v8h7v-4h-4v-4h-3zm4 0v3h3l-3-3zm-3 2h1v1h-1v-1zm0 2h1v1h-1v-1zm0 2h4v1h-4v-1z" />
3
+ </svg>
@@ -29,8 +29,7 @@ module Decidim
29
29
  def update_page
30
30
  @page.update_attributes!(
31
31
  title: @form.title,
32
- body: @form.body,
33
- commentable: @form.commentable
32
+ body: @form.body
34
33
  )
35
34
  end
36
35
  end
@@ -8,7 +8,6 @@ module Decidim
8
8
 
9
9
  translatable_attribute :title, String
10
10
  translatable_attribute :body, String
11
- attribute :commentable, Boolean
12
11
 
13
12
  validates :title, translatable_presence: true
14
13
  end
@@ -1,5 +1,4 @@
1
1
  <div class="field">
2
2
  <%= form.translated :text_field, :title, autofocus: true, label: t("models.components.title", scope: "decidim.pages.admin") %>
3
3
  <%= form.translated :editor, :body, toolbar: :full, lines: 30, label: t("models.components.body", scope: "decidim.pages.admin") %>
4
- <%= form.check_box :commentable, label: t("models.components.commentable", scope: "decidim.pages.admin") %>
5
4
  </div>
@@ -9,8 +9,8 @@
9
9
  </div>
10
10
  </div>
11
11
 
12
- <%= content_for :expanded do %>
13
- <% if @page.commentable? %>
14
- <%= comments_for @page, arguable: true %>
12
+ <% if feature_settings.comments_always_enabled || current_settings.comments_enabled %>
13
+ <%= content_for :expanded do %>
14
+ <%= comments_for @page, arguable: true, votable: true %>
15
15
  <% end %>
16
16
  <% end %>
@@ -2,3 +2,4 @@ base_locale: en
2
2
  locales: [en]
3
3
  ignore_unused:
4
4
  - "decidim.features.pages.name"
5
+ - "decidim.features.pages.settings.*"
@@ -3,12 +3,16 @@ ca:
3
3
  features:
4
4
  pages:
5
5
  name: Pàgina
6
+ settings:
7
+ global:
8
+ comments_always_enabled: Comentaris sempre habilitats
9
+ step:
10
+ comments_enabled: Comentaris habilitats
6
11
  pages:
7
12
  admin:
8
13
  models:
9
14
  components:
10
15
  body: Cos
11
- commentable: Habilitar comentaris per a aquesta pàgina
12
16
  title: Títol
13
17
  pages:
14
18
  edit:
@@ -4,12 +4,16 @@ en:
4
4
  features:
5
5
  pages:
6
6
  name: Page
7
+ settings:
8
+ global:
9
+ comments_always_enabled: Comments always enabled
10
+ step:
11
+ comments_enabled: Comments enabled
7
12
  pages:
8
13
  admin:
9
14
  models:
10
15
  components:
11
16
  body: Body
12
- commentable: Enable comments for this page
13
17
  title: Title
14
18
  pages:
15
19
  edit:
@@ -3,12 +3,16 @@ es:
3
3
  features:
4
4
  pages:
5
5
  name: Página
6
+ settings:
7
+ global:
8
+ comments_always_enabled: Comentarios siempre habilitados
9
+ step:
10
+ comments_enabled: Comentarios habilitados
6
11
  pages:
7
12
  admin:
8
13
  models:
9
14
  components:
10
15
  body: Cuerpo
11
- commentable: Habilitar comentarios para esta página
12
16
  title: Título
13
17
  pages:
14
18
  edit:
@@ -0,0 +1,5 @@
1
+ class RemoveCommentableFlagFromPages < ActiveRecord::Migration[5.0]
2
+ def change
3
+ remove_column :decidim_pages_pages, :commentable
4
+ end
5
+ end
@@ -5,6 +5,7 @@ require_dependency "decidim/features/namer"
5
5
  Decidim.register_feature(:pages) do |feature|
6
6
  feature.engine = Decidim::Pages::Engine
7
7
  feature.admin_engine = Decidim::Pages::AdminEngine
8
+ feature.icon = "decidim/pages/icon.svg"
8
9
 
9
10
  feature.on(:create) do |instance|
10
11
  Decidim::Pages::CreatePage.call(instance) do
@@ -18,6 +19,14 @@ Decidim.register_feature(:pages) do |feature|
18
19
  end
19
20
  end
20
21
 
22
+ feature.settings(:global) do |settings|
23
+ settings.attribute :comments_always_enabled, type: :boolean
24
+ end
25
+
26
+ feature.settings(:step) do |settings|
27
+ settings.attribute :comments_enabled, type: :boolean
28
+ end
29
+
21
30
  feature.seeds do
22
31
  Decidim::ParticipatoryProcess.all.each do |process|
23
32
  next unless process.steps.any?
@@ -28,14 +37,15 @@ Decidim.register_feature(:pages) do |feature|
28
37
  participatory_process: process
29
38
  )
30
39
 
31
- Decidim::Pages::Page.create!(
40
+ page = Decidim::Pages::Page.create!(
32
41
  feature: feature,
33
42
  title: Decidim::Faker::Localized.sentence(2),
34
43
  body: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
35
44
  Decidim::Faker::Localized.paragraph(3)
36
- end,
37
- commentable: true
45
+ end
38
46
  )
47
+
48
+ Decidim::Comments::Seed.comments_for(page)
39
49
  end
40
50
  end
41
51
  end
@@ -20,7 +20,8 @@ module Decidim
20
20
  end
21
21
  let(:form) do
22
22
  PageForm.from_params(
23
- form_params,
23
+ form_params
24
+ ).with_context(
24
25
  current_organization: current_organization
25
26
  )
26
27
  end
@@ -1,5 +1,5 @@
1
- require_relative "../../decidim-core/spec/factories"
2
- require_relative "../../decidim-comments/spec/factories"
1
+ require "decidim/core/test/factories"
2
+ require "decidim/comments/test/factories"
3
3
 
4
4
  FactoryGirl.define do
5
5
  factory :page, class: Decidim::Pages::Page do
@@ -56,16 +56,5 @@ describe "Edit a page", type: :feature do
56
56
  expect(page).to have_title("New title")
57
57
  expect(page).to have_content("New body")
58
58
  end
59
-
60
- it "enable comments to the page" do
61
- within "form.edit_page" do
62
- check "page_commentable"
63
- find("*[type=submit]").click
64
- end
65
-
66
- visit_feature_admin
67
-
68
- expect(page.find("#page_commentable")).to be_checked
69
- end
70
59
  end
71
60
  end
@@ -22,9 +22,10 @@ describe "Show a page", type: :feature do
22
22
  }
23
23
  end
24
24
 
25
- describe "page show" do
25
+ let!(:page_feature) { create(:page, feature: feature, title: title, body: body) }
26
+
27
+ describe "page show" do
26
28
  before do
27
- create(:page, feature: feature, title: title, body: body)
28
29
  visit_feature
29
30
  end
30
31
 
@@ -35,18 +36,16 @@ describe "Show a page", type: :feature do
35
36
  end
36
37
 
37
38
  describe "page show with comments" do
38
- let!(:page_feature) { create(:page, feature: feature, title: title, body: body) }
39
39
  let!(:comments) { create_list(:comment, 3, commentable: page_feature) }
40
40
 
41
- before do
42
- page_feature.update_attribute(:commentable, commentable)
43
- end
44
-
45
41
  context "when the page is commentable" do
46
- let(:commentable) { true }
42
+ before do
43
+ feature.settings = { comments_always_enabled: true }
44
+ feature.save
45
+ visit_feature
46
+ end
47
47
 
48
48
  it "renders the comments of the page" do
49
- visit_feature
50
49
  expect(page).to have_selector('.comment', count: comments.length)
51
50
 
52
51
  comments.each do |comment|
@@ -56,7 +55,11 @@ describe "Show a page", type: :feature do
56
55
  end
57
56
 
58
57
  context "when the page is not commentable" do
59
- let(:commentable) { false }
58
+ before do
59
+ feature.settings = { comments_always_enabled: false }
60
+ feature.save
61
+ visit_feature
62
+ end
60
63
 
61
64
  it "doesn't render the comments of the page" do
62
65
  visit_feature