diff --git a/log_entry.go b/log_entry.go index d3c0905e..d01bf60a 100644 --- a/log_entry.go +++ b/log_entry.go @@ -40,7 +40,7 @@ type CommonLogEntryField struct { // LogEntry is a list of all of the events that happened to an incident. type LogEntry struct { CommonLogEntryField - Incident Incident + Incident Incident `json:"incident"` } // ListLogEntryResponse is the response data when calling the ListLogEntry API endpoint. @@ -120,3 +120,15 @@ func (c *Channel) UnmarshalJSON(b []byte) error { return nil } + +// MarshalJSON Expands the LogEntry.Channel object to correctly marshal it back +func (c *Channel) MarshalJSON() ([]byte, error) { + raw := map[string]interface{}{} + if c != nil && c.Type != "" { + for k, v := range c.Raw { + raw[k] = v + } + } + + return json.Marshal(raw) +} diff --git a/log_entry_test.go b/log_entry_test.go index fbc6e03d..ee2114ae 100644 --- a/log_entry_test.go +++ b/log_entry_test.go @@ -1,6 +1,7 @@ package pagerduty import ( + "encoding/json" "net/http" "testing" ) @@ -72,3 +73,51 @@ func TestLogEntry_Get(t *testing.T) { } testEqual(t, want, res) } + +func TestChannel_MarhalUnmarshal(t *testing.T) { + logEntryRaw := []byte(`{ + "id": "1", + "type": "trigger_log_entry", + "summary": "foo", + "channel": { + "type": "web_trigger", + "summary": "My new incident", + "details_omitted": false + } + }`) + want := &LogEntry{ + CommonLogEntryField: CommonLogEntryField{ + APIObject: APIObject{ + ID: "1", + Type: "trigger_log_entry", + Summary: "foo", + }, + Channel: Channel{ + Type: "web_trigger", + Raw: map[string]interface{}{ + "type": "web_trigger", + "summary": "My new incident", + "details_omitted": false, + }, + }, + }, + } + + logEntry := &LogEntry{} + if err := json.Unmarshal(logEntryRaw, logEntry); err != nil { + t.Fatal(err) + } + + testEqual(t, want, logEntry) + + newLogEntryRaw, err := json.Marshal(logEntry) + if err != nil { + t.Fatal(err) + } + + newLogEntry := &LogEntry{} + if err := json.Unmarshal(newLogEntryRaw, newLogEntry); err != nil { + t.Fatal(err) + } + testEqual(t, want, newLogEntry) +}