decidim-proposals 0.27.9 → 0.28.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (281) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/proposals/collaborative_draft_cell.rb +1 -1
  3. data/app/cells/decidim/proposals/collaborative_draft_l_cell.rb +16 -0
  4. data/app/cells/decidim/proposals/collaborative_draft_link_to_proposal/show.erb +4 -12
  5. data/app/cells/decidim/proposals/collaborative_draft_link_to_proposal_cell.rb +0 -29
  6. data/app/cells/decidim/proposals/collaborative_draft_metadata_cell.rb +30 -0
  7. data/app/cells/decidim/proposals/content_blocks/highlighted_proposals_cell.rb +2 -8
  8. data/app/cells/decidim/proposals/cost_report/show.erb +5 -34
  9. data/app/cells/decidim/proposals/cost_report_cell.rb +0 -13
  10. data/app/cells/decidim/proposals/highlighted_proposals_for_component/show.erb +29 -17
  11. data/app/cells/decidim/proposals/highlighted_proposals_for_component_cell.rb +34 -8
  12. data/app/cells/decidim/proposals/irreversible_action_modal/show.erb +9 -17
  13. data/app/cells/decidim/proposals/irreversible_action_modal_cell.rb +7 -9
  14. data/app/cells/decidim/proposals/participatory_text_proposal/buttons.erb +21 -31
  15. data/app/cells/decidim/proposals/participatory_text_proposal/show.erb +5 -9
  16. data/app/cells/decidim/proposals/participatory_text_proposal_cell.rb +0 -9
  17. data/app/cells/decidim/proposals/proposal_activity_cell.rb +1 -12
  18. data/app/cells/decidim/proposals/proposal_cell.rb +6 -1
  19. data/app/cells/decidim/proposals/proposal_l_cell.rb +47 -0
  20. data/app/cells/decidim/proposals/proposal_link_to_collaborative_draft_cell.rb +6 -4
  21. data/app/cells/decidim/proposals/proposal_link_to_rejected_emendation_cell.rb +9 -7
  22. data/app/cells/decidim/proposals/proposal_linked_resources/show.erb +3 -8
  23. data/app/cells/decidim/proposals/proposal_metadata_cell.rb +61 -0
  24. data/app/cells/decidim/proposals/proposal_s_cell.rb +21 -0
  25. data/app/cells/decidim/proposals/proposals_picker/show.erb +13 -13
  26. data/app/cells/decidim/proposals/proposals_picker_cell.rb +15 -38
  27. data/app/commands/decidim/proposals/accept_access_to_collaborative_draft.rb +1 -1
  28. data/app/commands/decidim/proposals/admin/answer_proposal.rb +1 -1
  29. data/app/commands/decidim/proposals/admin/assign_proposals_to_valuator.rb +3 -3
  30. data/app/commands/decidim/proposals/admin/create_proposal.rb +2 -2
  31. data/app/commands/decidim/proposals/admin/create_proposal_note.rb +4 -4
  32. data/app/commands/decidim/proposals/admin/discard_participatory_text.rb +1 -1
  33. data/app/commands/decidim/proposals/admin/import_participatory_text.rb +1 -1
  34. data/app/commands/decidim/proposals/admin/import_proposals.rb +2 -13
  35. data/app/commands/decidim/proposals/admin/merge_proposals.rb +1 -1
  36. data/app/commands/decidim/proposals/admin/notify_proposal_answer.rb +3 -3
  37. data/app/commands/decidim/proposals/admin/publish_answers.rb +1 -1
  38. data/app/commands/decidim/proposals/admin/publish_participatory_text.rb +2 -2
  39. data/app/commands/decidim/proposals/admin/split_proposals.rb +1 -1
  40. data/app/commands/decidim/proposals/admin/unassign_proposals_from_valuator.rb +2 -2
  41. data/app/commands/decidim/proposals/admin/update_participatory_text.rb +1 -1
  42. data/app/commands/decidim/proposals/admin/update_proposal.rb +5 -1
  43. data/app/commands/decidim/proposals/admin/update_proposal_scope.rb +1 -1
  44. data/app/commands/decidim/proposals/create_collaborative_draft.rb +13 -3
  45. data/app/commands/decidim/proposals/create_proposal.rb +14 -5
  46. data/app/commands/decidim/proposals/hashtags_methods.rb +1 -1
  47. data/app/commands/decidim/proposals/publish_proposal.rb +1 -1
  48. data/app/commands/decidim/proposals/reject_access_to_collaborative_draft.rb +1 -1
  49. data/app/commands/decidim/proposals/request_access_to_collaborative_draft.rb +1 -1
  50. data/app/commands/decidim/proposals/unvote_proposal.rb +2 -2
  51. data/app/commands/decidim/proposals/update_collaborative_draft.rb +12 -2
  52. data/app/commands/decidim/proposals/update_proposal.rb +16 -14
  53. data/app/commands/decidim/proposals/vote_proposal.rb +2 -2
  54. data/app/controllers/concerns/decidim/proposals/admin/filterable.rb +4 -13
  55. data/app/controllers/decidim/proposals/admin/proposal_answers_controller.rb +2 -2
  56. data/app/controllers/decidim/proposals/admin/proposal_notes_controller.rb +1 -1
  57. data/app/controllers/decidim/proposals/admin/proposals_controller.rb +2 -2
  58. data/app/controllers/decidim/proposals/collaborative_drafts_controller.rb +3 -9
  59. data/app/controllers/decidim/proposals/proposal_votes_controller.rb +3 -3
  60. data/app/controllers/decidim/proposals/proposals_controller.rb +42 -12
  61. data/app/events/decidim/proposals/accepted_proposal_event.rb +1 -1
  62. data/app/events/decidim/proposals/admin/proposal_note_created_event.rb +1 -1
  63. data/app/events/decidim/proposals/admin/update_proposal_category_event.rb +1 -1
  64. data/app/events/decidim/proposals/admin/update_proposal_scope_event.rb +1 -1
  65. data/app/events/decidim/proposals/collaborative_draft_access_accepted_event.rb +1 -1
  66. data/app/events/decidim/proposals/collaborative_draft_access_rejected_event.rb +1 -1
  67. data/app/events/decidim/proposals/collaborative_draft_access_request_event.rb +1 -1
  68. data/app/events/decidim/proposals/collaborative_draft_access_requested_event.rb +1 -1
  69. data/app/events/decidim/proposals/collaborative_draft_access_requester_accepted_event.rb +1 -1
  70. data/app/events/decidim/proposals/collaborative_draft_access_requester_rejected_event.rb +1 -1
  71. data/app/events/decidim/proposals/collaborative_draft_withdrawn_event.rb +1 -1
  72. data/app/events/decidim/proposals/evaluating_proposal_event.rb +1 -1
  73. data/app/events/decidim/proposals/proposal_endorsed_event.rb +1 -1
  74. data/app/events/decidim/proposals/proposal_mentioned_event.rb +1 -1
  75. data/app/events/decidim/proposals/publish_proposal_event.rb +1 -1
  76. data/app/events/decidim/proposals/rejected_proposal_event.rb +1 -1
  77. data/app/forms/decidim/proposals/admin/import_participatory_text_form.rb +1 -1
  78. data/app/forms/decidim/proposals/admin/proposal_base_form.rb +2 -2
  79. data/app/forms/decidim/proposals/admin/proposal_form.rb +1 -1
  80. data/app/forms/decidim/proposals/admin/proposals_fork_form.rb +1 -1
  81. data/app/forms/decidim/proposals/admin/valuation_assignment_form.rb +1 -1
  82. data/app/forms/decidim/proposals/proposal_form.rb +9 -27
  83. data/app/helpers/decidim/proposals/admin/proposal_bulk_actions_helper.rb +1 -1
  84. data/app/helpers/decidim/proposals/admin/proposals_helper.rb +13 -13
  85. data/app/helpers/decidim/proposals/application_helper.rb +80 -28
  86. data/app/helpers/decidim/proposals/collaborative_draft_helper.rb +44 -4
  87. data/app/helpers/decidim/proposals/map_helper.rb +3 -4
  88. data/app/helpers/decidim/proposals/participatory_texts_helper.rb +1 -9
  89. data/app/helpers/decidim/proposals/proposal_cells_helper.rb +1 -1
  90. data/app/helpers/decidim/proposals/proposal_votes_helper.rb +2 -24
  91. data/app/helpers/decidim/proposals/proposal_wizard_helper.rb +14 -81
  92. data/app/helpers/decidim/proposals/proposals_helper.rb +0 -12
  93. data/app/jobs/decidim/proposals/hide_all_created_by_author_job.rb +20 -0
  94. data/app/jobs/decidim/proposals/notify_proposals_mentioned_job.rb +1 -1
  95. data/app/jobs/decidim/proposals/settings_change_job.rb +2 -2
  96. data/app/models/decidim/proposals/collaborative_draft.rb +4 -16
  97. data/app/models/decidim/proposals/proposal.rb +33 -16
  98. data/app/models/decidim/proposals/proposal_vote.rb +3 -3
  99. data/app/models/decidim/proposals/valuation_assignment.rb +1 -2
  100. data/app/packs/documents/decidim/proposals/participatory_texts/participatory_text.md +9 -4
  101. data/app/packs/entrypoints/decidim_proposals.js +4 -0
  102. data/app/packs/entrypoints/decidim_proposals_admin.js +0 -1
  103. data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_accepted_proposals.svg +68 -1
  104. data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_proposal_votes.svg +34 -1
  105. data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_proposals.svg +64 -1
  106. data/app/packs/src/decidim/proposals/add_proposal.js +25 -39
  107. data/app/packs/src/decidim/proposals/admin/proposals.js +0 -7
  108. data/app/packs/src/decidim/proposals/choose_proposals.js +20 -0
  109. data/app/packs/stylesheets/decidim/proposals/proposals.scss +97 -0
  110. data/app/permissions/decidim/proposals/admin/permissions.rb +3 -3
  111. data/app/permissions/decidim/proposals/permissions.rb +1 -10
  112. data/app/presenters/decidim/proposals/admin_log/proposal_note_presenter.rb +2 -2
  113. data/app/presenters/decidim/proposals/admin_log/proposal_presenter.rb +7 -3
  114. data/app/presenters/decidim/proposals/admin_log/valuation_assignment_presenter.rb +2 -2
  115. data/app/presenters/decidim/proposals/admin_log/value_types/proposal_title_body_presenter.rb +3 -1
  116. data/app/presenters/decidim/proposals/log/resource_presenter.rb +22 -0
  117. data/app/presenters/decidim/proposals/log/valuation_assignment_presenter.rb +1 -1
  118. data/app/presenters/decidim/proposals/proposal_presenter.rb +6 -2
  119. data/app/services/decidim/proposals/diff_renderer.rb +3 -3
  120. data/app/services/decidim/proposals/proposal_builder.rb +6 -6
  121. data/app/views/decidim/proposals/admin/participatory_texts/_article-preview.html.erb +2 -4
  122. data/app/views/decidim/proposals/admin/participatory_texts/_bulk-actions.html.erb +2 -2
  123. data/app/views/decidim/proposals/admin/participatory_texts/index.html.erb +58 -46
  124. data/app/views/decidim/proposals/admin/participatory_texts/new_import.html.erb +31 -33
  125. data/app/views/decidim/proposals/admin/proposal_answers/_form.html.erb +17 -11
  126. data/app/views/decidim/proposals/admin/proposal_notes/_form.html.erb +5 -6
  127. data/app/views/decidim/proposals/admin/proposal_notes/_proposal_notes.html.erb +28 -36
  128. data/app/views/decidim/proposals/admin/proposals/_bulk-actions.html.erb +27 -30
  129. data/app/views/decidim/proposals/admin/proposals/_documents.html.erb +13 -0
  130. data/app/views/decidim/proposals/admin/proposals/_endorsers.html.erb +25 -0
  131. data/app/views/decidim/proposals/admin/proposals/_form.html.erb +70 -90
  132. data/app/views/decidim/proposals/admin/proposals/_meetings.html.erb +13 -0
  133. data/app/views/decidim/proposals/admin/proposals/_photos.html.erb +13 -0
  134. data/app/views/decidim/proposals/admin/proposals/_proposal-tr.html.erb +31 -25
  135. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_assign_to_valuator.html.erb +3 -3
  136. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_dropdown.html.erb +3 -2
  137. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_merge.html.erb +4 -4
  138. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_publish_answers.html.erb +3 -3
  139. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_recategorize.html.erb +3 -3
  140. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_scope-change.html.erb +4 -8
  141. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_split.html.erb +3 -3
  142. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_unassign_from_valuator.html.erb +3 -3
  143. data/app/views/decidim/proposals/admin/proposals/edit.html.erb +17 -7
  144. data/app/views/decidim/proposals/admin/proposals/index.html.erb +50 -63
  145. data/app/views/decidim/proposals/admin/proposals/new.html.erb +16 -6
  146. data/app/views/decidim/proposals/admin/proposals/publish_answers.js.erb +2 -2
  147. data/app/views/decidim/proposals/admin/proposals/show.html.erb +204 -162
  148. data/app/views/decidim/proposals/admin/proposals/update_attribute.js.erb +5 -6
  149. data/app/views/decidim/proposals/admin/proposals_imports/new.html.erb +48 -34
  150. data/app/views/decidim/proposals/collaborative_drafts/_accept_request_access_form.html.erb +1 -1
  151. data/app/views/decidim/proposals/collaborative_drafts/_actions.html.erb +7 -0
  152. data/app/views/decidim/proposals/collaborative_drafts/_collaborative_draft_aside.html.erb +53 -0
  153. data/app/views/decidim/proposals/collaborative_drafts/_collaborative_drafts.html.erb +12 -13
  154. data/app/views/decidim/proposals/collaborative_drafts/_collaborator_requests.html.erb +8 -12
  155. data/app/views/decidim/proposals/collaborative_drafts/_edit_form_fields.html.erb +26 -54
  156. data/app/views/decidim/proposals/collaborative_drafts/_reject_request_access_form.html.erb +1 -3
  157. data/app/views/decidim/proposals/collaborative_drafts/_request_access_form.html.erb +1 -1
  158. data/app/views/decidim/proposals/collaborative_drafts/edit.html.erb +23 -25
  159. data/app/views/decidim/proposals/collaborative_drafts/index.html.erb +30 -22
  160. data/app/views/decidim/proposals/collaborative_drafts/index.js.erb +0 -5
  161. data/app/views/decidim/proposals/collaborative_drafts/new.html.erb +22 -18
  162. data/app/views/decidim/proposals/collaborative_drafts/show.html.erb +39 -109
  163. data/app/views/decidim/proposals/proposal_votes/update_buttons_and_counters.js.erb +2 -2
  164. data/app/views/decidim/proposals/proposals/_actions.html.erb +13 -0
  165. data/app/views/decidim/proposals/proposals/_edit_form_fields.html.erb +31 -70
  166. data/app/views/decidim/proposals/proposals/_linked_proposals.html.erb +3 -35
  167. data/app/views/decidim/proposals/proposals/_proposal_aside.html.erb +40 -0
  168. data/app/views/decidim/proposals/proposals/_proposals.html.erb +18 -39
  169. data/app/views/decidim/proposals/proposals/_proposals_picker.html.erb +5 -0
  170. data/app/views/decidim/proposals/proposals/_remaining_votes_count.html.erb +3 -3
  171. data/app/views/decidim/proposals/proposals/_vote_button.html.erb +16 -17
  172. data/app/views/decidim/proposals/proposals/_votes_count.html.erb +3 -6
  173. data/app/views/decidim/proposals/proposals/_voting_rules.html.erb +28 -41
  174. data/app/views/decidim/proposals/proposals/_wizard_header.html.erb +19 -25
  175. data/app/views/decidim/proposals/proposals/compare.html.erb +17 -16
  176. data/app/views/decidim/proposals/proposals/complete.html.erb +26 -21
  177. data/app/views/decidim/proposals/proposals/edit.html.erb +32 -27
  178. data/app/views/decidim/proposals/proposals/edit_draft.html.erb +21 -19
  179. data/app/views/decidim/proposals/proposals/index.html.erb +56 -47
  180. data/app/views/decidim/proposals/proposals/index.js.erb +0 -5
  181. data/app/views/decidim/proposals/proposals/new.html.erb +30 -35
  182. data/app/views/decidim/proposals/proposals/participatory_texts/_proposal_vote_button.html.erb +5 -5
  183. data/app/views/decidim/proposals/proposals/participatory_texts/_view_index.html.erb +15 -8
  184. data/app/views/decidim/proposals/proposals/participatory_texts/participatory_text.html.erb +32 -15
  185. data/app/views/decidim/proposals/proposals/preview.html.erb +37 -34
  186. data/app/views/decidim/proposals/proposals/show.html.erb +90 -108
  187. data/app/views/decidim/proposals/versions/show.html.erb +14 -6
  188. data/config/assets.rb +0 -1
  189. data/config/brakeman.ignore +31 -56
  190. data/config/locales/ar.yml +23 -158
  191. data/config/locales/bg.yml +1 -776
  192. data/config/locales/ca.yml +92 -150
  193. data/config/locales/cs.yml +75 -135
  194. data/config/locales/de.yml +83 -141
  195. data/config/locales/el.yml +58 -121
  196. data/config/locales/en.yml +76 -134
  197. data/config/locales/es-MX.yml +77 -135
  198. data/config/locales/es-PY.yml +76 -134
  199. data/config/locales/es.yml +84 -142
  200. data/config/locales/eu.yml +77 -135
  201. data/config/locales/fi-plain.yml +68 -126
  202. data/config/locales/fi.yml +76 -134
  203. data/config/locales/fr-CA.yml +73 -132
  204. data/config/locales/fr.yml +77 -136
  205. data/config/locales/ga-IE.yml +0 -45
  206. data/config/locales/gl.yml +12 -131
  207. data/config/locales/hu.yml +45 -149
  208. data/config/locales/id-ID.yml +9 -114
  209. data/config/locales/is-IS.yml +5 -60
  210. data/config/locales/it.yml +14 -146
  211. data/config/locales/ja.yml +78 -141
  212. data/config/locales/lb.yml +0 -5
  213. data/config/locales/lt.yml +65 -126
  214. data/config/locales/lv.yml +13 -144
  215. data/config/locales/nl.yml +16 -148
  216. data/config/locales/no.yml +11 -134
  217. data/config/locales/pl.yml +16 -239
  218. data/config/locales/pt-BR.yml +14 -199
  219. data/config/locales/pt.yml +11 -142
  220. data/config/locales/ro-RO.yml +12 -146
  221. data/config/locales/ru.yml +5 -70
  222. data/config/locales/sk.yml +19 -145
  223. data/config/locales/sr-CS.yml +0 -23
  224. data/config/locales/sv.yml +60 -195
  225. data/config/locales/tr-TR.yml +16 -150
  226. data/config/locales/uk.yml +5 -70
  227. data/config/locales/zh-CN.yml +9 -135
  228. data/config/locales/zh-TW.yml +35 -107
  229. data/db/migrate/20170307085300_migrate_proposal_reports_data_to_reports.rb +1 -1
  230. data/db/migrate/20230427105700_change_states_on_collaborative_drafts.rb +34 -0
  231. data/db/migrate/20230427105700_change_states_on_proposals.rb +34 -0
  232. data/lib/decidim/api/proposals_type.rb +2 -2
  233. data/lib/decidim/proposals/component.rb +11 -289
  234. data/lib/decidim/proposals/doc_to_markdown.rb +0 -4
  235. data/lib/decidim/proposals/engine.rb +43 -7
  236. data/lib/decidim/proposals/import/proposal_answer_creator.rb +1 -1
  237. data/lib/decidim/proposals/import/proposal_creator.rb +10 -10
  238. data/lib/decidim/proposals/markdown_to_proposals.rb +8 -2
  239. data/lib/decidim/proposals/proposal_serializer.rb +4 -56
  240. data/lib/decidim/proposals/seeds.rb +278 -0
  241. data/lib/decidim/proposals/test/factories.rb +106 -85
  242. data/lib/decidim/proposals/valuatable.rb +1 -2
  243. data/lib/decidim/proposals/version.rb +1 -1
  244. metadata +55 -66
  245. data/app/cells/decidim/proposals/collaborative_draft_m/footer.erb +0 -6
  246. data/app/cells/decidim/proposals/collaborative_draft_m/tags.erb +0 -1
  247. data/app/cells/decidim/proposals/collaborative_draft_m_cell.rb +0 -44
  248. data/app/cells/decidim/proposals/content_blocks/highlighted_proposals/elements.erb +0 -5
  249. data/app/cells/decidim/proposals/content_blocks/highlighted_proposals/heading.erb +0 -1
  250. data/app/cells/decidim/proposals/proposal_link_to_rejected_emendation/show.erb +0 -9
  251. data/app/cells/decidim/proposals/proposal_m/footer.erb +0 -26
  252. data/app/cells/decidim/proposals/proposal_m/tags.erb +0 -1
  253. data/app/cells/decidim/proposals/proposal_m_cell.rb +0 -151
  254. data/app/cells/decidim/proposals/proposal_tags/show.erb +0 -33
  255. data/app/cells/decidim/proposals/proposal_tags_cell.rb +0 -35
  256. data/app/cells/decidim/proposals/proposals_picker/proposals.erb +0 -12
  257. data/app/controllers/concerns/decidim/proposals/admin/picker.rb +0 -21
  258. data/app/controllers/decidim/proposals/widgets_controller.rb +0 -29
  259. data/app/helpers/decidim/proposals/admin/filterable_helper.rb +0 -17
  260. data/app/helpers/decidim/proposals/admin/proposals_picker_helper.rb +0 -30
  261. data/app/packs/src/decidim/proposals/admin/proposals_picker.js +0 -50
  262. data/app/packs/stylesheets/decidim/proposals/_proposals.scss +0 -1
  263. data/app/packs/stylesheets/decidim/proposals/proposals/_preview.scss +0 -3
  264. data/app/views/decidim/proposals/collaborative_drafts/_count.html.erb +0 -1
  265. data/app/views/decidim/proposals/collaborative_drafts/_filters.html.erb +0 -32
  266. data/app/views/decidim/proposals/collaborative_drafts/_filters_small_view.html.erb +0 -18
  267. data/app/views/decidim/proposals/collaborative_drafts/_new_collaborative_draft_button.html.erb +0 -11
  268. data/app/views/decidim/proposals/collaborative_drafts/_wizard_aside.html.erb +0 -13
  269. data/app/views/decidim/proposals/collaborative_drafts/_wizard_header.html.erb +0 -14
  270. data/app/views/decidim/proposals/proposals/_count.html.erb +0 -1
  271. data/app/views/decidim/proposals/proposals/_dynamic_map_instructions.html.erb +0 -4
  272. data/app/views/decidim/proposals/proposals/_filters.html.erb +0 -48
  273. data/app/views/decidim/proposals/proposals/_filters_small_view.html.erb +0 -18
  274. data/app/views/decidim/proposals/proposals/_proposal_similar.html.erb +0 -22
  275. data/app/views/decidim/proposals/proposals/_wizard_aside.html.erb +0 -20
  276. data/app/views/decidim/proposals/proposals/participatory_texts/_index.html.erb +0 -19
  277. data/app/views/decidim/proposals/versions/index.html.erb +0 -16
  278. data/config/locales/he-IL.yml +0 -1
  279. data/db/migrate/20240404202756_add_valuation_assignments_count_to_decidim_proposals_proposals.rb +0 -16
  280. data/decidim-proposals.gemspec +0 -40
  281. data/lib/decidim/proposals/test/capybara_proposals_picker.rb +0 -59
@@ -0,0 +1,278 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/components/namer"
4
+ require "decidim/faker/localized"
5
+
6
+ module Decidim
7
+ module Proposals
8
+ class Seeds < Decidim::Seeds
9
+ attr_reader :participatory_space
10
+
11
+ def initialize(participatory_space:)
12
+ @participatory_space = participatory_space
13
+ end
14
+
15
+ def call
16
+ component = create_component!
17
+
18
+ 5.times do |n|
19
+ proposal = create_proposal!(component:)
20
+
21
+ emendation = create_emendation!(proposal:) if proposal.state.nil?
22
+
23
+ (n % 3).times do |_m|
24
+ create_proposal_votes!(proposal:, emendation:)
25
+ end
26
+
27
+ (n % 3).times do
28
+ create_proposal_notes!(proposal:)
29
+ end
30
+
31
+ Decidim::Comments::Seed.comments_for(proposal)
32
+
33
+ create_collaborative_draft!(component:)
34
+ end
35
+
36
+ update_traceability!(component:)
37
+ end
38
+
39
+ def organization
40
+ @organization ||= participatory_space.organization
41
+ end
42
+
43
+ def create_component!
44
+ step_settings = if participatory_space.allows_steps?
45
+ { participatory_space.active_step.id => { votes_enabled: true, votes_blocked: false, creation_enabled: true } }
46
+ else
47
+ {}
48
+ end
49
+
50
+ params = {
51
+ name: Decidim::Components::Namer.new(participatory_space.organization.available_locales, :proposals).i18n_name,
52
+ manifest_name: :proposals,
53
+ published_at: Time.current,
54
+ participatory_space:,
55
+ settings: {
56
+ vote_limit: 0,
57
+ collaborative_drafts_enabled: true
58
+ },
59
+ step_settings:
60
+ }
61
+
62
+ Decidim.traceability.perform_action!(
63
+ "publish",
64
+ Decidim::Component,
65
+ admin_user,
66
+ visibility: "all"
67
+ ) do
68
+ Decidim::Component.create!(params)
69
+ end
70
+ end
71
+
72
+ def create_proposal!(component:)
73
+ n = rand(5)
74
+ state, answer, state_published_at = if n > 3
75
+ ["accepted", Decidim::Faker::Localized.sentence(word_count: 10), Time.current]
76
+ elsif n > 2
77
+ ["rejected", nil, Time.current]
78
+ elsif n > 1
79
+ ["evaluating", nil, Time.current]
80
+ elsif n.positive?
81
+ ["accepted", Decidim::Faker::Localized.sentence(word_count: 10), nil]
82
+ else
83
+ ["not_answered", nil, nil]
84
+ end
85
+
86
+ params = {
87
+ component:,
88
+ category: participatory_space.categories.sample,
89
+ scope: random_scope(participatory_space:),
90
+ title: { en: ::Faker::Lorem.sentence(word_count: 2) },
91
+ body: { en: ::Faker::Lorem.paragraphs(number: 2).join("\n") },
92
+ state:,
93
+ answer:,
94
+ answered_at: state.present? ? Time.current : nil,
95
+ state_published_at:,
96
+ published_at: Time.current
97
+ }
98
+
99
+ proposal = Decidim.traceability.perform_action!(
100
+ "publish",
101
+ Decidim::Proposals::Proposal,
102
+ admin_user,
103
+ visibility: "all"
104
+ ) do
105
+ proposal = Decidim::Proposals::Proposal.new(params)
106
+ meeting_component = participatory_space.components.find_by(manifest_name: "meetings")
107
+
108
+ coauthor = case n
109
+ when 0
110
+ Decidim::User.where(organization:).sample
111
+ when 1
112
+ Decidim::UserGroup.where(organization:).sample
113
+ when 2
114
+ Decidim::Meetings::Meeting.where(component: meeting_component).sample
115
+ else
116
+ organization
117
+ end
118
+ proposal.add_coauthor(coauthor)
119
+ proposal.save!
120
+ proposal
121
+ end
122
+ end
123
+
124
+ def random_nickname
125
+ "#{::Faker::Twitter.unique.screen_name}-#{SecureRandom.hex(4)}"[0, 20]
126
+ end
127
+
128
+ def random_email(suffix:)
129
+ r = SecureRandom.hex(4)
130
+
131
+ "#{suffix}-author-#{participatory_space.underscored_name}-#{participatory_space.id}-#{r}@example.org"
132
+ end
133
+
134
+ def create_emendation!(proposal:)
135
+ author = Decidim::User.find_or_initialize_by(email: random_email(suffix: "amendment"))
136
+ author.update!(
137
+ password: "decidim123456789",
138
+ name: "#{::Faker::Name.name} #{participatory_space.id}",
139
+ nickname: random_nickname,
140
+ organization:,
141
+ tos_agreement: "1",
142
+ confirmed_at: Time.current
143
+ )
144
+
145
+ group = Decidim::UserGroup.create!(
146
+ name: ::Faker::Name.name,
147
+ nickname: random_nickname,
148
+ email: ::Faker::Internet.email,
149
+ extended_data: {
150
+ document_number: ::Faker::Code.isbn,
151
+ phone: ::Faker::PhoneNumber.phone_number,
152
+ verified_at: Time.current
153
+ },
154
+ organization:,
155
+ confirmed_at: Time.current
156
+ )
157
+
158
+ Decidim::UserGroupMembership.create!(
159
+ user: author,
160
+ role: "creator",
161
+ user_group: group
162
+ )
163
+
164
+ params = {
165
+ component: proposal.component,
166
+ category: participatory_space.categories.sample,
167
+ scope: random_scope(participatory_space:),
168
+ title: { en: "#{proposal.title["en"]} #{::Faker::Lorem.sentence(word_count: 1)}" },
169
+ body: { en: "#{proposal.body["en"]} #{::Faker::Lorem.sentence(word_count: 3)}" },
170
+ state: "evaluating",
171
+ answer: nil,
172
+ answered_at: Time.current,
173
+ published_at: Time.current
174
+ }
175
+
176
+ emendation = Decidim.traceability.perform_action!(
177
+ "create",
178
+ Decidim::Proposals::Proposal,
179
+ author,
180
+ visibility: "public-only"
181
+ ) do
182
+ emendation = Decidim::Proposals::Proposal.new(params)
183
+ emendation.add_coauthor(author, user_group: author.user_groups.first)
184
+ emendation.save!
185
+ emendation
186
+ end
187
+
188
+ Decidim::Amendment.create!(
189
+ amender: author,
190
+ amendable: proposal,
191
+ emendation:,
192
+ state: "evaluating"
193
+ )
194
+
195
+ emendation
196
+ end
197
+
198
+ def create_proposal_votes!(proposal:, emendation: nil)
199
+ author = Decidim::User.find_or_initialize_by(email: random_email(suffix: "vote"))
200
+ author.update!(
201
+ password: "decidim123456789",
202
+ name: "#{::Faker::Name.name} #{participatory_space.id}",
203
+ nickname: random_nickname,
204
+ organization:,
205
+ tos_agreement: "1",
206
+ confirmed_at: Time.current,
207
+ personal_url: ::Faker::Internet.url,
208
+ about: ::Faker::Lorem.paragraph(sentence_count: 2)
209
+ )
210
+
211
+ Decidim::Proposals::ProposalVote.create!(proposal:, author:) unless proposal.published_state? && proposal.rejected?
212
+ Decidim::Proposals::ProposalVote.create!(proposal: emendation, author:) if emendation
213
+ end
214
+
215
+ def create_proposal_notes!(proposal:)
216
+ author_admin = Decidim::User.where(organization:, admin: true).all.sample
217
+
218
+ Decidim::Proposals::ProposalNote.create!(
219
+ proposal:,
220
+ author: author_admin,
221
+ body: ::Faker::Lorem.paragraphs(number: 2).join("\n")
222
+ )
223
+ end
224
+
225
+ def create_collaborative_draft!(component:)
226
+ n = rand(5)
227
+ state = if n > 3
228
+ "published"
229
+ elsif n > 2
230
+ "withdrawn"
231
+ else
232
+ "open"
233
+ end
234
+ author = Decidim::User.where(organization:).all.sample
235
+
236
+ draft = Decidim.traceability.perform_action!("create", Decidim::Proposals::CollaborativeDraft, author) do
237
+ draft = Decidim::Proposals::CollaborativeDraft.new(
238
+ component:,
239
+ category: participatory_space.categories.sample,
240
+ scope: random_scope(participatory_space:),
241
+ title: ::Faker::Lorem.sentence(word_count: 2),
242
+ body: ::Faker::Lorem.paragraphs(number: 2).join("\n"),
243
+ state:,
244
+ published_at: Time.current
245
+ )
246
+ draft.coauthorships.build(author: participatory_space.organization)
247
+ draft.save!
248
+ draft
249
+ end
250
+
251
+ case n
252
+ when 2
253
+ authors = Decidim::User.where(organization:).all.sample(5)
254
+ authors.each do |local_author|
255
+ Decidim::Coauthorship.create(coauthorable: draft, author: local_author)
256
+ end
257
+ when 3
258
+ author2 = Decidim::User.where(organization:).all.sample
259
+ Decidim::Coauthorship.create(coauthorable: draft, author: author2)
260
+ end
261
+
262
+ Decidim::Comments::Seed.comments_for(draft)
263
+ end
264
+
265
+ def update_traceability!(component:)
266
+ Decidim.traceability.update!(
267
+ Decidim::Proposals::CollaborativeDraft.all.sample,
268
+ Decidim::User.where(organization:).all.sample,
269
+ component:,
270
+ category: participatory_space.categories.sample,
271
+ scope: random_scope(participatory_space:),
272
+ title: ::Faker::Lorem.sentence(word_count: 2),
273
+ body: ::Faker::Lorem.paragraphs(number: 2).join("\n")
274
+ )
275
+ end
276
+ end
277
+ end
278
+ end
@@ -1,17 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "decidim/components/namer"
3
4
  require "decidim/core/test/factories"
4
5
  require "decidim/participatory_processes/test/factories"
5
6
  require "decidim/meetings/test/factories"
6
7
 
7
8
  FactoryBot.define do
8
9
  factory :proposal_component, parent: :component do
9
- transient do
10
- skip_injection { false }
11
- end
12
- name { generate_component_name(participatory_space.organization.available_locales, :proposals) }
10
+ name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :proposals).i18n_name }
13
11
  manifest_name { :proposals }
14
- participatory_space { create(:participatory_process, :with_steps, organization: organization, skip_injection: skip_injection) }
12
+ participatory_space { create(:participatory_process, :with_steps, organization:) }
13
+
15
14
  trait :with_endorsements_enabled do
16
15
  step_settings do
17
16
  {
@@ -59,7 +58,7 @@ FactoryBot.define do
59
58
 
60
59
  settings do
61
60
  {
62
- vote_limit: vote_limit
61
+ vote_limit:
63
62
  }
64
63
  end
65
64
  end
@@ -71,7 +70,7 @@ FactoryBot.define do
71
70
 
72
71
  settings do
73
72
  {
74
- proposal_limit: proposal_limit
73
+ proposal_limit:
75
74
  }
76
75
  end
77
76
  end
@@ -83,7 +82,7 @@ FactoryBot.define do
83
82
 
84
83
  settings do
85
84
  {
86
- proposal_length: proposal_length
85
+ proposal_length:
87
86
  }
88
87
  end
89
88
  end
@@ -141,7 +140,7 @@ FactoryBot.define do
141
140
 
142
141
  settings do
143
142
  {
144
- threshold_per_proposal: threshold_per_proposal
143
+ threshold_per_proposal:
145
144
  }
146
145
  end
147
146
  end
@@ -178,7 +177,7 @@ FactoryBot.define do
178
177
 
179
178
  settings do
180
179
  {
181
- minimum_votes_per_user: minimum_votes_per_user
180
+ minimum_votes_per_user:
182
181
  }
183
182
  end
184
183
  end
@@ -225,8 +224,8 @@ FactoryBot.define do
225
224
  step_settings do
226
225
  {
227
226
  participatory_space.active_step.id => {
228
- automatic_hashtags: automatic_hashtags,
229
- suggested_hashtags: suggested_hashtags,
227
+ automatic_hashtags:,
228
+ suggested_hashtags:,
230
229
  creation_enabled: true
231
230
  }
232
231
  }
@@ -252,16 +251,40 @@ FactoryBot.define do
252
251
  skip_injection { false }
253
252
  end
254
253
 
255
- title { generate_localized_title(:proposal_title, skip_injection: skip_injection) }
256
- body { generate_localized_description(:proposal_body, skip_injection: skip_injection) }
257
- component { create(:proposal_component, skip_injection: skip_injection) }
254
+ title do
255
+ if skip_injection
256
+ Decidim::Faker::Localized.localized { generate(:title) }
257
+ else
258
+ Decidim::Faker::Localized.localized { "<script>alert(\"Proposal TITLE\");</script> #{generate(:title)}" }
259
+ end
260
+ end
261
+ body do
262
+ if skip_injection
263
+ Decidim::Faker::Localized.localized { Faker::Lorem.sentences(number: 3).join("\n") }
264
+ else
265
+ Decidim::Faker::Localized.localized { "<script>alert(\"Proposal BODY\");</script> #{Faker::Lorem.sentences(number: 3).join("\n")}" }
266
+ end
267
+ end
268
+ component { create(:proposal_component) }
258
269
  published_at { Time.current }
259
270
  address { "#{Faker::Address.street_name}, #{Faker::Address.city}" }
260
271
  latitude { Faker::Address.latitude }
261
272
  longitude { Faker::Address.longitude }
262
273
  cost { 20_000 }
263
- cost_report { generate_localized_title(:proposal_cost_report, skip_injection: skip_injection) }
264
- execution_period { generate_localized_title(:proposal_execution_period, skip_injection: skip_injection) }
274
+ cost_report do
275
+ if skip_injection
276
+ Decidim::Faker::Localized.localized { generate(:title) }
277
+ else
278
+ Decidim::Faker::Localized.localized { "<script>alert(\"Proposal cost report\")</script> #{generate(:title)}" }
279
+ end
280
+ end
281
+ execution_period do
282
+ if skip_injection
283
+ Decidim::Faker::Localized.localized { generate(:title) }
284
+ else
285
+ Decidim::Faker::Localized.localized { "<script>alert(\"Proposal execution period\")</script> #{generate(:title)}" }
286
+ end
287
+ end
265
288
 
266
289
  after(:build) do |proposal, evaluator|
267
290
  proposal.title = if evaluator.title.is_a?(String)
@@ -279,10 +302,10 @@ FactoryBot.define do
279
302
  proposal.body = Decidim::ContentProcessor.parse_with_processor(:hashtag, proposal.body, current_organization: proposal.organization).rewrite
280
303
 
281
304
  if proposal.component
282
- users = evaluator.users || [create(:user, :confirmed, organization: proposal.component.participatory_space.organization, skip_injection: evaluator.skip_injection)]
305
+ users = evaluator.users || [create(:user, :confirmed, organization: proposal.component.participatory_space.organization)]
283
306
  users.each_with_index do |user, idx|
284
307
  user_group = evaluator.user_groups[idx]
285
- proposal.coauthorships.build(author: user, user_group: user_group)
308
+ proposal.coauthorships.build(author: user, user_group:)
286
309
  end
287
310
  end
288
311
  end
@@ -296,19 +319,19 @@ FactoryBot.define do
296
319
  end
297
320
 
298
321
  trait :participant_author do
299
- after :build do |proposal, evaluator|
322
+ after :build do |proposal|
300
323
  proposal.coauthorships.clear
301
- user = build(:user, organization: proposal.component.participatory_space.organization, skip_injection: evaluator.skip_injection)
324
+ user = build(:user, organization: proposal.component.participatory_space.organization)
302
325
  proposal.coauthorships.build(author: user)
303
326
  end
304
327
  end
305
328
 
306
329
  trait :user_group_author do
307
- after :build do |proposal, evaluator|
330
+ after :build do |proposal|
308
331
  proposal.coauthorships.clear
309
- user = create(:user, organization: proposal.component.participatory_space.organization, skip_injection: evaluator.skip_injection)
310
- user_group = create(:user_group, :verified, organization: user.organization, users: [user], skip_injection: evaluator.skip_injection)
311
- proposal.coauthorships.build(author: user, user_group: user_group)
332
+ user = create(:user, organization: proposal.component.participatory_space.organization)
333
+ user_group = create(:user_group, :verified, organization: user.organization, users: [user])
334
+ proposal.coauthorships.build(author: user, user_group:)
312
335
  end
313
336
  end
314
337
 
@@ -320,10 +343,10 @@ FactoryBot.define do
320
343
  end
321
344
 
322
345
  trait :official_meeting do
323
- after :build do |proposal, evaluator|
346
+ after :build do |proposal|
324
347
  proposal.coauthorships.clear
325
- component = build(:meeting_component, participatory_space: proposal.component.participatory_space, skip_injection: evaluator.skip_injection)
326
- proposal.coauthorships.build(author: build(:meeting, component: component, skip_injection: evaluator.skip_injection))
348
+ component = build(:meeting_component, participatory_space: proposal.component.participatory_space)
349
+ proposal.coauthorships.build(author: build(:meeting, component:))
327
350
  end
328
351
  end
329
352
 
@@ -364,7 +387,7 @@ FactoryBot.define do
364
387
  end
365
388
 
366
389
  trait :not_answered do
367
- state { nil }
390
+ state { :not_answered }
368
391
  end
369
392
 
370
393
  trait :draft do
@@ -372,108 +395,93 @@ FactoryBot.define do
372
395
  end
373
396
 
374
397
  trait :hidden do
375
- after :create do |proposal, evaluator|
376
- create(:moderation, hidden_at: Time.current, reportable: proposal, skip_injection: evaluator.skip_injection)
398
+ after :create do |proposal|
399
+ create(:moderation, hidden_at: Time.current, reportable: proposal)
377
400
  end
378
401
  end
379
402
 
380
403
  trait :with_votes do
381
- after :create do |proposal, evaluator|
382
- create_list(:proposal_vote, 5, proposal: proposal, skip_injection: evaluator.skip_injection)
404
+ after :create do |proposal|
405
+ create_list(:proposal_vote, 5, proposal:)
383
406
  end
384
407
  end
385
408
 
386
409
  trait :with_endorsements do
387
- after :create do |proposal, evaluator|
410
+ after :create do |proposal|
388
411
  5.times.collect do
389
- create(:endorsement, resource: proposal, skip_injection: evaluator.skip_injection,
390
- author: build(:user, organization: proposal.participatory_space.organization, skip_injection: evaluator.skip_injection))
412
+ create(:endorsement, resource: proposal, author: build(:user, organization: proposal.participatory_space.organization))
391
413
  end
392
414
  end
393
415
  end
394
416
 
395
417
  trait :with_amendments do
396
- after :create do |proposal, evaluator|
397
- create_list(:proposal_amendment, 5, amendable: proposal, skip_injection: evaluator.skip_injection)
418
+ after :create do |proposal|
419
+ create_list(:proposal_amendment, 5, amendable: proposal)
398
420
  end
399
421
  end
400
422
 
401
423
  trait :with_photo do
402
- after :create do |proposal, evaluator|
403
- proposal.attachments << create(:attachment, :with_image, attached_to: proposal, skip_injection: evaluator.skip_injection)
424
+ after :create do |proposal|
425
+ proposal.attachments << create(:attachment, :with_image, attached_to: proposal)
404
426
  end
405
427
  end
406
428
 
407
429
  trait :with_document do
408
- after :create do |proposal, evaluator|
409
- proposal.attachments << create(:attachment, :with_pdf, attached_to: proposal, skip_injection: evaluator.skip_injection)
410
- end
411
- end
412
-
413
- trait :moderated do
414
- after(:create) do |proposal, evaluator|
415
- create(:moderation, reportable: proposal, hidden_at: 2.days.ago, skip_injection: evaluator.skip_injection)
430
+ after :create do |proposal|
431
+ proposal.attachments << create(:attachment, :with_pdf, attached_to: proposal)
416
432
  end
417
433
  end
418
434
  end
419
435
 
420
436
  factory :proposal_vote, class: "Decidim::Proposals::ProposalVote" do
421
- transient do
422
- skip_injection { false }
423
- end
424
- proposal { build(:proposal, skip_injection: skip_injection) }
425
- author { build(:user, organization: proposal.organization, skip_injection: skip_injection) }
437
+ proposal { build(:proposal) }
438
+ author { build(:user, organization: proposal.organization) }
426
439
  end
427
440
 
428
441
  factory :proposal_amendment, class: "Decidim::Amendment" do
429
- transient do
430
- skip_injection { false }
431
- end
432
- amendable { build(:proposal, skip_injection: skip_injection) }
433
- emendation { build(:proposal, component: amendable.component, skip_injection: skip_injection) }
434
- amender { build(:user, organization: amendable.component.participatory_space.organization, skip_injection: skip_injection) }
435
- state { Decidim::Amendment::STATES.sample }
442
+ amendable { build(:proposal) }
443
+ emendation { build(:proposal, component: amendable.component) }
444
+ amender { build(:user, organization: amendable.component.participatory_space.organization) }
445
+ state { Decidim::Amendment::STATES.keys.sample }
436
446
  end
437
447
 
438
448
  factory :proposal_note, class: "Decidim::Proposals::ProposalNote" do
439
- transient do
440
- skip_injection { false }
441
- end
442
- body do
443
- if skip_injection
444
- generate(:title)
445
- else
446
- "<script>alert(\"proposal_note_body\");</script> #{generate(:title)}"
447
- end
448
- end
449
- proposal { build(:proposal, skip_injection: skip_injection) }
450
- author { build(:user, organization: proposal.organization, skip_injection: skip_injection) }
449
+ body { Faker::Lorem.sentences(number: 3).join("\n") }
450
+ proposal { build(:proposal) }
451
+ author { build(:user, organization: proposal.organization) }
451
452
  end
452
453
 
453
454
  factory :collaborative_draft, class: "Decidim::Proposals::CollaborativeDraft" do
454
455
  transient do
455
456
  users { nil }
456
- skip_injection { false }
457
457
  # user_groups correspondence to users is by sorting order
458
458
  user_groups { [] }
459
459
  end
460
460
 
461
- title { generate_localized_title(:collaborative_draft_title, skip_injection: skip_injection)["en"] }
462
- body { generate_localized_description(:collaborative_draft_body, skip_injection: skip_injection)["en"] }
463
- component { create(:proposal_component, skip_injection: skip_injection) }
461
+ title { "<script>alert(\"TITLE\");</script> #{generate(:title)}" }
462
+ body { "<script>alert(\"BODY\");</script>\n#{Faker::Lorem.sentences(number: 3).join("\n")}" }
463
+ component { create(:proposal_component) }
464
464
  address { "#{Faker::Address.street_name}, #{Faker::Address.city}" }
465
465
  state { "open" }
466
466
 
467
467
  after(:build) do |collaborative_draft, evaluator|
468
468
  if collaborative_draft.component
469
- users = evaluator.users || [create(:user, organization: collaborative_draft.component.participatory_space.organization, skip_injection: evaluator.skip_injection)]
469
+ users = evaluator.users || [create(:user, organization: collaborative_draft.component.participatory_space.organization)]
470
470
  users.each_with_index do |user, idx|
471
471
  user_group = evaluator.user_groups[idx]
472
- collaborative_draft.coauthorships.build(author: user, user_group: user_group)
472
+ collaborative_draft.coauthorships.build(author: user, user_group:)
473
473
  end
474
474
  end
475
475
  end
476
476
 
477
+ trait :participant_author do
478
+ after :build do |draft|
479
+ draft.coauthorships.clear
480
+ user = build(:user, organization: draft.component.participatory_space.organization)
481
+ draft.coauthorships.build(author: user)
482
+ end
483
+ end
484
+
477
485
  trait :published do
478
486
  state { "published" }
479
487
  published_at { Time.current }
@@ -492,20 +500,33 @@ FactoryBot.define do
492
500
  transient do
493
501
  skip_injection { false }
494
502
  end
495
- title { generate_localized_title(:participatory_text_title, skip_injection: skip_injection) }
496
- description { generate_localized_description(:participatory_text_description, skip_injection: skip_injection) }
497
- component { create(:proposal_component, skip_injection: skip_injection) }
503
+
504
+ title do
505
+ if skip_injection
506
+ Decidim::Faker::Localized.localized { generate(:title) }
507
+ else
508
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings TITLE\")</script> #{generate(:title)}" }
509
+ end
510
+ end
511
+
512
+ description do
513
+ Decidim::Faker::Localized.wrapped("<p>", "</p>") do
514
+ if skip_injection
515
+ Decidim::Faker::Localized.localized { Faker::Lorem.sentences(number: 3).join("\n") }
516
+ else
517
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings description\");</script> #{Faker::Lorem.sentences(number: 3).join("\n")}" }
518
+ end
519
+ end
520
+ end
521
+ component { create(:proposal_component) }
498
522
  end
499
523
 
500
524
  factory :valuation_assignment, class: "Decidim::Proposals::ValuationAssignment" do
501
- transient do
502
- skip_injection { false }
503
- end
504
525
  proposal
505
526
  valuator_role do
506
527
  space = proposal.component.participatory_space
507
528
  organization = space.organization
508
- build :participatory_process_user_role, role: :valuator, skip_injection: skip_injection, user: build(:user, organization: organization, skip_injection: skip_injection)
529
+ build :participatory_process_user_role, role: :valuator, user: build(:user, organization:)
509
530
  end
510
531
  end
511
532
  end
@@ -8,8 +8,7 @@ module Decidim
8
8
  include Decidim::Comments::Commentable
9
9
 
10
10
  included do
11
- has_many :valuation_assignments, foreign_key: "decidim_proposal_id", dependent: :destroy,
12
- counter_cache: :valuation_assignments_count, class_name: "Decidim::Proposals::ValuationAssignment"
11
+ has_many :valuation_assignments, foreign_key: "decidim_proposal_id", dependent: :destroy
13
12
 
14
13
  def valuators
15
14
  valuator_role_ids = valuation_assignments.where(proposal: self).pluck(:valuator_role_id)
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds decidim-proposals version.
5
5
  module Proposals
6
6
  def self.version
7
- "0.27.9"
7
+ "0.28.0.rc4"
8
8
  end
9
9
  end
10
10
  end