// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: Apache-2.0 package arvados import ( "bytes" "encoding/json" "testing" "time" ) func TestMarshalFiltersWithNanoseconds(t *testing.T) { 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) } } func TestMarshalFiltersWithNil(t *testing.T) { buf, err := json.Marshal([]Filter{ {Attr: "modified_at", Operator: "=", Operand: nil}}) if err != nil { t.Fatal(err) } if expect := []byte(`[["modified_at","=",null]]`); 0 != bytes.Compare(buf, expect) { t.Errorf("Encoded as %q, expected %q", buf, expect) } } func TestUnmarshalFiltersWithNil(t *testing.T) { buf := []byte(`["modified_at","=",null]`) f := &Filter{} err := f.UnmarshalJSON(buf) if err != nil { t.Fatal(err) } expect := Filter{Attr: "modified_at", Operator: "=", Operand: nil} if f.Attr != expect.Attr || f.Operator != expect.Operator || f.Operand != expect.Operand { t.Errorf("Decoded as %q, expected %q", f, expect) } } func TestMarshalFiltersWithBoolean(t *testing.T) { buf, err := json.Marshal([]Filter{ {Attr: "is_active", Operator: "=", Operand: true}}) if err != nil { t.Fatal(err) } if expect := []byte(`[["is_active","=",true]]`); 0 != bytes.Compare(buf, expect) { t.Errorf("Encoded as %q, expected %q", buf, expect) } } func TestUnmarshalFiltersWithBoolean(t *testing.T) { buf := []byte(`["is_active","=",true]`) f := &Filter{} err := f.UnmarshalJSON(buf) if err != nil { t.Fatal(err) } expect := Filter{Attr: "is_active", Operator: "=", Operand: true} if f.Attr != expect.Attr || f.Operator != expect.Operator || f.Operand != expect.Operand { t.Errorf("Decoded as %q, expected %q", f, expect) } }