Validating Category Management Operations in Maybe Finance
This test suite validates category management functionality in the Maybe Finance application, focusing on category replacement, deletion, and hierarchical constraints. The tests ensure proper handling of transaction categories and enforce subcategory depth limitations.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
maybe-finance/maybe
test/models/category_test.rb
require "test_helper"
class CategoryTest < ActiveSupport::TestCase
def setup
@family = families(:dylan_family)
end
test "replacing and destroying" do
transactions = categories(:food_and_drink).transactions.to_a
categories(:food_and_drink).replace_and_destroy!(categories(:income))
assert_equal categories(:income), transactions.map { |t| t.reload.category }.uniq.first
end
test "replacing with nil should nullify the category" do
transactions = categories(:food_and_drink).transactions.to_a
categories(:food_and_drink).replace_and_destroy!(nil)
assert_nil transactions.map { |t| t.reload.category }.uniq.first
end
test "subcategory can only be one level deep" do
category = categories(:subcategory)
error = assert_raises(ActiveRecord::RecordInvalid) do
category.subcategories.create!(name: "Invalid category", color: "#000", family: @family)
end
assert_equal "Validation failed: Parent can't have more than 2 levels of subcategories", error.message
end
end