diff --git a/info.go b/info.go index fde2bc98e..b06dffdbe 100644 --- a/info.go +++ b/info.go @@ -409,6 +409,11 @@ func (t JSONTime) Time() time.Time { func (t *JSONTime) UnmarshalJSON(buf []byte) error { s := bytes.Trim(buf, `"`) + if bytes.EqualFold(s, []byte("null")) { + *t = JSONTime(0) + return nil + } + v, err := strconv.Atoi(string(s)) if err != nil { return err diff --git a/info_test.go b/info_test.go new file mode 100644 index 000000000..baf91d0b9 --- /dev/null +++ b/info_test.go @@ -0,0 +1,44 @@ +package slack + +import ( + "testing" +) + +func TestJSONTime_UnmarshalJSON(t *testing.T) { + type args struct { + buf []byte + } + tests := []struct { + name string + args args + wantTr JSONTime + wantErr bool + }{ + { + "acceptable int64 timestamp", + args{[]byte(`1643435556`)}, + JSONTime(1643435556), + false, + }, + { + "acceptable string timestamp", + args{[]byte(`"1643435556"`)}, + JSONTime(1643435556), + false, + }, + { + "null", + args{[]byte(`null`)}, + JSONTime(0), + false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var tr JSONTime + if err := tr.UnmarshalJSON(tt.args.buf); (err != nil) != tt.wantErr { + t.Errorf("JSONTime.UnmarshalJSON() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +}