2022-10-26 17:13:21 -05:00
# frozen_string_literal: true
if ! Guardian . new . respond_to? ( :can_see_topic? )
raise " Guardian no longer implements a `can_see_topic?` method making this consistency check invalid "
end
# Monkey patches `TopicGuardian#can_see_topic?` to ensure that `TopicGuardian#can_see_topic_ids` returns the same
# result for the same inputs. We're using this check to bridge the transition to `TopicGuardian#can_see_topic_ids` as the
# backing implementation for `TopicGuardian#can_see_topic?` in the near future.
module TopicGuardianCanSeeConsistencyCheck
extend ActiveSupport :: Concern
module ClassMethods
def enable_topic_can_see_consistency_check
@enable_can_see_consistency_check = true
end
def disable_topic_can_see_consistency_check
@enable_can_see_consistency_check = false
end
def run_topic_can_see_consistency_check?
@enable_can_see_consistency_check
end
end
def can_see_topic? ( topic , hide_deleted = true )
result = super
if self . class . run_topic_can_see_consistency_check?
2023-01-09 05:18:21 -06:00
new_result =
self . can_see_topic_ids ( topic_ids : [ topic & . id ] , hide_deleted : hide_deleted ) . present?
2022-10-26 17:13:21 -05:00
if result != new_result
raise " result between TopicGuardian # can_see_topic? ( #{ result } ) and TopicGuardian # can_see_topic_ids ( #{ new_result } ) has drifted and returned different results for the same input "
end
end
result
end
end
class Guardian
prepend TopicGuardianCanSeeConsistencyCheck
end