Added pm.Meta
This commit is contained in:
parent
4b79c0c765
commit
63c38d5e92
23
meta.go
Normal file
23
meta.go
Normal file
@ -0,0 +1,23 @@
|
||||
package pm
|
||||
|
||||
import "errors"
|
||||
|
||||
type Meta struct {
|
||||
Name string `json:"name"`
|
||||
Version string `json:"version"`
|
||||
Description string `json:"description"`
|
||||
Namespace string `json:"namespace"`
|
||||
}
|
||||
|
||||
func (m *Meta) Valid() (bool, error) {
|
||||
if m.Name == "" {
|
||||
return false, errors.New("name cannot be empty")
|
||||
}
|
||||
if m.Version == "" {
|
||||
return false, errors.New("version cannot be empty")
|
||||
}
|
||||
if m.Description == "" {
|
||||
return false, errors.New("description cannot be empty")
|
||||
}
|
||||
return true, nil
|
||||
}
|
96
meta_test.go
Normal file
96
meta_test.go
Normal file
@ -0,0 +1,96 @@
|
||||
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: "valid with namespace",
|
||||
m: Meta{
|
||||
Name: "heat",
|
||||
Version: "1.1.0",
|
||||
Description: "some description",
|
||||
Namespace: "some/namespace",
|
||||
},
|
||||
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",
|
||||
Namespace: "/darwin/amd64",
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user