-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from seatsio/steve/channel_support
Channel support, patterned on the Java client's channel support
- Loading branch information
Showing
13 changed files
with
690 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package events | ||
|
||
type Channel struct { | ||
Key string `json:"key"` | ||
Name string `json:"name"` | ||
Color string `json:"color"` | ||
Index int32 `json:"index"` | ||
Objects []string `json:"objects"` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
package events | ||
|
||
import ( | ||
"github.com/imroc/req/v3" | ||
"github.com/seatsio/seatsio-go/shared" | ||
) | ||
|
||
type Channels struct { | ||
Client *req.Client | ||
} | ||
|
||
type CreateChannelParams struct { | ||
Key string `json:"key"` | ||
Name string `json:"name"` | ||
Color string `json:"color"` | ||
Index int32 `json:"index"` | ||
Objects []string `json:"objects"` | ||
} | ||
|
||
type CreateChannelParamsOption func(Params *CreateChannelParams) | ||
|
||
type UpdateChannelParams struct { | ||
Name string `json:"name"` | ||
Color string `json:"color"` | ||
Objects []string `json:"objects"` | ||
} | ||
|
||
type changeChannelObjectsRequest struct { | ||
Objects []string `json:"objects"` | ||
} | ||
|
||
type replaceChannelsRequest struct { | ||
Channels []Channel `json:"channels"` | ||
} | ||
|
||
type setObjectsRequest struct { | ||
ChannelConfig map[string][]string `json:"channelConfig"` | ||
} | ||
|
||
func (channels *Channels) Create(eventKey string, params *CreateChannelParams) error { | ||
result, err := channels.Client.R(). | ||
SetBody(params). | ||
SetPathParam("key", eventKey). | ||
Post("/events/{key}/channels") | ||
return shared.AssertOkNoBody(result, err) | ||
} | ||
|
||
func (channels *Channels) CreateMultiple(eventKey string, params *[]CreateChannelParams) error { | ||
result, err := channels.Client.R(). | ||
SetBody(params). | ||
SetPathParam("key", eventKey). | ||
Post("/events/{key}/channels") | ||
return shared.AssertOkNoBody(result, err) | ||
} | ||
|
||
func (channels *Channels) Update(eventKey string, channelKey string, params UpdateChannelParams) error { | ||
result, err := channels.Client.R(). | ||
SetBody(params). | ||
SetPathParam("eventKey", eventKey). | ||
SetPathParam("channelKey", channelKey). | ||
Post("/events/{eventKey}/channels/{channelKey}") | ||
return shared.AssertOkNoBody(result, err) | ||
} | ||
|
||
func (channels *Channels) Delete(eventKey string, channelKey string) error { | ||
result, err := channels.Client.R(). | ||
SetPathParam("eventKey", eventKey). | ||
SetPathParam("channelKey", channelKey). | ||
Delete("/events/{eventKey}/channels/{channelKey}") | ||
return shared.AssertOkNoBody(result, err) | ||
} | ||
|
||
func (channels *Channels) AddObjects(eventKey string, channelKey string, objects []string) error { | ||
result, err := channels.Client.R(). | ||
SetBody(changeChannelObjectsRequest{objects}). | ||
SetPathParam("eventKey", eventKey). | ||
SetPathParam("channelKey", channelKey). | ||
Post("/events/{eventKey}/channels/{channelKey}/objects") | ||
return shared.AssertOkNoBody(result, err) | ||
} | ||
|
||
func (channels *Channels) RemoveObjects(eventKey string, channelKey string, objects []string) error { | ||
result, err := channels.Client.R(). | ||
SetBody(changeChannelObjectsRequest{objects}). | ||
SetPathParam("eventKey", eventKey). | ||
SetPathParam("channelKey", channelKey). | ||
Delete("/events/{eventKey}/channels/{channelKey}/objects") | ||
return shared.AssertOkNoBody(result, err) | ||
} | ||
|
||
func (channels *Channels) Replace(eventKey string, newChannels []Channel) error { | ||
result, err := channels.Client.R(). | ||
SetBody(replaceChannelsRequest{newChannels}). | ||
SetPathParam("eventKey", eventKey). | ||
Post("/events/{eventKey}/channels/replace") | ||
return shared.AssertOkNoBody(result, err) | ||
} | ||
|
||
func (channels *Channels) WithIndex(index int32) CreateChannelParamsOption { | ||
return func(params *CreateChannelParams) { | ||
params.Index = index | ||
} | ||
} | ||
|
||
func (channels *Channels) WithObjects(objects []string) CreateChannelParamsOption { | ||
return func(params *CreateChannelParams) { | ||
params.Objects = objects | ||
} | ||
} | ||
|
||
func (channels *Channels) NewCreateChannelParams(key string, name string, color string, opts ...CreateChannelParamsOption) *CreateChannelParams { | ||
params := &CreateChannelParams{key, name, color, 0, []string{}} | ||
for _, opt := range opts { | ||
opt(params) | ||
} | ||
return params | ||
} | ||
|
||
func (channels *Channels) NewUpdateChannelParams(channel Channel) UpdateChannelParams { | ||
return UpdateChannelParams{Name: channel.Name, Color: channel.Color, Objects: channel.Objects} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package events | ||
|
||
import ( | ||
"github.com/seatsio/seatsio-go/events" | ||
"github.com/stretchr/testify/require" | ||
"testing" | ||
) | ||
|
||
func TestObjectsAreAddedToChannel(t *testing.T) { | ||
t.Parallel() | ||
|
||
event, client := CreateChannel(t, &events.CreateChannelParams{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-1", "A-2"}}) | ||
_ = client.Channels.AddObjects(event.Key, "foo", []string{"A-3", "A-4"}) | ||
|
||
retrievedEvent, _ := client.Events.Retrieve(event.Key) | ||
require.Equal(t, []events.Channel{{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-1", "A-2", "A-3", "A-4"}}}, retrievedEvent.Channels) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package events | ||
|
||
import ( | ||
"github.com/seatsio/seatsio-go" | ||
"github.com/seatsio/seatsio-go/events" | ||
"github.com/seatsio/seatsio-go/test_util" | ||
"github.com/stretchr/testify/require" | ||
"testing" | ||
) | ||
|
||
func CreateChannel(t *testing.T, params *events.CreateChannelParams) (*events.Event, *seatsio.SeatsioClient) { | ||
company := test_util.CreateTestCompany(t) | ||
chartKey := test_util.CreateTestChart(t, company.Admin.SecretKey) | ||
c := seatsio.NewSeatsioClient(company.Admin.SecretKey, test_util.BaseUrl) | ||
event, _ := c.Events.Create(&events.CreateEventParams{ChartKey: chartKey, EventKey: "anEvent"}) | ||
err := c.Channels.Create(event.Key, params) | ||
require.NoError(t, err) | ||
return event, c | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
package events | ||
|
||
import ( | ||
"github.com/seatsio/seatsio-go" | ||
"github.com/seatsio/seatsio-go/events" | ||
"github.com/seatsio/seatsio-go/test_util" | ||
"github.com/stretchr/testify/require" | ||
"testing" | ||
) | ||
|
||
func TestCreateChannel(t *testing.T) { | ||
t.Parallel() | ||
company := test_util.CreateTestCompany(t) | ||
chartKey := test_util.CreateTestChart(t, company.Admin.SecretKey) | ||
client := seatsio.NewSeatsioClient(company.Admin.SecretKey, test_util.BaseUrl) | ||
event, _ := client.Events.Create(&events.CreateEventParams{ChartKey: chartKey, EventKey: "anEvent"}) | ||
require.Equal(t, 0, len(event.Channels)) | ||
|
||
err := client.Channels.Create(event.Key, &events.CreateChannelParams{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-1", "A-2"}}) | ||
require.NoError(t, err) | ||
|
||
retrievedEvent, err := client.Events.Retrieve(event.Key) | ||
require.Equal(t, []events.Channel{{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-1", "A-2"}}}, retrievedEvent.Channels) | ||
} | ||
|
||
func TestCreateChannels(t *testing.T) { | ||
t.Parallel() | ||
company := test_util.CreateTestCompany(t) | ||
chartKey := test_util.CreateTestChart(t, company.Admin.SecretKey) | ||
client := seatsio.NewSeatsioClient(company.Admin.SecretKey, test_util.BaseUrl) | ||
event, _ := client.Events.Create(&events.CreateEventParams{ChartKey: chartKey, EventKey: "anEvent"}) | ||
require.Equal(t, 0, len(event.Channels)) | ||
|
||
err := client.Channels.CreateMultiple(event.Key, &[]events.CreateChannelParams{ | ||
*&events.CreateChannelParams{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-1", "A-2"}}, | ||
*&events.CreateChannelParams{Key: "hurdy", Name: "gurdy", Color: "#DFDFDF", Index: 2, Objects: []string{"A-3", "A-4"}}, | ||
}) | ||
require.NoError(t, err) | ||
|
||
retrievedEvent, err := client.Events.Retrieve(event.Key) | ||
require.Equal(t, []events.Channel{ | ||
{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-1", "A-2"}}, | ||
{Key: "hurdy", Name: "gurdy", Color: "#DFDFDF", Index: 2, Objects: []string{"A-3", "A-4"}}, | ||
}, retrievedEvent.Channels) | ||
} | ||
|
||
func TestIndexIsOptional(t *testing.T) { | ||
t.Parallel() | ||
company := test_util.CreateTestCompany(t) | ||
chartKey := test_util.CreateTestChart(t, company.Admin.SecretKey) | ||
client := seatsio.NewSeatsioClient(company.Admin.SecretKey, test_util.BaseUrl) | ||
event, _ := client.Events.Create(&events.CreateEventParams{ChartKey: chartKey, EventKey: "anEvent"}) | ||
require.Equal(t, 0, len(event.Channels)) | ||
|
||
err := client.Channels.Create(event.Key, client.Channels.NewCreateChannelParams("foo", "bar", "#ED303D", client.Channels.WithObjects([]string{"A-1"}))) | ||
require.NoError(t, err) | ||
|
||
retrievedEvent, err := client.Events.Retrieve(event.Key) | ||
require.Equal(t, 1, len(retrievedEvent.Channels)) | ||
require.Equal(t, "foo", retrievedEvent.Channels[0].Key) | ||
require.Equal(t, int32(0), retrievedEvent.Channels[0].Index) | ||
require.Equal(t, "A-1", retrievedEvent.Channels[0].Objects[0]) | ||
} | ||
|
||
func TestObjectsIsOptional(t *testing.T) { | ||
t.Parallel() | ||
company := test_util.CreateTestCompany(t) | ||
chartKey := test_util.CreateTestChart(t, company.Admin.SecretKey) | ||
client := seatsio.NewSeatsioClient(company.Admin.SecretKey, test_util.BaseUrl) | ||
event, _ := client.Events.Create(&events.CreateEventParams{ChartKey: chartKey, EventKey: "anEvent"}) | ||
require.Equal(t, 0, len(event.Channels)) | ||
|
||
channels := client.Channels | ||
err := channels.Create(event.Key, channels.NewCreateChannelParams("foo", "bar", "#ED303D", channels.WithIndex(1))) | ||
require.NoError(t, err) | ||
|
||
retrievedEvent, err := client.Events.Retrieve(event.Key) | ||
require.Equal(t, 1, len(retrievedEvent.Channels)) | ||
require.Equal(t, "foo", retrievedEvent.Channels[0].Key) | ||
require.Equal(t, int32(1), retrievedEvent.Channels[0].Index) | ||
require.Empty(t, retrievedEvent.Channels[0].Objects) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package events | ||
|
||
import ( | ||
"github.com/seatsio/seatsio-go/events" | ||
"github.com/stretchr/testify/require" | ||
"testing" | ||
) | ||
|
||
func TestDeleteChannel(t *testing.T) { | ||
t.Parallel() | ||
|
||
event, client := CreateChannel(t, &events.CreateChannelParams{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-1", "A-2"}}) | ||
retrievedEvent, _ := client.Events.Retrieve(event.Key) | ||
require.Equal(t, []events.Channel{{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-1", "A-2"}}}, retrievedEvent.Channels) | ||
|
||
deleteErr := client.Channels.Delete(event.Key, "foo") | ||
require.NoError(t, deleteErr) | ||
|
||
postDeleteEvent, _ := client.Events.Retrieve(event.Key) | ||
require.Empty(t, postDeleteEvent.Channels) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package events | ||
|
||
import ( | ||
"github.com/seatsio/seatsio-go/events" | ||
"github.com/stretchr/testify/require" | ||
"testing" | ||
) | ||
|
||
func TestObjectsAreRemovedFromChannel(t *testing.T) { | ||
t.Parallel() | ||
|
||
event, client := CreateChannel(t, &events.CreateChannelParams{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-1", "A-2"}}) | ||
_ = client.Channels.RemoveObjects(event.Key, "foo", []string{"A-1"}) | ||
|
||
retrievedEvent, _ := client.Events.Retrieve(event.Key) | ||
require.Equal(t, []events.Channel{{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-2"}}}, retrievedEvent.Channels) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package events | ||
|
||
import ( | ||
"github.com/seatsio/seatsio-go" | ||
"github.com/seatsio/seatsio-go/events" | ||
"github.com/seatsio/seatsio-go/test_util" | ||
"github.com/stretchr/testify/require" | ||
"testing" | ||
) | ||
|
||
func TestReplaceChannel(t *testing.T) { | ||
t.Parallel() | ||
company := test_util.CreateTestCompany(t) | ||
chartKey := test_util.CreateTestChart(t, company.Admin.SecretKey) | ||
client := seatsio.NewSeatsioClient(company.Admin.SecretKey, test_util.BaseUrl) | ||
event, _ := client.Events.Create(&events.CreateEventParams{ChartKey: chartKey, EventKey: "anEvent"}) | ||
require.Equal(t, 0, len(event.Channels)) | ||
|
||
err := client.Channels.CreateMultiple(event.Key, &[]events.CreateChannelParams{ | ||
*&events.CreateChannelParams{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-1", "A-2"}}, | ||
*&events.CreateChannelParams{Key: "hurdy", Name: "gurdy", Color: "#DFDFDF", Index: 2, Objects: []string{"A-3", "A-4"}}, | ||
}) | ||
require.NoError(t, err) | ||
|
||
retrievedEvent, err := client.Events.Retrieve(event.Key) | ||
require.Equal(t, []events.Channel{ | ||
{Key: "foo", Name: "bar", Color: "#ED303D", Index: 1, Objects: []string{"A-1", "A-2"}}, | ||
{Key: "hurdy", Name: "gurdy", Color: "#DFDFDF", Index: 2, Objects: []string{"A-3", "A-4"}}, | ||
}, retrievedEvent.Channels) | ||
|
||
replaceError := client.Channels.Replace(event.Key, []events.Channel{ | ||
{Key: "aaa", Name: "bbb", Color: "#101010", Index: 1, Objects: []string{"A-5", "A-6"}}, | ||
{Key: "ccc", Name: "ddd", Color: "#F2F2F2", Index: 2, Objects: []string{"A-7", "A-8"}}, | ||
}) | ||
require.NoError(t, replaceError) | ||
|
||
postReplacementEvent, _ := client.Events.Retrieve(event.Key) | ||
require.Equal(t, []events.Channel{ | ||
{Key: "aaa", Name: "bbb", Color: "#101010", Index: 1, Objects: []string{"A-5", "A-6"}}, | ||
{Key: "ccc", Name: "ddd", Color: "#F2F2F2", Index: 2, Objects: []string{"A-7", "A-8"}}, | ||
}, postReplacementEvent.Channels) | ||
} |
Oops, something went wrong.