Skip to content

Commit c48f7dc

Browse files
committed
Fixes #60 and adds a new "item-name" flag to allow for the item name to be set.
1 parent 5ac2b2d commit c48f7dc

File tree

12 files changed

+81
-44
lines changed

12 files changed

+81
-44
lines changed

cmd/events.go

+13-7
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ var (
2424
secret string
2525
status string
2626
itemID string
27+
itemName string
2728
cost int64
2829
count int
29-
streamTitle string
30+
description string
3031
)
3132

3233
var eventCmd = &cobra.Command{
@@ -73,18 +74,22 @@ func init() {
7374
eventCmd.AddCommand(triggerCmd, retriggerCmd, verifyCmd)
7475

7576
// trigger flags
77+
// flags for forwarding functionality/changing payloads
7678
triggerCmd.Flags().StringVarP(&forwardAddress, "forward-address", "F", "", "Forward address for mock event.")
77-
triggerCmd.Flags().StringVarP(&transport, "transport", "T", "eventsub", fmt.Sprintf("Preferred transport method for event. Defaults to Webhooks 2/EventSub.\nSupported values: %s", events.ValidTransports()))
79+
triggerCmd.Flags().StringVarP(&transport, "transport", "T", "eventsub", fmt.Sprintf("Preferred transport method for event. Defaults to /EventSub.\nSupported values: %s", events.ValidTransports()))
80+
triggerCmd.Flags().StringVarP(&secret, "secret", "s", "", "Webhook secret. If defined, signs all forwarded events with the SHA256 HMAC.")
81+
82+
// per-topic flags
7883
triggerCmd.Flags().StringVarP(&toUser, "to-user", "t", "", "User ID of the receiver of the event. For example, the user that receives a follow. In most contexts, this is the broadcaster.")
7984
triggerCmd.Flags().StringVarP(&fromUser, "from-user", "f", "", "User ID of the user sending the event, for example the user following another user.")
8085
triggerCmd.Flags().StringVarP(&giftUser, "gift-user", "g", "", "Used only for \"gift\" events. Denotes the User ID of the gifting user.")
8186
triggerCmd.Flags().BoolVarP(&isAnonymous, "anonymous", "a", false, "Denotes if the event is anonymous. Only applies to Gift and Sub events.")
8287
triggerCmd.Flags().IntVarP(&count, "count", "c", 1, "Count of events to events. This will simulate a sub gift, or large number of cheers.")
83-
triggerCmd.Flags().StringVarP(&secret, "secret", "s", "", "Webhook secret. If defined, signs all forwarded events with the SHA256 HMAC.")
8488
triggerCmd.Flags().StringVarP(&status, "status", "S", "", "Status of the event object, currently applies to channel points redemptions.")
85-
triggerCmd.Flags().StringVarP(&itemID, "item-id", "i", "", "Manually set the ID of the event payload item (for example the reward ID in redemption events).")
89+
triggerCmd.Flags().StringVarP(&itemID, "item-id", "i", "", "Manually set the ID of the event payload item (for example the reward ID in redemption events). For stream events, this is the game ID.")
90+
triggerCmd.Flags().StringVarP(&itemName, "item-name", "n", "", "Manually set the name of the event payload item (for example the reward ID in redemption events). For stream events, this is the game title.")
8691
triggerCmd.Flags().Int64VarP(&cost, "cost", "C", 0, "Amount of bits or channel points redeemed/used in the event.")
87-
triggerCmd.Flags().StringVarP(&streamTitle, "description", "d", "", "Title the stream should be updated with.")
92+
triggerCmd.Flags().StringVarP(&description, "description", "d", "", "Title the stream should be updated with.")
8893

8994
// retrigger flags
9095
retriggerCmd.Flags().StringVarP(&forwardAddress, "forward-address", "F", "", "Forward address for mock event.")
@@ -94,7 +99,7 @@ func init() {
9499

95100
// verify-subscription flags
96101
verifyCmd.Flags().StringVarP(&forwardAddress, "forward-address", "F", "", "Forward address for mock event.")
97-
verifyCmd.Flags().StringVarP(&transport, "transport", "T", "eventsub", fmt.Sprintf("Preferred transport method for event. Defaults to Webhooks 2/EventSub.\nSupported values: %s", events.ValidTransports()))
102+
verifyCmd.Flags().StringVarP(&transport, "transport", "T", "eventsub", fmt.Sprintf("Preferred transport method for event. Defaults to EventSub.\nSupported values: %s", events.ValidTransports()))
98103
verifyCmd.Flags().StringVarP(&secret, "secret", "s", "", "Webhook secret. If defined, signs all forwarded events with the SHA256 HMAC.")
99104
verifyCmd.MarkFlagRequired("forward-address")
100105
}
@@ -127,7 +132,8 @@ func triggerCmdRun(cmd *cobra.Command, args []string) {
127132
Status: status,
128133
ItemID: itemID,
129134
Cost: cost,
130-
StreamTitle: streamTitle,
135+
Description: description,
136+
ItemName: itemName,
131137
})
132138

133139
if err != nil {

docs/event.md

+16-14
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,22 @@ Used to either create or send mock events for use with local webhooks testing.
4545

4646
**Flags**
4747

48-
| Flag | Shorthand | Description | Example | Required? (Y/N) |
49-
| ------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | --------------- |
50-
| `--forward-address` | `-F` | Web server address for where to send mock events. | `-F https://localhost:8080` | N |
51-
| `--transport` | `-T` | The method used to send events. Default is eventsub, but can send using websub. | `-T websub` | N |
52-
| `--to-user` | `-t` | Denotes the receiver's TUID of the event, usually the broadcaster. | `-t 44635596` | N |
53-
| `--from-user` | `-f` | Denotes the sender's TUID of the event, for example the user that follows another user or the subscriber to a broadcaster. | `-f 44635596` | N |
54-
| `--gift-user` | `-g` | Used only for subcription-based events, denotes the gifting user ID | `-g 44635596` | N |
55-
| `--secret` | `-s` | Webhook secret. If defined, signs all forwarded events with the SHA256 HMAC. | `-s testsecret` | N |
56-
| `--count` | `-c` | Count of events to fire. This can be used to simulate an influx of subscriptions. | `-c 100` | N |
57-
| `--anonymous` | `-a` | If the event is anonymous. Only applies to `gift` and `cheer` events. | `-a` | N |
58-
| `--status` | `-S` | Status of the event object, currently applies to channel points redemptions. | `-S fulfilled` | N |
59-
| `--item-id` | `-i` | Manually set the ID of the event payload item (for example the reward ID in redemption events). | `-i 032e4a6c-4aef-11eb-a9f5-1f703d1f0b92` | N |
60-
| `--cost` | `-C` | Amount of bits or channel points redeemed/used in the event. | `-C 250` | N |
61-
| `--description` | `-d` | Title the stream should be updated/started with. | `-d Awesome new title!` | N |
48+
| Flag | Shorthand | Description | Example | Required? (Y/N) |
49+
|---------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------|-----------------|
50+
| `--forward-address` | `-F` | Web server address for where to send mock events. | `-F https://localhost:8080` | N |
51+
| `--transport` | `-T` | The method used to send events. Default is eventsub, but can send using websub. | `-T websub` | N |
52+
| `--to-user` | `-t` | Denotes the receiver's TUID of the event, usually the broadcaster. | `-t 44635596` | N |
53+
| `--from-user` | `-f` | Denotes the sender's TUID of the event, for example the user that follows another user or the subscriber to a broadcaster. | `-f 44635596` | N |
54+
| `--gift-user` | `-g` | Used only for subcription-based events, denotes the gifting user ID | `-g 44635596` | N |
55+
| `--secret` | `-s` | Webhook secret. If defined, signs all forwarded events with the SHA256 HMAC. | `-s testsecret` | N |
56+
| `--count` | `-c` | Count of events to fire. This can be used to simulate an influx of subscriptions. | `-c 100` | N |
57+
| `--anonymous` | `-a` | If the event is anonymous. Only applies to `gift` and `cheer` events. | `-a` | N |
58+
| `--status` | `-S` | Status of the event object, currently applies to channel points redemptions. | `-S fulfilled` | N |
59+
| `--item-id` | `-i` | Manually set the ID of the event payload item (for example the reward ID in redemption events or game in stream events). | `-i 032e4a6c-4aef-11eb-a9f5-1f703d1f0b92` | N |
60+
| `--item-name` | `-n` | Manually set the name of the event payload item (for example the reward ID in redemption events or game name in stream events). | `-n "Science & Technology"` | N |
61+
| `--cost` | `-C` | Amount of bits or channel points redeemed/used in the event. | `-C 250` | N |
62+
| `--description` | `-d` | Title the stream should be updated/started with. | `-d Awesome new title!` | N |
63+
6264

6365
**Examples**
6466

internal/events/event.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ type MockEventParameters struct {
1616
IsGift bool
1717
Status string
1818
ItemID string
19+
ItemName string
1920
Cost int64
2021
IsPermanent bool
21-
StreamTitle string
22+
Description string
2223
}
2324

2425
type MockEventResponse struct {

internal/events/trigger/trigger_event.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ type TriggerParameters struct {
2626
Secret string
2727
Verbose bool
2828
Count int
29-
StreamTitle string
29+
Description string
30+
ItemName string
3031
}
3132

3233
type TriggerResponse struct {
@@ -62,7 +63,8 @@ func Fire(p TriggerParameters) (string, error) {
6263
Cost: p.Cost,
6364
Status: p.Status,
6465
ItemID: p.ItemID,
65-
StreamTitle: p.StreamTitle,
66+
Description: p.Description,
67+
ItemName: p.ItemName,
6668
}
6769

6870
e, err := types.GetByTriggerAndTransport(p.Event, p.Transport)

internal/events/types/channel_points_redemption/redemption_event.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
4545
params.Cost = 150
4646
}
4747

48+
if params.ItemName == "" {
49+
params.ItemName = "Test Reward from CLI"
50+
}
51+
4852
switch params.Transport {
4953
case models.TransportEventSub:
5054
body := *&models.RedemptionEventSubResponse{
@@ -75,7 +79,7 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
7579
Status: params.Status,
7680
Reward: models.RedemptionReward{
7781
ID: params.ItemID,
78-
Title: "Test Reward from CLI",
82+
Title: params.ItemName,
7983
Cost: params.Cost,
8084
Prompt: "Redeem Your Test Reward from CLI",
8185
},

internal/events/types/channel_points_redemption/redemption_event_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ func TestEventSub(t *testing.T) {
2525
Status: "tested",
2626
ItemID: "12345678-1234-abcd-5678-000000000000",
2727
Cost: 1337,
28+
ItemName: "Testing",
2829
}
2930

3031
r, err := Event{}.GenerateEvent(params)
@@ -39,6 +40,7 @@ func TestEventSub(t *testing.T) {
3940
a.Equal(params.Status, body.Event.Status)
4041
a.Equal(params.Cost, body.Event.Reward.Cost)
4142
a.Equal(params.ItemID, body.Event.Reward.ID)
43+
a.Equal(params.ItemName, body.Event.Reward.Title)
4244

4345
params = events.MockEventParameters{
4446
Transport: models.TransportEventSub,

internal/events/types/channel_points_reward/reward_event.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
3838
params.Cost = 150
3939
}
4040

41+
if params.ItemName == "" {
42+
params.ItemName = "Test Reward from CLI"
43+
}
44+
4145
switch params.Transport {
4246
case models.TransportEventSub:
4347
body := models.EventsubResponse{
@@ -64,7 +68,7 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
6468
IsEnabled: true,
6569
IsPaused: false,
6670
IsInStock: true,
67-
Title: "Test Reward from CLI",
71+
Title: params.ItemName,
6872
Cost: params.Cost,
6973
Prompt: "Redeem Your Test Reward from CLI",
7074
IsUserInputRequired: true,

internal/events/types/channel_points_reward/reward_event_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ func TestEventSub(t *testing.T) {
2525
Status: "tested",
2626
ItemID: "12345678-1234-abcd-5678-000000000000",
2727
Cost: 1337,
28+
ItemName: "Testing",
2829
}
2930

3031
r, err := Event{}.GenerateEvent(params)
@@ -36,6 +37,7 @@ func TestEventSub(t *testing.T) {
3637

3738
a.Equal(toUser, body.Event.BroadcasterUserID, "Expected to user %v, got %v", toUser, body.Event.BroadcasterUserID)
3839
a.Equal(params.Cost, body.Event.Cost, "Expected cost %v, got %v", params.Cost, body.Event.Cost)
40+
a.Equal(params.ItemName, body.Event.Title)
3941
}
4042

4143
func TestWebSub(t *testing.T) {

internal/events/types/stream_change/stream_change_event.go

+16-10
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ var triggerSupported = []string{"stream-change"}
2121

2222
var triggerMapping = map[string]map[string]string{
2323
models.TransportWebSub: {
24-
"stream_change": "streams",
24+
"stream-change": "streams",
2525
},
2626
models.TransportEventSub: {
27-
"stream_change": "channel.update",
27+
"stream-change": "channel.update",
2828
},
2929
}
3030

@@ -34,8 +34,14 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
3434
var event []byte
3535
var err error
3636

37-
if params.StreamTitle == "" {
38-
params.StreamTitle = "Example title from the CLI!"
37+
if params.Description == "" {
38+
params.Description = "Example title from the CLI!"
39+
}
40+
if params.ItemID == "" {
41+
params.ItemID = "509658"
42+
}
43+
if params.ItemName == "" {
44+
params.ItemName = "Just Chatting"
3945
}
4046

4147
switch params.Transport {
@@ -61,11 +67,11 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
6167
BroadcasterUserID: params.ToUserID,
6268
BroadcasterUserLogin: params.ToUserName,
6369
BroadcasterUserName: params.ToUserName,
64-
StreamTitle: params.StreamTitle,
70+
StreamTitle: params.Description,
6571
StreamLanguage: "en",
66-
StreamCategoryID: "509658",
67-
StreamCategoryName: "Just Chatting",
68-
IsMature: "true",
72+
StreamCategoryID: params.ItemID,
73+
StreamCategoryName: params.ItemName,
74+
IsMature: false,
6975
},
7076
}
7177
event, err = json.Marshal(body)
@@ -80,10 +86,10 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
8086
BroadcasterUserID: params.ToUserID,
8187
BroadcasterUserLogin: params.ToUserName,
8288
BroadcasterUserName: params.ToUserName,
83-
StreamCategoryID: "509658",
89+
StreamCategoryID: params.ItemID,
8490
StreamCategoryName: "Just Chatting",
8591
StreamType: "live",
86-
StreamTitle: params.StreamTitle,
92+
StreamTitle: params.Description,
8793
StreamViewerCount: 9848,
8894
StreamStartedAt: util.GetTimestamp().Format(time.RFC3339),
8995
StreamLanguage: "en",

internal/events/types/stream_change/stream_change_event_test.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ func TestEventSub(t *testing.T) {
4040
ToUserID: toUser,
4141
Transport: models.TransportEventSub,
4242
Trigger: "stream_change",
43+
ItemID: "1234",
4344
}
4445

4546
r, err = Event{}.GenerateEvent(params)
@@ -50,19 +51,21 @@ func TestEventSub(t *testing.T) {
5051

5152
a.Equal(toUser, body.Event.BroadcasterUserID, "Expected Stream Channel %v, got %v", toUser, body.Event.BroadcasterUserID)
5253
a.Equal("Example title from the CLI!", body.Event.StreamTitle, "Expected new stream title, got %v", body.Event.StreamTitle)
54+
a.Equal("1234", body.Event.StreamCategoryID)
5355
}
5456

5557
func TestWebSubStreamChange(t *testing.T) {
5658
a := util.SetupTestEnv(t)
5759

5860
newStreamTitle := "Awesome new title from the CLI!"
5961

60-
params := *&events.MockEventParameters{
62+
params := events.MockEventParameters{
6163
FromUserID: fromUser,
6264
ToUserID: toUser,
6365
Transport: models.TransportWebSub,
6466
Trigger: "stream-change",
65-
StreamTitle: newStreamTitle,
67+
Description: newStreamTitle,
68+
ItemID: "1234",
6669
}
6770

6871
r, err := Event{}.GenerateEvent(params)
@@ -75,11 +78,12 @@ func TestWebSubStreamChange(t *testing.T) {
7578
// write tests here for websub
7679
a.Equal(toUser, body.Data[0].BroadcasterUserID, "Expected Stream Channel %v, got %v", toUser, body.Data[0].BroadcasterUserID)
7780
a.Equal(newStreamTitle, body.Data[0].StreamTitle, "Expected new stream title, got %v", body.Data[0].StreamTitle)
81+
a.Equal("1234", body.Data[0].StreamCategoryID)
7882
}
7983
func TestFakeTransport(t *testing.T) {
8084
a := util.SetupTestEnv(t)
8185

82-
params := *&events.MockEventParameters{
86+
params := events.MockEventParameters{
8387
FromUserID: fromUser,
8488
ToUserID: toUser,
8589
Transport: "fake_transport",

internal/events/types/streamup/streamup.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,12 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
3333
var event []byte
3434
var err error
3535

36-
if params.StreamTitle == "" {
37-
params.StreamTitle = "Example title from the CLI!"
36+
if params.Description == "" {
37+
params.Description = "Example title from the CLI!"
38+
}
39+
40+
if params.ItemID == "" {
41+
params.ItemID = "509658"
3842
}
3943

4044
switch params.Transport {
@@ -76,9 +80,9 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
7680
UserID: params.ToUserID,
7781
UserLogin: params.ToUserName,
7882
UserName: params.ToUserName,
79-
GameID: "509658",
83+
GameID: params.ItemID,
8084
Type: "live",
81-
Title: params.StreamTitle,
85+
Title: params.Description,
8286
ViewerCount: util.RandomViewerCount(),
8387
StartedAt: util.GetTimestamp().Format(time.RFC3339),
8488
Language: "en",

internal/models/stream_change.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ type ChannelUpdateEventSubEvent struct {
1010
StreamLanguage string `json:"language"`
1111
StreamCategoryID string `json:"category_id"`
1212
StreamCategoryName string `json:"category_name"`
13-
IsMature string `json:"is_mature"`
13+
IsMature bool `json:"is_mature"`
1414
}
1515

1616
type StreamChangeWebSubResponse struct {

0 commit comments

Comments
 (0)