Skip to content

Commit

Permalink
fix: add test, refactor
Browse files Browse the repository at this point in the history
Signed-off-by: 1998-felix <felix.gateru@gmail.com>
  • Loading branch information
felixgateru authored and rodneyosodo committed Jun 26, 2024
1 parent a86ccca commit 5e86dad
Show file tree
Hide file tree
Showing 2 changed files with 183 additions and 5 deletions.
10 changes: 5 additions & 5 deletions pkg/sdk/go/channels.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,16 +126,16 @@ func (sdk mgSDK) ChannelPermissions(id, token string) (Channel, errors.SDKError)
}

func (sdk mgSDK) UpdateChannel(c Channel, token string) (Channel, errors.SDKError) {
data, err := json.Marshal(c)
if err != nil {
return Channel{}, errors.NewSDKError(err)
}

if c.ID == "" {
return Channel{}, errors.NewSDKError(apiutil.ErrMissingID)
}
url := fmt.Sprintf("%s/%s/%s", sdk.thingsURL, channelsEndpoint, c.ID)

data, err := json.Marshal(c)
if err != nil {
return Channel{}, errors.NewSDKError(err)
}

_, body, sdkerr := sdk.processRequest(http.MethodPut, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return Channel{}, sdkerr
Expand Down
178 changes: 178 additions & 0 deletions pkg/sdk/go/channels_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1001,6 +1001,184 @@ func TestListChannels(t *testing.T) {
repoCall.Unset()
}

func TestListGroupChannels(t *testing.T) {
ts, gsvc := setupChannels()
defer ts.Close()

conf := sdk.Config{
ThingsURL: ts.URL,
}
mgsdk := sdk.NewSDK(conf)

groupChannel := sdk.Group{
ID: testsutil.GenerateUUID(t),
Name: "group_channel",
Metadata: sdk.Metadata{"role": "group"},
Status: mgclients.EnabledStatus.String(),
}

cases := []struct {
desc string
token string
groupID string
pageMeta sdk.PageMetadata
svcReq groups.Page
svcRes groups.Page
svcErr error
response sdk.GroupsPage
err errors.SDKError
}{
{
desc: "list group channels successfully",
token: validToken,
groupID: group.ID,
pageMeta: sdk.PageMetadata{
Offset: 0,
Limit: 10,
},
svcReq: groups.Page{
PageMeta: groups.PageMeta{
Offset: 0,
Limit: 10,
},
Permission: "view",
Direction: -1,
},
svcRes: groups.Page{
PageMeta: groups.PageMeta{
Total: 1,
},
Groups: []groups.Group{convertGroup(groupChannel)},
},
svcErr: nil,
response: sdk.GroupsPage{
PageRes: sdk.PageRes{
Total: 1,
},
Groups: []sdk.Group{groupChannel},
},
err: nil,
},
{
desc: "list group channels with invalid token",
token: invalidToken,
groupID: group.ID,
pageMeta: sdk.PageMetadata{
Offset: 0,
Limit: 10,
},
svcReq: groups.Page{
PageMeta: groups.PageMeta{
Offset: 0,
Limit: 10,
},
Permission: "view",
Direction: -1,
},
svcRes: groups.Page{},
svcErr: svcerr.ErrAuthentication,
response: sdk.GroupsPage{},
err: errors.NewSDKErrorWithStatus(svcerr.ErrAuthentication, http.StatusUnauthorized),
},
{
desc: "list group channels with empty token",
token: "",
groupID: group.ID,
pageMeta: sdk.PageMetadata{
Offset: 0,
Limit: 10,
},
svcReq: groups.Page{},
svcRes: groups.Page{},
svcErr: nil,
response: sdk.GroupsPage{},
err: errors.NewSDKErrorWithStatus(errors.Wrap(apiutil.ErrValidation, apiutil.ErrBearerToken), http.StatusUnauthorized),
},
{
desc: "list group channels with invalid group id",
token: validToken,
groupID: wrongID,
pageMeta: sdk.PageMetadata{
Offset: 0,
Limit: 10,
},
svcReq: groups.Page{
PageMeta: groups.PageMeta{
Offset: 0,
Limit: 10,
},
Permission: "view",
Direction: -1,
},
svcRes: groups.Page{},
svcErr: svcerr.ErrAuthorization,
response: sdk.GroupsPage{},
err: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
},
{
desc: "list group channels with invalid page metadata",
token: validToken,
groupID: group.ID,
pageMeta: sdk.PageMetadata{
Offset: 0,
Limit: 10,
Metadata: sdk.Metadata{
"test": make(chan int),
},
},
svcReq: groups.Page{},
svcRes: groups.Page{},
svcErr: nil,
response: sdk.GroupsPage{},
err: errors.NewSDKError(errors.New("json: unsupported type: chan int")),
},
{
desc: "list group channels with service response that can't be unmarshalled",
token: validToken,
groupID: group.ID,
pageMeta: sdk.PageMetadata{
Offset: 0,
Limit: 10,
},
svcReq: groups.Page{
PageMeta: groups.PageMeta{
Offset: 0,
Limit: 10,
},
Permission: "view",
Direction: -1,
},
svcRes: groups.Page{
PageMeta: groups.PageMeta{
Total: 1,
},
Groups: []groups.Group{
{
ID: generateUUID(t),
Metadata: mgclients.Metadata{"test": make(chan int)},
},
},
},
svcErr: nil,
response: sdk.GroupsPage{},
err: errors.NewSDKError(errors.New("unexpected end of JSON input")),
},
}
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
svcCall := gsvc.On("ListGroups", mock.Anything, tc.token, auth.GroupsKind, tc.groupID, tc.svcReq).Return(tc.svcRes, tc.svcErr)
resp, err := mgsdk.ListGroupChannels(tc.groupID, tc.pageMeta, tc.token)
assert.Equal(t, tc.err, err)
assert.Equal(t, tc.response, resp)
if tc.err == nil {
ok := svcCall.Parent.AssertCalled(t, "ListGroups", mock.Anything, tc.token, auth.GroupsKind, tc.groupID, tc.svcReq)
assert.True(t, ok)
}
svcCall.Unset()
})
}
}

func toIDs(objects interface{}) []string {
v := reflect.ValueOf(objects)
if v.Kind() != reflect.Slice {
Expand Down

0 comments on commit 5e86dad

Please sign in to comment.