Clean up schema by simplifying version structure (#379)
## Summary Simplified the schema structure by: - Replacing `version_detail.version` with direct `version` field - Removing unused `release_date` field from seed data - Updating all API types, models, and tests to match new structure - Maintaining backwards compatibility in API responses This change makes the schema more intuitive and reduces nesting depth.
This commit is contained in:
parent
f51c187e52
commit
f975e68cf2
11 changed files with 540 additions and 1973 deletions
|
|
@ -34,9 +34,7 @@ func TestEditServerEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "domdomegg/test-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
published, err := registryService.Publish(testServer)
|
||||
assert.NoError(t, err)
|
||||
|
|
@ -56,9 +54,7 @@ func TestEditServerEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "other/test-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
otherPublished, err := registryService.Publish(otherServer)
|
||||
assert.NoError(t, err)
|
||||
|
|
@ -78,9 +74,7 @@ func TestEditServerEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "domdomegg/deleted-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
deletedPublished, err := registryService.Publish(deletedServer)
|
||||
assert.NoError(t, err)
|
||||
|
|
@ -120,9 +114,7 @@ func TestEditServerEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "domdomegg/test-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.1",
|
||||
},
|
||||
Version: "1.0.1",
|
||||
},
|
||||
serverID: testServerID,
|
||||
expectedStatus: http.StatusOK,
|
||||
|
|
@ -141,7 +133,7 @@ func TestEditServerEndpoint(t *testing.T) {
|
|||
requestBody: apiv0.ServerJSON{
|
||||
Name: "io.github.domdomegg/test-server",
|
||||
Description: "Test server",
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
serverID: testServerID,
|
||||
expectedStatus: http.StatusUnauthorized,
|
||||
|
|
@ -153,7 +145,7 @@ func TestEditServerEndpoint(t *testing.T) {
|
|||
requestBody: apiv0.ServerJSON{
|
||||
Name: "io.github.domdomegg/test-server",
|
||||
Description: "Test server",
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
serverID: testServerID,
|
||||
expectedStatus: http.StatusUnauthorized,
|
||||
|
|
@ -175,7 +167,7 @@ func TestEditServerEndpoint(t *testing.T) {
|
|||
requestBody: apiv0.ServerJSON{
|
||||
Name: "io.github.domdomegg/test-server",
|
||||
Description: "Updated test server",
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
serverID: testServerID,
|
||||
expectedStatus: http.StatusForbidden,
|
||||
|
|
@ -197,7 +189,7 @@ func TestEditServerEndpoint(t *testing.T) {
|
|||
requestBody: apiv0.ServerJSON{
|
||||
Name: "io.github.other/test-server",
|
||||
Description: "Updated test server",
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
serverID: otherServerID,
|
||||
expectedStatus: http.StatusForbidden,
|
||||
|
|
@ -219,7 +211,7 @@ func TestEditServerEndpoint(t *testing.T) {
|
|||
requestBody: apiv0.ServerJSON{
|
||||
Name: "io.github.domdomegg/nonexistent-server",
|
||||
Description: "Updated test server",
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
serverID: "550e8400-e29b-41d4-a716-446655440999", // Non-existent ID
|
||||
expectedStatus: http.StatusNotFound,
|
||||
|
|
@ -241,7 +233,7 @@ func TestEditServerEndpoint(t *testing.T) {
|
|||
requestBody: apiv0.ServerJSON{
|
||||
Name: "invalid-name-format", // Missing namespace/name format
|
||||
Description: "Test server",
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
serverID: testServerID,
|
||||
expectedStatus: http.StatusBadRequest,
|
||||
|
|
@ -269,9 +261,7 @@ func TestEditServerEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "domdomegg/deleted-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.1",
|
||||
},
|
||||
Version: "1.0.1",
|
||||
},
|
||||
serverID: deletedServerID,
|
||||
expectedStatus: http.StatusBadRequest,
|
||||
|
|
|
|||
|
|
@ -64,9 +64,7 @@ func TestPublishIntegration(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "testuser/test-mcp-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
|
||||
// Generate valid JWT token
|
||||
|
|
@ -97,7 +95,7 @@ func TestPublishIntegration(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, publishReq.Name, response.Name)
|
||||
assert.Equal(t, publishReq.VersionDetail.Version, response.VersionDetail.Version)
|
||||
assert.Equal(t, publishReq.Version, response.Version)
|
||||
})
|
||||
|
||||
t.Run("successful publish with none auth (no prefix)", func(t *testing.T) {
|
||||
|
|
@ -109,9 +107,7 @@ func TestPublishIntegration(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/test-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
|
||||
// Generate valid JWT token with wildcard permission
|
||||
|
|
@ -166,7 +162,7 @@ func TestPublishIntegration(t *testing.T) {
|
|||
publishReq := apiv0.ServerJSON{
|
||||
Name: "io.github.domdomegg/test-server",
|
||||
Description: "Test server",
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
|
||||
body, err := json.Marshal(publishReq)
|
||||
|
|
@ -187,9 +183,7 @@ func TestPublishIntegration(t *testing.T) {
|
|||
publishReq := apiv0.ServerJSON{
|
||||
Name: "io.github.other/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Repository: model.Repository{
|
||||
URL: "https://github.com/example/test-server",
|
||||
Source: "github",
|
||||
|
|
@ -225,9 +219,7 @@ func TestPublishIntegration(t *testing.T) {
|
|||
publishReq := apiv0.ServerJSON{
|
||||
Name: "io.github.domdomegg/airtable-mcp-server",
|
||||
Description: "A test server with MCPB package",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.7.2",
|
||||
},
|
||||
Version: "1.7.2",
|
||||
Status: model.StatusActive,
|
||||
Packages: []model.Package{
|
||||
{
|
||||
|
|
@ -269,7 +261,7 @@ func TestPublishIntegration(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, publishReq.Name, response.Name)
|
||||
assert.Equal(t, publishReq.VersionDetail.Version, response.VersionDetail.Version)
|
||||
assert.Equal(t, publishReq.Version, response.Version)
|
||||
assert.Len(t, response.Packages, 1)
|
||||
assert.Equal(t, model.RegistryTypeMCPB, response.Packages[0].RegistryType)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -47,9 +47,7 @@ func TestPublishRegistryValidation(t *testing.T) {
|
|||
publishReq := apiv0.ServerJSON{
|
||||
Name: "com.example/test-server-with-npm",
|
||||
Description: "A test server with invalid npm package reference",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
RegistryType: model.RegistryTypeNPM,
|
||||
|
|
@ -90,9 +88,7 @@ func TestPublishRegistryValidation(t *testing.T) {
|
|||
publishReq := apiv0.ServerJSON{
|
||||
Name: "com.example/test-server-mcpb-validation",
|
||||
Description: "A test server with MCPB package and registry validation enabled",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "0.0.36",
|
||||
},
|
||||
Version: "0.0.36",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
RegistryType: model.RegistryTypeMCPB,
|
||||
|
|
@ -133,7 +129,7 @@ func TestPublishRegistryValidation(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, publishReq.Name, response.Name)
|
||||
assert.Equal(t, publishReq.VersionDetail.Version, response.VersionDetail.Version)
|
||||
assert.Equal(t, publishReq.Version, response.Version)
|
||||
assert.Len(t, response.Packages, 1)
|
||||
assert.Equal(t, model.RegistryTypeMCPB, response.Packages[0].RegistryType)
|
||||
})
|
||||
|
|
@ -142,9 +138,7 @@ func TestPublishRegistryValidation(t *testing.T) {
|
|||
publishReq := apiv0.ServerJSON{
|
||||
Name: "com.example/test-server-multiple-packages",
|
||||
Description: "A test server with multiple packages where second fails",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
RegistryType: model.RegistryTypeMCPB,
|
||||
|
|
@ -195,9 +189,7 @@ func TestPublishRegistryValidation(t *testing.T) {
|
|||
publishReq := apiv0.ServerJSON{
|
||||
Name: "com.example/test-server-first-package-fails",
|
||||
Description: "A test server where first package fails",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
RegistryType: model.RegistryTypeNPM,
|
||||
|
|
|
|||
|
|
@ -63,9 +63,7 @@ func TestPublishEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/test-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
tokenClaims: &auth.JWTClaims{
|
||||
AuthMethod: auth.MethodGitHubAT,
|
||||
|
|
@ -89,9 +87,7 @@ func TestPublishEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/test-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
tokenClaims: &auth.JWTClaims{
|
||||
AuthMethod: auth.MethodNone,
|
||||
|
|
@ -119,7 +115,7 @@ func TestPublishEndpoint(t *testing.T) {
|
|||
requestBody: apiv0.ServerJSON{
|
||||
Name: "io.github.domdomegg/test-server",
|
||||
Description: "Test server",
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
authHeader: "InvalidFormat",
|
||||
setupRegistryService: func(_ service.RegistryService) {
|
||||
|
|
@ -133,9 +129,7 @@ func TestPublishEndpoint(t *testing.T) {
|
|||
requestBody: apiv0.ServerJSON{
|
||||
Name: "test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
authHeader: "Bearer invalidToken",
|
||||
setupRegistryService: func(_ service.RegistryService) {
|
||||
|
|
@ -149,9 +143,7 @@ func TestPublishEndpoint(t *testing.T) {
|
|||
requestBody: apiv0.ServerJSON{
|
||||
Name: "io.github.other/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Repository: model.Repository{
|
||||
URL: "https://github.com/example/test-server",
|
||||
Source: "github",
|
||||
|
|
@ -175,9 +167,7 @@ func TestPublishEndpoint(t *testing.T) {
|
|||
requestBody: apiv0.ServerJSON{
|
||||
Name: "example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Repository: model.Repository{
|
||||
URL: "https://github.com/example/test-server",
|
||||
Source: "github",
|
||||
|
|
@ -195,9 +185,7 @@ func TestPublishEndpoint(t *testing.T) {
|
|||
existingServer := apiv0.ServerJSON{
|
||||
Name: "example/test-server",
|
||||
Description: "Existing test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Repository: model.Repository{
|
||||
URL: "https://github.com/example/test-server-existing",
|
||||
Source: "github",
|
||||
|
|
@ -214,9 +202,7 @@ func TestPublishEndpoint(t *testing.T) {
|
|||
requestBody: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server-mcpb",
|
||||
Description: "A test server with MCPB package",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
RegistryType: model.RegistryTypeMCPB,
|
||||
|
|
|
|||
|
|
@ -41,9 +41,7 @@ func TestServersListEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/test-server-1",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
server2 := apiv0.ServerJSON{
|
||||
Name: "com.example/test-server-2",
|
||||
|
|
@ -53,9 +51,7 @@ func TestServersListEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/test-server-2",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "2.0.0",
|
||||
},
|
||||
Version: "2.0.0",
|
||||
}
|
||||
_, _ = registry.Publish(server1)
|
||||
_, _ = registry.Publish(server2)
|
||||
|
|
@ -75,9 +71,7 @@ func TestServersListEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/test-server-3",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.5.0",
|
||||
},
|
||||
Version: "1.5.0",
|
||||
}
|
||||
_, _ = registry.Publish(server)
|
||||
},
|
||||
|
|
@ -139,7 +133,7 @@ func TestServersListEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/test-matching",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
server2 := apiv0.ServerJSON{
|
||||
Name: "com.example/other-server",
|
||||
|
|
@ -149,7 +143,7 @@ func TestServersListEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/other",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
_, _ = registry.Publish(server1)
|
||||
_, _ = registry.Publish(server2)
|
||||
|
|
@ -169,7 +163,7 @@ func TestServersListEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/recent",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
_, _ = registry.Publish(server)
|
||||
},
|
||||
|
|
@ -188,7 +182,7 @@ func TestServersListEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/versioned",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
server2 := apiv0.ServerJSON{
|
||||
Name: "com.example/versioned-server",
|
||||
|
|
@ -198,7 +192,7 @@ func TestServersListEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/versioned",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{Version: "2.0.0"},
|
||||
Version: "2.0.0",
|
||||
}
|
||||
_, _ = registry.Publish(server1)
|
||||
_, _ = registry.Publish(server2) // This will be marked as latest
|
||||
|
|
@ -218,7 +212,7 @@ func TestServersListEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/combined",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
server2 := apiv0.ServerJSON{
|
||||
Name: "com.example/other-server",
|
||||
|
|
@ -228,7 +222,7 @@ func TestServersListEndpoint(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/nomatch",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{Version: "1.0.0"},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
_, _ = registry.Publish(server1)
|
||||
_, _ = registry.Publish(server2)
|
||||
|
|
@ -342,9 +336,7 @@ func TestServersDetailEndpoint(t *testing.T) {
|
|||
testServer, err := registryService.Publish(apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
|
||||
|
|
@ -430,9 +422,7 @@ func TestServersEndpointsIntegration(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/integration-test",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
}
|
||||
|
||||
published, err := registryService.Publish(testServer)
|
||||
|
|
@ -488,7 +478,7 @@ func TestServersEndpointsIntegration(t *testing.T) {
|
|||
assert.Equal(t, servers[0].Name, listResp.Servers[0].Name)
|
||||
assert.Equal(t, servers[0].Description, listResp.Servers[0].Description)
|
||||
assert.Equal(t, servers[0].Repository, listResp.Servers[0].Repository)
|
||||
assert.Equal(t, servers[0].VersionDetail, listResp.Servers[0].VersionDetail)
|
||||
assert.Equal(t, servers[0].Version, listResp.Servers[0].Version)
|
||||
}
|
||||
})
|
||||
|
||||
|
|
@ -522,7 +512,7 @@ func TestServersEndpointsIntegration(t *testing.T) {
|
|||
assert.Equal(t, serverDetail.Name, serverDetailResp.Name)
|
||||
assert.Equal(t, serverDetail.Description, serverDetailResp.Description)
|
||||
assert.Equal(t, serverDetail.Repository, serverDetailResp.Repository)
|
||||
assert.Equal(t, serverDetail.VersionDetail, serverDetailResp.VersionDetail)
|
||||
assert.Equal(t, serverDetail.Version, serverDetailResp.Version)
|
||||
})
|
||||
|
||||
// Verify mock expectations
|
||||
|
|
|
|||
|
|
@ -30,9 +30,7 @@ func TestPrometheusHandler(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "example/test-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "2.0.0",
|
||||
},
|
||||
Version: "2.0.0",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ func (db *MemoryDB) matchesFilter(entry *apiv0.ServerJSON, filter *ServerFilter)
|
|||
|
||||
// Check exact version filter
|
||||
if filter.Version != nil {
|
||||
if entry.VersionDetail.Version != *filter.Version {
|
||||
if entry.Version != *filter.Version {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,9 +29,7 @@ func TestImportService_LocalFile(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "123",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Meta: &apiv0.ServerMeta{
|
||||
Official: &apiv0.RegistryExtensions{
|
||||
ID: "test-id-1",
|
||||
|
|
@ -75,9 +73,7 @@ func TestImportService_HTTPFile(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "123",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "2.0.0",
|
||||
},
|
||||
Version: "2.0.0",
|
||||
Meta: &apiv0.ServerMeta{
|
||||
Official: &apiv0.RegistryExtensions{
|
||||
ID: "test-id-2",
|
||||
|
|
@ -120,9 +116,7 @@ func TestImportService_RegistryAPI(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "123",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Meta: &apiv0.ServerMeta{
|
||||
Official: &apiv0.RegistryExtensions{
|
||||
ID: "api-test-id-1",
|
||||
|
|
@ -140,9 +134,7 @@ func TestImportService_RegistryAPI(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "456",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "2.0.0",
|
||||
},
|
||||
Version: "2.0.0",
|
||||
Meta: &apiv0.ServerMeta{
|
||||
Official: &apiv0.RegistryExtensions{
|
||||
ID: "api-test-id-2",
|
||||
|
|
|
|||
|
|
@ -102,8 +102,8 @@ func (s *registryServiceImpl) Publish(req apiv0.ServerJSON) (*apiv0.ServerJSON,
|
|||
|
||||
// Check this isn't a duplicate version
|
||||
for _, server := range existingServerVersions {
|
||||
existingVersion := server.VersionDetail.Version
|
||||
if existingVersion == serverJSON.VersionDetail.Version {
|
||||
existingVersion := server.Version
|
||||
if existingVersion == serverJSON.Version {
|
||||
return nil, database.ErrInvalidVersion
|
||||
}
|
||||
}
|
||||
|
|
@ -117,8 +117,8 @@ func (s *registryServiceImpl) Publish(req apiv0.ServerJSON) (*apiv0.ServerJSON,
|
|||
existingPublishedAt = existingLatest.Meta.Official.PublishedAt
|
||||
}
|
||||
isNewLatest = CompareVersions(
|
||||
serverJSON.VersionDetail.Version,
|
||||
existingLatest.VersionDetail.Version,
|
||||
serverJSON.Version,
|
||||
existingLatest.Version,
|
||||
publishTime,
|
||||
existingPublishedAt,
|
||||
) > 0
|
||||
|
|
@ -138,7 +138,6 @@ func (s *registryServiceImpl) Publish(req apiv0.ServerJSON) (*apiv0.ServerJSON,
|
|||
PublishedAt: publishTime,
|
||||
UpdatedAt: publishTime,
|
||||
IsLatest: isNewLatest,
|
||||
ReleaseDate: publishTime.Format(time.RFC3339),
|
||||
}
|
||||
|
||||
// Create server in database
|
||||
|
|
|
|||
|
|
@ -18,9 +18,7 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) {
|
|||
"existing1": {
|
||||
Name: "com.example/existing-server",
|
||||
Description: "An existing server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{Type: "streamable-http", URL: "https://api.example.com/mcp"},
|
||||
{Type: "sse", URL: "https://webhook.example.com/sse"},
|
||||
|
|
@ -29,9 +27,7 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) {
|
|||
"existing2": {
|
||||
Name: "com.microsoft/another-server",
|
||||
Description: "Another existing server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{Type: "streamable-http", URL: "https://api.microsoft.com/mcp"},
|
||||
},
|
||||
|
|
@ -59,9 +55,7 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/new-server",
|
||||
Description: "A new server with no remotes",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{},
|
||||
},
|
||||
expectError: false,
|
||||
|
|
@ -71,9 +65,7 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/new-server",
|
||||
Description: "A new server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{Type: "streamable-http", URL: "https://new.example.com/mcp"},
|
||||
{Type: "sse", URL: "https://unique.example.com/sse"},
|
||||
|
|
@ -86,9 +78,7 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/new-server",
|
||||
Description: "A new server with duplicate URL",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{Type: "streamable-http", URL: "https://api.example.com/mcp"}, // This URL already exists
|
||||
},
|
||||
|
|
@ -101,9 +91,7 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/existing-server", // Same name as existing
|
||||
Description: "Updated existing server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.1.0",
|
||||
},
|
||||
Version: "1.1.0",
|
||||
Remotes: []model.Transport{
|
||||
{Type: "streamable-http", URL: "https://api.example.com/mcp"}, // Same URL as before
|
||||
},
|
||||
|
|
|
|||
|
|
@ -27,9 +27,7 @@ func TestValidate(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "owner/repo",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
@ -58,9 +56,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://bitbucket.org/owner/repo",
|
||||
Source: "bitbucket", // Not in validSources
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
expectedError: validators.ErrInvalidRepositoryURL.Error(),
|
||||
},
|
||||
|
|
@ -73,9 +69,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://github.com/owner", // Missing repo name
|
||||
Source: "github",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
expectedError: validators.ErrInvalidRepositoryURL.Error(),
|
||||
},
|
||||
|
|
@ -88,9 +82,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://gitlab.com", // Missing owner and repo
|
||||
Source: "gitlab",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
expectedError: validators.ErrInvalidRepositoryURL.Error(),
|
||||
},
|
||||
|
|
@ -104,9 +96,7 @@ func TestValidate(t *testing.T) {
|
|||
Source: "github",
|
||||
Subfolder: "servers/my-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
expectedError: "",
|
||||
},
|
||||
|
|
@ -120,9 +110,7 @@ func TestValidate(t *testing.T) {
|
|||
Source: "github",
|
||||
Subfolder: "../parent/folder",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
expectedError: validators.ErrInvalidSubfolderPath.Error(),
|
||||
},
|
||||
|
|
@ -136,9 +124,7 @@ func TestValidate(t *testing.T) {
|
|||
Source: "github",
|
||||
Subfolder: "/absolute/path",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
expectedError: validators.ErrInvalidSubfolderPath.Error(),
|
||||
},
|
||||
|
|
@ -152,9 +138,7 @@ func TestValidate(t *testing.T) {
|
|||
Source: "github",
|
||||
Subfolder: "servers/my-server/",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
expectedError: validators.ErrInvalidSubfolderPath.Error(),
|
||||
},
|
||||
|
|
@ -168,9 +152,7 @@ func TestValidate(t *testing.T) {
|
|||
Source: "github",
|
||||
Subfolder: "servers/my server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
expectedError: validators.ErrInvalidSubfolderPath.Error(),
|
||||
},
|
||||
|
|
@ -184,9 +166,7 @@ func TestValidate(t *testing.T) {
|
|||
Source: "github",
|
||||
Subfolder: "servers//my-server",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
},
|
||||
expectedError: validators.ErrInvalidSubfolderPath.Error(),
|
||||
},
|
||||
|
|
@ -199,9 +179,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://github.com/owner/repo",
|
||||
Source: "github",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test package with spaces",
|
||||
|
|
@ -224,9 +202,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://github.com/owner/repo",
|
||||
Source: "github",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "valid-package",
|
||||
|
|
@ -257,9 +233,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://github.com/owner/repo",
|
||||
Source: "github",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "streamable-http",
|
||||
|
|
@ -278,9 +252,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://github.com/owner/repo",
|
||||
Source: "github",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "streamable-http",
|
||||
|
|
@ -299,9 +271,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://github.com/owner/repo",
|
||||
Source: "github",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "streamable-http",
|
||||
|
|
@ -320,9 +290,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://github.com/owner/repo",
|
||||
Source: "github",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "streamable-http",
|
||||
|
|
@ -341,9 +309,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://github.com/owner/repo",
|
||||
Source: "github",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "streamable-http",
|
||||
|
|
@ -366,9 +332,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://github.com/owner/repo",
|
||||
Source: "github",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: nil,
|
||||
Remotes: nil,
|
||||
},
|
||||
|
|
@ -383,9 +347,7 @@ func TestValidate(t *testing.T) {
|
|||
URL: "https://github.com/owner/repo",
|
||||
Source: "github",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{},
|
||||
Remotes: []model.Transport{},
|
||||
},
|
||||
|
|
@ -836,9 +798,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
@ -856,9 +816,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
@ -878,9 +836,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
@ -899,9 +855,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
@ -924,9 +878,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
@ -944,9 +896,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
@ -967,9 +917,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
@ -988,9 +936,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
@ -1009,9 +955,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
@ -1030,9 +974,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "streamable-http",
|
||||
|
|
@ -1047,9 +989,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "streamable-http",
|
||||
|
|
@ -1064,9 +1004,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "sse",
|
||||
|
|
@ -1081,9 +1019,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "sse",
|
||||
|
|
@ -1098,9 +1034,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "stdio",
|
||||
|
|
@ -1114,9 +1048,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "websocket",
|
||||
|
|
@ -1132,9 +1064,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
@ -1153,9 +1083,7 @@ func TestValidate_TransportValidation(t *testing.T) {
|
|||
serverDetail: apiv0.ServerJSON{
|
||||
Name: "com.example/test-server",
|
||||
Description: "A test server",
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Remotes: []model.Transport{
|
||||
{
|
||||
Type: "streamable-http",
|
||||
|
|
@ -1232,9 +1160,7 @@ func TestValidate_RegistryTypesAndUrls(t *testing.T) {
|
|||
Source: "github",
|
||||
ID: "owner/repo",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: tc.identifier,
|
||||
|
|
@ -1270,9 +1196,7 @@ func createValidServerWithArgument(arg model.Argument) apiv0.ServerJSON {
|
|||
Source: "github",
|
||||
ID: "owner/repo",
|
||||
},
|
||||
VersionDetail: model.VersionDetail{
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Version: "1.0.0",
|
||||
Packages: []model.Package{
|
||||
{
|
||||
Identifier: "test-package",
|
||||
|
|
|
|||
Loading…
Reference in a new issue