@@ -80,7 +80,7 @@ func TestPublishEndpoint(t *testing.T) {
8080{
8181name : "successful publish with no auth (AuthMethodNone)" ,
8282requestBody : apiv0.ServerJSON {
83- Name : "example/test-server" ,
83+ Name : "com. example/test-server" ,
8484Description : "A test server without auth" ,
8585Repository : model.Repository {
8686URL : "https://github.com/example/test-server" ,
@@ -92,7 +92,7 @@ func TestPublishEndpoint(t *testing.T) {
9292tokenClaims : & auth.JWTClaims {
9393AuthMethod : auth .MethodNone ,
9494Permissions : []auth.Permission {
95- {Action : auth .PermissionActionPublish , ResourcePattern : "example/ *" },
95+ {Action : auth .PermissionActionPublish , ResourcePattern : "*" },
9696},
9797},
9898setupRegistryService : func (_ service.RegistryService ) {
@@ -127,7 +127,7 @@ func TestPublishEndpoint(t *testing.T) {
127127{
128128name : "invalid token" ,
129129requestBody : apiv0.ServerJSON {
130- Name : "test-server" ,
130+ Name : "com.example/ test-server" ,
131131Description : "A test server" ,
132132Version : "1.0.0" ,
133133},
@@ -165,7 +165,7 @@ func TestPublishEndpoint(t *testing.T) {
165165{
166166name : "registry service error" ,
167167requestBody : apiv0.ServerJSON {
168- Name : "example/test-server" ,
168+ Name : "com. example/test-server" ,
169169Description : "A test server" ,
170170Version : "1.0.0" ,
171171Repository : model.Repository {
@@ -183,7 +183,7 @@ func TestPublishEndpoint(t *testing.T) {
183183setupRegistryService : func (registry service.RegistryService ) {
184184// Pre-publish the same server to cause duplicate version error
185185existingServer := apiv0.ServerJSON {
186- Name : "example/test-server" ,
186+ Name : "com. example/test-server" ,
187187Description : "Existing test server" ,
188188Version : "1.0.0" ,
189189Repository : model.Repository {
@@ -194,7 +194,7 @@ func TestPublishEndpoint(t *testing.T) {
194194}
195195_ , _ = registry .Publish (existingServer )
196196},
197- expectedStatus : http .StatusBadRequest ,
197+ expectedStatus : http .StatusUnprocessableEntity ,
198198expectedError : "invalid version: cannot publish duplicate version" ,
199199},
200200{
@@ -243,8 +243,8 @@ func TestPublishEndpoint(t *testing.T) {
243243},
244244},
245245setupRegistryService : 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 " ,
248248},
249249{
250250name : "invalid server name - multiple slashes (three slashes)" ,
@@ -260,8 +260,8 @@ func TestPublishEndpoint(t *testing.T) {
260260},
261261},
262262setupRegistryService : 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 " ,
265265},
266266{
267267name : "invalid server name - consecutive slashes" ,
@@ -277,8 +277,8 @@ func TestPublishEndpoint(t *testing.T) {
277277},
278278},
279279setupRegistryService : 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 " ,
282282},
283283{
284284name : "invalid server name - URL-like path" ,
@@ -294,8 +294,8 @@ func TestPublishEndpoint(t *testing.T) {
294294},
295295},
296296setupRegistryService : 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 " ,
299299},
300300{
301301name : "invalid server name - many slashes" ,
@@ -311,8 +311,8 @@ func TestPublishEndpoint(t *testing.T) {
311311},
312312},
313313setupRegistryService : 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 " ,
316316},
317317{
318318name : "invalid server name - with packages and remotes" ,
@@ -349,8 +349,8 @@ func TestPublishEndpoint(t *testing.T) {
349349},
350350},
351351setupRegistryService : 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 " ,
354354},
355355}
356356
@@ -433,25 +433,25 @@ func TestPublishEndpoint_MultipleSlashesEdgeCases(t *testing.T) {
433433{
434434name : "invalid - trailing slash after valid name" ,
435435serverName : "com.example/server/" ,
436- expectedStatus : http .StatusBadRequest ,
436+ expectedStatus : http .StatusUnprocessableEntity ,
437437description : "Trailing slash creates multiple slashes" ,
438438},
439439{
440440name : "invalid - leading and middle slash" ,
441441serverName : "/com.example/server" ,
442- expectedStatus : http .StatusBadRequest ,
442+ expectedStatus : http .StatusUnprocessableEntity ,
443443description : "Leading slash with middle slash" ,
444444},
445445{
446446name : "invalid - file system style path" ,
447447serverName : "usr/local/bin/server" ,
448- expectedStatus : http .StatusBadRequest ,
448+ expectedStatus : http .StatusUnprocessableEntity ,
449449description : "File system style paths should be rejected" ,
450450},
451451{
452452name : "invalid - version-like suffix" ,
453453serverName : "com.example/server/v1.0.0" ,
454- expectedStatus : http .StatusBadRequest ,
454+ expectedStatus : http .StatusUnprocessableEntity ,
455455description : "Version suffixes with slash should be rejected" ,
456456},
457457}
@@ -502,9 +502,10 @@ func TestPublishEndpoint_MultipleSlashesEdgeCases(t *testing.T) {
502502assert .Equal (t , tc .expectedStatus , rr .Code ,
503503"%s: expected status %d, got %d" , tc .description , tc .expectedStatus , rr .Code )
504504
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 )
508509}
509510})
510511}
0 commit comments