Clean up announcements/mutes/reactions associations

This commit is contained in:
Matt Jankowski 2025-08-08 10:11:34 -04:00
parent 25f1a515f8
commit 7a37ea6c98
8 changed files with 37 additions and 8 deletions

View File

@ -24,8 +24,10 @@ class Announcement < ApplicationRecord
scope :chronological, -> { order(coalesced_chronology_timestamps.asc) } scope :chronological, -> { order(coalesced_chronology_timestamps.asc) }
scope :reverse_chronological, -> { order(coalesced_chronology_timestamps.desc) } scope :reverse_chronological, -> { order(coalesced_chronology_timestamps.desc) }
has_many :announcement_mutes, dependent: :destroy with_options dependent: :destroy, inverse_of: :announcement do
has_many :announcement_reactions, dependent: :destroy has_many :announcement_mutes
has_many :announcement_reactions
end
validates :text, presence: true validates :text, presence: true
validates :starts_at, presence: true, if: :ends_at? validates :starts_at, presence: true, if: :ends_at?

View File

@ -12,8 +12,10 @@
# #
class AnnouncementMute < ApplicationRecord class AnnouncementMute < ApplicationRecord
with_options inverse_of: :announcement_mutes do
belongs_to :account belongs_to :account
belongs_to :announcement, inverse_of: :announcement_mutes belongs_to :announcement
end
validates :account_id, uniqueness: { scope: :announcement_id } validates :account_id, uniqueness: { scope: :announcement_id }
end end

View File

@ -17,8 +17,11 @@ class AnnouncementReaction < ApplicationRecord
before_validation :set_custom_emoji, if: :name? before_validation :set_custom_emoji, if: :name?
after_commit :queue_publish after_commit :queue_publish
with_options inverse_of: :announcement_reactions do
belongs_to :account belongs_to :account
belongs_to :announcement, inverse_of: :announcement_reactions belongs_to :announcement
end
belongs_to :custom_emoji, optional: true belongs_to :custom_emoji, optional: true
validates :name, presence: true validates :name, presence: true

View File

@ -12,6 +12,8 @@ module Account::Associations
has_many :account_pins has_many :account_pins
has_many :account_warnings has_many :account_warnings
has_many :aliases, class_name: 'AccountAlias' has_many :aliases, class_name: 'AccountAlias'
has_many :announcement_mutes
has_many :announcement_reactions
has_many :bookmarks has_many :bookmarks
has_many :conversations, class_name: 'AccountConversation' has_many :conversations, class_name: 'AccountConversation'
has_many :custom_filters has_many :custom_filters

View File

@ -43,7 +43,6 @@ module Account::Interactions
has_many :muted_by, -> { order(mutes: { id: :desc }) }, through: :muted_by_relationships, source: :account has_many :muted_by, -> { order(mutes: { id: :desc }) }, through: :muted_by_relationships, source: :account
has_many :conversation_mutes, dependent: :destroy has_many :conversation_mutes, dependent: :destroy
has_many :domain_blocks, class_name: 'AccountDomainBlock', dependent: :destroy has_many :domain_blocks, class_name: 'AccountDomainBlock', dependent: :destroy
has_many :announcement_mutes, dependent: :destroy
end end
def follow!(other_account, reblogs: nil, notify: nil, languages: nil, uri: nil, rate_limit: false, bypass_limit: false) def follow!(other_account, reblogs: nil, notify: nil, languages: nil, uri: nil, rate_limit: false, bypass_limit: false)

View File

@ -0,0 +1,16 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe AnnouncementMute do
describe 'Associations' do
it { is_expected.to belong_to(:account).inverse_of(:announcement_mutes) }
it { is_expected.to belong_to(:announcement).inverse_of(:announcement_mutes) }
end
describe 'Validations' do
subject { Fabricate.build :announcement_mute }
it { is_expected.to validate_uniqueness_of(:account_id).scoped_to(:announcement_id) }
end
end

View File

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe AnnouncementReaction do RSpec.describe AnnouncementReaction do
describe 'Associations' do describe 'Associations' do
it { is_expected.to belong_to(:account) } it { is_expected.to belong_to(:account).inverse_of(:announcement_reactions) }
it { is_expected.to belong_to(:announcement).inverse_of(:announcement_reactions) } it { is_expected.to belong_to(:announcement).inverse_of(:announcement_reactions) }
it { is_expected.to belong_to(:custom_emoji).optional } it { is_expected.to belong_to(:custom_emoji).optional }
end end

View File

@ -3,6 +3,11 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe Announcement do RSpec.describe Announcement do
describe 'Associations' do
it { is_expected.to have_many(:announcement_mutes).inverse_of(:announcement).dependent(:destroy) }
it { is_expected.to have_many(:announcement_reactions).inverse_of(:announcement).dependent(:destroy) }
end
describe 'Scopes' do describe 'Scopes' do
context 'with published and unpublished records' do context 'with published and unpublished records' do
let!(:published) { Fabricate(:announcement, published: true) } let!(:published) { Fabricate(:announcement, published: true) }