summaryrefslogtreecommitdiff
path: root/funcs
diff options
context:
space:
mode:
Diffstat (limited to 'funcs')
-rw-r--r--funcs/semver.go40
-rw-r--r--funcs/semver_test.go61
2 files changed, 101 insertions, 0 deletions
diff --git a/funcs/semver.go b/funcs/semver.go
new file mode 100644
index 00000000..0212c998
--- /dev/null
+++ b/funcs/semver.go
@@ -0,0 +1,40 @@
+package funcs
+
+import (
+ "context"
+
+ "github.com/Masterminds/semver/v3"
+)
+
+// CreateSemverFuncs -
+func CreateSemverFuncs(ctx context.Context) map[string]interface{} {
+ ns := &SemverFuncs{ctx}
+ return map[string]interface{}{
+ "semver": func() interface{} { return ns },
+ }
+}
+
+// SemverFuncs -
+type SemverFuncs struct {
+ ctx context.Context
+}
+
+// Semver -
+func (SemverFuncs) Semver(version string) (*semver.Version, error) {
+ return semver.NewVersion(version)
+}
+
+// CheckConstraint -
+func (SemverFuncs) CheckConstraint(constraint, in string) (bool, error) {
+ c, err := semver.NewConstraint(constraint)
+ if err != nil {
+ return false, err
+ }
+
+ v, err := semver.NewVersion(in)
+ if err != nil {
+ return false, err
+ }
+
+ return c.Check(v), nil
+}
diff --git a/funcs/semver_test.go b/funcs/semver_test.go
new file mode 100644
index 00000000..f10aad5c
--- /dev/null
+++ b/funcs/semver_test.go
@@ -0,0 +1,61 @@
+package funcs
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestSemverFuncs_MatchConstraint(t *testing.T) {
+ tests := []struct {
+ name string
+ constraint string
+ in string
+ want bool
+ wantErr bool
+ }{
+ {
+ name: "mached constraint",
+ constraint: ">=1.0.0",
+ in: "v1.1.1",
+ want: true,
+ wantErr: false,
+ },
+ {
+ name: "not matched constraint",
+ constraint: "<1.0.0",
+ in: "v1.1.1",
+ want: false,
+ wantErr: false,
+ },
+ {
+ name: "wrong constraint",
+ constraint: "abc",
+ in: "v1.1.1",
+ want: false,
+ wantErr: true,
+ },
+ {
+ name: "wrong in",
+ constraint: ">1.0.0",
+ in: "va.b.c",
+ want: false,
+ wantErr: true,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ s := SemverFuncs{
+ ctx: context.Background(),
+ }
+ got, err := s.CheckConstraint(tt.constraint, tt.in)
+ if tt.wantErr {
+ assert.Errorf(t, err, "SemverFuncs.CheckConstraint() error = %v, wantErr %v", err, tt.wantErr)
+ } else {
+ assert.NoErrorf(t, err, "SemverFuncs.CheckConstraint() error = %v, wantErr %v", err, tt.wantErr)
+ assert.Equal(t, tt.want, got)
+ }
+ })
+ }
+}