33class FolderTest < ActiveSupport ::TestCase
44 def setup
55 @user = user ( :starter )
6+ @other_user = user ( :premium )
67 @parent_folder = Folder . create! ( title : 'Parent Folder' , user : @user )
78 @folder = Folder . create! ( title : 'Test Folder' , user : @user , parent_folder : @parent_folder )
89 end
910
10- test "should be valid" do
11+ # Basic validation tests
12+ test "should be valid with required attributes" do
1113 assert @folder . valid?
1214 end
1315
1416 test "should require a user" do
1517 @folder . user = nil
1618 assert_not @folder . valid?
19+ assert_includes @folder . errors [ :user ] , "must exist"
1720 end
1821
22+ test "should be valid without a parent folder" do
23+ top_level_folder = Folder . new ( title : 'Top Level' , user : @user )
24+ assert top_level_folder . valid?
25+ end
26+
27+ # Association tests
1928 test "should have many documents" do
2029 assert_respond_to @folder , :documents
2130 assert_kind_of ActiveRecord ::Associations ::CollectionProxy , @folder . documents
2231 end
2332
33+ test "documents association should work" do
34+ document = Document . create! ( title : 'Test Document' , user : @user )
35+ @folder . documents << document
36+ assert_includes @folder . documents , document
37+ assert_equal @folder , document . folder
38+ end
39+
2440 test "should belong to parent folder" do
2541 assert_respond_to @folder , :parent_folder
2642 assert_equal @parent_folder , @folder . parent_folder
@@ -31,19 +47,34 @@ def setup
3147 assert_equal @user , @folder . user
3248 end
3349
50+ # Child folders tests with edge cases
3451 test "child_folders should return folders with same user and parent" do
3552 child_folder = Folder . create! ( title : 'Child Folder' , user : @user , parent_folder : @folder )
3653 assert_includes @folder . child_folders , child_folder
3754 end
3855
39- test "class methods should return correct values" do
40- assert_equal 'lighten-1 teal' , Folder . color
41- assert_equal 'text-lighten-1 teal-text' , Folder . text_color
42- assert_equal 'folder' , Folder . icon
56+ test "child_folders should not return folders from different users" do
57+ other_user_folder = Folder . create! ( title : 'Other User Folder' , user : @other_user , parent_folder : @folder )
58+ assert_not_includes @folder . child_folders , other_user_folder
4359 end
4460
61+ test "child_folders should not return folders with different parents" do
62+ other_parent = Folder . create! ( title : 'Other Parent' , user : @user )
63+ different_parent_folder = Folder . create! ( title : 'Different Parent' , user : @user , parent_folder : other_parent )
64+ assert_not_includes @folder . child_folders , different_parent_folder
65+ end
66+
67+ # to_param tests with semantic checks
4568 test "to_param should include id and slugged title" do
46- expected_param = "#{ @folder . id } -#{ PageTagService . slug_for ( @folder . title ) } "
47- assert_equal expected_param , @folder . to_param
69+ param = @folder . to_param
70+ assert_match ( /^\d +-[\w -]+$/ , param )
71+ assert_includes param , @folder . id . to_s
72+ end
73+
74+ test "to_param should handle special characters in title" do
75+ folder = Folder . create! ( title : 'Test & Folder!' , user : @user )
76+ param = folder . to_param
77+ assert_match ( /^\d +-[\w -]+$/ , param )
78+ assert_includes param , folder . id . to_s
4879 end
4980end
0 commit comments