Skip to content

Commit 74022de

Browse files
authored
Merge pull request #1887 from codidact/0valt/1865/filters
"Open" system filter & a bit of cleanup
2 parents 111f599 + 5c4352f commit 74022de

6 files changed

Lines changed: 52 additions & 11 deletions

File tree

app/controllers/users_controller.rb

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff 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

app/models/filter.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff 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
711
end

db/seeds/filters.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,8 @@
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'

test/controllers/users_controller_test.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff 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,

test/fixtures/filters.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,8 @@ two:
1717
min_answers: 1
1818
max_answers: 1
1919
status: MyString
20+
21+
system:
22+
name: System filter
23+
user: system
24+
status: open

test/models/filter_test.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
require 'test_helper'
22

33
class 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
711
end

0 commit comments

Comments
 (0)