Merge branch '21535-multi-wf-delete'
[arvados.git] / sdk / go / arvados / resource_list_test.go
index b5e6e7da471e5085d4455500ee1ee593f17d064b..e4d89d62ad3a48b8e57c8bc64e016fb07f7f464d 100644 (file)
@@ -1,21 +1,63 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: Apache-2.0
+
 package arvados
 
 import (
-       "bytes"
        "encoding/json"
-       "testing"
        "time"
+
+       check "gopkg.in/check.v1"
 )
 
-func TestMarshalFiltersWithNanoseconds(t *testing.T) {
+var _ = check.Suite(&filterEncodingSuite{})
+
+type filterEncodingSuite struct{}
+
+func (s *filterEncodingSuite) TestMarshalNanoseconds(c *check.C) {
        t0 := time.Now()
        t0str := t0.Format(time.RFC3339Nano)
        buf, err := json.Marshal([]Filter{
                {Attr: "modified_at", Operator: "=", Operand: t0}})
-       if err != nil {
-               t.Fatal(err)
-       }
-       if expect := []byte(`[["modified_at","=","` + t0str + `"]]`); 0 != bytes.Compare(buf, expect) {
-               t.Errorf("Encoded as %q, expected %q", buf, expect)
-       }
+       c.Assert(err, check.IsNil)
+       c.Check(string(buf), check.Equals, `[["modified_at","=","`+t0str+`"]]`)
+}
+
+func (s *filterEncodingSuite) TestMarshalNil(c *check.C) {
+       buf, err := json.Marshal([]Filter{
+               {Attr: "modified_at", Operator: "=", Operand: nil}})
+       c.Assert(err, check.IsNil)
+       c.Check(string(buf), check.Equals, `[["modified_at","=",null]]`)
+}
+
+func (s *filterEncodingSuite) TestUnmarshalNil(c *check.C) {
+       buf := []byte(`["modified_at","=",null]`)
+       var f Filter
+       err := f.UnmarshalJSON(buf)
+       c.Assert(err, check.IsNil)
+       c.Check(f, check.DeepEquals, Filter{Attr: "modified_at", Operator: "=", Operand: nil})
+}
+
+func (s *filterEncodingSuite) TestMarshalBoolean(c *check.C) {
+       buf, err := json.Marshal([]Filter{
+               {Attr: "is_active", Operator: "=", Operand: true}})
+       c.Assert(err, check.IsNil)
+       c.Check(string(buf), check.Equals, `[["is_active","=",true]]`)
+}
+
+func (s *filterEncodingSuite) TestUnmarshalBoolean(c *check.C) {
+       buf := []byte(`["is_active","=",true]`)
+       var f Filter
+       err := f.UnmarshalJSON(buf)
+       c.Assert(err, check.IsNil)
+       c.Check(f, check.DeepEquals, Filter{Attr: "is_active", Operator: "=", Operand: true})
+}
+
+func (s *filterEncodingSuite) TestUnmarshalBooleanExpression(c *check.C) {
+       buf := []byte(`"(foo < bar)"`)
+       var f Filter
+       err := f.UnmarshalJSON(buf)
+       c.Assert(err, check.IsNil)
+       c.Check(f, check.DeepEquals, Filter{Attr: "(foo < bar)", Operator: "=", Operand: true})
 }