mirror of
https://github.com/we-promise/sure.git
synced 2026-08-04 08:02:15 +00:00
Model-level:
- Category::GroupTest (new): for() grouping and the new select_options
helper (order + indent labels).
- CategoryTest: alphabetically_by_hierarchy scope ordering.
- Rule::ConditionFilter::TransactionCategoryTest (new)
- Rule::ActionExecutor::SetTransactionCategoryTest (new)
- Import::CategoryMappingTest (new): grouping + 'Add as new category'
still prepends correctly.
Controller/integration-level (asserting actual rendered HTML order):
- SplitsControllerTest: category combobox data-value ordering.
- Transactions::CategorizesControllerTest: bulk-categorize <select>
option ordering.
- TransactionsControllerTest:
- search filter checkbox ordering (q[categories][])
- new-transaction DS::Select category ordering (via trigger id +
ancestor traversal)
- new-transaction account select renders a search box
All new/modified test files verified with 'ruby -c' (syntax) and
cross-checked fixture names, family scoping, route helpers, and field
names against the actual fixtures/routes/views. Ruby/Bundler network
access to rubygems.org is unavailable in this sandbox, so the suite
itself has not been executed — run 'bin/rails test' before merging.
53 lines
2.1 KiB
Ruby
53 lines
2.1 KiB
Ruby
require "test_helper"
|
|
|
|
class Category::GroupTest < ActiveSupport::TestCase
|
|
setup do
|
|
@family = families(:dylan_family)
|
|
end
|
|
|
|
test "for groups categories by parent, root categories without children get an empty subcategories array" do
|
|
groups = Category::Group.for(@family.categories)
|
|
|
|
food_group = groups.find { |g| g.category == categories(:food_and_drink) }
|
|
assert_equal [ categories(:subcategory) ], food_group.subcategories
|
|
|
|
income_group = groups.find { |g| g.category == categories(:income) }
|
|
assert_equal [], income_group.subcategories
|
|
end
|
|
|
|
test "for does not include a category as its own root when it is a subcategory" do
|
|
groups = Category::Group.for(@family.categories)
|
|
|
|
assert_nil groups.find { |g| g.category == categories(:subcategory) }
|
|
end
|
|
|
|
test "select_options orders parent immediately followed by its children" do
|
|
options = Category::Group.select_options(@family.categories)
|
|
|
|
parent_index = options.index { |label, id| id == categories(:food_and_drink).id }
|
|
child_index = options.index { |label, id| id == categories(:subcategory).id }
|
|
|
|
assert_not_nil parent_index
|
|
assert_not_nil child_index
|
|
assert_equal parent_index + 1, child_index, "subcategory should immediately follow its parent in the options list"
|
|
end
|
|
|
|
test "select_options indents subcategory labels so they're visually distinguishable from parents" do
|
|
options = Category::Group.select_options(@family.categories)
|
|
|
|
parent_label, = options.find { |label, id| id == categories(:food_and_drink).id }
|
|
child_label, = options.find { |label, id| id == categories(:subcategory).id }
|
|
|
|
assert_equal categories(:food_and_drink).name, parent_label
|
|
assert_not_equal categories(:subcategory).name, child_label
|
|
assert_includes child_label, categories(:subcategory).name
|
|
end
|
|
|
|
test "select_options returns [label, id] pairs usable directly by options_for_select / form.select" do
|
|
options = Category::Group.select_options(@family.categories)
|
|
|
|
assert options.all? { |pair| pair.is_a?(Array) && pair.size == 2 }
|
|
assert options.all? { |_label, id| id.present? }
|
|
end
|
|
end
|