@@ -27,16 +27,91 @@ struct ShopCreateViewModelTest {
2727 #expect( viewModel. isCreating == false )
2828 }
2929
30- @Test ( " Has invalid data " , arguments: [ " " , " Shop Name 1 " ] )
31- func hasInvalidData( name: String ) {
30+ @Test
31+ func maximumNameLength( ) {
32+ let viewModel = ShopCreateViewModel (
33+ sessionController: sessionController,
34+ shopRepository: shopRepository,
35+ messageBus: messageBus
36+ )
37+
38+ #expect( viewModel. maximumNameLength == 100 )
39+ }
40+
41+ @Test
42+ func maximumDescriptionLength( ) {
43+ let viewModel = ShopCreateViewModel (
44+ sessionController: sessionController,
45+ shopRepository: shopRepository,
46+ messageBus: messageBus
47+ )
48+
49+ #expect( viewModel. maximumDescriptionLength == 1_000 )
50+ }
51+
52+ @Test ( " Name validation " , arguments: [
53+ ( " " , true ) , // blank → invalid
54+ ( " a " , false ) , // 1 char → valid
55+ ( " Shop Name 1 " , false ) , // normal → valid
56+ ( String ( repeating: " a " , count: 100 ) , false ) , // exactly 100 → valid
57+ ( String ( repeating: " a " , count: 101 ) , true ) // 101 → invalid
58+ ] )
59+ func nameValidation( name: String , shouldBeInvalid: Bool ) {
3260 let viewModel = ShopCreateViewModel (
3361 sessionController: sessionController,
3462 shopRepository: shopRepository,
3563 messageBus: messageBus
3664 )
3765
3866 viewModel. name = name
39- #expect( viewModel. hasInvalidData == ( name == " " ? true : false ) )
67+
68+ #expect( viewModel. hasInvalidDataName == shouldBeInvalid)
69+ }
70+
71+ @Test ( " Description validation " , arguments: [
72+ ( " " , false ) , // empty → valid
73+ ( " Short note. " , false ) , // short → valid
74+ ( String ( repeating: " x " , count: 1000 ) , false ) , // exactly 1000 → valid
75+ ( String ( repeating: " x " , count: 1001 ) , true ) // 1001 → invalid
76+ ] )
77+ func descriptionValidation( description: String , shouldBeInvalid: Bool ) {
78+ let viewModel = ShopCreateViewModel (
79+ sessionController: sessionController,
80+ shopRepository: shopRepository,
81+ messageBus: messageBus
82+ )
83+
84+ viewModel. description = description
85+
86+ #expect( viewModel. hasInvalidDataDescription == shouldBeInvalid)
87+ }
88+
89+ @Test
90+ func validateNameLengthTruncatesCorrectly( ) {
91+ let viewModel = ShopCreateViewModel (
92+ sessionController: sessionController,
93+ shopRepository: shopRepository,
94+ messageBus: messageBus
95+ )
96+
97+ viewModel. name = String ( repeating: " a " , count: 100 ) + " EXTRA "
98+ viewModel. validateNameLength ( )
99+
100+ #expect( viewModel. name == String ( repeating: " a " , count: 100 ) )
101+ }
102+
103+ @Test
104+ func validateDescriptionLengthTruncatesCorrectly( ) {
105+ let viewModel = ShopCreateViewModel (
106+ sessionController: sessionController,
107+ shopRepository: shopRepository,
108+ messageBus: messageBus
109+ )
110+
111+ viewModel. description = String ( repeating: " x " , count: 1500 )
112+ viewModel. validateDescriptionLength ( )
113+
114+ #expect( viewModel. description. count == 1_000 )
40115 }
41116
42117 @Test
0 commit comments