From 16372970859ba2edc2655aa2b222cf1d19ff9e47 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Jul 2025 02:28:40 -0400 Subject: [PATCH] Add coverage for `CustomFilterStatus` model (#35374) --- app/models/custom_filter_status.rb | 8 +++--- spec/models/custom_filter_status_spec.rb | 33 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 spec/models/custom_filter_status_spec.rb diff --git a/app/models/custom_filter_status.rb b/app/models/custom_filter_status.rb index 58b61cd79d4..c85b811280e 100644 --- a/app/models/custom_filter_status.rb +++ b/app/models/custom_filter_status.rb @@ -17,12 +17,14 @@ class CustomFilterStatus < ApplicationRecord belongs_to :custom_filter belongs_to :status - validates :status, uniqueness: { scope: :custom_filter } - validate :validate_status_access + validates :status_id, uniqueness: { scope: :custom_filter_id } + validate :validate_status_access, if: [:custom_filter_account, :status] + + delegate :account, to: :custom_filter, prefix: true, allow_nil: true private def validate_status_access - errors.add(:status_id, :invalid) unless StatusPolicy.new(custom_filter.account, status).show? + errors.add(:status_id, :invalid) unless StatusPolicy.new(custom_filter_account, status).show? end end diff --git a/spec/models/custom_filter_status_spec.rb b/spec/models/custom_filter_status_spec.rb new file mode 100644 index 00000000000..3f161c00bd8 --- /dev/null +++ b/spec/models/custom_filter_status_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe CustomFilterStatus do + describe 'Associations' do + it { is_expected.to belong_to(:custom_filter) } + it { is_expected.to belong_to(:status) } + end + + describe 'Validations' do + subject { Fabricate.build :custom_filter_status } + + it { is_expected.to validate_uniqueness_of(:status_id).scoped_to(:custom_filter_id) } + + describe 'Status access' do + subject { Fabricate.build :custom_filter_status, custom_filter:, status: } + + let(:custom_filter) { Fabricate :custom_filter } + let(:status) { Fabricate :status } + + context 'when policy allows filter account to access status' do + it { is_expected.to allow_value(status.id).for(:status_id) } + end + + context 'when policy does not allow filter account to access status' do + before { status.account.touch(:suspended_at) } + + it { is_expected.to_not allow_value(status.id).for(:status_id) } + end + end + end +end