From 70841d7b1458b089d293d8db9072d68b4f7f6d0e Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Wed, 11 Oct 2023 15:28:40 -0600 Subject: [PATCH] Create internal/thestore/event.Event and merge method --- render-2023-10-11/internal/thestore/event.go | 26 ++++++++ .../internal/thestore/event_test.go | 61 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 render-2023-10-11/internal/thestore/event.go create mode 100644 render-2023-10-11/internal/thestore/event_test.go diff --git a/render-2023-10-11/internal/thestore/event.go b/render-2023-10-11/internal/thestore/event.go new file mode 100644 index 0000000..a74273d --- /dev/null +++ b/render-2023-10-11/internal/thestore/event.go @@ -0,0 +1,26 @@ +package thestore + +type Event struct { + ID string `json:"service-id"` + Region string `json:"region"` + Status string `json:"status"` + URL string `json:"url"` +} + +func (event Event) Push(operation Event) Event { + if event.ID != operation.ID { + panic(operation) + } + + if operation.Region != "" { + event.Region = operation.Region + } + if operation.Status != "" { + event.Status = operation.Status + } + if operation.URL != "" { + event.URL = operation.URL + } + + return event +} diff --git a/render-2023-10-11/internal/thestore/event_test.go b/render-2023-10-11/internal/thestore/event_test.go new file mode 100644 index 0000000..1656ffe --- /dev/null +++ b/render-2023-10-11/internal/thestore/event_test.go @@ -0,0 +1,61 @@ +package thestore_test + +import ( + "render231011/internal/thestore" + "testing" +) + +func TestEventMerging(t *testing.T) { + cases := map[string]struct { + base thestore.Event + operation thestore.Event + want thestore.Event + }{ + "noop on noop": {}, + "add to nothing": { + base: thestore.Event{ + ID: "x", + }, + operation: thestore.Event{ + ID: "x", + Region: "newregion", + Status: "newstatus", + URL: "newurl", + }, + want: thestore.Event{ + ID: "x", + Region: "newregion", + Status: "newstatus", + URL: "newurl", + }, + }, + "change region": { + base: thestore.Event{ + ID: "x", + Region: "region", + Status: "status", + URL: "url", + }, + operation: thestore.Event{ + ID: "x", + Region: "newregion", + }, + want: thestore.Event{ + ID: "x", + Region: "newregion", + Status: "status", + URL: "url", + }, + }, + } + + for name, d := range cases { + c := d + t.Run(name, func(t *testing.T) { + got := c.base.Push(c.operation) + if got != c.want { + t.Errorf("wanted \n\t%+v, got\n\t%+v", c.want, got) + } + }) + } +}