Commit Graph

20436 Commits

Author SHA1 Message Date
Javi Martín
321409ab0a Use fixture_paths instead of fixture_path
We were getting a warning since we upgraded to Rails 7.1:

> Rails 7.1 has deprecated the singular fixture_path in favour of an
> array.You should migrate to plural:
2025-05-20 15:38:51 +02:00
Javi Martín
24a77c6437 Remove references to ActionDispatch::IllegalStateError
We were getting a warning after upgrading to Rails 7.1:

```
DEPRECATION WARNING: ActionDispatch::IllegalStateError is deprecated
without replacement.
```
2025-05-20 15:38:51 +02:00
Javi Martín
f5221536a9 Update show_exceptions options in system tests
We were getting a deprecation warning after upgrading to Rails 7.1:

```
DEPRECATION WARNING: Setting action_dispatch.show_exceptions to true is
deprecated. Set to :all instead.
```

So we're passing `:all`.

I've checked whether we can remove the `:show_exceptions` tag completely
now that the new default option is `:rescuable`. The answer is "no" ;).
Removing the `:show_exceptions` tag makes the tests fail.
2025-05-20 15:38:51 +02:00
Javi Martín
931ccc04fb Pass a keyword argument to the serialize method
We were getting the following warning after upgrading to Rails 7.1:

```
Rendered shared/_social_media_meta_tags.html.erb
DEPRECATION WARNING: Passing the class as positional argument is
deprecated and will be removed in Rails 7.2.
Please pass the class as a keyword argument:
  serialize :metadata, type: Object
```
2025-05-20 15:38:51 +02:00
Javi Martín
65e4a64084 Use preview_paths instead of preview_path
We were getting a deprecation warning in the logs after upgrading to
Rails 7.1:

```
DEPRECATION WARNING: Using preview_path= option is deprecated and will
be removed in Rails 7.2. Please use preview_paths= instead.
```

So we're appending a path to the `preview_paths`, as recommended in the
guide to upgrade to Rails 7.1 [1].

[1] https://guides.rubyonrails.org/v7.1/upgrading_ruby_on_rails.html#support-multiple-preview-paths-for-actionmailer-preview
2025-05-20 15:38:51 +02:00
Javi Martín
ce62da1f88 Silence deprecation warnings in secrets
We were getting a ton of deprecation warnings:

```
DEPRECATION WARNING: `Rails.application.secrets` is deprecated in favor
of `Rails.application.credentials` and will be removed in Rails 7.2
```

However, we don't plan to replace the secrets with credentials in the
foreseeable future because it would affect existing Consul Democracy
installations, so for now we're simply silencing the warnings.
2025-05-20 15:38:51 +02:00
Javi Martín
3d11aa86ce Fix ActiveStorage::IntegrityError when attaching PDFs
This is an error we've only been able to reproduce on one specific
machine and only when using the development environment.

It looks like Rails 7.1.5.1 uses `ActiveStorage::PreviewImageJob` when
we attach a PDF. However, that raises an IntegrityError because we're
removing the metadata from PDFs. That is, the final PDF is no longer the
same PDF that was uploaded.

This issue wasn't present in the original Rails 7.1.0 release, but was
introduced in Rails 7.1.4 [1] and has already been fixed in Rails 7.2.0
[2].

So we're applying the same solution that was applied in Rails 7.2.0:
disabling automatic previews for PDFs when no variants require them by
changing a method in `ActiveStorage::Attachment`.

[1] See commit 6f729dd39 in https://github.com/rails/rails/
[2] See pull request 51351 in https://github.com/rails/rails/
2025-05-20 15:38:47 +02:00
Javi Martín
0b1cfcd5da Upgrade to Rails 7.1
We're disabling `action_controller.raise_on_missing_callback_actions`
because sometimes we include `before_action :something, only: actions`
in concerns, and we include these concerns in controllers that don't
have all these actions.

Note that Rails 7.1 logs to STDOUT by default [1]; we're re-adding the
condition `if ENV["RAILS_LOG_TO_STDOUT"].present?` because we're still
using files and we're rotating the logs to avoid running out of space.

Also note that the GraphQL controller test (which is actually a request
test, since it's got `type: :request`) that was raising an exception no
longer does it thanks to the new default value for the
`config.action_dispatch.show_exceptions` configuration option. So we're
updating the test accordingly. This option doesn't affect regular
controller tests (without the `type: :request` option), so in other
tests we're still checking exceptions.

[1] Pull request 47138 in https://github.com/rails/rails
2025-05-20 13:12:29 +02:00
Javi Martín
3eaa40892d Extract method in GraphQL controller test
This way we remove a bit of duplication and it makes it easier to add
proper requests to other tests, which we're about to do.
2025-05-20 13:12:29 +02:00
Javi Martín
6288450ab4 Use a real browser in disabled features multitenancy test
We were using a rack browser and testing the
`FeatureFlags::FeatureDisabled` exception was raised. However, we don't
test this exception in any other system tests; we only check it in
controller tests.

So we're using a real browser for consistency and because in Rails 7.1
this test is failing when enabling the new default option
`config.action_dispatch.show_exceptions = :rescuable` in the test
environment.
2025-05-20 13:12:29 +02:00
Javi Martín
bd4fdff3d4 Avoid executing .includes(...).order("ids.ordering").ids
Apparently, the `ids` method, which originally was implemented as
`pluck(:id)`, sometimes returned duplicate ids [1]. Fixing that issue
generated another issue [2] when combining `.includes` and `order`.
There was an attempt to fix it [3], but it still doesn't fix the case
where the ordering column belongs to an association [4].

This means that, when upgrading to Rails 7.1, calling `.ids` on
`budget.investments.includes(:heading).sort_by_random.for_render`
results in an invalid SQL statement:

```
ActiveRecord::StatementInvalid:
PG::GroupingError: ERROR:  column "ids.ordering" must appear in
the GROUP BY clause or be used in an aggregate function
  LINE 1: ... = $4 GROUP BY "budget_investments"."id" ORDER BY
  ids.orderi...
```

To solve it, we could once again use `.pluck(:id)` instead of `ids`, but
I'm not sure whether there would be a risk to get duplicate IDs in some
cases. We cannot call `.reorder` or `.unscope(:order)` either because we
need the IDs to be ordered randomly.

So we're removing the `includes(:heading)` part when getting the IDs.
Since using `includes` generates a separate query that doesn't affect
the query to get the IDs, removing it makes no difference.

Another option would be to remove the `for_render` call, since we're
including the headings to avoid the N+1 queries problem, but we're doing
so without benchmarks showing that it does actually make a difference.

[1] Issue 46455 in https://github.com/rails/rails
[2] Issue 48080 in https://github.com/rails/rails
[3] Pull request 48101 in https://github.com/rails/rails
[4] Issue 50263 in https://github.com/rails/rails
2025-05-20 13:12:29 +02:00
Sebastia
40625e9455 Merge pull request #5984 from consuldemocracy/dependabot/bundler/rack-2.2.14
Bump rack from 2.2.13 to 2.2.14
2025-05-09 10:23:43 +02:00
dependabot[bot]
60e6f6a3b0 Bump rack from 2.2.13 to 2.2.14
Bumps [rack](https://github.com/rack/rack) from 2.2.13 to 2.2.14.
- [Release notes](https://github.com/rack/rack/releases)
- [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rack/rack/compare/v2.2.13...v2.2.14)

---
updated-dependencies:
- dependency-name: rack
  dependency-version: 2.2.14
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-08 19:25:00 +00:00
Sebastia
d9271c9a43 Merge pull request #5966 from consuldemocracy/remove-foundation-rails-helper
Vendor foundation_rails_helper/form_builder.rb to drop gem dependency
2025-05-06 18:02:13 +02:00
taitus
e662c704ac Vendor Foundation form builder to remove gem dependency
The "foundation_rails_helper" gem is no longer maintained and is
incompatible with Rails 7.1. To avoid blocking the upgrade, we've vendored
the vendor/foundation_rails_helper/form_builder.rb as a copy of the
original FormBuilder class.

To mantain compatibility with auto_labels and button_class variables, that
are used in the original builder, we are overwriting in the foundation
form builder initializer.

The gem has been removed from the Gemfile and replaced with this vendored
fallback. This workaround is safe to remove once legacy Foundation CSS
support is dropped.

All vendored code retains the original MIT license and attribution.
2025-05-06 17:07:08 +02:00
Sebastia
e93d303b1e Merge pull request #5867 from consuldemocracy/dependabot/bundler/ros-apartment-3.2.0
Bump ros-apartment from 2.11.0 to 3.2.0
2025-05-05 16:42:04 +02:00
Javi Martín
2ed07ded67 Merge pull request #5969 from consuldemocracy/dependabot/bundler/nokogiri-1.18.8
Bump nokogiri from 1.18.4 to 1.18.8
2025-05-05 15:18:24 +02:00
Javi Martín
b2a81a8784 Merge pull request #5971 from consuldemocracy/dependabot/bundler/net-imap-0.5.7
Bump net-imap from 0.5.6 to 0.5.7
2025-05-05 15:15:43 +02:00
Sebastia
391d924ec0 Merge pull request #5830 from consuldemocracy/dependabot/bundler/globalize-7.0.0
Bump globalize from 6.3.0 to 7.0.0
2025-04-30 14:45:28 +02:00
dependabot[bot]
efd7317adb Bump net-imap from 0.5.6 to 0.5.7
Bumps [net-imap](https://github.com/ruby/net-imap) from 0.5.6 to 0.5.7.
- [Release notes](https://github.com/ruby/net-imap/releases)
- [Commits](https://github.com/ruby/net-imap/compare/v0.5.6...v0.5.7)

---
updated-dependencies:
- dependency-name: net-imap
  dependency-version: 0.5.7
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-29 01:54:51 +00:00
dependabot[bot]
b02bd9b117 Bump nokogiri from 1.18.4 to 1.18.8
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.18.4 to 1.18.8.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.18.4...v1.18.8)

---
updated-dependencies:
- dependency-name: nokogiri
  dependency-version: 1.18.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-22 04:55:49 +00:00
taitus
b07e429356 Remove monkey patch for connected_to in Rails 7
ros-apartment 3.0.0+ includes official support for connection handling in Rails 7,
so we no longer need to override `ActiveRecord::ConnectionHandling#connected_to`.

References: PR #194 and #243 in ros-apartment
2025-04-11 15:41:59 +02:00
dependabot[bot]
4d256b8a4e Bump ros-apartment from 2.11.0 to 3.2.0
Note we aren't updating concurrent-ruby (which Dependabot would have
updated) due to an incompatibility with Rails 7.0.

Bumps [ros-apartment](https://github.com/rails-on-services/apartment) from 2.11.0 to 3.2.0.
- [Release notes](https://github.com/rails-on-services/apartment/releases)
- [Changelog](https://github.com/rails-on-services/apartment/blob/development/legacy_CHANGELOG.md)
- [Commits](https://github.com/rails-on-services/apartment/compare/2.11.0...v3.2.0)

---
updated-dependencies:
- dependency-name: ros-apartment
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-11 15:41:45 +02:00
dependabot[bot]
6e90b0cdf4 Bump globalize from 6.3.0 to 7.0.0
Note we aren't updating concurrent-ruby (which Dependabot would have
updated) due to an incompatibility with Rails 7.0.

Bumps [globalize](https://github.com/globalize/globalize) from 6.3.0 to 7.0.0.
- [Release notes](https://github.com/globalize/globalize/releases)
- [Changelog](https://github.com/globalize/globalize/blob/main/CHANGELOG.md)
- [Commits](https://github.com/globalize/globalize/compare/v6.3.0...v7.0.0)

---
updated-dependencies:
- dependency-name: globalize
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-11 15:20:37 +02:00
cyrillefr
c7827136cd Replace link with button in mailing options 2025-04-10 15:54:46 +02:00
cyrillefr
30979b2e96 Replace link with button in author_actions
- modified corresponding spec
2025-04-10 12:41:02 +02:00
cyrillefr
c6f0a3761b Replace link with button in login items component
- modified related specs
- modified scss to keep new button same style as previous link
2025-04-10 12:41:02 +02:00
cyrillefr
bc912b53da Replace link with button in OmniAuth form component
- and modified spec
2025-04-10 12:40:34 +02:00
Sebastia
7aeae565df Merge pull request #5949 from consuldemocracy/release_2.3.1
Release version 2.3.1
2025-04-08 16:54:54 +02:00
taitus
bd0c880331 Release version 2.3.1 2025-04-08 16:41:48 +02:00
Sebastia
293f6974bb Merge pull request #5956 from consuldemocracy/i18n_crowdin
Update translations from Crowdin
2025-04-07 15:55:27 +02:00
taitus
30da0bc626 Update translations from Crowdin 2025-04-07 15:41:49 +02:00
Javi Martín
77c78d0507 Merge pull request #5954 from consuldemocracy/fix_crowdin_excluded_language
Fix language code for Spanish in Crowdin config
2025-04-04 12:32:15 +02:00
Javi Martín
715bc5ef05 Fix language code for Spanish in Crowdin config
We were using `es`, which is the code we use in `config/locales/`, but
Crowdin actually uses `es-ES`.
2025-04-04 12:22:52 +02:00
Javi Martín
3f9ae66e94 Merge pull request #5951 from consuldemocracy/labels_instead_of_placeholders
Reduce the number of fields with placeholders
2025-04-03 15:33:17 +02:00
Javi Martín
9dee0d9824 Use a hint instead of a placeholder in retire explanation
A hint is much easier to read than a placeholder.
2025-04-03 15:01:01 +02:00
Javi Martín
50e8153583 Use a legend instead of a label to group option fields
Using a label for a non-existent element ID was invalid HTML.
2025-04-03 15:01:01 +02:00
Javi Martín
c6f1974c45 Use labels in nested option fields
We were using a placeholder, which is way less accessible than a label.

One issue here (which also happened before, but is now more obvious) is
that, when adding several options, there will be many fields with the
same label.

Another issue is that, for some languages, we're using texts like "Add a
closed answer", which might be confusing because we might be editing an
existing answer. The proper solution would probably be using the text
"Option 1", "Option 2", ... I'm not doing so right now because I'm not
sure that's a good option and because changing the text would mean
losing the existing translations.
2025-04-03 15:01:01 +02:00
Javi Martín
9308189a00 Use number fields to enter number of votes
This way the fields are easier to use, and we can get rid of the
placeholders.

Note we're simplifying the `answer_result_value` in order to make it
easier to return `0` instead of `nil` when the field is empty.

Also note there's a small change of behavior here; previously, these
fields were empty by default, and now their value is `0` by default, so
blindly clicking the "Save" button would send `0` instead of an empty
value. I don't think it's a big deal, though, but we need to keep that
in mind.
2025-04-03 15:01:01 +02:00
Javi Martín
ff3ada780d Use fieldsets and legends in officing results form
We were using <h3> tags instead of a combination of <fieldset> and
<legend> tags to group fields together.
2025-04-03 15:01:01 +02:00
Javi Martín
31f413de61 Use labels in officing results form
Back when we added all the missing labels (changes that we merged in
commit c34cab282), we forgot about fields which had placeholdes, since
Axe doesn't report an error when there are placeholders but there aren't
labels.

In this case, we were using an invalid <label> tag for the question
options, and <h3> tags as labels for the votes.

Using standard labels solves the issue.
2025-04-03 15:00:46 +02:00
Javi Martín
1632990838 Extract component to render officing results form
In a couple of commits we're going to add some styles for this form, and
it's easier to know where to add these styles when there's a component.
2025-04-03 15:00:12 +02:00
Javi Martín
962aa388df Remove redundant placeholders in attachment fields
Saying that we're supposed to introduce a descriptive title in a field
labelled as "Title" is redundant. Besides, the text of the placeholder
was barely distinguishable, making it harder to fill in the form.
2025-04-03 15:00:12 +02:00
Javi Martín
bf06894043 Merge pull request #5950 from consuldemocracy/more_missing_expectations
Reduce the number of flaky tests
2025-04-03 13:37:42 +02:00
Javi Martín
4b3f58cf4c Don't create content after a visit in notifications test
We forgot to apply this change in commit f5f96ba86.

Note that, in this case, executing `proposal_notification.author.email`
in the middle of a test would also result in a database query. For some
reason (probably the same reason why the code that explicitly created
the author was added in this test but not in other moderation tests),
that doesn't seem to happen in other moderation tests, so for now we
aren't changing those ones.
2025-04-02 21:03:38 +02:00
Javi Martín
42bfd2fce2 Add missing expectations in hidden content tests
We were checking that we still were on the same page, which was true
even before finishing the request to restore the content.
2025-04-02 17:31:54 +02:00
Javi Martín
4183bfced6 Merge pull request #5896 from consuldemocracy/link_names
Add missing text to links with no text
2025-04-02 16:48:58 +02:00
Javi Martín
b08c279c31 Make links to annotation comments accessible
The link to the comments page was an "expand" icon, which was confusing
because it wasn't really expanding the contents of the sidebar but going
to an entirely different page. Furthermore, it didn't have any text for
people using screen readers, which is why Axe was reporting the
following accessibility error:

```
link-name: Links must have discernible text (serious)
https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI
The following 1 node violate this rule:

  Selector: #annotation-link > a
  HTML: <a href="/legislation/processes/75/draft_versions/30/annotations/8?sub_annotation_ids=">
          <span class="icon-expand" aria-hidden="true"></span>
        </a>
  Fix all of the following:
  - Element is in tab order and does not have accessible text
  Fix any of the following:
  - Element does not have text that is visible to screen readers
  - aria-label attribute does not exist or is empty
  - aria-labelledby attribute does not exist, references elements that
    do not exist or references elements that are empty
  - Element has no title attribute
```

So we're removing the icon and turning the "N comments" text into a
link, so it's easier to guess that the link takes us to the page showing
all the comments for this annotation.
2025-04-02 16:03:07 +02:00
Javi Martín
2f667a6225 Add missing expectation to annotations test
This expectations in this test were true both before and after clicking
on the `.icon-expand` link, so it was possible that the test finished
before the request generated by that click did.

So we're adding an extra expectation to make sure we're testing what we
want to test: the content of the page after the request has finished.
2025-04-02 16:03:07 +02:00
Javi Martín
da53a6acae Validate result publication enabled processes have a date
Just like we do with the rest of the phases.

The reason why we're making this change right now is that we were
getting an accessibility error with processes with no result publication
date:

```
link-name: Links must have discernible text (serious)
https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI
The following 1 node violate this rule:

  Selector: p:nth-child(6) > a
  HTML: <a href="/legislation/processes/39/result_publication">
          <strong></strong>
        </a>
  Fix all of the following:
  - Element is in tab order and does not have accessible text
  Fix any of the following:
  - Element does not have text that is visible to screen readers
  - aria-label attribute does not exist or is empty
  - aria-labelledby attribute does not exist, references elements that
    do not exist or references elements that are empty
  - Element has no title attribute
```
2025-04-02 16:03:07 +02:00