@@ -80,7 +80,7 @@ func TestPublishEndpoint(t *testing.T) {
80
80
{
81
81
name : "successful publish with no auth (AuthMethodNone)" ,
82
82
requestBody : apiv0.ServerJSON {
83
- Name : "example/test-server" ,
83
+ Name : "com. example/test-server" ,
84
84
Description : "A test server without auth" ,
85
85
Repository : model.Repository {
86
86
URL : "https://github.com/example/test-server" ,
@@ -92,7 +92,7 @@ func TestPublishEndpoint(t *testing.T) {
92
92
tokenClaims : & auth.JWTClaims {
93
93
AuthMethod : auth .MethodNone ,
94
94
Permissions : []auth.Permission {
95
- {Action : auth .PermissionActionPublish , ResourcePattern : "example/ *" },
95
+ {Action : auth .PermissionActionPublish , ResourcePattern : "*" },
96
96
},
97
97
},
98
98
setupRegistryService : func (_ service.RegistryService ) {
@@ -127,7 +127,7 @@ func TestPublishEndpoint(t *testing.T) {
127
127
{
128
128
name : "invalid token" ,
129
129
requestBody : apiv0.ServerJSON {
130
- Name : "test-server" ,
130
+ Name : "com.example/ test-server" ,
131
131
Description : "A test server" ,
132
132
Version : "1.0.0" ,
133
133
},
@@ -165,7 +165,7 @@ func TestPublishEndpoint(t *testing.T) {
165
165
{
166
166
name : "registry service error" ,
167
167
requestBody : apiv0.ServerJSON {
168
- Name : "example/test-server" ,
168
+ Name : "com. example/test-server" ,
169
169
Description : "A test server" ,
170
170
Version : "1.0.0" ,
171
171
Repository : model.Repository {
@@ -183,7 +183,7 @@ func TestPublishEndpoint(t *testing.T) {
183
183
setupRegistryService : func (registry service.RegistryService ) {
184
184
// Pre-publish the same server to cause duplicate version error
185
185
existingServer := apiv0.ServerJSON {
186
- Name : "example/test-server" ,
186
+ Name : "com. example/test-server" ,
187
187
Description : "Existing test server" ,
188
188
Version : "1.0.0" ,
189
189
Repository : model.Repository {
@@ -194,7 +194,7 @@ func TestPublishEndpoint(t *testing.T) {
194
194
}
195
195
_ , _ = registry .Publish (existingServer )
196
196
},
197
- expectedStatus : http .StatusBadRequest ,
197
+ expectedStatus : http .StatusUnprocessableEntity ,
198
198
expectedError : "invalid version: cannot publish duplicate version" ,
199
199
},
200
200
{
@@ -243,8 +243,8 @@ func TestPublishEndpoint(t *testing.T) {
243
243
},
244
244
},
245
245
setupRegistryService : func (_ service.RegistryService ) {},
246
- expectedStatus : http .StatusBadRequest ,
247
- expectedError : "server name cannot contain multiple slashes " ,
246
+ expectedStatus : http .StatusUnprocessableEntity ,
247
+ expectedError : "expected string to match pattern " ,
248
248
},
249
249
{
250
250
name : "invalid server name - multiple slashes (three slashes)" ,
@@ -260,8 +260,8 @@ func TestPublishEndpoint(t *testing.T) {
260
260
},
261
261
},
262
262
setupRegistryService : func (_ service.RegistryService ) {},
263
- expectedStatus : http .StatusBadRequest ,
264
- expectedError : "server name cannot contain multiple slashes " ,
263
+ expectedStatus : http .StatusUnprocessableEntity ,
264
+ expectedError : "expected string to match pattern " ,
265
265
},
266
266
{
267
267
name : "invalid server name - consecutive slashes" ,
@@ -277,8 +277,8 @@ func TestPublishEndpoint(t *testing.T) {
277
277
},
278
278
},
279
279
setupRegistryService : func (_ service.RegistryService ) {},
280
- expectedStatus : http .StatusBadRequest ,
281
- expectedError : "server name cannot contain multiple slashes " ,
280
+ expectedStatus : http .StatusUnprocessableEntity ,
281
+ expectedError : "expected string to match pattern " ,
282
282
},
283
283
{
284
284
name : "invalid server name - URL-like path" ,
@@ -294,8 +294,8 @@ func TestPublishEndpoint(t *testing.T) {
294
294
},
295
295
},
296
296
setupRegistryService : func (_ service.RegistryService ) {},
297
- expectedStatus : http .StatusBadRequest ,
298
- expectedError : "server name cannot contain multiple slashes " ,
297
+ expectedStatus : http .StatusUnprocessableEntity ,
298
+ expectedError : "expected string to match pattern " ,
299
299
},
300
300
{
301
301
name : "invalid server name - many slashes" ,
@@ -311,8 +311,8 @@ func TestPublishEndpoint(t *testing.T) {
311
311
},
312
312
},
313
313
setupRegistryService : func (_ service.RegistryService ) {},
314
- expectedStatus : http .StatusBadRequest ,
315
- expectedError : "server name cannot contain multiple slashes " ,
314
+ expectedStatus : http .StatusUnprocessableEntity ,
315
+ expectedError : "expected string to match pattern " ,
316
316
},
317
317
{
318
318
name : "invalid server name - with packages and remotes" ,
@@ -349,8 +349,8 @@ func TestPublishEndpoint(t *testing.T) {
349
349
},
350
350
},
351
351
setupRegistryService : func (_ service.RegistryService ) {},
352
- expectedStatus : http .StatusBadRequest ,
353
- expectedError : "server name cannot contain multiple slashes " ,
352
+ expectedStatus : http .StatusUnprocessableEntity ,
353
+ expectedError : "expected string to match pattern " ,
354
354
},
355
355
}
356
356
@@ -433,25 +433,25 @@ func TestPublishEndpoint_MultipleSlashesEdgeCases(t *testing.T) {
433
433
{
434
434
name : "invalid - trailing slash after valid name" ,
435
435
serverName : "com.example/server/" ,
436
- expectedStatus : http .StatusBadRequest ,
436
+ expectedStatus : http .StatusUnprocessableEntity ,
437
437
description : "Trailing slash creates multiple slashes" ,
438
438
},
439
439
{
440
440
name : "invalid - leading and middle slash" ,
441
441
serverName : "/com.example/server" ,
442
- expectedStatus : http .StatusBadRequest ,
442
+ expectedStatus : http .StatusUnprocessableEntity ,
443
443
description : "Leading slash with middle slash" ,
444
444
},
445
445
{
446
446
name : "invalid - file system style path" ,
447
447
serverName : "usr/local/bin/server" ,
448
- expectedStatus : http .StatusBadRequest ,
448
+ expectedStatus : http .StatusUnprocessableEntity ,
449
449
description : "File system style paths should be rejected" ,
450
450
},
451
451
{
452
452
name : "invalid - version-like suffix" ,
453
453
serverName : "com.example/server/v1.0.0" ,
454
- expectedStatus : http .StatusBadRequest ,
454
+ expectedStatus : http .StatusUnprocessableEntity ,
455
455
description : "Version suffixes with slash should be rejected" ,
456
456
},
457
457
}
@@ -502,9 +502,10 @@ func TestPublishEndpoint_MultipleSlashesEdgeCases(t *testing.T) {
502
502
assert .Equal (t , tc .expectedStatus , rr .Code ,
503
503
"%s: expected status %d, got %d" , tc .description , tc .expectedStatus , rr .Code )
504
504
505
- if tc .expectedStatus == http .StatusBadRequest {
506
- assert .Contains (t , rr .Body .String (), "server name cannot contain multiple slashes" ,
507
- "%s: should contain specific error message" , tc .description )
505
+ if tc .expectedStatus == http .StatusUnprocessableEntity {
506
+ // Huma returns a generic pattern validation error
507
+ assert .Contains (t , rr .Body .String (), "pattern" ,
508
+ "%s: should contain pattern validation error" , tc .description )
508
509
}
509
510
})
510
511
}
0 commit comments