Skip to content

Commit b7affd3

Browse files
katarinazapraznaTenSt
authored andcommitted
feat: add AdvisoryUpdateEvent with tests
1 parent 2b20763 commit b7affd3

2 files changed

Lines changed: 124 additions & 0 deletions

File tree

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package mqueue
2+
3+
import (
4+
"app/base/types"
5+
"context"
6+
7+
"github.com/bytedance/sonic"
8+
"github.com/google/uuid"
9+
"github.com/pkg/errors"
10+
)
11+
12+
type AdvisoryUpdateEvent struct {
13+
RhAccountID int `json:"rh_account_id"`
14+
WorkspaceID uuid.UUID `json:"workspace_id"`
15+
InventoryID uuid.UUID `json:"inventory_id"`
16+
AdvisoryIDs []int64 `json:"advisory_ids"`
17+
ProducedAt types.Rfc3339Timestamp `json:"produced_at"`
18+
}
19+
20+
type AdvisoryUpdateEvents []AdvisoryUpdateEvent
21+
22+
func (event *AdvisoryUpdateEvent) createKafkaMessage() (KafkaMessage, error) {
23+
data, err := sonic.Marshal(event)
24+
if err != nil {
25+
return KafkaMessage{}, errors.Wrap(err, "Serializing advisory update event")
26+
}
27+
return KafkaMessage{Value: data}, nil
28+
}
29+
30+
func (events AdvisoryUpdateEvents) WriteEvents(ctx context.Context, w Writer) error {
31+
msgs := make([]KafkaMessage, 0, len(events))
32+
for i := range events {
33+
msg, err := events[i].createKafkaMessage()
34+
if err != nil {
35+
return err
36+
}
37+
msgs = append(msgs, msg)
38+
}
39+
return w.WriteMessages(ctx, msgs...)
40+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package mqueue
2+
3+
import (
4+
"app/base/types"
5+
"context"
6+
"testing"
7+
"time"
8+
9+
"github.com/bytedance/sonic"
10+
"github.com/google/uuid"
11+
"github.com/stretchr/testify/assert"
12+
)
13+
14+
var (
15+
testWorkspaceID = uuid.New()
16+
testNow = types.Rfc3339Timestamp(time.Now())
17+
)
18+
19+
func TestAdvisoryUpdateEventMarshal(t *testing.T) {
20+
event := AdvisoryUpdateEvent{
21+
RhAccountID: 1,
22+
WorkspaceID: testWorkspaceID,
23+
InventoryID: uuid.New(),
24+
AdvisoryIDs: []int64{101, 202, 303},
25+
ProducedAt: testNow,
26+
}
27+
28+
data, err := sonic.Marshal(&event)
29+
assert.NoError(t, err)
30+
31+
var parsed AdvisoryUpdateEvent
32+
err = sonic.Unmarshal(data, &parsed)
33+
assert.NoError(t, err)
34+
assert.Equal(t, event.RhAccountID, parsed.RhAccountID)
35+
assert.Equal(t, event.WorkspaceID, parsed.WorkspaceID)
36+
assert.Equal(t, event.InventoryID, parsed.InventoryID)
37+
assert.Equal(t, event.AdvisoryIDs, parsed.AdvisoryIDs)
38+
assert.NotNil(t, parsed.ProducedAt)
39+
}
40+
41+
func TestAdvisoryUpdateEventsWriteEvents(t *testing.T) {
42+
var writer Writer = &MockKafkaWriter{}
43+
44+
events := AdvisoryUpdateEvents{
45+
{
46+
RhAccountID: 1,
47+
WorkspaceID: testWorkspaceID,
48+
InventoryID: uuid.New(),
49+
AdvisoryIDs: []int64{100, 200},
50+
ProducedAt: testNow,
51+
},
52+
{
53+
RhAccountID: 2,
54+
WorkspaceID: testWorkspaceID,
55+
InventoryID: uuid.New(),
56+
AdvisoryIDs: []int64{300},
57+
ProducedAt: testNow,
58+
},
59+
}
60+
61+
err := SendMessages(context.Background(), writer, &events)
62+
assert.NoError(t, err)
63+
64+
mockWriter := writer.(*MockKafkaWriter)
65+
assert.Equal(t, 2, len(mockWriter.Messages))
66+
67+
var firstEvent AdvisoryUpdateEvent
68+
err = sonic.Unmarshal(mockWriter.Messages[0].Value, &firstEvent)
69+
assert.NoError(t, err)
70+
assert.Equal(t, events[0].RhAccountID, firstEvent.RhAccountID)
71+
assert.Equal(t, events[0].WorkspaceID, firstEvent.WorkspaceID)
72+
assert.Equal(t, events[0].InventoryID, firstEvent.InventoryID)
73+
assert.Equal(t, events[0].AdvisoryIDs, firstEvent.AdvisoryIDs)
74+
assert.NotNil(t, firstEvent.ProducedAt)
75+
76+
var secondEvent AdvisoryUpdateEvent
77+
err = sonic.Unmarshal(mockWriter.Messages[1].Value, &secondEvent)
78+
assert.NoError(t, err)
79+
assert.Equal(t, events[1].RhAccountID, secondEvent.RhAccountID)
80+
assert.Equal(t, events[1].WorkspaceID, secondEvent.WorkspaceID)
81+
assert.Equal(t, events[1].InventoryID, secondEvent.InventoryID)
82+
assert.Equal(t, events[1].AdvisoryIDs, secondEvent.AdvisoryIDs)
83+
assert.NotNil(t, secondEvent.ProducedAt)
84+
}

0 commit comments

Comments
 (0)