Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions internal/model/job.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ type Allowed struct {
DependencyName string `json:"dependency-name,omitempty" yaml:"dependency-name,omitempty"`
UpdateType string `json:"update-type,omitempty" yaml:"update-type,omitempty"`
UpdateTypes []string `json:"update-types,omitempty" yaml:"update-types,omitempty"`
Versions []string `json:"versions,omitempty" yaml:"versions,omitempty"`
}

type Group struct {
Expand Down
71 changes: 69 additions & 2 deletions internal/model/job_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ func TestAllowedUpdateTypes(t *testing.T) {
}

allowed := input.Job.AllowedUpdates
if len(allowed) != 2 {
t.Fatalf("expected 2 allowed updates, got %d", len(allowed))
if len(allowed) != 3 {
t.Fatalf("expected 3 allowed updates, got %d", len(allowed))
}

// First entry: dependency-type + update-type (existing pattern)
Expand Down Expand Up @@ -88,6 +88,69 @@ func TestAllowedUpdateTypesJSON(t *testing.T) {
}
}

func TestAllowedVersions(t *testing.T) {
var input Input
if err := yaml.Unmarshal([]byte(exampleJob), &input); err != nil {
t.Fatal(err)
}

allowed := input.Job.AllowedUpdates
if len(allowed) != 3 {
t.Fatalf("expected 3 allowed updates, got %d", len(allowed))
}

// First two entries: existing patterns (no versions)
if len(allowed[0].Versions) != 0 {
t.Errorf("expected no versions on first entry, got %v", allowed[0].Versions)
}
if len(allowed[1].Versions) != 0 {
t.Errorf("expected no versions on second entry, got %v", allowed[1].Versions)
}

// Third entry: dependency-name + versions (new feature)
if allowed[2].DependencyName != "lodash" {
t.Errorf("expected dependency-name 'lodash', got %q", allowed[2].DependencyName)
}
expectedVersions := []string{">= 4.0.0", "< 5.0.0"}
if len(allowed[2].Versions) != len(expectedVersions) {
t.Fatalf("expected %d versions, got %d", len(expectedVersions), len(allowed[2].Versions))
}
for i, ev := range expectedVersions {
if allowed[2].Versions[i] != ev {
t.Errorf("versions[%d]: expected %q, got %q", i, ev, allowed[2].Versions[i])
}
}
}

func TestAllowedVersionsJSON(t *testing.T) {
original := Allowed{
DependencyName: "lodash",
Versions: []string{"3.x", "4.x"},
}

data, err := json.Marshal(original)
if err != nil {
t.Fatal(err)
}

expected := `{"dependency-name":"lodash","versions":["3.x","4.x"]}`
if string(data) != expected {
t.Errorf("unexpected JSON output:\n got: %s\n want: %s", string(data), expected)
}

// Verify omitempty: Versions should be absent when nil
empty := Allowed{DependencyName: "lodash"}
data, err = json.Marshal(empty)
if err != nil {
t.Fatal(err)
}

expectedEmpty := `{"dependency-name":"lodash"}`
if string(data) != expectedEmpty {
t.Errorf("unexpected JSON output for empty Versions:\n got: %s\n want: %s", string(data), expectedEmpty)
}
}

func TestExistingPullRequestsNewFormat(t *testing.T) {
testYAML := `---
job:
Expand Down Expand Up @@ -734,6 +797,10 @@ job:
update-types:
- "version-update:semver-minor"
- "version-update:semver-patch"
- dependency-name: "lodash"
versions:
- ">= 4.0.0"
- "< 5.0.0"
dependency-groups:
- name: npm
rules:
Expand Down
Loading