blob: bfda4a5f50b1c92904e0fe3bc08b5dafbf6b0727 [file] [log] [blame]
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package discovery
import (
"fmt"
"testing"
)
func TestVersionSet(t *testing.T) {
tests := []struct {
ConstraintStr string
VersionStr string
ShouldHave bool
}{
// These test cases are not exhaustive since the underlying go-version
// library is well-tested. This is mainly here just to exercise our
// wrapper code, but also used as an opportunity to cover some basic
// but important cases such as the ~> constraint so that we'll be more
// likely to catch any accidental breaking behavior changes in the
// underlying library.
{
">=1.0.0",
"1.0.0",
true,
},
{
">=1.0.0",
"0.0.0",
false,
},
{
">=1.0.0",
"1.1.0-beta1",
false,
},
{
">=1.0.0",
"1.1.0",
true,
},
{
"~>1.1.0-a",
"1.1.0-beta1",
true,
},
{
"~>1.1.0",
"1.1.2",
true,
},
{
"~>1.1.0",
"1.2.0",
false,
},
}
for _, test := range tests {
t.Run(fmt.Sprintf("%s has %s", test.ConstraintStr, test.VersionStr), func(t *testing.T) {
accepted, err := ConstraintStr(test.ConstraintStr).Parse()
if err != nil {
t.Fatalf("unwanted error parsing constraints string %q: %s", test.ConstraintStr, err)
}
version, err := VersionStr(test.VersionStr).Parse()
if err != nil {
t.Fatalf("unwanted error parsing version string %q: %s", test.VersionStr, err)
}
if got, want := accepted.Allows(version), test.ShouldHave; got != want {
t.Errorf("Has returned %#v; want %#v", got, want)
}
})
}
}