lib/ur: Zero our the value before unmarshal (#6790)
* lib/ur: Zero our the value before unmarshal * Comment * Complete rewrite
This commit is contained in:
parent
78d294f78c
commit
bb76311ec6
|
@ -379,6 +379,10 @@ func (r Report) Value() (driver.Value, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Report) Scan(value interface{}) error {
|
func (r *Report) Scan(value interface{}) error {
|
||||||
|
// Zero out the previous value
|
||||||
|
// JSON un-marshaller does not touch fields that are not in the payload, so we carry over values from a previous
|
||||||
|
// scan.
|
||||||
|
*r = Report{}
|
||||||
b, ok := value.([]byte)
|
b, ok := value.([]byte)
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.New("type assertion to []byte failed")
|
return errors.New("type assertion to []byte failed")
|
||||||
|
|
|
@ -128,3 +128,27 @@ func expect(t *testing.T, since int, b interface{}) {
|
||||||
t.Errorf("%#v != %#v", x, b)
|
t.Errorf("%#v != %#v", x, b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMarshallingBehaviour(t *testing.T) {
|
||||||
|
r := Report{}
|
||||||
|
|
||||||
|
if err := r.Scan([]byte(`{"folderUses":{"sendonly": 100}}`)); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.FolderUses.SendOnly != 100 {
|
||||||
|
t.Errorf("%d != 100", r.FolderUses.SendOnly)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := r.Scan([]byte(`{"folderUses":{"sendreceive": 200}}`)); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.FolderUses.SendReceive != 200 {
|
||||||
|
t.Errorf("%d != 200", r.FolderUses.SendReceive)
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.FolderUses.SendOnly != 0 {
|
||||||
|
t.Errorf("%d != 0", r.FolderUses.SendOnly)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue