# frozen_string_literal: true require Rails.root.join("db/migrate/20241204085540_remap_to_fa6_icon_names.rb") RSpec.describe RemapToFa6IconNames do let(:migrate) { described_class.new.up } let(:icon_mapping) do { "fa-ambulance" => "truck-medical", "far-ambulance" => "far-truck-medical", "fab-ambulance" => "fab-truck-medical", "far fa-ambulance" => "far-truck-medical", "fab fa-ambulance" => "fab-truck-medical", "fas fa-ambulance" => "truck-medical", "fa-gear" => "gear", "far-gear" => "far-gear", "fab-gear" => "fab-gear", "far fa-gear" => "far-gear", "fab fa-gear" => "fab-gear", "fas fa-gear" => "gear", "gear" => "gear", } end context "when svg_icon_subset site setting has values to be remapped" do let!(:site_setting) do SiteSetting.create!( name: "svg_icon_subset", value: icon_mapping.keys.join("|"), data_type: SiteSettings::TypeSupervisor.types[:list], ) end it "remaps the values correctly" do silence_stdout { migrate } expect(site_setting.reload.value.split("|")).to match_array(icon_mapping.values) end end context "when groups table has icons to be remapped" do let!(:groups) { icon_mapping.keys.map { |icon| Fabricate(:group, flair_icon: icon) } } it "remaps the values correctly" do silence_stdout { migrate } expect(groups.map(&:reload).map(&:flair_icon)).to match_array(icon_mapping.values) end end context "when post_action_types table has icons to be remapped" do let!(:post_action_types) do icon_mapping.keys.map { |icon| PostActionType.create!(name_key: "foo", icon: icon) } end it "remaps the values correctly" do silence_stdout { migrate } expect(post_action_types.map(&:reload).map(&:icon)).to match_array(icon_mapping.values) end end context "when badges table has icons to be remapped" do let!(:badges) { icon_mapping.keys.map { |icon| Fabricate(:badge, icon: icon) } } it "remaps the values correctly" do silence_stdout { migrate } expect(badges.map(&:reload).map(&:icon)).to match_array(icon_mapping.values) end end context "when sidebar_urls table has icons to be remapped" do let!(:sidebar_urls) { icon_mapping.keys.map { |icon| Fabricate(:sidebar_url, icon: icon) } } it "remaps the values correctly" do silence_stdout { migrate } expect(sidebar_urls.map(&:reload).map(&:icon)).to match_array(icon_mapping.values) end end context "when directory_columns table has icons to be remapped" do let!(:directory_columns) do icon_mapping.keys.map do |icon| DirectoryColumn.create!(enabled: true, position: 1, icon: icon) end end it "remaps the values correctly" do silence_stdout { migrate } expect(directory_columns.map(&:reload).map(&:icon)).to match_array(icon_mapping.values) end end context "when no icon names can be remapped" do let(:icon_names) { ["fal fa-adjust", "heart", "far-heart"] } let(:site_setting) do SiteSetting.create!( name: "svg_icon_subset", value: icon_names.join("|"), data_type: SiteSettings::TypeSupervisor.types[:list], ) end let(:group) { Fabricate(:group, flair_icon: icon_names.first) } let(:group_2) { Fabricate(:group, flair_icon: icon_names.last) } let(:post_action_type) { PostActionType.create!(name_key: "foo", icon: icon_names.first) } let(:post_action_type_2) { PostActionType.create!(name_key: "foo", icon: icon_names.last) } let(:badge) { Fabricate(:badge, icon: icon_names.first) } let(:badge_2) { Fabricate(:badge, icon: icon_names.last) } let(:sidebar_url) { Fabricate(:sidebar_url, icon: icon_names.first) } let(:sidebar_url_2) { Fabricate(:sidebar_url, icon: icon_names.last) } let(:directory_column) do DirectoryColumn.create!(enabled: true, position: 1, icon: icon_names.first) end let(:directory_column_2) do DirectoryColumn.create!(enabled: true, position: 1, icon: icon_names.last) end it "does not change any icon column values" do expect { silence_stdout { migrate } }.not_to change { [ site_setting.reload.value, group.reload.flair_icon, post_action_type.reload.icon, badge.reload.icon, sidebar_url.reload.icon, directory_column.reload.icon, group_2.reload.flair_icon, post_action_type_2.reload.icon, badge_2.reload.icon, sidebar_url_2.reload.icon, directory_column_2.reload.icon, ] } end end end