decidim-proposals 0.27.10 → 0.28.0.rc4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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.10"
7
+ "0.28.0.rc4"
8
8
  end
9
9
  end
10
10
  end