Fix export/import losing custom column colors

record.to_json serializes through model accessors. Column::Colored
overrides the color accessor to return a Color struct, which serializes
as {"name":"Blue","value":"var(--color-card-default)"} instead of the
raw CSS string.

Two fixes:
- Export raw DB values via record.attributes.slice(*attributes).to_json
- Color.for_value parses legacy JSON format so columns imported from
  old exports self-heal when read
This commit is contained in:
Donal McBreen
2026-04-03 10:05:11 +01:00
parent 752237abab
commit b79c7897e6
4 changed files with 25 additions and 2 deletions
+1
View File
@@ -226,6 +226,7 @@ class Account::ImportTest < ActiveSupport::TestCase
name: account.name,
board_count: Board.where(account: account).count,
column_count: Column.where(account: account).count,
column_colors: Column.where(account: account).order(:id).pluck(:color),
card_count: Card.where(account: account).count,
comment_count: Comment.where(account: account).count,
tag_count: Tag.where(account: account).count
+8
View File
@@ -7,6 +7,14 @@ class Column::ColoredTest < ActiveSupport::TestCase
assert_equal Column::Colored::DEFAULT_COLOR, column.color
end
test "reads color from legacy export format" do
column = columns(:writebook_triage)
# Broken exports serialized Color structs as JSON
column.update_column(:color, { "name" => "Lime", "value" => "var(--color-card-4)" }.to_json)
assert_equal Color.for_value("var(--color-card-4)"), column.reload.color
end
test "update the column color" do
columns(:writebook_triage).update!(color: "var(--color-card-3)")