@@ -1118,3 +1118,71 @@ describe('streakParamsSchema — date query validation boundaries (Variation 4)'
11181118 expect ( result . success ) . toBe ( true ) ;
11191119 } ) ;
11201120} ) ;
1121+
1122+ /* ==========================================================================
1123+ * LAYOUT PARAMETER — QUERY VALIDATION BOUNDARIES (VARIATION 4)
1124+ * ========================================================================== */
1125+
1126+ describe ( 'streakParamsSchema — layout query validation boundaries (Variation 4)' , ( ) => {
1127+ it ( 'rejects unsupported_layout and marks the parse as failed' , ( ) => {
1128+ const result = streakParamsSchema . safeParse ( {
1129+ user : 'octocat' ,
1130+ layout : 'unsupported_layout' ,
1131+ } ) ;
1132+
1133+ expect ( result . success ) . toBe ( false ) ;
1134+ } ) ;
1135+
1136+ it ( 'surfaces a meaningful error message for unsupported_layout' , ( ) => {
1137+ const result = streakParamsSchema . safeParse ( {
1138+ user : 'octocat' ,
1139+ layout : 'unsupported_layout' ,
1140+ } ) ;
1141+
1142+ expect ( result . success ) . toBe ( false ) ;
1143+ if ( ! result . success ) {
1144+ const messages = result . error . issues . map ( ( i ) => i . message ) . join ( ' ' ) ;
1145+ expect ( messages ) . toContain (
1146+ 'Invalid layout format. Supported values: default, compact, full.'
1147+ ) ;
1148+ }
1149+ } ) ;
1150+
1151+ it ( 'accepts "default" as a valid layout value' , ( ) => {
1152+ const result = streakParamsSchema . safeParse ( {
1153+ user : 'octocat' ,
1154+ layout : 'default' ,
1155+ } ) ;
1156+
1157+ expect ( result . success ) . toBe ( true ) ;
1158+ } ) ;
1159+
1160+ it ( 'accepts "compact" as a valid layout value' , ( ) => {
1161+ const result = streakParamsSchema . safeParse ( {
1162+ user : 'octocat' ,
1163+ layout : 'compact' ,
1164+ } ) ;
1165+
1166+ expect ( result . success ) . toBe ( true ) ;
1167+ } ) ;
1168+
1169+ it ( 'accepts "full" as a valid layout value' , ( ) => {
1170+ const result = streakParamsSchema . safeParse ( {
1171+ user : 'octocat' ,
1172+ layout : 'full' ,
1173+ } ) ;
1174+
1175+ expect ( result . success ) . toBe ( true ) ;
1176+ } ) ;
1177+
1178+ it ( 'treats omitted layout as undefined (no validation error)' , ( ) => {
1179+ const result = streakParamsSchema . safeParse ( {
1180+ user : 'octocat' ,
1181+ } ) ;
1182+
1183+ expect ( result . success ) . toBe ( true ) ;
1184+ if ( result . success ) {
1185+ expect ( result . data . layout ) . toBeUndefined ( ) ;
1186+ }
1187+ } ) ;
1188+ } ) ;
0 commit comments