Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/closure_tree/support.rb
Original file line number Diff line number Diff line change
Expand Up @@ -238,12 +238,12 @@ def scope_values_from_instance(instance)
case scope_option
when Symbol
value = instance.read_attribute(scope_option)
scope_hash[scope_option] = value unless value.nil?
scope_hash[scope_option] = value
when Array
scope_option.each do |item|
if item.is_a?(Symbol)
value = instance.read_attribute(item)
scope_hash[item] = value unless value.nil?
scope_hash[item] = value
end
end
end
Expand Down
60 changes: 59 additions & 1 deletion test/closure_tree/scope_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -175,5 +175,63 @@ def test_scope_columns_method
assert_equal [:user_id], ScopedItem._ct.scope_columns
assert_equal [:user_id, :group_id], MultiScopedItem._ct.scope_columns
end
end

def test_scope_values_from_instance_with_nil_value_symbol_scope
instance = ScopedItem.new(user_id: nil)
scope_values = instance._ct.scope_values_from_instance(instance)
assert_equal({ user_id: nil }, scope_values)
end

def test_scope_values_from_instance_with_nil_value_array_scope
instance = MultiScopedItem.new(user_id: nil, group_id: nil)
scope_values = instance._ct.scope_values_from_instance(instance)
assert_equal({ user_id: nil, group_id: nil }, scope_values)
end

def test_ordering_with_nil_scope_values_symbol_scope
root1 = ScopedItem.create!(name: 'root1', user_id: nil)
root2 = ScopedItem.create!(name: 'root2', user_id: 1)
root3 = ScopedItem.create!(name: 'root3', user_id: nil)

assert_equal 0, root1.order_value
assert_equal 1, root3.order_value
assert_equal 0, root2.order_value
end

def test_ordering_with_nil_scope_values_array_scope
root1 = MultiScopedItem.create!(name: 'root1', user_id: nil, group_id: nil)
root2 = MultiScopedItem.create!(name: 'root2', user_id: 1, group_id: 1)
root3 = MultiScopedItem.create!(name: 'root3', user_id: nil, group_id: nil)

assert_equal 0, root1.order_value
assert_equal 1, root3.order_value
assert_equal 0, root2.order_value
end

def test_build_scope_where_clause_with_nil_value_pg
support = ScopedItem._ct
scope_conditions = { user_id: nil, group_id: 789 }
clause = support.build_scope_where_clause(scope_conditions)

assert_includes clause, 'IS NULL'
assert_includes clause, '789'
end

def test_build_scope_where_clause_with_nil_value_mysql
support = MysqlTag._ct
scope_conditions = { user_id: nil, group_id: 123 }
clause = support.build_scope_where_clause(scope_conditions)

assert_includes clause, 'IS NULL'
assert_includes clause, '123'
end

def test_build_scope_where_clause_with_nil_value_sqlite
support = MemoryTag._ct
scope_conditions = { user_id: nil, group_id: 456 }
clause = support.build_scope_where_clause(scope_conditions)

assert_includes clause, 'IS NULL'
assert_includes clause, '456'
end
end
Loading