Skip to content

Commit 90a3173

Browse files
committed
reverting changes
1 parent 3f94380 commit 90a3173

File tree

14 files changed

+432
-10
lines changed

14 files changed

+432
-10
lines changed

docs/event.md

+13-8
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Used to either create or send mock events for use with local webhooks testing.
1717
**Args**
1818

1919
| Argument | Description |
20-
| ------------------- | ---------------------------------------------------------------------------------------------------------- |
20+
|---------------------|------------------------------------------------------------------------------------------------------------|
2121
| `subscribe` | A standard subscription event. Triggers a basic tier 1 sub. |
2222
| `unsubscribe` | A standard unsubscribe event. Triggers a basic tier 1 sub. |
2323
| `gift` | A gifted subscription event. Triggers a basic tier 1 sub. |
@@ -31,10 +31,13 @@ Used to either create or send mock events for use with local webhooks testing.
3131
| `raid` | Channel Raid event with a random viewer count. |
3232
| `revoke` | User authorization revoke event. Uses local Client as set in `twitch configure` or generates one randomly. |
3333
| `stream-change` | Stream Changed event. |
34-
| `streamup` | Only usable with the `eventsub` transport, a stream online event. |
35-
| `streamdown` | Only usable with the `eventsub` transport, a stream offline event. |
34+
| `streamup` | Stream online event. |
35+
| `streamdown` | Sstream offline event. |
3636
| `add-moderator` | Channel moderator add event. |
3737
| `remove-moderator` | Channel moderator removal event. |
38+
| `ban` | Channel ban event. |
39+
| `unban` | Channel unban event. |
40+
3841

3942
**Flags**
4043

@@ -51,7 +54,7 @@ Used to either create or send mock events for use with local webhooks testing.
5154
| `--status` | `-S` | Status of the event object, currently applies to channel points redemptions. | `-S fulfilled` | N |
5255
| `--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 |
5356
| `--cost` | `-C` | Amount of bits or channel points redeemed/used in the event. | `-C 250` | N |
54-
| `--description` | `-d` | Title the stream should be updated with. | `-d Awesome new title!` | N |
57+
| `--description` | `-d` | Title the stream should be updated/started with. | `-d Awesome new title!` | N |
5558

5659
**Examples**
5760

@@ -102,7 +105,7 @@ Allows you to test if your webserver responds to subscription requests properly.
102105
**Args**
103106

104107
| Argument | Description |
105-
| ------------------- | ---------------------------------------------------------------------------------------------------------- |
108+
|---------------------|------------------------------------------------------------------------------------------------------------|
106109
| `subscribe` | A standard subscription event. Triggers a basic tier 1 sub. |
107110
| `unsubscribe` | A standard unsubscribe event. Triggers a basic tier 1 sub. |
108111
| `gift` | A gifted subscription event. Triggers a basic tier 1 sub. |
@@ -115,11 +118,13 @@ Allows you to test if your webserver responds to subscription requests properly.
115118
| `update-redemption` | Channel Points EventSub event for a redemption being updated. |
116119
| `raid` | Channel Raid event with a random viewer count. |
117120
| `revoke` | User authorization revoke event. Uses local Client as set in `twitch configure` or generates one randomly. |
118-
| `stream_change` | Stream changed event. |
119-
| `streamup` | Only usable with the `eventsub` transport, a stream online event. |
120-
| `streamdown` | Only usable with the `eventsub` transport, a stream offline event. |
121+
| `stream-change` | Stream Changed event. |
122+
| `streamup` | Stream online event. |
123+
| `streamdown` | Sstream offline event. |
121124
| `add-moderator` | Channel moderator add event. |
122125
| `remove-moderator` | Channel moderator removal event. |
126+
| `ban` | Channel ban event. |
127+
| `unban` | Channel unban event. |
123128

124129
**Flags**
125130

internal/events/event.go

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type MockEventParameters struct {
1717
Status string
1818
ItemID string
1919
Cost int64
20+
IsPermanent bool
2021
StreamTitle string
2122
}
2223

internal/events/models.go

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ var triggerSupported = map[string]bool{
1616
"remove-reward": true,
1717
"add-moderator": true,
1818
"remove-moderator": true,
19+
"ban": true,
20+
"unban": true,
1921
}
2022

2123
var transportSupported = map[string]bool{

internal/events/trigger/trigger_event.go

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ func Fire(p TriggerParameters) (string, error) {
6161
IsAnonymous: p.IsAnonymous,
6262
Cost: p.Cost,
6363
Status: p.Status,
64+
ItemID: p.ItemID,
6465
StreamTitle: p.StreamTitle,
6566
}
6667

internal/events/types/ban/ban.go

+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package ban
4+
5+
import (
6+
"encoding/json"
7+
"time"
8+
9+
"github.com/twitchdev/twitch-cli/internal/events"
10+
"github.com/twitchdev/twitch-cli/internal/models"
11+
"github.com/twitchdev/twitch-cli/internal/util"
12+
)
13+
14+
var transportsSupported = map[string]bool{
15+
models.TransportWebSub: true,
16+
models.TransportEventSub: true,
17+
}
18+
19+
var triggerSupported = []string{"ban", "unban"}
20+
21+
var triggerMapping = map[string]map[string]string{
22+
models.TransportWebSub: {
23+
"ban": "moderation.user.ban",
24+
"unban": "moderation.user.unban",
25+
},
26+
models.TransportEventSub: {
27+
"ban": "channel.ban",
28+
"unban": "channel.unban",
29+
},
30+
}
31+
32+
type Event struct{}
33+
34+
func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEventResponse, error) {
35+
var event []byte
36+
var err error
37+
38+
switch params.Transport {
39+
case models.TransportEventSub:
40+
body := *&models.EventsubResponse{
41+
Subscription: models.EventsubSubscription{
42+
ID: params.ID,
43+
Status: "enabled",
44+
Type: triggerMapping[params.Transport][params.Trigger],
45+
Version: "1",
46+
Condition: models.EventsubCondition{
47+
BroadcasterUserID: params.ToUserID,
48+
},
49+
Transport: models.EventsubTransport{
50+
Method: "webhook",
51+
Callback: "null",
52+
},
53+
CreatedAt: util.GetTimestamp().Format(time.RFC3339Nano),
54+
},
55+
Event: models.BanEventSubEvent{
56+
UserID: params.FromUserID,
57+
UserLogin: params.FromUserName,
58+
UserName: params.FromUserName,
59+
BroadcasterUserID: params.ToUserID,
60+
BroadcasterUserLogin: params.ToUserName,
61+
BroadcasterUserName: params.ToUserName,
62+
ModeratorUserId: util.RandomUserID(),
63+
ModeratorUserLogin: "CLIModerator",
64+
ModeratorUserName: "CLIModerator",
65+
Reason: "This is a test event",
66+
EndsAt: util.GetTimestamp().Format(time.RFC3339Nano),
67+
IsPermanent: params.IsPermanent,
68+
},
69+
}
70+
71+
event, err = json.Marshal(body)
72+
if err != nil {
73+
return events.MockEventResponse{}, err
74+
}
75+
76+
case models.TransportWebSub:
77+
body := *&models.BanWebSubResponse{
78+
Data: []models.BanWebSubResponseData{
79+
{
80+
ID: params.ID,
81+
EventType: triggerMapping[params.Transport][params.Trigger],
82+
EventTimestamp: util.GetTimestamp().Format(time.RFC3339),
83+
Version: "v1",
84+
EventData: models.BanWebSubEventData{
85+
BroadcasterID: params.ToUserID,
86+
BroadcasterUserLogin: params.ToUserName,
87+
BroadcasterName: params.ToUserName,
88+
UserID: params.FromUserID,
89+
UserLogin: params.FromUserName,
90+
UserName: params.FromUserName,
91+
ExpiresAt: util.GetTimestamp().Add(1 * time.Hour).Format(time.RFC3339),
92+
},
93+
},
94+
}}
95+
96+
event, err = json.Marshal(body)
97+
if err != nil {
98+
return events.MockEventResponse{}, err
99+
}
100+
default:
101+
return events.MockEventResponse{}, nil
102+
}
103+
104+
return events.MockEventResponse{
105+
ID: params.ID,
106+
JSON: event,
107+
FromUser: params.FromUserID,
108+
ToUser: params.ToUserID,
109+
}, nil
110+
}
111+
112+
func (e Event) ValidTransport(t string) bool {
113+
return transportsSupported[t]
114+
}
115+
116+
func (e Event) ValidTrigger(t string) bool {
117+
for _, ts := range triggerSupported {
118+
if ts == t {
119+
return true
120+
}
121+
}
122+
return false
123+
}
124+
125+
func (e Event) GetTopic(transport string, trigger string) string {
126+
return triggerMapping[transport][trigger]
127+
}

internal/events/types/ban/ban_test.go

+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package ban
4+
5+
import (
6+
"encoding/json"
7+
"testing"
8+
9+
"github.com/twitchdev/twitch-cli/internal/events"
10+
"github.com/twitchdev/twitch-cli/internal/models"
11+
"github.com/twitchdev/twitch-cli/internal/util"
12+
)
13+
14+
var fromUser = "1234"
15+
var toUser = "4567"
16+
17+
func TestEventSubBan(t *testing.T) {
18+
a := util.SetupTestEnv(t)
19+
params := events.MockEventParameters{
20+
FromUserID: fromUser,
21+
ToUserID: toUser,
22+
Transport: models.TransportEventSub,
23+
Trigger: "ban",
24+
}
25+
26+
r, err := Event{}.GenerateEvent(params)
27+
a.Nil(err, "Error generating body.")
28+
29+
var body models.BanEventSubResponse
30+
31+
err = json.Unmarshal(r.JSON, &body)
32+
a.Nil(err, "Error unmarshalling JSON")
33+
34+
a.Equal(toUser, body.Event.BroadcasterUserID, "Expected to user %v, got %v", toUser, body.Event.BroadcasterUserID)
35+
a.Equal(fromUser, body.Event.UserID, "Expected from user %v, got %v", r.ToUser, body.Event.UserID)
36+
37+
// test for unban
38+
params = events.MockEventParameters{
39+
FromUserID: fromUser,
40+
ToUserID: toUser,
41+
Transport: models.TransportEventSub,
42+
Trigger: "unban",
43+
}
44+
45+
r, err = Event{}.GenerateEvent(params)
46+
a.Nil(err)
47+
48+
err = json.Unmarshal(r.JSON, &body)
49+
a.Nil(err)
50+
51+
a.Equal(toUser, body.Event.BroadcasterUserID, "Expected to user %v, got %v", toUser, body.Event.BroadcasterUserID)
52+
a.Equal(fromUser, body.Event.UserID, "Expected from user %v, got %v", fromUser, body.Event.UserID)
53+
}
54+
55+
func TestWebSubBan(t *testing.T) {
56+
a := util.SetupTestEnv(t)
57+
58+
params := *&events.MockEventParameters{
59+
FromUserID: fromUser,
60+
ToUserID: toUser,
61+
Transport: models.TransportWebSub,
62+
Trigger: "ban",
63+
}
64+
65+
r, err := Event{}.GenerateEvent(params)
66+
a.Nil(err)
67+
68+
var body models.BanWebSubResponse
69+
err = json.Unmarshal(r.JSON, &body)
70+
a.Nil(err)
71+
72+
a.Equal(toUser, body.Data[0].EventData.BroadcasterID, "Expected to user %v, got %v", toUser, body.Data[0].EventData.BroadcasterID)
73+
a.Equal(fromUser, body.Data[0].EventData.UserID, "Expected from user %v, got %v", fromUser, body.Data[0].EventData.UserID)
74+
75+
params = *&events.MockEventParameters{
76+
FromUserID: fromUser,
77+
ToUserID: toUser,
78+
Transport: models.TransportWebSub,
79+
Trigger: "unban",
80+
}
81+
82+
r, err = Event{}.GenerateEvent(params)
83+
a.Nil(err)
84+
85+
err = json.Unmarshal(r.JSON, &body)
86+
a.Nil(err)
87+
88+
a.Equal(toUser, body.Data[0].EventData.BroadcasterID, "Expected to user %v, got %v", toUser, body.Data[0].EventData.BroadcasterID)
89+
a.Equal(fromUser, body.Data[0].EventData.UserID, "Expected from user %v, got %v", fromUser, body.Data[0].EventData.UserID)
90+
91+
}
92+
93+
func TestFakeTransport(t *testing.T) {
94+
a := util.SetupTestEnv(t)
95+
96+
params := events.MockEventParameters{
97+
FromUserID: fromUser,
98+
ToUserID: toUser,
99+
Transport: "fake_transport",
100+
Trigger: "unban",
101+
}
102+
103+
r, err := Event{}.GenerateEvent(params)
104+
a.Nil(err)
105+
a.Empty(r)
106+
}
107+
108+
func TestValidTrigger(t *testing.T) {
109+
a := util.SetupTestEnv(t)
110+
111+
r := Event{}.ValidTrigger("ban")
112+
a.Equal(true, r)
113+
114+
r = Event{}.ValidTrigger("unban")
115+
a.Equal(true, r)
116+
117+
r = Event{}.ValidTrigger("notban")
118+
a.Equal(false, r)
119+
}
120+
121+
func TestValidTransport(t *testing.T) {
122+
a := util.SetupTestEnv(t)
123+
124+
r := Event{}.ValidTransport(models.TransportEventSub)
125+
a.Equal(true, r)
126+
127+
r = Event{}.ValidTransport("noteventsub")
128+
a.Equal(false, r)
129+
}
130+
131+
func TestGetTopic(t *testing.T) {
132+
a := util.SetupTestEnv(t)
133+
134+
r := Event{}.GetTopic(models.TransportEventSub, "ban")
135+
a.NotNil(r)
136+
}

internal/events/types/streamdown/streamdown.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
)
1313

1414
var transportsSupported = map[string]bool{
15-
models.TransportWebSub: false,
15+
models.TransportWebSub: true,
1616
models.TransportEventSub: true,
1717
}
1818

@@ -56,6 +56,15 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
5656
BroadcasterUserName: params.ToUserName,
5757
},
5858
}
59+
event, err = json.Marshal(body)
60+
if err != nil {
61+
return events.MockEventResponse{}, err
62+
}
63+
case models.TransportWebSub:
64+
body := *&models.StreamDownWebSubResponse{
65+
Data: []models.StreamDownWebSubResponseData{
66+
}}
67+
5968
event, err = json.Marshal(body)
6069
if err != nil {
6170
return events.MockEventResponse{}, err

0 commit comments

Comments
 (0)