86 lines
1.5 KiB
Go
86 lines
1.5 KiB
Go
|
package pm
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/json"
|
||
|
"errors"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestValid(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
label string
|
||
|
m Meta
|
||
|
ok bool
|
||
|
err error
|
||
|
}{
|
||
|
{
|
||
|
label: "valid",
|
||
|
m: Meta{
|
||
|
Name: "heat",
|
||
|
Version: "1.1.0",
|
||
|
Description: "some description",
|
||
|
},
|
||
|
ok: true,
|
||
|
},
|
||
|
{
|
||
|
label: "missing name",
|
||
|
m: Meta{
|
||
|
Version: "1.1.0",
|
||
|
Description: "some description",
|
||
|
},
|
||
|
err: errors.New("name"),
|
||
|
},
|
||
|
{
|
||
|
label: "missing version",
|
||
|
m: Meta{
|
||
|
Name: "heat",
|
||
|
Description: "some description",
|
||
|
},
|
||
|
err: errors.New("version"),
|
||
|
},
|
||
|
{
|
||
|
label: "missing description",
|
||
|
m: Meta{
|
||
|
Name: "heat",
|
||
|
Version: "1.1.0",
|
||
|
},
|
||
|
err: errors.New("description"),
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, test := range tests {
|
||
|
t.Run(test.label, func(t *testing.T) {
|
||
|
ok, err := test.m.Valid()
|
||
|
if got, want := ok, test.ok; got != want {
|
||
|
t.Fatalf("validity: got %v, want %v", got, want)
|
||
|
}
|
||
|
|
||
|
if got, want := err, test.err; (err == nil) != (test.err == nil) {
|
||
|
t.Fatalf("error: got %v, want %v", got, want)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestJsonRoundTrip(t *testing.T) {
|
||
|
b := Meta{
|
||
|
Name: "heat",
|
||
|
Version: "1.1.0",
|
||
|
Description: "make heat using cpus",
|
||
|
}
|
||
|
|
||
|
buf := &bytes.Buffer{}
|
||
|
if err := json.NewEncoder(buf).Encode(&b); err != nil {
|
||
|
t.Fatalf("encode: %v", err)
|
||
|
}
|
||
|
|
||
|
a := Meta{}
|
||
|
if err := json.NewDecoder(buf).Decode(&a); err != nil {
|
||
|
t.Fatalf("decode: %v", err)
|
||
|
}
|
||
|
if b != a {
|
||
|
t.Fatalf("a != b: %v != %v", a, b)
|
||
|
}
|
||
|
}
|