Skip to content

Commit 4572af0

Browse files
committed
semantic merge of #319
🏠 Remote-Dev: homespace
1 parent 270e25b commit 4572af0

File tree

6 files changed

+255
-198
lines changed

6 files changed

+255
-198
lines changed

internal/database/import.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,12 @@ func ReadSeedFile(ctx context.Context, path string) ([]*apiv0.ServerRecord, erro
5151
}
5252

5353
// Validate servers and collect warnings instead of failing the whole batch
54-
validator := validators.NewObjectValidator()
5554
var validRecords []*apiv0.ServerRecord
5655
var invalidServers []string
5756
var validationFailures []string
5857

5958
for _, response := range serverResponses {
60-
if err := validator.Validate(&response.Server); err != nil {
59+
if err := validators.ValidateServerJSON(&response.Server); err != nil {
6160
// Log warning and track invalid server instead of failing
6261
invalidServers = append(invalidServers, response.Server.Name)
6362
validationFailures = append(validationFailures, fmt.Sprintf("Server '%s': %v", response.Server.Name, err))

internal/database/import_test.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func TestReadSeedFile_LocalFile(t *testing.T) {
2121
seedData := []apiv0.ServerRecord{
2222
{
2323
Server: model.ServerJSON{
24-
Name: "test-server-1",
24+
Name: "com.example/test-server-1",
2525
Description: "Test server 1",
2626
Repository: model.Repository{
2727
URL: "https://github.com/test/repo1",
@@ -31,6 +31,11 @@ func TestReadSeedFile_LocalFile(t *testing.T) {
3131
VersionDetail: model.VersionDetail{
3232
Version: "1.0.0",
3333
},
34+
Remotes: []model.Remote{
35+
{
36+
URL: "https://example.com/remote",
37+
},
38+
},
3439
},
3540
XIOModelContextProtocolRegistry: apiv0.RegistryExtensions{
3641
ID: "test-id-1",
@@ -61,16 +66,21 @@ func TestReadSeedFile_LocalFile(t *testing.T) {
6166
result, err := database.ReadSeedFile(context.Background(), tempFile)
6267
assert.NoError(t, err)
6368
assert.Len(t, result, 1)
64-
assert.Equal(t, "test-server-1", result[0].Server.Name)
69+
assert.Equal(t, "com.example/test-server-1", result[0].Server.Name)
6570
}
6671

6772
func TestReadSeedFile_DirectHTTPURL(t *testing.T) {
6873
// Create a test HTTP server that serves seed JSON directly in extension wrapper format
6974
seedData := []apiv0.ServerRecord{
7075
{
7176
Server: model.ServerJSON{
72-
Name: "test-server-1",
77+
Name: "com.example/test-server-1",
7378
Description: "Test server 1",
79+
Remotes: []model.Remote{
80+
{
81+
URL: "https://example.com/remote",
82+
},
83+
},
7484
},
7585
XIOModelContextProtocolRegistry: apiv0.RegistryExtensions{
7686
ID: "test-id-1",
@@ -93,7 +103,7 @@ func TestReadSeedFile_DirectHTTPURL(t *testing.T) {
93103
result, err := database.ReadSeedFile(context.Background(), server.URL+"/seed.json")
94104
assert.NoError(t, err)
95105
assert.Len(t, result, 1)
96-
assert.Equal(t, "test-server-1", result[0].Server.Name)
106+
assert.Equal(t, "com.example/test-server-1", result[0].Server.Name)
97107
}
98108

99109
func TestReadSeedFile_RegistryURL(t *testing.T) {

internal/validators/argument_validator_test.go

Lines changed: 0 additions & 165 deletions
This file was deleted.

internal/validators/validators.go

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -72,43 +72,39 @@ func validatePackageField(obj *model.Package) error {
7272
}
7373

7474
// Validate runtime arguments
75-
argumentValidator := NewArgumentValidator()
7675
for _, arg := range obj.RuntimeArguments {
77-
if err := argumentValidator.Validate(&arg); err != nil {
76+
if err := validateArgument(&arg); err != nil {
7877
return fmt.Errorf("invalid runtime argument: %w", err)
7978
}
8079
}
8180

8281
// Validate package arguments
8382
for _, arg := range obj.PackageArguments {
84-
if err := argumentValidator.Validate(&arg); err != nil {
83+
if err := validateArgument(&arg); err != nil {
8584
return fmt.Errorf("invalid package argument: %w", err)
8685
}
8786
}
8887

8988
return nil
9089
}
9190

92-
// ArgumentValidator validates argument details
93-
type ArgumentValidator struct{}
94-
95-
// Validate checks if the argument details are valid
96-
func (av *ArgumentValidator) Validate(obj *model.Argument) error {
91+
// validateArgument validates argument details
92+
func validateArgument(obj *model.Argument) error {
9793
if obj.Type == model.ArgumentTypeNamed {
9894
// Validate named argument name format
99-
if err := av.validateNamedArgumentName(obj.Name); err != nil {
95+
if err := validateNamedArgumentName(obj.Name); err != nil {
10096
return err
10197
}
10298

10399
// Validate value and default don't start with the name
104-
if err := av.validateValueFields(obj.Name, obj.Value, obj.Default); err != nil {
100+
if err := validateArgumentValueFields(obj.Name, obj.Value, obj.Default); err != nil {
105101
return err
106102
}
107103
}
108104
return nil
109105
}
110106

111-
func (av *ArgumentValidator) validateNamedArgumentName(name string) error {
107+
func validateNamedArgumentName(name string) error {
112108
// Check if name is required for named arguments
113109
if name == "" {
114110
return ErrNamedArgumentNameRequired
@@ -125,7 +121,7 @@ func (av *ArgumentValidator) validateNamedArgumentName(name string) error {
125121
return nil
126122
}
127123

128-
func (av *ArgumentValidator) validateValueFields(name, value, defaultValue string) error {
124+
func validateArgumentValueFields(name, value, defaultValue string) error {
129125
// Check if value starts with the argument name (using startsWith, not contains)
130126
if value != "" && strings.HasPrefix(value, name) {
131127
return fmt.Errorf("%w: value starts with argument name '%s': %s", ErrArgumentValueStartsWithName, name, value)
@@ -138,11 +134,6 @@ func (av *ArgumentValidator) validateValueFields(name, value, defaultValue strin
138134
return nil
139135
}
140136

141-
// NewArgumentValidator creates a new ArgumentValidator instance
142-
func NewArgumentValidator() *ArgumentValidator {
143-
return &ArgumentValidator{}
144-
}
145-
146137
func validateRemote(obj *model.Remote) error {
147138
if !IsValidURL(obj.URL) {
148139
return fmt.Errorf("%w: %s", ErrInvalidRemoteURL, obj.URL)

0 commit comments

Comments
 (0)