Commit Graph

93 Commits

Author SHA1 Message Date
Gabriel Grubba 43414abf83
FIX: `TopicTagsChanged` trigger not working with multiple tags (#29961)
* FIX: `TopicTagsChanged` trigger not working with multiple tags

The check for when had multiple tags was being exclusive, you had to have all tags to trigger the automation, now it's inclusive, you can trigger the automation if you have any of the tags.

* DEV: add specs for when having multiple categories

* DEV: changed to use unions and intersections for tags

added more tests to check for multiple tags
2024-11-27 14:16:29 -03:00
Jarek Radosz 5db0eba0a8
DEV: Autofix (w/ manual follow up) various qunit lints (#29950) 2024-11-27 13:02:55 +01:00
Discourse Translator Bot b9f183e2c3
Update translations (#29934) 2024-11-26 23:14:56 +01:00
Loïc Guitaut f87333c4e0 DEV: Refactor `DiscourseAutomation::DestroyAutomation` a bit
Small followup to 932bd6b.
2024-11-22 16:05:31 +01:00
David Taylor 6f7c581a80
DEV: Bump `@discourse/lint-configs` and autofix (#29847)
In particular, this applies:

- new `discourse/no-implicit-this` template-lint rule
- `init`/`willDestroy` ordering enforcement
- `lines-between-class-members`
2024-11-20 14:15:04 +00:00
Discourse Translator Bot abfd065ff0
Update translations (#29835) 2024-11-20 00:21:25 +01:00
David Taylor 32665cf9dd
DEV: Consolidate i18n import paths (#29804)
Enables our new eslint rules which enforce consistent i18n imports. For more info, see 0d58b40cd7
2024-11-19 20:45:18 +00:00
Jarek Radosz 187b7d74fb
DEV: Fix linting (#29826) 2024-11-19 21:43:44 +01:00
Joffrey JAFFEUX 352777a074
DEV: adds a page object for automation page (#29732)
This page object also attempts to make the update automation more resilient as we are seeing flakey specs on this codepath. The solution for now is to ensure we have the sequence: click button/button is loading/ button has finished loading.

---------

Co-authored-by: Alan Guo Xiang Tan <gxtan1990@gmail.com>
2024-11-13 11:49:38 +09:00
Loïc Guitaut d637bd6519
DEV: Don’t replace Rails logger in specs (#29721)
Instead of replacing the Rails logger in specs, we can instead use
`#broadcast_to` which has been introduced in Rails 7.
2024-11-13 08:47:39 +08:00
Discourse Translator Bot d7503a6153
Update translations (#29715) 2024-11-12 14:54:38 +01:00
Jarek Radosz de6d575d40
DEV: Convert all uses of `exists` to qunit-dom (#29667) 2024-11-10 01:30:33 +01:00
Alan Guo Xiang Tan 57f4176b57
DEV: Bump rubocop_discourse (#29608) 2024-11-06 06:27:49 +08:00
Discourse Translator Bot 8a201c1e92
Update translations (#29595) 2024-11-05 16:55:45 +01:00
Joffrey JAFFEUX 932bd6ba85
UX: logs when an automation is destroyed (#29565)
A `UserHistory` entry will now be created when an automation is destroyed. This is visible in `/admin/logs/staff_action_logs`. id, name, trigger and script will be logged.

This commit also creates a service `DestroyAutomation` to hold all the destroy automation logic.

---------
Co-authored-by: Martin Brennan <mjrbrennan@gmail.com>
2024-11-04 11:12:18 +09:00
Jarek Radosz b81055a6d4
DEV: Convert more `equal` assertions (#29554)
…to either qunit-dom or `strictEqual`
2024-11-03 21:04:38 +01:00
Discourse Translator Bot 4d0ed2e146
Update translations (#29467) 2024-10-29 15:31:41 +01:00
Jarek Radosz 587264f9d2
DEV: Remove extraneous spec code (#29386)
namely `js: true`, requiring `rails_helper`, and default `freeze_time` args
2024-10-24 14:15:32 +02:00
Jarek Radosz 44d1a818a3
DEV: Avoid a hacky workaround in d-toggle-switch specs (#29376) 2024-10-23 23:11:19 +02:00
Kris d471c01ff6
UX: simplify and shorten new script flow for automations (#29178) 2024-10-23 14:04:17 -04:00
Discourse Translator Bot 28c5fb94d3
Update translations (#29335) 2024-10-22 22:44:33 +09:00
Discourse Translator Bot e5f2416eff
Update translations (#29212) 2024-10-16 17:52:01 +09:00
Bianca Nenciu 33a4ab13b5
DEV: Set bigint sequences to start at MAX_INT (#28961)
This helps uncover issues with bigint columns that are joined with int
columns. It also introduces a temporary API for plugins to migrate int
columns to bigint in test environment to make tests pass.
2024-10-10 19:28:45 +03:00
Gabriel Grubba 53f9c81790
FEATURE: add `trigger_with_pms` option to `topic tags changed` automation trigger (#29122) 2024-10-09 09:51:40 -03:00
Discourse Translator Bot a4531be580
Update translations (#29123) 2024-10-08 20:21:43 +02:00
Joffrey JAFFEUX 268213a93c
FIX: adds post_quote as placeholder (#29083)
The script `send_chat_message` when used with the `post_created_edited` trigger now accepts `{{post_quote}}` as placeholder for the value of `message`.

This is made possible by a new method in `utils`. Usage:

```ruby
  placeholders["foo"] = utils.build_quote(post)
```
2024-10-08 21:55:11 +09:00
Discourse Translator Bot 76ad581f67 Update translations 2024-10-02 08:55:44 +02:00
Régis Hanol 252dcfbfa6
FIX: create an automation with forced_triggerable enabled (#29030)
When trying to create a new automation based on a scriptable that has "force_triggerable" enable, it would break because of a typo in the code.

This fixes the typo and add a spec to ensure this code path is tested.
2024-09-30 17:42:00 +02:00
Gabriel Grubba e926a07c83
FEATURE: increasing name length in automation (#28945)
Updates from 30 to 100 the maximum length of the name of an automation.

Adds tests for validating the maximum length of the name of an automation.
2024-09-17 13:16:44 -03:00
Osama Sayegh 4406bbb020
FIX: Prevent recurring automations from getting stalled under specific conditions (#28913)
Under certain conditions, a recurring automation can end up in a state with no pending automation records, causing it to not execute again until manually triggered.

We use the `RRule` gem to calculate the next execution date and time for recurring automations. The gem takes the interval, frequency, start date, and a time range, and returns all dates/times within this range that meet the recurrence rule. For example:

```ruby
RRule::Rule
  .new("FREQ=DAILY;INTERVAL=1", dtstart: Time.parse("2023-01-01 07:30:00 UTC"))
  .between(Time.zone.now, Time.zone.now + 2.days)
# => [Sat, 14 Sep 2024 07:30:00.000000000 UTC +00:00, Sun, 15 Sep 2024 07:30:00.000000000 UTC +00:00]
```

However, if the time component of the first point provided to `.between()` is slightly ahead of the start date (e.g., `dtstart`), the first date/time returned by `RRule` can fall outside the specified range by the same subsecond amount. For instance:

```ruby
RRule::Rule
  .new("FREQ=DAILY;INTERVAL=1", dtstart: Time.parse("2023-01-01 07:30:00 UTC"))
  .between(Time.parse("2023-01-01 07:30:00.999 UTC"), Time.parse("2023-01-03 07:30:00 UTC"))
  .first
# => Sun, 01 Jan 2023 07:30:00.000000000 UTC +00:00
```

Here, the start date/time given to `.between()` is 999 milliseconds after 07:30:00, but the first date returned is exactly 07:30:00 without the 999 milliseconds. This causes the next recurring date to fall into the past if the automation executes within a subsecond of the start time, leading to the automation stalling.

I'm not sure why `RRule` does this, but it seems intentional judging by the source of the `.between()` method:

b9911b7147/lib/rrule/rule.rb (L28-L32)

This commit fixes the issue by selecting the first date ahead of the current time from the list returned by `RRule`, rather than the first date directly.

Internal topic: t/138045.
2024-09-16 18:23:26 +03:00
David Taylor e7e9c99568
DEV: Drop ScrollTracker component (#28911)
Restoring scroll position is now handled by the route-scroll-manager service, so this is unneeded
2024-09-13 19:19:40 +01:00
Kris a914d3230b
DEV: remap all core icons for fontawesome 6 upgrade (#28715)
Followup to 7d8974d02f

Co-authored-by: David Taylor <david@taylorhq.com>
2024-09-13 16:50:52 +01:00
Osama Sayegh 91ba2a4aab
DEV: Add debug logging for automation recurring trigger (#28829)
We're seeing a problem where some recurring automations end up in a state where they don't have any `pending_automations` records scheduled which effectively makes the recurring automation dead. We need to add some debugging to figure out what might be causing this problem.

Internal topic: t/138045.
2024-09-11 01:29:15 +03:00
Joffrey JAFFEUX ad7d5426d8
FIX: supports groups field in post_created_edited (#28783)
⚠️ This commit is a revert of a revert due to a migration which was causing `{}` metadata to be transformed into `{"value": [null]}`. The new migration shouldn't cause this and will also clean the existing errors, there shouldn't  be any data loss given the affected fields where not containing actual data. We might want to stop storing these empty fields in the future.

To achieve it, this commit does the following:
- create a new `groups field`, ideally we would have reused the existing group field, but many automations now have the expectation that this field will return a group id and not an array of group ids, which makes it a dangerous change
- alter the code in `post_created_edited` to use this new groups field and change the logic to use an array
- migrate the existing group fields post_created_edited automations to change name from `restricted_group` to `restricted_groups`, the component from `group` to `groups` and the metadata from `{"value": integer}` to `{"value": [integer]}`

<!-- NOTE: All pull requests should have tests (rspec in Ruby, qunit in JavaScript). If your code does not include test coverage, please include an explanation of why it was omitted. -->
2024-09-06 17:22:42 +02:00
Gabriel Grubba a98d3d40f2
FEATURE: Add user to topic_tags_changed event (#28714)
* FEATURE: Add user to topic_tags_changed event

Add user to topic_tags_changed event context
Update automation plugin with new arguments in event
Update tests for new arguments

relates to https://github.com/discourse/discourse-chat-integration/pull/214

* DEV: change variable name for better readability

changed `tags` to be payload and used `values_at` to get the values of the keys
2024-09-06 11:23:30 -03:00
Joffrey JAFFEUX 5f5680dbaf
Revert "FIX: supports groups field in post_created_edited (#28773)" (#28781)
This reverts commit eb3a1c7217.
2024-09-06 16:10:53 +02:00
Joffrey JAFFEUX eb3a1c7217
FIX: supports groups field in post_created_edited (#28773)
To achieve this this commit does the following:
- create a new `groups field, ideally we would have reused the existing group field, but many automations now have the expectation that this field will return a group id and not an array of group ids, which makes it a dangerous change
- alter the code in `post_created_edited` to use this new groups field and change the logic to use an array
- migrate the existing group fields post_created_edited automations to change name from `restricted_group` to `restricted_groups`, the component from `group` to `groups` and the metadata from `{"value": integer}` to `{"value": [integer]}`
2024-09-06 15:04:19 +02:00
Joffrey JAFFEUX 9b630c8cca
DEV: adds post_created_edited suport to chat (#28757) 2024-09-05 17:17:18 +02:00
Joffrey JAFFEUX 67ce50c141
FIX: creating an automation without script should error (#28752)
This commit ensure we are properly showing an error to the end user and not just a vague 500.
2024-09-05 11:18:38 +02:00
Joffrey JAFFEUX 1a96269be0
DEV: adds topic_url/topic_title placeholders (#28754)
`topic_tags_changed` trigger now fills the {{topic_url}} and {{topic_title}} placeholders. `topic_url` is the relative URL.
2024-09-05 11:18:26 +02:00
Joffrey JAFFEUX dc1afeac89
FIX: ensures message field is rendering placeholders (#28753)
A previous commit had broken this codepath, this commit ensures it's fixed and is adding a test. It's not testing the copy/paste behavior as fairly complex to test.
2024-09-05 11:18:21 +02:00
Joffrey JAFFEUX 0a1432e1cc
FIX: ensures global notices are destroyed on post created (#28684)
Prior to this fix we could exit early if tags was `[]` as `tags && (tags & post.topic.tags.map(&:name)).empty?` would have returned true. This commit ensures it's not the case anymore and adds a test for it.

Co-Authored-By: Martin Brennan <mjrbrennan@gmail.com>
2024-09-02 21:17:10 +02:00
Discourse Translator Bot b1e539c1b9
Update translations (#28682) 2024-09-02 18:00:43 +02:00
Martin Brennan 361e954c55
UX: Change admin plugins list to follow UI guidelines (#28478)
This commit introduces a little bit of duplication
since the old plugin UIs not using the new plugin show
page look different from ones like AI and Gamification
which have been converted. We can use the new admin
header component on the plugins list, but for the other
pages we are manually rendering a breadcrumb trail and
the list of plugin tabs.

Over time as we convert more plugins to use the new UI
guidelines and show page we can get rid of this duplication.
2024-08-30 14:53:36 +10:00
Discourse Translator Bot 68c9553251
Update translations (#28577) 2024-08-29 15:37:52 -04:00
Gabriel Grubba 0c9c7482b5
FIX: change `eq` to `match_array` in `topic_tags_changed_spec.rb` to solve flaky test (#28640)
The following test is flakey. We don't care about the order because we check if the tags are being sent.

```
Failure/Error: measurement = Benchmark.measure { example.run }

  expected: ["tag4", "tag5"]
       got: ["tag5", "tag4"]

  (compared using ==)
  
  ```
2024-08-29 11:25:58 -03:00
Roman Rizzi 715f49c3fe
FEATURE: Post created/edited trigger can skip posts created via email (#28615) 2024-08-28 17:34:35 -03:00
Joffrey JAFFEUX 6bdda3cb71
FIX: prevents creating post from impacting the app (#28518)
Create a topic can fail in many different ways and we don't want this to impact the rest of the application, the call will now be wrapped in a begin/rescue block and log an error if it fails.
2024-08-23 15:17:16 +02:00
Discourse Translator Bot 05e120a9f2
Update translations (#28246) 2024-08-13 16:31:24 +02:00
Gabriel Grubba 157c8e660a
FEATURE: Change tags sent in topic_tags_changed trigger in automation plugin (#28318)
* FEATURE: Change tags sent in topic_tags_changed trigger in discourse_automation

Before, it was sending the old tags and the current tags in topic.
Now, it sends the removed tags and the added tags in the topic.

* DEV: update `missing_tags` to be `removed_tags`

* DEV: add spacing for better readability
2024-08-12 14:05:16 -03:00