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
@@ -32,6 +32,17 @@ Decidim::Admin::Engine.routes.draw do
32
32
 
33
33
  resources :static_pages
34
34
  resources :scopes, except: [:show]
35
+ resources :users, except: [:edit, :update], controller: "users" do
36
+ member do
37
+ post :resend_invitation, to: "users#resend_invitation"
38
+ end
39
+ end
40
+
41
+ resources :user_groups, only: [:index] do
42
+ member do
43
+ put :verify
44
+ end
45
+ end
35
46
 
36
47
  root to: "dashboard#show"
37
48
  end
@@ -19,11 +19,10 @@ Gem::Specification.new do |s|
19
19
  s.add_dependency "devise-i18n", "~> 1.1.0"
20
20
  s.add_dependency "rectify", "~> 0.8.0"
21
21
  s.add_dependency "devise_invitable", "~> 1.7.0"
22
- s.add_dependency "foundation-rails", "~> 6.2.4.0"
23
22
  s.add_dependency "sassc-rails", "~> 1.3.0"
24
- s.add_dependency "jquery-rails", "~> 4.0"
23
+ s.add_dependency "jquery-rails", "~> 4.2.2"
25
24
  s.add_dependency "turbolinks", *Decidim.rails_version
26
- s.add_dependency "foundation_rails_helper", "~> 2.0.0"
25
+ s.add_dependency "foundation_rails_helper", "~> 3.0.0.rc"
27
26
  s.add_dependency "active_link_to", "~> 1.0.0"
28
27
  s.add_dependency "carrierwave", "~> 1.0.0.rc"
29
28
  s.add_dependency "cancancan", "~> 1.15.0"
@@ -8,14 +8,18 @@ module Decidim
8
8
  skip_authorize_resource
9
9
  include Concerns::ParticipatoryProcessAdmin
10
10
  include NeedsParticipatoryProcess
11
- helper_method :current_feature, :current_participatory_process, :parent_path
11
+ include FeatureSettings
12
+
13
+ helper_method :current_feature,
14
+ :current_participatory_process,
15
+ :parent_path
16
+
17
+ delegate :active_step, to: :current_participatory_process, prefix: false
12
18
 
13
19
  before_action do
14
20
  authorize! :manage, current_feature
15
21
  end
16
22
 
17
- private
18
-
19
23
  def current_feature
20
24
  request.env["decidim.current_feature"]
21
25
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ FactoryGirl.define do
3
+ factory :participatory_process_user_role, class: Decidim::Admin::ParticipatoryProcessUserRole do
4
+ user
5
+ participatory_process
6
+ role "admin"
7
+ end
8
+ end
@@ -22,8 +22,9 @@ module Decidim
22
22
  let(:form) do
23
23
  CategoryForm.from_params(
24
24
  form_params,
25
- current_organization: organization,
26
25
  current_process: participatory_process
26
+ ).with_context(
27
+ current_organization: organization,
27
28
  )
28
29
  end
29
30
  let(:command) { described_class.new(form, participatory_process) }
@@ -12,11 +12,22 @@ module Decidim
12
12
  es: "Mi funcionalidad"
13
13
  },
14
14
  invalid?: !valid,
15
- valid?: valid
15
+ valid?: valid,
16
+ settings: {
17
+ dummy_global_attribute_1: true,
18
+ dummy_global_attribute_2: false
19
+ },
20
+ step_settings: {
21
+ step.id.to_s => {
22
+ dummy_step_attribute_1: true,
23
+ dummy_step_attribute_2: false
24
+ }
25
+ }
16
26
  )
17
27
  end
18
28
 
19
- let(:participatory_process) { create(:participatory_process) }
29
+ let(:participatory_process) { create(:participatory_process, :with_steps) }
30
+ let(:step) { participatory_process.steps.first }
20
31
 
21
32
  describe "when valid" do
22
33
  let(:valid) { true }
@@ -27,6 +38,14 @@ module Decidim
27
38
  }.to broadcast(:ok)
28
39
 
29
40
  expect(participatory_process.features).to_not be_empty
41
+
42
+ feature = participatory_process.features.first
43
+ expect(feature.settings.dummy_global_attribute_1).to eq(true)
44
+ expect(feature.settings.dummy_global_attribute_2).to eq(false)
45
+
46
+ step_settings = feature.step_settings[step.id.to_s]
47
+ expect(step_settings.dummy_step_attribute_1).to eq(true)
48
+ expect(step_settings.dummy_step_attribute_2).to eq(false)
30
49
  end
31
50
 
32
51
  it "fires the hooks" do
@@ -30,8 +30,20 @@ describe Decidim::Admin::CreateParticipatoryProcess do
30
30
  end
31
31
 
32
32
  context "when everything is ok" do
33
- it "creates the user role" do
33
+ it "creates a participatory process" do
34
34
  expect { subject.call }.to change { Decidim::ParticipatoryProcess.count }.by(1)
35
35
  end
36
+
37
+ it "broadcasts ok" do
38
+ expect { subject.call }.to broadcast(:ok)
39
+ end
40
+
41
+ it "adds the default step" do
42
+ subject.call do
43
+ on(:ok) do |process|
44
+ expect(process.steps.count).to eq(1)
45
+ end
46
+ end
47
+ end
36
48
  end
37
49
  end
@@ -6,7 +6,7 @@ module Decidim
6
6
  describe CreateStaticPage, :db do
7
7
  describe "call" do
8
8
  let(:organization) { create(:organization) }
9
- let(:form) { StaticPageForm.from_model(build(:static_page, organization: organization)) }
9
+ let(:form) { StaticPageForm.from_model(build(:static_page)).with_context(current_organization: organization) }
10
10
  let(:command) { described_class.new(form) }
11
11
 
12
12
  describe "when the form is not valid" do
@@ -0,0 +1,45 @@
1
+ require "spec_helper"
2
+
3
+ describe Decidim::Admin::DestroyParticipatoryProcessStep, class: true do
4
+ let(:subject) { described_class }
5
+
6
+ let!(:participatory_process) { create(:participatory_process) }
7
+
8
+ let!(:active_step) do
9
+ create(:participatory_process_step, participatory_process: participatory_process, active: true)
10
+ end
11
+
12
+ context "when there's more than one step" do
13
+ let!(:inactive_step) do
14
+ create(:participatory_process_step, participatory_process: participatory_process, active: false)
15
+ end
16
+
17
+ context "when destroying the active step" do
18
+ it "broadcasts invalid" do
19
+ expect { subject.call(active_step) }.to broadcast(:invalid, :active_step)
20
+ end
21
+
22
+ it "doesn't destroy the step" do
23
+ subject.call(active_step)
24
+ expect(active_step).to be_persisted
25
+ end
26
+ end
27
+
28
+ context "when destroying an inactive step" do
29
+ it "broadcasts ok" do
30
+ expect { subject.call(inactive_step) }.to broadcast(:ok)
31
+ end
32
+
33
+ it "destroys the step" do
34
+ subject.call(inactive_step)
35
+ expect(inactive_step).to_not be_persisted
36
+ end
37
+ end
38
+ end
39
+
40
+ context "when trying to destroy the last step" do
41
+ it "broadcasts invalid" do
42
+ expect { subject.call(active_step) }.to broadcast(:invalid, :last_step)
43
+ end
44
+ end
45
+ end
@@ -23,8 +23,9 @@ module Decidim
23
23
  let(:form) do
24
24
  CategoryForm.from_params(
25
25
  form_params,
26
- current_organization: organization,
27
26
  current_process: participatory_process
27
+ ).with_context(
28
+ current_organization: organization
28
29
  )
29
30
  end
30
31
  let(:command) { described_class.new(category, form) }
@@ -0,0 +1,79 @@
1
+ require "spec_helper"
2
+
3
+ module Decidim
4
+ module Admin
5
+ describe UpdateFeature do
6
+ let!(:participatory_process) { create(:participatory_process, :with_steps) }
7
+ let(:step) { participatory_process.steps.first }
8
+ let!(:feature) { create(:feature, participatory_process: participatory_process) }
9
+ let(:manifest) { feature.manifest }
10
+
11
+ let(:form) do
12
+ instance_double(FeatureForm,
13
+ name: {
14
+ en: "My feature",
15
+ ca: "La meva funcionalitat",
16
+ es: "Mi funcionalidad"
17
+ },
18
+ invalid?: !valid,
19
+ valid?: valid,
20
+ settings: {
21
+ dummy_global_attribute_1: true,
22
+ dummy_global_attribute_2: false
23
+ },
24
+ step_settings: {
25
+ step.id.to_s => {
26
+ dummy_step_attribute_1: true,
27
+ dummy_step_attribute_2: false
28
+ }
29
+ }
30
+ )
31
+ end
32
+
33
+ describe "when valid" do
34
+ let(:valid) { true }
35
+
36
+ it "broadcasts :ok and updates the feature" do
37
+ expect {
38
+ described_class.call(form, feature)
39
+ }.to broadcast(:ok)
40
+
41
+ expect(feature["name"]["en"]).to eq("My feature")
42
+ expect(feature.settings.dummy_global_attribute_1).to eq(true)
43
+ expect(feature.settings.dummy_global_attribute_2).to eq(false)
44
+
45
+ step_settings = feature.step_settings[step.id.to_s]
46
+ expect(step_settings.dummy_step_attribute_1).to eq(true)
47
+ expect(step_settings.dummy_step_attribute_2).to eq(false)
48
+ end
49
+
50
+ it "fires the hooks" do
51
+ results = {}
52
+
53
+ manifest.on(:update) do |feature|
54
+ results[:feature] = feature
55
+ end
56
+
57
+ described_class.call(form, feature)
58
+
59
+ feature = results[:feature]
60
+ expect(feature.name["en"]).to eq("My feature")
61
+ expect(feature).to be_persisted
62
+ end
63
+ end
64
+
65
+ describe "when invalid" do
66
+ let(:valid) { false }
67
+
68
+ it "creates the feature" do
69
+ expect {
70
+ described_class.call(form, feature)
71
+ }.to broadcast(:invalid)
72
+
73
+ feature.reload
74
+ expect(feature.name["en"]).to_not eq("My feature")
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -17,7 +17,8 @@ module Decidim
17
17
  welcome_text_ca: "Hola",
18
18
  description_en: "My description",
19
19
  description_es: "Mi descripción",
20
- description_ca: "La meva descripció"
20
+ description_ca: "La meva descripció",
21
+ show_statistics: false
21
22
  }
22
23
  }
23
24
  end
@@ -25,7 +26,7 @@ module Decidim
25
26
  { current_organization: organization }
26
27
  end
27
28
  let(:form) do
28
- OrganizationForm.from_params(params, context)
29
+ OrganizationForm.from_params(params).with_context(context)
29
30
  end
30
31
  let(:command) { described_class.new(organization, form) }
31
32
 
@@ -9,8 +9,9 @@ module Decidim
9
9
  let(:page) { create(:static_page, organization: organization) }
10
10
  let(:form) do
11
11
  StaticPageForm.from_params(
12
- static_page: page.attributes.merge(slug: "new-slug"),
13
- organization: page.organization
12
+ static_page: page.attributes.merge(slug: "new-slug")
13
+ ).with_context(
14
+ current_organization: page.organization
14
15
  )
15
16
  end
16
17
  let(:command) { described_class.new(page, form) }
@@ -1,9 +1,2 @@
1
- require_relative "../../decidim-core/spec/factories"
2
-
3
- FactoryGirl.define do
4
- factory :participatory_process_user_role, class: Decidim::Admin::ParticipatoryProcessUserRole do
5
- user
6
- participatory_process
7
- role "admin"
8
- end
9
- end
1
+ require "decidim/core/test/factories"
2
+ require "decidim/admin/test/factories"
@@ -6,8 +6,8 @@ describe "Admin manages features", type: :feature do
6
6
  let(:organization) { create(:organization) }
7
7
  let(:user) { create(:user, :admin, :confirmed, organization: organization) }
8
8
 
9
- let(:participatory_process) do
10
- create(:participatory_process, organization: organization)
9
+ let!(:participatory_process) do
10
+ create(:participatory_process, :with_steps, organization: organization)
11
11
  end
12
12
 
13
13
  before do
@@ -36,6 +36,14 @@ describe "Admin manages features", type: :feature do
36
36
  es: "Mi funcionalitat"
37
37
  )
38
38
 
39
+ within ".global-settings" do
40
+ all("input[type=checkbox]").last.click
41
+ end
42
+
43
+ within ".step-settings" do
44
+ all("input[type=checkbox]").first.click
45
+ end
46
+
39
47
  find("*[type=submit]").click
40
48
  end
41
49
 
@@ -44,6 +52,80 @@ describe "Admin manages features", type: :feature do
44
52
  end
45
53
 
46
54
  expect(page).to have_content("My feature")
55
+
56
+ within find("tr", text: "My feature") do
57
+ click_link "Configure"
58
+ end
59
+
60
+ within ".global-settings" do
61
+ expect(all("input[type=checkbox]").last).to be_checked
62
+ end
63
+
64
+ within ".step-settings" do
65
+ expect(all("input[type=checkbox]").first).to be_checked
66
+ end
67
+ end
68
+ end
69
+
70
+ describe "edit a feature" do
71
+ let(:feature_name) do
72
+ {
73
+ en: "My feature",
74
+ ca: "La meva funcionalitat",
75
+ es: "Mi funcionalitat"
76
+ }
77
+ end
78
+
79
+ let!(:feature) do
80
+ create(:feature, name: feature_name, participatory_process: participatory_process)
81
+ end
82
+
83
+ before do
84
+ visit decidim_admin.participatory_process_features_path(participatory_process)
85
+ end
86
+
87
+ it "updates the feature" do
88
+ within ".feature-#{feature.id}" do
89
+ click_link "Configure"
90
+ end
91
+
92
+ within ".edit_feature" do
93
+ fill_in_i18n(
94
+ :feature_name,
95
+ "#name-tabs",
96
+ en: "My updated feature",
97
+ ca: "La meva funcionalitat actualitzada",
98
+ es: "Mi funcionalidad actualizada"
99
+ )
100
+
101
+ within ".global-settings" do
102
+ all("input[type=checkbox]").last.click
103
+ end
104
+
105
+ within ".step-settings" do
106
+ all("input[type=checkbox]").first.click
107
+ end
108
+
109
+ find("*[type=submit]").click
110
+ end
111
+
112
+ within_flash_messages do
113
+ expect(page).to have_content("successfully")
114
+ end
115
+
116
+ expect(page).to have_content("My updated feature")
117
+
118
+ within find("tr", text: "My updated feature") do
119
+ click_link "Configure"
120
+ end
121
+
122
+ within ".global-settings" do
123
+ expect(all("input[type=checkbox]").last).to be_checked
124
+ end
125
+
126
+ within ".step-settings" do
127
+ expect(all("input[type=checkbox]").first).to be_checked
128
+ end
47
129
  end
48
130
  end
49
131
 
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe "Organization admins", type: :feature do
5
+ include ActionView::Helpers::SanitizeHelper
6
+
7
+ let(:admin) { create :user, :admin, :confirmed }
8
+ let(:organization) { admin.organization }
9
+
10
+ before do
11
+ switch_to_host(organization.host)
12
+ end
13
+
14
+ describe "Managing users" do
15
+ before do
16
+ login_as admin, scope: :user
17
+ visit decidim_admin.root_path
18
+ click_link "Admin users"
19
+ end
20
+
21
+ it "can invite new users" do
22
+ find(".actions .new").click
23
+
24
+ within ".new_user" do
25
+ fill_in :user_name, with: "New admin"
26
+ fill_in :user_email, with: "newadmin@decidim.org"
27
+
28
+ find("*[type=submit]").click
29
+ end
30
+
31
+ within ".flash" do
32
+ expect(page).to have_content("successfully")
33
+ end
34
+
35
+ within "table" do
36
+ expect(page).to have_content("New admin")
37
+ end
38
+ end
39
+
40
+ context "with existing users" do
41
+ let!(:user) do
42
+ user = build(:user, :confirmed, :admin, organization: organization)
43
+ user.invite!
44
+ user
45
+ end
46
+ let!(:other_admin) { create(:user, :confirmed, :admin, organization: organization) }
47
+
48
+ before do
49
+ visit current_path
50
+ end
51
+
52
+ it "can resend the invitation" do
53
+ within "tr[data-user-id=\"#{user.id}\"]" do
54
+ click_link "Resend invitation"
55
+ end
56
+
57
+ expect(page).to have_content("Invitation email sent successfully")
58
+ end
59
+
60
+ it "can remove the admin rights" do
61
+ expect(page).to have_content(other_admin.name)
62
+
63
+ within "tr[data-user-id=\"#{other_admin.id}\"]" do
64
+ click_link "Destroy"
65
+ end
66
+
67
+ expect(page).to_not have_content(other_admin.name)
68
+ end
69
+ end
70
+ end
71
+ end