Skip to content

Commit a485858

Browse files
authored
Merge branch 'main' into fix/ty_update_redemption
2 parents c5b279c + 0e96cd1 commit a485858

File tree

13 files changed

+480
-28
lines changed

13 files changed

+480
-28
lines changed

docs/event.md

+28-26
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,20 @@ Used to either create or send mock events for use with local webhooks testing.
1616

1717
**Args**
1818

19-
| Argument | Description |
20-
|---------------------|--------------------------------------------------------------------|
21-
| `subscribe` | A standard subscription event. Triggers a basic tier 1 sub. |
22-
| `unsubscribe` | A standard unsubscribe event. Triggers a basic tier 1 sub. |
23-
| `gift` | A gifted subscription event. Triggers a basic tier 1 sub. |
24-
| `cheer` | Only usable with the `eventsub` transport, shows Cheers from chat. |
25-
| `transaction` | Bits in Extensions transactions events. |
26-
| `add-reward` | Channel Points EventSub event for a Custom Reward being added. |
27-
| `update-reward` | Channel Points EventSub event for a Custom Reward being updated. |
28-
| `remove-reward` | Channel Points EventSub event for a Custom Reward being removed. |
29-
| `add-redemption` | Channel Points EventSub event for a redemption being performed. |
30-
| `update-redemption` | Channel Points EventSub event for a redemption being updated. |
31-
32-
19+
| Argument | Description |
20+
|---------------------|------------------------------------------------------------------------------------------------------------|
21+
| `subscribe` | A standard subscription event. Triggers a basic tier 1 sub. |
22+
| `unsubscribe` | A standard unsubscribe event. Triggers a basic tier 1 sub. |
23+
| `gift` | A gifted subscription event. Triggers a basic tier 1 sub. |
24+
| `cheer` | Only usable with the `eventsub` transport, shows Cheers from chat. |
25+
| `transaction` | Bits in Extensions transactions events. |
26+
| `add-reward` | Channel Points EventSub event for a Custom Reward being added. |
27+
| `update-reward` | Channel Points EventSub event for a Custom Reward being updated. |
28+
| `remove-reward` | Channel Points EventSub event for a Custom Reward being removed. |
29+
| `add-redemption` | Channel Points EventSub event for a redemption being performed. |
30+
| `update-redemption` | Channel Points EventSub event for a redemption being updated. |
31+
| `raid` | Channel Raid event with a random viewer count. |
32+
| `revoke` | User authorization revoke event. Uses local Client as set in `twitch configure` or generates one randomly. |
3333

3434
**Flags**
3535

@@ -95,18 +95,20 @@ Allows you to test if your webserver responds to subscription requests properly.
9595

9696
**Args**
9797

98-
| Argument | Description |
99-
|---------------------|--------------------------------------------------------------------|
100-
| `subscribe` | A standard subscription event. Triggers a basic tier 1 sub. |
101-
| `unsubscribe` | A standard unsubscribe event. Triggers a basic tier 1 sub. |
102-
| `gift` | A gifted subscription event. Triggers a basic tier 1 sub. |
103-
| `cheer` | Only usable with the `eventsub` transport, shows Cheers from chat. |
104-
| `transaction` | Bits in Extensions transactions events. |
105-
| `add-reward` | Channel Points EventSub event for a Custom Reward being added. |
106-
| `update-reward` | Channel Points EventSub event for a Custom Reward being updated. |
107-
| `remove-reward` | Channel Points EventSub event for a Custom Reward being removed. |
108-
| `add-redemption` | Channel Points EventSub event for a redemption being performed. |
109-
| `update-redemption` | Channel Points EventSub event for a redemption being updated. |
98+
| Argument | Description |
99+
|---------------------|------------------------------------------------------------------------------------------------------------|
100+
| `subscribe` | A standard subscription event. Triggers a basic tier 1 sub. |
101+
| `unsubscribe` | A standard unsubscribe event. Triggers a basic tier 1 sub. |
102+
| `gift` | A gifted subscription event. Triggers a basic tier 1 sub. |
103+
| `cheer` | Only usable with the `eventsub` transport, shows Cheers from chat. |
104+
| `transaction` | Bits in Extensions transactions events. |
105+
| `add-reward` | Channel Points EventSub event for a Custom Reward being added. |
106+
| `update-reward` | Channel Points EventSub event for a Custom Reward being updated. |
107+
| `remove-reward` | Channel Points EventSub event for a Custom Reward being removed. |
108+
| `add-redemption` | Channel Points EventSub event for a redemption being performed. |
109+
| `update-redemption` | Channel Points EventSub event for a redemption being updated. |
110+
| `raid` | Channel Raid event with a random viewer count. |
111+
| `revoke` | User authorization revoke event. Uses local Client as set in `twitch configure` or generates one randomly. |
110112

111113
**Flags**
112114

internal/events/types/_template/_event_name.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ var triggerMapping = map[string]map[string]string{
2727

2828
type Event struct{}
2929

30-
func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEventResponse, err) {
30+
func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEventResponse, error) {
3131
var event []byte
3232
var err error
3333

@@ -70,3 +70,6 @@ func (e Event) ValidTrigger(t string) bool {
7070
}
7171
return false
7272
}
73+
func (e Event) GetTopic(transport string, trigger string) string {
74+
return triggerMapping[transport][trigger]
75+
}

internal/events/types/_template/_event_name_test.go

+6
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,9 @@ func TestValidTransport(t *testing.T) {
8686
r = Event{}.ValidTransport("noteventsub")
8787
a.Equal(false, r)
8888
}
89+
func TestGetTopic(t *testing.T) {
90+
a := util.SetupTestEnv(t)
91+
92+
r := Event{}.GetTopic(models.TransportEventSub, "trigger_keyword")
93+
a.NotNil(r)
94+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package authorization_revoke
4+
5+
import (
6+
"encoding/json"
7+
"errors"
8+
"time"
9+
10+
"github.com/spf13/viper"
11+
"github.com/twitchdev/twitch-cli/internal/events"
12+
"github.com/twitchdev/twitch-cli/internal/models"
13+
"github.com/twitchdev/twitch-cli/internal/util"
14+
)
15+
16+
var transportsSupported = map[string]bool{
17+
models.TransportWebSub: false,
18+
models.TransportEventSub: true,
19+
}
20+
21+
var triggerSupported = []string{"revoke"}
22+
23+
var triggerMapping = map[string]map[string]string{
24+
models.TransportEventSub: {
25+
"trigger_keyword": "revoke",
26+
},
27+
}
28+
29+
type Event struct{}
30+
31+
func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEventResponse, error) {
32+
var event []byte
33+
var err error
34+
clientID := viper.GetString("ClientID")
35+
36+
// if not configured, generate a random one
37+
if clientID == "" {
38+
clientID = util.RandomClientID()
39+
}
40+
switch params.Transport {
41+
case models.TransportEventSub:
42+
body := &models.AuthorizationRevokeEventSubResponse{
43+
Subscription: models.EventsubSubscription{
44+
ID: params.ID,
45+
Status: "enabled",
46+
Type: triggerMapping[params.Transport][params.Trigger],
47+
Version: "1",
48+
Condition: models.EventsubCondition{
49+
ClientID: clientID,
50+
},
51+
Transport: models.EventsubTransport{
52+
Method: "webhook",
53+
Callback: "null",
54+
},
55+
CreatedAt: util.GetTimestamp().Format(time.RFC3339Nano),
56+
},
57+
Event: models.AuthorizationRevokeEvent{
58+
ClientID: clientID,
59+
UserID: params.FromUserID,
60+
UserLogin: params.FromUserName,
61+
UserName: params.FromUserName,
62+
},
63+
}
64+
event, err = json.Marshal(body)
65+
if err != nil {
66+
return events.MockEventResponse{}, err
67+
}
68+
case models.TransportWebSub:
69+
return events.MockEventResponse{}, errors.New("Websub is unsupported for authorization revoke events")
70+
default:
71+
return events.MockEventResponse{}, nil
72+
}
73+
74+
return events.MockEventResponse{
75+
ID: params.ID,
76+
JSON: event,
77+
FromUser: params.FromUserID,
78+
ToUser: params.ToUserID,
79+
}, nil
80+
}
81+
82+
func (e Event) ValidTransport(t string) bool {
83+
return transportsSupported[t]
84+
}
85+
86+
func (e Event) ValidTrigger(t string) bool {
87+
for _, ts := range triggerSupported {
88+
if ts == t {
89+
return true
90+
}
91+
}
92+
return false
93+
}
94+
func (e Event) GetTopic(transport string, trigger string) string {
95+
return triggerMapping[transport][trigger]
96+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package authorization_revoke
4+
5+
import (
6+
"encoding/json"
7+
"testing"
8+
9+
"github.com/spf13/viper"
10+
"github.com/twitchdev/twitch-cli/internal/events"
11+
"github.com/twitchdev/twitch-cli/internal/models"
12+
"github.com/twitchdev/twitch-cli/internal/util"
13+
)
14+
15+
var fromUser = "1234"
16+
var toUser = "4567"
17+
18+
func TestEventSub(t *testing.T) {
19+
a := util.SetupTestEnv(t)
20+
21+
viper.Set("ClientID", "1234")
22+
params := *&events.MockEventParameters{
23+
FromUserID: fromUser,
24+
ToUserID: toUser,
25+
Transport: models.TransportEventSub,
26+
Trigger: "subscribe",
27+
}
28+
29+
r, err := Event{}.GenerateEvent(params)
30+
a.Nil(err)
31+
32+
var body models.AuthorizationRevokeEventSubResponse // replace with actual value
33+
err = json.Unmarshal(r.JSON, &body)
34+
a.Nil(err)
35+
36+
a.NotEmpty(body.Event.ClientID)
37+
a.Equal(body.Event.ClientID, body.Subscription.Condition.ClientID)
38+
a.Equal("1234", body.Event.ClientID)
39+
}
40+
func TestWebSub(t *testing.T) {
41+
a := util.SetupTestEnv(t)
42+
43+
params := *&events.MockEventParameters{
44+
FromUserID: fromUser,
45+
ToUserID: toUser,
46+
Transport: models.TransportWebSub,
47+
Trigger: "revoke",
48+
}
49+
50+
_, err := Event{}.GenerateEvent(params)
51+
a.NotNil(err)
52+
53+
// write tests here for websub
54+
}
55+
func TestFakeTransport(t *testing.T) {
56+
a := util.SetupTestEnv(t)
57+
58+
params := *&events.MockEventParameters{
59+
FromUserID: fromUser,
60+
ToUserID: toUser,
61+
Transport: "fake_transport",
62+
Trigger: "unsubscribe",
63+
}
64+
65+
r, err := Event{}.GenerateEvent(params)
66+
a.Nil(err)
67+
a.Empty(r)
68+
}
69+
func TestValidTrigger(t *testing.T) {
70+
a := util.SetupTestEnv(t)
71+
72+
r := Event{}.ValidTrigger("revoke")
73+
a.Equal(true, r)
74+
75+
r = Event{}.ValidTrigger("fake_revoke")
76+
a.Equal(false, r)
77+
}
78+
79+
func TestValidTransport(t *testing.T) {
80+
a := util.SetupTestEnv(t)
81+
82+
r := Event{}.ValidTransport(models.TransportEventSub)
83+
a.Equal(true, r)
84+
85+
r = Event{}.ValidTransport("noteventsub")
86+
a.Equal(false, r)
87+
}
88+
func TestGetTopic(t *testing.T) {
89+
a := util.SetupTestEnv(t)
90+
91+
r := Event{}.GetTopic(models.TransportEventSub, "revoke")
92+
a.NotNil(r)
93+
}

internal/events/types/raid/raid.go

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package raid
4+
5+
import (
6+
"encoding/json"
7+
"errors"
8+
"time"
9+
10+
"github.com/twitchdev/twitch-cli/internal/events"
11+
"github.com/twitchdev/twitch-cli/internal/models"
12+
"github.com/twitchdev/twitch-cli/internal/util"
13+
)
14+
15+
var transportsSupported = map[string]bool{
16+
models.TransportWebSub: false,
17+
models.TransportEventSub: true,
18+
}
19+
20+
var triggerSupported = []string{"raid"}
21+
22+
var triggerMapping = map[string]map[string]string{
23+
models.TransportEventSub: {
24+
"raid": "channel.raid",
25+
},
26+
}
27+
28+
type Event struct{}
29+
30+
func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEventResponse, error) {
31+
var event []byte
32+
var err error
33+
34+
switch params.Transport {
35+
case models.TransportEventSub:
36+
body := &models.RaidEventSubResponse{
37+
Subscription: models.EventsubSubscription{
38+
ID: params.ID,
39+
Status: "enabled",
40+
Type: triggerMapping[params.Transport][params.Trigger],
41+
Version: "beta",
42+
Condition: models.EventsubCondition{
43+
ToBroadcasterUserID: params.ToUserID,
44+
},
45+
Transport: models.EventsubTransport{
46+
Method: "webhook",
47+
Callback: "null",
48+
},
49+
CreatedAt: util.GetTimestamp().Format(time.RFC3339Nano),
50+
},
51+
Event: models.RaidEvent{
52+
ToBroadcasterUserID: params.ToUserID,
53+
ToBroadcasterUserLogin: params.ToUserName,
54+
ToBroadcasterUserName: params.ToUserName,
55+
FromBroadcasterUserID: params.FromUserID,
56+
FromBroadcasterUserLogin: params.FromUserName,
57+
FromBroadcasterUserName: params.FromUserName,
58+
Viewers: util.RandomViewerCount(),
59+
},
60+
}
61+
event, err = json.Marshal(body)
62+
if err != nil {
63+
return events.MockEventResponse{}, err
64+
}
65+
case models.TransportWebSub:
66+
return events.MockEventResponse{}, errors.New("Raids are unsupported for websub")
67+
default:
68+
return events.MockEventResponse{}, nil
69+
}
70+
71+
return events.MockEventResponse{
72+
ID: params.ID,
73+
JSON: event,
74+
FromUser: params.FromUserID,
75+
ToUser: params.ToUserID,
76+
}, nil
77+
}
78+
79+
func (e Event) ValidTransport(t string) bool {
80+
return transportsSupported[t]
81+
}
82+
83+
func (e Event) ValidTrigger(t string) bool {
84+
for _, ts := range triggerSupported {
85+
if ts == t {
86+
return true
87+
}
88+
}
89+
return false
90+
}
91+
func (e Event) GetTopic(transport string, trigger string) string {
92+
return triggerMapping[transport][trigger]
93+
}

0 commit comments

Comments
 (0)