discourse/spec/fabricators
Osama Sayegh 3cadd6769e
FEATURE: Theme settings migrations (#24071)
This commit introduces a new feature that allows theme developers to manage the transformation of theme settings over time. Similar to Rails migrations, the theme settings migration system enables developers to write and execute migrations for theme settings, ensuring a smooth transition when changes are required in the format or structure of setting values.

Example use cases for the theme settings migration system:

1. Renaming a theme setting.

2. Changing the data type of a theme setting (e.g., transforming a string setting containing comma-separated values into a proper list setting).

3. Altering the format of data stored in a theme setting.

All of these use cases and more are now possible while preserving theme setting values for sites that have already modified their theme settings.

Usage:

1. Create a top-level directory called `migrations` in your theme/component, and then within the `migrations` directory create another directory called `settings`.

2. Inside the `migrations/settings` directory, create a JavaScript file using the format `XXXX-some-name.js`, where `XXXX` is a unique 4-digit number, and `some-name` is a descriptor of your choice that describes the migration.

3. Within the JavaScript file, define and export (as the default) a function called `migrate`. This function will receive a `Map` object and must also return a `Map` object (it's acceptable to return the same `Map` object that the function received).

4. The `Map` object received by the `migrate` function will include settings that have been overridden or changed by site administrators. Settings that have never been changed from the default will not be included.

5. The keys and values contained in the `Map` object that the `migrate` function returns will replace all the currently changed settings of the theme.

6. Migrations are executed in numerical order based on the XXXX segment in the migration filenames. For instance, `0001-some-migration.js` will be executed before `0002-another-migration.js`.

Here's a complete example migration script that renames a setting from `setting_with_old_name` to `setting_with_new_name`:

```js
// File name: 0001-rename-setting.js

export default function migrate(settings) {
  if (settings.has("setting_with_old_name")) {
    settings.set("setting_with_new_name", settings.get("setting_with_old_name"));
  }
  return settings;
}
```

Internal topic: t/109980
2023-11-02 08:10:15 +03:00
..
allowed_pm_users.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
api_key_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
associated_group_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
badge_fabricator.rb DEV: convert grant badge modal to component API (#23378) 2023-09-11 13:56:31 +08:00
bookmark_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
category_fabricator.rb UX: First pass at edit categories navigation modal for sidebar (#21963) 2023-06-07 12:09:30 +08:00
category_group_fabricator.rb
color_scheme_color_fabricator.rb
color_scheme_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
dimissed_topic_user.rb FEATURE: New way to dismiss new topics (#11927) 2021-02-04 11:27:34 +11:00
do_not_disturb_fabricator.rb FEATURE: Do not disturb (#11484) 2020-12-18 09:03:51 -06:00
email_change_request_fabricator.rb
email_log_fabricator.rb
email_token_fabricator.rb DEV: Hash tokens stored from email_tokens (#14493) 2021-11-25 09:34:39 +02:00
embeddable_host_fabricator.rb
external_upload_stub_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
flag_fabricator.rb
form_template_fabricator.rb FEATURE: support to initial values for form templates through /new-topic (#23313) 2023-08-29 18:41:33 -03:00
group_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
group_history_fabricator.rb
group_request_fabricator.rb
group_user_fabricator.rb
ignored_user_fabricator.rb DEV: Cleanup ignored user logic (#11107) 2020-11-03 12:38:54 +00:00
incoming_email_fabricator.rb DEV: Correctly tag heredocs (#16061) 2022-02-28 20:50:55 +01:00
incoming_link_fabricator.rb
invite_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
invited_user_fabricator.rb FEATURE: multiple use invite links (#9813) 2020-06-09 20:49:32 +05:30
like_fabricator.rb
muted_user.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
notification_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
optimized_image_fabricator.rb DEV: Fix OptimizedImage specs 2020-07-06 21:51:56 +02:00
permalink_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
post_action_fabricator.rb FIX: correct user serializer user method for extended serializer (#8590) 2019-12-19 09:48:01 -08:00
post_custom_field_fabricator.rb
post_detail_fabricator.rb
post_fabricator.rb UX: Add show more btn to reviewable item (#21579) 2023-06-01 11:55:27 -07:00
post_reply_key_fabricator.rb
post_revision_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
published_page_fabricator.rb FEATURE: allows published pages to be public (#10053) 2020-06-17 12:42:20 +02:00
push_subscription_fabricator.rb DEV: Skip push notifications for active online users (#19502) 2022-12-19 20:17:40 +00:00
reviewable_claimed_topic_fabricator.rb FEATURE: Claim Reviewables by Topic 2019-05-09 13:40:36 -04:00
reviewable_fabricator.rb UX: Add show more button to long post queued reviewables (#23075) 2023-08-14 10:11:30 -07:00
reviewable_score_fabricator.rb FEATURE: Notify responders of post removal (#15049) 2021-11-24 09:28:20 -06:00
screened_email_fabricator.rb DEV: find_each in CSV exports (#22573) 2023-08-17 12:33:52 +10:00
screened_ip_address_fabricator.rb DEV: find_each in CSV exports (#22573) 2023-08-17 12:33:52 +10:00
screened_url_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
search_log_fabricator.rb
shared_draft_fabricator.rb
sidebar_section_fabricator.rb DEV: configurable custom sidebar sections (#20057) 2023-02-03 14:44:40 +11:00
sidebar_section_link_fabricator.rb PERF: Eager load linkables when loading custom sidebar sections (#20490) 2023-03-01 07:39:35 +08:00
sidebar_url_fabricator.rb PERF: Eager load linkables when loading custom sidebar sections (#20490) 2023-03-01 07:39:35 +08:00
single_sign_on_record_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
skipped_email_log_fabricator.rb
tag_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
tag_group_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
tag_group_permission_fabricator.rb SECURITY: Only show tags to users with permission (#15148) 2021-12-01 10:26:56 +08:00
theme_fabricator.rb
theme_field_fabricator.rb FEATURE: Theme settings migrations (#24071) 2023-11-02 08:10:15 +03:00
theme_settings_migration_fabricator.rb FEATURE: Theme settings migrations (#24071) 2023-11-02 08:10:15 +03:00
topic_allowed_group_fabricator.rb
topic_allowed_user_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
topic_embed_fabricator.rb
topic_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
topic_tag_fabricator.rb
topic_timer_fabricator.rb DEV: Use dynamic/static fabricator attrs correctly (#9519) 2020-04-22 20:49:53 +02:00
topic_user_fabricator.rb FIX: Issues with incorrect unread and private message topic tracking state (#16474) 2022-04-19 11:37:01 +10:00
translation_override_fabricator.rb FEATURE: Warn about outdated translation overrides in admin dashboard (#22384) 2023-07-10 10:06:40 +08:00
upload_fabricator.rb FIX: dominant color not working for 16bit images (#20300) 2023-02-15 12:41:04 +11:00
user_action_fabricator.rb DEV: Remove PostAction/UserAction bookmark refs (#16681) 2022-05-10 10:42:18 +10:00
user_api_key_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
user_avatar_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
user_badge_fabricator.rb SECURITY: Restrict display of topic titles associated with user badges (#18768) 2022-10-27 11:26:14 +08:00
user_email_fabricator.rb
user_fabricator.rb FIX: correct bulk invite expire time for DST (#23073) 2023-08-18 12:33:40 -04:00
user_field_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
user_field_option_fabricator.rb.rb FIX: Validate value of custom dropdown user fields - dropdowns and multiple selects (#13890) 2021-07-30 13:50:47 -04:00
user_history_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
user_option_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
user_profile_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
user_second_factor_fabricator.rb DEV: Apply syntax_tree formatting to spec/* 2023-01-09 11:49:28 +00:00
user_security_key_fabricator.rb DEV: Refactor webauthn to support passkeys (1/3) (#23586) 2023-10-03 14:59:28 -04:00
user_status_fabricator.rb FEATURE: user status (#16875) 2022-05-27 13:15:14 +04:00
watched_word_fabricator.rb DEV: Use dynamic/static fabricator attrs correctly (#9519) 2020-04-22 20:49:53 +02:00
web_crawler_request_fabricator.rb DEV: Use dynamic/static fabricator attrs correctly (#9519) 2020-04-22 20:49:53 +02:00
web_hook_fabricator.rb FEATURE: granular webhooks (#23070) 2023-10-09 03:35:31 +00:00