File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -94,7 +94,9 @@ def preferences
9494 end
9595 end
9696
97- # Helper method to convert it to the form expected by the client
97+ # Converts a given filter to JSON
98+ # @param filter {Filter} filter to convert
99+ # @return {Hash}
98100 def filter_json ( filter )
99101 {
100102 min_score : filter . min_score ,
@@ -105,20 +107,23 @@ def filter_json(filter)
105107 exclude_tags : Tag . where ( id : filter . exclude_tags ) . map { |tag | [ tag . name , tag . id ] } ,
106108 source : filter . source ,
107109 status : filter . status ,
108- system : filter . user_id == - 1
110+ system : filter . system?
109111 }
110112 end
111113
112- def filters_json
113- system_filters = Rails . cache . fetch 'default_system_filters' , expires_in : 1 . day do
114+ # Gets system filters as JSON
115+ # @return [Hash{String => Hash}]
116+ def system_filters_json
117+ Rails . cache . fetch 'default_system_filters' , expires_in : 1 . day do
114118 system_user . filters . to_h { |filter | [ filter . name , filter_json ( filter ) ] }
115119 end
120+ end
116121
122+ def filters_json
117123 if user_signed_in?
118- current_user . filters . to_h { |filter | [ filter . name , filter_json ( filter ) ] }
119- . merge ( system_filters )
124+ current_user . filters . to_h { |filter | [ filter . name , filter_json ( filter ) ] } . merge ( system_filters_json )
120125 else
121- system_filters
126+ system_filters_json
122127 end
123128 end
124129
Original file line number Diff line number Diff line change @@ -4,4 +4,8 @@ class Filter < ApplicationRecord
44 validates :name , uniqueness : { scope : :user }
55 serialize :include_tags , coder : YAML , type : Array
66 serialize :exclude_tags , coder : YAML , type : Array
7+
8+ def system?
9+ user_id == -1
10+ end
711end
Original file line number Diff line number Diff line change 1111 user_id : -1
1212 min_answers : 0
1313 max_answers : 0
14- status : ' open'
14+ status : ' open'
15+
16+ - name : Open
17+ user_id : -1
18+ status : ' open'
Original file line number Diff line number Diff line change @@ -565,6 +565,19 @@ class UsersControllerTest < ActionController::TestCase
565565 assert_json_success
566566 end
567567
568+ test 'filters should only return system filters for anonymous users' do
569+ try_filters
570+
571+ assert_response ( :success )
572+ assert_valid_json_response
573+
574+ parsed = JSON . parse ( response . body )
575+ assert parsed . any?
576+ parsed . each do |name , filter |
577+ assert filter [ 'system' ] , "'#{ name } ' is not a system filter"
578+ end
579+ end
580+
568581 private
569582
570583 def create_other_user
@@ -575,6 +588,12 @@ def create_other_user
575588 other_user
576589 end
577590
591+ def try_filters
592+ get :filters , params : {
593+ format : :json
594+ }
595+ end
596+
578597 def try_default_filter ( category )
579598 get :default_filter , params : {
580599 category : category &.id ,
Original file line number Diff line number Diff line change 1717 min_answers : 1
1818 max_answers : 1
1919 status : MyString
20+
21+ system :
22+ name : System filter
23+ user : system
24+ status : open
Original file line number Diff line number Diff line change 11require 'test_helper'
22
33class FilterTest < ActiveSupport ::TestCase
4- # test "the truth" do
5- # assert true
6- # end
4+ test 'system? should correctly determine if a filter is a system filter' do
5+ sys_usr = users ( :system )
6+
7+ filters . each do |filter |
8+ assert_equal filter . system? , filter . user_id == sys_usr
9+ end
10+ end
711end
You can’t perform that action at this time.
0 commit comments