decidim-meetings 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 (251) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/attending_organizations_list_cell.rb +32 -0
  3. data/app/cells/decidim/meetings/cancel_registration_meeting_button/cancelation_modal.erb +21 -0
  4. data/app/cells/decidim/meetings/cancel_registration_meeting_button/show.erb +10 -13
  5. data/app/cells/decidim/meetings/cancel_registration_meeting_button_cell.rb +2 -2
  6. data/app/cells/decidim/meetings/content_blocks/highlighted_meetings_cell.rb +8 -18
  7. data/app/cells/decidim/meetings/dates_and_map/show.erb +25 -0
  8. data/app/cells/decidim/meetings/dates_and_map/static_map.erb +1 -0
  9. data/app/cells/decidim/meetings/dates_and_map_cell.rb +35 -0
  10. data/app/cells/decidim/meetings/highlighted_meetings_for_component/show.erb +32 -30
  11. data/app/cells/decidim/meetings/highlighted_meetings_for_component_cell.rb +76 -16
  12. data/app/cells/decidim/meetings/join_meeting_button/registration_modal.erb +25 -0
  13. data/app/cells/decidim/meetings/join_meeting_button/remaining_slots.erb +4 -0
  14. data/app/cells/decidim/meetings/join_meeting_button/show.erb +6 -4
  15. data/app/cells/decidim/meetings/join_meeting_button_cell.rb +3 -7
  16. data/app/cells/decidim/meetings/meeting_activity_cell.rb +1 -12
  17. data/app/cells/decidim/meetings/meeting_card_metadata_cell.rb +64 -0
  18. data/app/cells/decidim/meetings/meeting_cell.rb +2 -6
  19. data/app/cells/decidim/meetings/meeting_l/image.erb +5 -0
  20. data/app/cells/decidim/meetings/meeting_l_cell.rb +33 -0
  21. data/app/cells/decidim/meetings/meeting_month/show.erb +33 -0
  22. data/app/cells/decidim/meetings/meeting_month_cell.rb +72 -0
  23. data/app/cells/decidim/meetings/meeting_s_cell.rb +5 -37
  24. data/app/cells/decidim/meetings/meetings_map/show.erb +9 -24
  25. data/app/cells/decidim/meetings/meetings_map_cell.rb +1 -1
  26. data/app/cells/decidim/meetings/online_meeting_cell.rb +1 -0
  27. data/app/cells/decidim/meetings/online_meeting_link/show.erb +18 -41
  28. data/app/cells/decidim/meetings/public_participants_list/show.erb +4 -15
  29. data/app/commands/decidim/meetings/admin/copy_meeting.rb +1 -1
  30. data/app/commands/decidim/meetings/admin/create_meeting.rb +1 -1
  31. data/app/commands/decidim/meetings/admin/invite_user_to_join_meeting.rb +5 -5
  32. data/app/commands/decidim/meetings/admin/publish_meeting.rb +1 -1
  33. data/app/commands/decidim/meetings/admin/unpublish_meeting.rb +1 -1
  34. data/app/commands/decidim/meetings/create_meeting.rb +14 -3
  35. data/app/commands/decidim/meetings/decline_invitation.rb +1 -1
  36. data/app/commands/decidim/meetings/join_meeting.rb +5 -5
  37. data/app/commands/decidim/meetings/update_meeting.rb +13 -3
  38. data/app/controllers/concerns/decidim/meetings/component_filterable.rb +4 -4
  39. data/app/controllers/decidim/meetings/admin/agenda_controller.rb +6 -6
  40. data/app/controllers/decidim/meetings/admin/invites_controller.rb +3 -3
  41. data/app/controllers/decidim/meetings/admin/meeting_closes_controller.rb +2 -4
  42. data/app/controllers/decidim/meetings/admin/meeting_copies_controller.rb +3 -3
  43. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +7 -7
  44. data/app/controllers/decidim/meetings/admin/meetings_poll_controller.rb +4 -4
  45. data/app/controllers/decidim/meetings/admin/registrations_controller.rb +6 -6
  46. data/app/controllers/decidim/meetings/application_controller.rb +11 -0
  47. data/app/controllers/decidim/meetings/calendars_controller.rb +0 -1
  48. data/app/controllers/decidim/meetings/directory/application_controller.rb +12 -0
  49. data/app/controllers/decidim/meetings/directory/meetings_controller.rb +5 -30
  50. data/app/controllers/decidim/meetings/live_events_controller.rb +1 -0
  51. data/app/controllers/decidim/meetings/meeting_closes_controller.rb +2 -3
  52. data/app/controllers/decidim/meetings/meetings_controller.rb +75 -7
  53. data/app/controllers/decidim/meetings/polls/answers_controller.rb +2 -2
  54. data/app/controllers/decidim/meetings/polls/questions_controller.rb +1 -1
  55. data/app/controllers/decidim/meetings/registrations_controller.rb +5 -5
  56. data/app/events/decidim/meetings/close_meeting_event.rb +1 -1
  57. data/app/events/decidim/meetings/meeting_event.rb +1 -1
  58. data/app/events/decidim/meetings/meeting_registration_notification_event.rb +3 -3
  59. data/app/events/decidim/meetings/meeting_registrations_enabled_event.rb +1 -1
  60. data/app/events/decidim/meetings/meeting_registrations_over_percentage_event.rb +1 -1
  61. data/app/events/decidim/meetings/registration_code_validated_event.rb +1 -1
  62. data/app/forms/decidim/meetings/admin/meeting_form.rb +5 -1
  63. data/app/forms/decidim/meetings/admin/meeting_registrations_form.rb +2 -2
  64. data/app/forms/decidim/meetings/admin/validate_registration_code_form.rb +1 -1
  65. data/app/forms/decidim/meetings/base_meeting_form.rb +1 -1
  66. data/app/forms/decidim/meetings/meeting_form.rb +3 -3
  67. data/app/helpers/decidim/meetings/admin/application_helper.rb +1 -0
  68. data/app/helpers/decidim/meetings/application_helper.rb +18 -25
  69. data/app/helpers/decidim/meetings/directory/application_helper.rb +11 -59
  70. data/app/helpers/decidim/meetings/map_helper.rb +2 -9
  71. data/app/helpers/decidim/meetings/meetings_helper.rb +6 -5
  72. data/app/jobs/decidim/meetings/hide_all_created_by_author_job.rb +13 -0
  73. data/app/mailers/decidim/meetings/admin/invite_join_meeting_mailer.rb +1 -1
  74. data/app/mailers/decidim/meetings/registration_mailer.rb +1 -1
  75. data/app/models/decidim/meetings/meeting.rb +11 -32
  76. data/app/models/decidim/meetings/question.rb +1 -1
  77. data/app/packs/entrypoints/decidim_meetings.js +3 -0
  78. data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_attended_meetings.svg +42 -1
  79. data/app/packs/src/decidim/meetings/admin/agendas.js +3 -4
  80. data/app/packs/src/decidim/meetings/admin/registrations_form.js +12 -4
  81. data/app/packs/src/decidim/meetings/meetings_form.js +1 -1
  82. data/app/packs/src/decidim/meetings/poll.component.js +1 -28
  83. data/app/packs/stylesheets/decidim/meetings/_calendar.scss +47 -0
  84. data/app/packs/stylesheets/decidim/meetings/_item.scss +177 -0
  85. data/app/packs/stylesheets/decidim/meetings/_list.scss +58 -0
  86. data/app/packs/stylesheets/decidim/meetings/_live_event.scss +128 -0
  87. data/app/packs/stylesheets/decidim/meetings/meetings.scss +4 -0
  88. data/app/permissions/decidim/meetings/permissions.rb +15 -12
  89. data/app/presenters/decidim/meetings/admin_log/invite_presenter.rb +2 -2
  90. data/app/presenters/decidim/meetings/admin_log/meeting_presenter.rb +6 -2
  91. data/app/presenters/decidim/meetings/admin_log/questionnaire_presenter.rb +2 -2
  92. data/app/presenters/decidim/meetings/admin_log/value_types/meeting_title_description_presenter.rb +1 -1
  93. data/app/presenters/decidim/meetings/log/resource_presenter.rb +18 -0
  94. data/app/presenters/decidim/meetings/meeting_presenter.rb +8 -2
  95. data/app/services/decidim/meetings/calendar/component_calendar.rb +1 -1
  96. data/app/services/decidim/meetings/close_meeting_reminder_generator.rb +7 -13
  97. data/app/services/decidim/meetings/meeting_iframe_embedder.rb +1 -1
  98. data/app/views/decidim/meetings/_calendar_modal.html.erb +19 -21
  99. data/app/views/decidim/meetings/admin/agenda/_agenda_item.html.erb +12 -12
  100. data/app/views/decidim/meetings/admin/agenda/_agenda_item_child.html.erb +8 -8
  101. data/app/views/decidim/meetings/admin/agenda/_agenda_item_child_template.html.erb +1 -1
  102. data/app/views/decidim/meetings/admin/agenda/_agenda_item_fields.html.erb +3 -3
  103. data/app/views/decidim/meetings/admin/agenda/_form.html.erb +54 -50
  104. data/app/views/decidim/meetings/admin/agenda/edit.html.erb +18 -6
  105. data/app/views/decidim/meetings/admin/agenda/new.html.erb +17 -5
  106. data/app/views/decidim/meetings/admin/invite_join_meeting_mailer/invite.html.erb +11 -2
  107. data/app/views/decidim/meetings/admin/invites/_form.html.erb +38 -28
  108. data/app/views/decidim/meetings/admin/invites/index.html.erb +77 -81
  109. data/app/views/decidim/meetings/admin/meeting_closes/_form.html.erb +26 -28
  110. data/app/views/decidim/meetings/admin/meeting_closes/edit.html.erb +17 -5
  111. data/app/views/decidim/meetings/admin/meeting_copies/new.html.erb +17 -6
  112. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +76 -83
  113. data/app/views/decidim/meetings/admin/meetings/_service.html.erb +14 -10
  114. data/app/views/decidim/meetings/admin/meetings/_services.html.erb +9 -5
  115. data/app/views/decidim/meetings/admin/meetings/edit.html.erb +17 -7
  116. data/app/views/decidim/meetings/admin/meetings/index.html.erb +133 -129
  117. data/app/views/decidim/meetings/admin/meetings/new.html.erb +16 -6
  118. data/app/views/decidim/meetings/admin/poll/_answer_option.html.erb +1 -1
  119. data/app/views/decidim/meetings/admin/poll/_answer_option_template.html.erb +1 -1
  120. data/app/views/decidim/meetings/admin/poll/_form.html.erb +17 -32
  121. data/app/views/decidim/meetings/admin/poll/_question.html.erb +81 -75
  122. data/app/views/decidim/meetings/admin/poll/edit.html.erb +28 -8
  123. data/app/views/decidim/meetings/admin/registrations/_form.html.erb +32 -55
  124. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +59 -26
  125. data/app/views/decidim/meetings/directory/meetings/index.html.erb +15 -20
  126. data/app/views/decidim/meetings/directory/meetings/index.js.erb +1 -23
  127. data/app/views/decidim/meetings/layouts/_aside_block.html.erb +8 -0
  128. data/app/views/decidim/meetings/layouts/live_event.html.erb +20 -19
  129. data/app/views/decidim/meetings/live_events/show.html.erb +4 -5
  130. data/app/views/decidim/meetings/meeting_closes/_form.html.erb +3 -10
  131. data/app/views/decidim/meetings/meeting_closes/edit.html.erb +17 -21
  132. data/app/views/decidim/meetings/meetings/_actions.html.erb +6 -0
  133. data/app/views/decidim/meetings/meetings/_add_to_calendar_modal.html.erb +17 -0
  134. data/app/views/decidim/meetings/meetings/_form.html.erb +26 -34
  135. data/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +3 -22
  136. data/app/views/decidim/meetings/meetings/_meeting.html.erb +74 -0
  137. data/app/views/decidim/meetings/meetings/_meeting_agenda.html.erb +28 -26
  138. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +98 -0
  139. data/app/views/decidim/meetings/meetings/_meeting_minutes.html.erb +23 -36
  140. data/app/views/decidim/meetings/meetings/edit.html.erb +17 -21
  141. data/app/views/decidim/meetings/meetings/index.html.erb +15 -33
  142. data/app/views/decidim/meetings/meetings/index.js.erb +1 -23
  143. data/app/views/decidim/meetings/meetings/new.html.erb +17 -21
  144. data/app/views/decidim/meetings/meetings/show.html.erb +8 -167
  145. data/app/views/decidim/meetings/polls/answers/_multiple_option.html.erb +9 -13
  146. data/app/views/decidim/meetings/polls/answers/_single_option.html.erb +4 -4
  147. data/app/views/decidim/meetings/polls/answers/create.js.erb +1 -1
  148. data/app/views/decidim/meetings/polls/questions/_index.html.erb +1 -1
  149. data/app/views/decidim/meetings/polls/questions/_index_admin.html.erb +5 -5
  150. data/app/views/decidim/meetings/polls/questions/_published_question.html.erb +9 -11
  151. data/app/views/decidim/meetings/polls/questions/_question.html.erb +3 -3
  152. data/app/views/decidim/meetings/polls/questions/index_admin.js.erb +1 -1
  153. data/app/views/decidim/meetings/shared/_filters.html.erb +20 -0
  154. data/app/views/decidim/meetings/shared/_index.html.erb +24 -0
  155. data/app/views/decidim/meetings/shared/_index.js.erb +16 -0
  156. data/app/views/decidim/meetings/shared/_meetings.html.erb +33 -0
  157. data/app/views/decidim/meetings/shared/_meetings_aside.html.erb +18 -0
  158. data/app/views/decidim/meetings/versions/show.html.erb +14 -4
  159. data/app/views/decidim/participatory_spaces/_conference_venues.html.erb +13 -15
  160. data/config/assets.rb +0 -2
  161. data/config/locales/ar.yml +6 -94
  162. data/config/locales/bg.yml +0 -673
  163. data/config/locales/ca.yml +52 -75
  164. data/config/locales/cs.yml +48 -71
  165. data/config/locales/de.yml +53 -76
  166. data/config/locales/el.yml +48 -51
  167. data/config/locales/en.yml +51 -74
  168. data/config/locales/es-MX.yml +50 -73
  169. data/config/locales/es-PY.yml +48 -71
  170. data/config/locales/es.yml +53 -76
  171. data/config/locales/eu.yml +53 -76
  172. data/config/locales/fi-plain.yml +46 -69
  173. data/config/locales/fi.yml +44 -67
  174. data/config/locales/fr-CA.yml +43 -69
  175. data/config/locales/fr.yml +48 -71
  176. data/config/locales/ga-IE.yml +2 -16
  177. data/config/locales/gl.yml +5 -63
  178. data/config/locales/hu.yml +6 -92
  179. data/config/locales/id-ID.yml +4 -60
  180. data/config/locales/is-IS.yml +1 -22
  181. data/config/locales/it.yml +6 -86
  182. data/config/locales/ja.yml +45 -74
  183. data/config/locales/lb.yml +6 -67
  184. data/config/locales/lt.yml +42 -65
  185. data/config/locales/lv.yml +4 -61
  186. data/config/locales/nl.yml +4 -92
  187. data/config/locales/no.yml +4 -80
  188. data/config/locales/pl.yml +2 -199
  189. data/config/locales/pt-BR.yml +4 -200
  190. data/config/locales/pt.yml +5 -85
  191. data/config/locales/ro-RO.yml +11 -81
  192. data/config/locales/ru.yml +5 -60
  193. data/config/locales/sk.yml +4 -61
  194. data/config/locales/sl.yml +0 -3
  195. data/config/locales/sr-CS.yml +0 -6
  196. data/config/locales/sv.yml +14 -94
  197. data/config/locales/tr-TR.yml +5 -78
  198. data/config/locales/uk.yml +5 -53
  199. data/config/locales/zh-CN.yml +3 -70
  200. data/config/locales/zh-TW.yml +24 -51
  201. data/db/migrate/20201016065302_fix_meetings_registration_terms.rb +1 -1
  202. data/db/migrate/20230427105701_change_types_and_registration_types_on_meetings.rb +49 -0
  203. data/lib/decidim/meetings/admin_engine.rb +2 -2
  204. data/lib/decidim/meetings/component.rb +4 -216
  205. data/lib/decidim/meetings/content_blocks/registry_manager.rb +17 -0
  206. data/lib/decidim/meetings/directory_engine.rb +4 -6
  207. data/lib/decidim/meetings/engine.rb +62 -27
  208. data/lib/decidim/meetings/meeting_serializer.rb +3 -3
  209. data/lib/decidim/meetings/seeds.rb +188 -0
  210. data/lib/decidim/meetings/test/factories.rb +124 -54
  211. data/lib/decidim/meetings/test/notifications_handling.rb +3 -3
  212. data/lib/decidim/meetings/test/translated_event.rb +1 -1
  213. data/lib/decidim/meetings/version.rb +1 -1
  214. metadata +58 -58
  215. data/app/cells/decidim/meetings/content_blocks/highlighted_meetings/elements.erb +0 -16
  216. data/app/cells/decidim/meetings/content_blocks/highlighted_meetings/heading.erb +0 -1
  217. data/app/cells/decidim/meetings/content_blocks/upcoming_meetings/show.erb +0 -26
  218. data/app/cells/decidim/meetings/content_blocks/upcoming_meetings_cell.rb +0 -63
  219. data/app/cells/decidim/meetings/join_meeting_button/registration_confirm.erb +0 -31
  220. data/app/cells/decidim/meetings/meeting_highlighted_list_item/show.erb +0 -21
  221. data/app/cells/decidim/meetings/meeting_highlighted_list_item_cell.rb +0 -10
  222. data/app/cells/decidim/meetings/meeting_list_item/show.erb +0 -14
  223. data/app/cells/decidim/meetings/meeting_list_item_cell.rb +0 -44
  224. data/app/cells/decidim/meetings/meeting_m/address.erb +0 -5
  225. data/app/cells/decidim/meetings/meeting_m/data.erb +0 -2
  226. data/app/cells/decidim/meetings/meeting_m/date.erb +0 -8
  227. data/app/cells/decidim/meetings/meeting_m/footer.erb +0 -9
  228. data/app/cells/decidim/meetings/meeting_m/multiple_dates.erb +0 -17
  229. data/app/cells/decidim/meetings/meeting_m/single_date.erb +0 -9
  230. data/app/cells/decidim/meetings/meeting_m/tags.erb +0 -1
  231. data/app/cells/decidim/meetings/meeting_m_cell.rb +0 -121
  232. data/app/cells/decidim/meetings/meeting_s/show.erb +0 -27
  233. data/app/controllers/concerns/decidim/meetings/filterable.rb +0 -27
  234. data/app/controllers/decidim/meetings/widgets_controller.rb +0 -30
  235. data/app/packs/stylesheets/decidim/meetings/_header.scss +0 -52
  236. data/app/packs/stylesheets/decidim/meetings/_main.scss +0 -178
  237. data/app/packs/stylesheets/decidim/meetings/_meetings.scss +0 -2
  238. data/app/queries/decidim/meetings/admin/invites.rb +0 -60
  239. data/app/views/decidim/meetings/admin/meeting_closes/proposals_picker.html.erb +0 -1
  240. data/app/views/decidim/meetings/directory/meetings/_filters.html.erb +0 -34
  241. data/app/views/decidim/meetings/directory/meetings/_meetings.html.erb +0 -26
  242. data/app/views/decidim/meetings/meeting_closes/proposals_picker.html.erb +0 -1
  243. data/app/views/decidim/meetings/meetings/_calendar_modal.html.erb +0 -26
  244. data/app/views/decidim/meetings/meetings/_filters.html.erb +0 -40
  245. data/app/views/decidim/meetings/meetings/_filters_small_view.html.erb +0 -18
  246. data/app/views/decidim/meetings/meetings/_meetings.html.erb +0 -48
  247. data/app/views/decidim/meetings/versions/index.html.erb +0 -8
  248. data/app/views/decidim/participatory_spaces/_upcoming_meeting_for_card.html.erb +0 -4
  249. data/config/locales/he-IL.yml +0 -1
  250. data/decidim-meetings.gemspec +0 -36
  251. data/lib/decidim/meetings/seeds/city.jpeg +0 -0
@@ -1,17 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "decidim/components/namer"
3
4
  require "decidim/core/test/factories"
4
5
  require "decidim/forms/test/factories"
5
6
  require "decidim/participatory_processes/test/factories"
6
7
 
7
8
  FactoryBot.define do
8
9
  factory :meeting_component, parent: :component do
9
- transient do
10
- skip_injection { false }
11
- end
12
- name { generate_component_name(participatory_space.organization.available_locales, :meetings, skip_injection: skip_injection) }
10
+ name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :meetings).i18n_name }
13
11
  manifest_name { :meetings }
14
- participatory_space { create(:participatory_process, :with_steps, organization: organization, skip_injection: skip_injection) }
12
+ participatory_space { create(:participatory_process, :with_steps, organization:) }
15
13
 
16
14
  trait :with_creation_enabled do
17
15
  settings do
@@ -27,10 +25,40 @@ FactoryBot.define do
27
25
  skip_injection { false }
28
26
  end
29
27
 
30
- title { generate_localized_title(:meeting_title, skip_injection: skip_injection) }
31
- description { generate_localized_description(:meeting_description, skip_injection: skip_injection) }
32
- location { generate_localized_description(:meeting_location, skip_injection: skip_injection) }
33
- location_hints { generate_localized_description(:meeting_location_hints, skip_injection: skip_injection) }
28
+ title do
29
+ if skip_injection
30
+ Decidim::Faker::Localized.localized { generate(:title) }
31
+ else
32
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings TITLE\")</script> #{generate(:title)}" }
33
+ end
34
+ end
35
+ description do
36
+ Decidim::Faker::Localized.wrapped("<p>", "</p>") do
37
+ if skip_injection
38
+ Decidim::Faker::Localized.localized { generate(:title) }
39
+ else
40
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings description\");</script> #{generate(:title)}" }
41
+ end
42
+ end
43
+ end
44
+ location do
45
+ Decidim::Faker::Localized.wrapped("<p>", "</p>") do
46
+ if skip_injection
47
+ Decidim::Faker::Localized.localized { generate(:title) }
48
+ else
49
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings location\");</script> #{generate(:title)}" }
50
+ end
51
+ end
52
+ end
53
+ location_hints do
54
+ Decidim::Faker::Localized.wrapped("<p>", "</p>") do
55
+ if skip_injection
56
+ Decidim::Faker::Localized.localized { generate(:title) }
57
+ else
58
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings location_hints\");</script> #{generate(:title)}" }
59
+ end
60
+ end
61
+ end
34
62
  address { Faker::Lorem.sentence(word_count: 3) }
35
63
  latitude { Faker::Address.latitude }
36
64
  longitude { Faker::Address.longitude }
@@ -40,10 +68,18 @@ FactoryBot.define do
40
68
  transparent { true }
41
69
  questionnaire { build(:questionnaire) }
42
70
  registration_form_enabled { true }
43
- registration_terms { generate_localized_description(:meeting_registration_terms, skip_injection: skip_injection) }
71
+ registration_terms do
72
+ Decidim::Faker::Localized.wrapped("<p>", "</p>") do
73
+ if skip_injection
74
+ Decidim::Faker::Localized.localized { generate(:title) }
75
+ else
76
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings registration_terms\");</script> #{generate(:title)}" }
77
+ end
78
+ end
79
+ end
44
80
  registration_type { :on_this_platform }
45
81
  type_of_meeting { :in_person }
46
- component { build(:meeting_component) }
82
+ component { build(:component, manifest_name: "meetings") }
47
83
  iframe_access_level { :all }
48
84
  iframe_embed_type { :none }
49
85
 
@@ -78,7 +114,7 @@ FactoryBot.define do
78
114
  end
79
115
 
80
116
  trait :not_official do
81
- author { create(:user, organization: component.organization, skip_injection: skip_injection) if component }
117
+ author { create(:user, organization: component.organization) if component }
82
118
  end
83
119
 
84
120
  trait :with_services do
@@ -89,7 +125,7 @@ FactoryBot.define do
89
125
  end
90
126
 
91
127
  after(:build) do |meeting, evaluator|
92
- meeting.services = evaluator.services || build_list(:service, 2, meeting: meeting, skip_injection: evaluator.skip_injection)
128
+ meeting.services = evaluator.services || build_list(:service, 2, meeting:)
93
129
  end
94
130
  end
95
131
 
@@ -97,15 +133,21 @@ FactoryBot.define do
97
133
 
98
134
  trait :user_group_author do
99
135
  author do
100
- create(:user, organization: component.organization, skip_injection: skip_injection) if component
136
+ create(:user, organization: component.organization) if component
101
137
  end
102
138
  user_group do
103
- create(:user_group, :verified, organization: component.organization, users: [author], skip_injection: skip_injection) if component
139
+ create(:user_group, :verified, organization: component.organization, users: [author]) if component
104
140
  end
105
141
  end
106
142
 
107
143
  trait :closed do
108
- closing_report { generate_localized_title(:meeting_closing_report, skip_injection: skip_injection) }
144
+ closing_report do
145
+ if skip_injection
146
+ Decidim::Faker::Localized.localized { generate(:title) }
147
+ else
148
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings registration_terms\");</script> #{generate(:title)}" }
149
+ end
150
+ end
109
151
  attendees_count { rand(50) }
110
152
  contributions_count { rand(50) }
111
153
  attending_organizations { Array.new(3) { Faker::TvShows::GameOfThrones.house }.join(", ") }
@@ -124,7 +166,13 @@ FactoryBot.define do
124
166
  registrations_enabled { true }
125
167
  available_slots { 10 }
126
168
  reserved_slots { 4 }
127
- registration_terms { generate_localized_title(:meeting_registration_terms, skip_injection: skip_injection) }
169
+ registration_terms do
170
+ if skip_injection
171
+ Decidim::Faker::Localized.localized { generate(:title) }
172
+ else
173
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings registration_terms\");</script> #{generate(:title)}" }
174
+ end
175
+ end
128
176
  end
129
177
 
130
178
  trait :past do
@@ -177,9 +225,6 @@ FactoryBot.define do
177
225
  end
178
226
 
179
227
  factory :registration, class: "Decidim::Meetings::Registration" do
180
- transient do
181
- skip_injection { false }
182
- end
183
228
  meeting
184
229
  user
185
230
  end
@@ -188,13 +233,20 @@ FactoryBot.define do
188
233
  transient do
189
234
  skip_injection { false }
190
235
  end
236
+
191
237
  meeting
192
- title { generate_localized_title(:meeting_agenda_title, skip_injection: skip_injection) }
238
+ title do
239
+ if skip_injection
240
+ Decidim::Faker::Localized.localized { generate(:title) }
241
+ else
242
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings agenda title\");</script> #{generate(:title)}" }
243
+ end
244
+ end
193
245
  visible { true }
194
246
 
195
247
  trait :with_agenda_items do
196
- after(:create) do |agenda, evaluator|
197
- create_list(:agenda_item, 2, :with_children, agenda: agenda, skip_injection: evaluator.skip_injection)
248
+ after(:create) do |agenda, _evaluator|
249
+ create_list(:agenda_item, 2, :with_children, agenda:)
198
250
  end
199
251
  end
200
252
  end
@@ -203,27 +255,39 @@ FactoryBot.define do
203
255
  transient do
204
256
  skip_injection { false }
205
257
  end
258
+
206
259
  agenda
207
- title { generate_localized_title(:meeting_agenda_item_title, skip_injection: skip_injection) }
208
- description { generate_localized_description(:meeting_agenda_item_description, skip_injection: skip_injection) }
260
+ title do
261
+ if skip_injection
262
+ Decidim::Faker::Localized.localized { generate(:title) }
263
+ else
264
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings agenda item title\");</script> #{generate(:title)}" }
265
+ end
266
+ end
267
+ description do
268
+ Decidim::Faker::Localized.wrapped("<p>", "</p>") do
269
+ if skip_injection
270
+ Decidim::Faker::Localized.localized { generate(:title) }
271
+ else
272
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings agenda item descrition\");</script> #{generate(:title)}" }
273
+ end
274
+ end
275
+ end
209
276
  duration { 15 }
210
277
  position { 0 }
211
278
 
212
279
  trait :with_parent do
213
- parent { create(:agenda_item, agenda: agenda, skip_injection: skip_injection) }
280
+ parent { create(:agenda_item, agenda:) }
214
281
  end
215
282
 
216
283
  trait :with_children do
217
284
  after(:create) do |agenda_item, evaluator|
218
- create_list(:agenda_item, 2, parent: agenda_item, agenda: evaluator.agenda, skip_injection: evaluator.skip_injection)
285
+ create_list(:agenda_item, 2, parent: agenda_item, agenda: evaluator.agenda)
219
286
  end
220
287
  end
221
288
  end
222
289
 
223
290
  factory :invite, class: "Decidim::Meetings::Invite" do
224
- transient do
225
- skip_injection { false }
226
- end
227
291
  meeting
228
292
  user
229
293
  sent_at { 1.day.ago }
@@ -243,23 +307,32 @@ FactoryBot.define do
243
307
  transient do
244
308
  skip_injection { false }
245
309
  end
310
+
246
311
  meeting
247
- title { generate_localized_title(:meeting_service_title, skip_injection: skip_injection) }
248
- description { generate_localized_description(:meeting_service_description, skip_injection: skip_injection) }
312
+ title do
313
+ if skip_injection
314
+ Decidim::Faker::Localized.localized { generate(:title) }
315
+ else
316
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings agenda title\");</script> #{generate(:title)}" }
317
+ end
318
+ end
319
+ description do
320
+ Decidim::Faker::Localized.wrapped("<p>", "</p>") do
321
+ if skip_injection
322
+ Decidim::Faker::Localized.localized { generate(:title) }
323
+ else
324
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings agenda title\");</script> #{generate(:title)}" }
325
+ end
326
+ end
327
+ end
249
328
  end
250
329
 
251
330
  factory :poll, class: "Decidim::Meetings::Poll" do
252
- transient do
253
- skip_injection { false }
254
- end
255
331
  meeting
256
332
  end
257
333
 
258
334
  factory :meetings_poll_questionnaire, class: "Decidim::Meetings::Questionnaire" do
259
- transient do
260
- skip_injection { false }
261
- end
262
- questionnaire_for { build(:poll, skip_injection: skip_injection) }
335
+ questionnaire_for { build(:poll) }
263
336
  end
264
337
 
265
338
  factory :meetings_poll_question, class: "Decidim::Meetings::Question" do
@@ -268,13 +341,19 @@ FactoryBot.define do
268
341
  options { [] }
269
342
  end
270
343
 
271
- body { generate_localized_title(:meeting_poll_question_body, skip_injection: skip_injection) }
344
+ body do
345
+ if skip_injection
346
+ Decidim::Faker::Localized.localized { generate(:title) }
347
+ else
348
+ Decidim::Faker::Localized.localized { "<script>alert(\"Meetings agenda title\");</script> #{generate(:title)}" }
349
+ end
350
+ end
272
351
  position { 0 }
273
352
  status { 0 }
274
353
  question_type { Decidim::Meetings::Question::QUESTION_TYPES.first }
275
354
  questionnaire factory: :meetings_poll_questionnaire
276
355
  answer_options do
277
- Array.new(3).collect { build(:meetings_poll_answer_option, question: nil, skip_injection: skip_injection) }
356
+ Array.new(3).collect { build(:meetings_poll_answer_option, question: nil) }
278
357
  end
279
358
 
280
359
  trait :unpublished do
@@ -291,27 +370,18 @@ FactoryBot.define do
291
370
  end
292
371
 
293
372
  factory :meetings_poll_answer, class: "Decidim::Meetings::Answer" do
294
- transient do
295
- skip_injection { false }
296
- end
297
373
  questionnaire factory: :meetings_poll_questionnaire
298
- question { create(:meetings_poll_question, questionnaire: questionnaire, skip_injection: skip_injection) }
299
- user { create(:user, organization: questionnaire.questionnaire_for.organization, skip_injection: skip_injection) }
374
+ question { create(:meetings_poll_question, questionnaire:) }
375
+ user { create(:user, organization: questionnaire.questionnaire_for.organization) }
300
376
  end
301
377
 
302
378
  factory :meetings_poll_answer_option, class: "Decidim::Meetings::AnswerOption" do
303
- transient do
304
- skip_injection { false }
305
- end
306
- question { create(:meetings_poll_question, skip_injection: skip_injection) }
379
+ question { create(:meetings_poll_question) }
307
380
  body { generate_localized_title }
308
381
  end
309
382
 
310
383
  factory :meetings_poll_answer_choice, class: "Decidim::Meetings::AnswerChoice" do
311
- transient do
312
- skip_injection { false }
313
- end
314
384
  answer factory: :meetings_poll_answer
315
- answer_option { create(:meetings_poll_answer_option, question: answer.question, skip_injection: skip_injection) }
385
+ answer_option { create(:meetings_poll_answer_option, question: answer.question) }
316
386
  end
317
387
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  shared_examples_for "emits an upcoming notificaton" do
4
- context "when it's a future meeting" do
4
+ context "when it is a future meeting" do
5
5
  let(:future_start_date) { 3.days.from_now }
6
6
 
7
7
  before do
@@ -21,14 +21,14 @@ shared_examples_for "emits an upcoming notificaton" do
21
21
  end
22
22
  end
23
23
 
24
- context "when it's a past meeting" do
24
+ context "when it is a past meeting" do
25
25
  let(:past_start_date) { 1.day.ago }
26
26
 
27
27
  before do
28
28
  meeting.start_time = past_start_date
29
29
  end
30
30
 
31
- it "doesn't schedule an upcoming meeting notification" do
31
+ it "does not schedule an upcoming meeting notification" do
32
32
  expect(Decidim::Meetings::UpcomingMeetingNotificationJob).not_to receive(:generate_checksum)
33
33
  expect(Decidim::Meetings::UpcomingMeetingNotificationJob).not_to receive(:set)
34
34
  expect(Decidim::Meetings::UpcomingMeetingNotificationJob).not_to receive(:perform_later)
@@ -4,7 +4,7 @@ shared_examples_for "a translated meeting event" do
4
4
  describe "translated notifications" do
5
5
  let(:en_body) { "This is Sparta!" }
6
6
  let(:body) { { en: en_body, machine_translations: { ca: "C'est Sparta!" } } }
7
- let(:participatory_process) { create :participatory_process, organization: organization }
7
+ let(:participatory_process) { create :participatory_process, organization: }
8
8
  let(:meeting_component) { create(:meeting_component, participatory_space: participatory_process) }
9
9
  let(:translatable) { true }
10
10
  let(:en_version) { resource.description["en"] }
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-meetings version.
5
5
  module Meetings
6
6
  def self.version
7
- "0.27.10"
7
+ "0.28.0.rc4"
8
8
  end
9
9
  end
10
10
  end