Skip to content

Commit 0c87162

Browse files
committed
improve Folder tests
1 parent f5e0834 commit 0c87162

File tree

1 file changed

+38
-7
lines changed

1 file changed

+38
-7
lines changed

test/models/folder_test.rb

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,40 @@
33
class 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
4980
end

0 commit comments

Comments
 (0)