MG-2441 - Add domain ID to API (#2442)

Signed-off-by: nyagamunene <stevenyaga2014@gmail.com>
This commit is contained in:
Steve Munene
2024-10-23 22:40:13 +03:00
committed by GitHub
parent 0a1ac0183c
commit ca8ed3b006
83 changed files with 5494 additions and 4112 deletions
+23 -22
View File
@@ -12,11 +12,11 @@ import (
var cmdBootstrap = []cobra.Command{
{
Use: "create <JSON_config> <user_auth_token>",
Use: "create <JSON_config> <domain_id> <user_auth_token>",
Short: "Create config",
Long: `Create new Thing Bootstrap Config to the user identified by the provided key`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -27,7 +27,7 @@ var cmdBootstrap = []cobra.Command{
return
}
id, err := sdk.AddBootstrap(cfg, args[1])
id, err := sdk.AddBootstrap(cfg, args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -37,24 +37,25 @@ var cmdBootstrap = []cobra.Command{
},
},
{
Use: "get [all | <thing_id>] <user_auth_token>",
Use: "get [all | <thing_id>] <domain_id> <user_auth_token>",
Short: "Get config",
Long: `Get Thing Config with given ID belonging to the user identified by the given key.
all - lists all config
<thing_id> - view config of <thing_id>`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
pageMetadata := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
State: State,
Name: Name,
Offset: Offset,
Limit: Limit,
State: State,
Name: Name,
DomainID: args[1],
}
if args[0] == "all" {
l, err := sdk.Bootstraps(pageMetadata, args[1])
l, err := sdk.Bootstraps(pageMetadata, args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -63,7 +64,7 @@ var cmdBootstrap = []cobra.Command{
return
}
c, err := sdk.ViewBootstrap(args[0], args[1])
c, err := sdk.ViewBootstrap(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -73,7 +74,7 @@ var cmdBootstrap = []cobra.Command{
},
},
{
Use: "update [config <JSON_config> | connection <id> <channel_ids> | certs <id> <client_cert> <client_key> <ca> ] <user_auth_token>",
Use: "update [config <JSON_config> | connection <id> <channel_ids> | certs <id> <client_cert> <client_key> <ca> ] <domain_id> <user_auth_token>",
Short: "Update config",
Long: `Updates editable fields of the provided Config.
config <JSON_config> - Updates editable fields of the provided Config.
@@ -81,7 +82,7 @@ var cmdBootstrap = []cobra.Command{
channel_ids - '["channel_id1", ...]'
certs <id> <client_cert> <client_key> <ca> - Update bootstrap config certificates.`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) < 3 {
if len(args) < 4 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -92,7 +93,7 @@ var cmdBootstrap = []cobra.Command{
return
}
if err := sdk.UpdateBootstrap(cfg, args[1]); err != nil {
if err := sdk.UpdateBootstrap(cfg, args[1], args[2]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -106,7 +107,7 @@ var cmdBootstrap = []cobra.Command{
logErrorCmd(*cmd, err)
return
}
if err := sdk.UpdateBootstrapConnection(args[1], ids, args[3]); err != nil {
if err := sdk.UpdateBootstrapConnection(args[1], ids, args[3], args[4]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -115,7 +116,7 @@ var cmdBootstrap = []cobra.Command{
return
}
if args[0] == "certs" {
cfg, err := sdk.UpdateBootstrapCerts(args[0], args[1], args[2], args[3], args[4])
cfg, err := sdk.UpdateBootstrapCerts(args[0], args[1], args[2], args[3], args[4], args[5])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -128,16 +129,16 @@ var cmdBootstrap = []cobra.Command{
},
},
{
Use: "remove <thing_id> <user_auth_token>",
Use: "remove <thing_id> <domain_id> <user_auth_token>",
Short: "Remove config",
Long: `Removes Config with specified key that belongs to the user identified by the given key`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
if err := sdk.RemoveBootstrap(args[0], args[1]); err != nil {
if err := sdk.RemoveBootstrap(args[0], args[1], args[2]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -175,11 +176,11 @@ var cmdBootstrap = []cobra.Command{
},
},
{
Use: "whitelist <JSON_config> <user_auth_token>",
Use: "whitelist <JSON_config> <domain_id> <user_auth_token>",
Short: "Whitelist config",
Long: `Whitelist updates thing state config with given id from the authenticated user`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -190,7 +191,7 @@ var cmdBootstrap = []cobra.Command{
return
}
if err := sdk.Whitelist(cfg.ThingID, cfg.State, args[1]); err != nil {
if err := sdk.Whitelist(cfg.ThingID, cfg.State, args[1], args[2]); err != nil {
logErrorCmd(*cmd, err)
return
}
+34 -8
View File
@@ -48,6 +48,7 @@ func TestCreateBootstrapConfigCmd(t *testing.T) {
desc: "create bootstrap config successfully",
args: []string{
jsonConfig,
domainID,
validToken,
},
logType: createLog,
@@ -58,6 +59,7 @@ func TestCreateBootstrapConfigCmd(t *testing.T) {
desc: "create bootstrap config with invald args",
args: []string{
jsonConfig,
domainID,
validToken,
extraArg,
},
@@ -67,6 +69,7 @@ func TestCreateBootstrapConfigCmd(t *testing.T) {
desc: "create bootstrap config with invald json",
args: []string{
invalidJson,
domainID,
validToken,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -77,6 +80,7 @@ func TestCreateBootstrapConfigCmd(t *testing.T) {
desc: "create bootstrap config with invald token",
args: []string{
jsonConfig,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusUnauthorized),
@@ -87,7 +91,7 @@ func TestCreateBootstrapConfigCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("AddBootstrap", mock.Anything, mock.Anything).Return(tc.id, tc.sdkErr)
sdkCall := sdkMock.On("AddBootstrap", mock.Anything, mock.Anything, mock.Anything).Return(tc.id, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{createCmd}, tc.args...)...)
switch tc.logType {
@@ -125,6 +129,7 @@ func TestGetBootstrapConfigCmd(t *testing.T) {
desc: "get all bootstrap config successfully",
args: []string{
all,
domainID,
token,
},
page: mgsdk.BootstrapPage{
@@ -141,6 +146,7 @@ func TestGetBootstrapConfigCmd(t *testing.T) {
desc: "get bootstrap config with id",
args: []string{
channel.ID,
domainID,
token,
},
logType: entityLog,
@@ -150,6 +156,7 @@ func TestGetBootstrapConfigCmd(t *testing.T) {
desc: "get bootstrap config with invalid args",
args: []string{
all,
domainID,
token,
extraArg,
},
@@ -159,6 +166,7 @@ func TestGetBootstrapConfigCmd(t *testing.T) {
desc: "get all bootstrap config with invalid token",
args: []string{
all,
domainID,
invalidToken,
},
logType: errLog,
@@ -169,6 +177,7 @@ func TestGetBootstrapConfigCmd(t *testing.T) {
desc: "get bootstrap config with invalid id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -179,8 +188,8 @@ func TestGetBootstrapConfigCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("ViewBootstrap", tc.args[0], tc.args[1]).Return(tc.boot, tc.sdkErr)
sdkCall1 := sdkMock.On("Bootstraps", mock.Anything, tc.args[1]).Return(tc.page, tc.sdkErr)
sdkCall := sdkMock.On("ViewBootstrap", tc.args[0], tc.args[1], tc.args[2]).Return(tc.boot, tc.sdkErr)
sdkCall1 := sdkMock.On("Bootstraps", mock.Anything, tc.args[2]).Return(tc.page, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{getCmd}, tc.args...)...)
@@ -223,6 +232,7 @@ func TestRemoveBootstrapConfigCmd(t *testing.T) {
desc: "remove bootstrap config successfully",
args: []string{
thing.ID,
domainID,
token,
},
logType: okLog,
@@ -231,6 +241,7 @@ func TestRemoveBootstrapConfigCmd(t *testing.T) {
desc: "remove bootstrap config with invalid args",
args: []string{
thing.ID,
domainID,
token,
extraArg,
},
@@ -240,6 +251,7 @@ func TestRemoveBootstrapConfigCmd(t *testing.T) {
desc: "remove bootstrap config with invalid thing id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -250,6 +262,7 @@ func TestRemoveBootstrapConfigCmd(t *testing.T) {
desc: "remove bootstrap config with invalid token",
args: []string{
thing.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -260,7 +273,7 @@ func TestRemoveBootstrapConfigCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("RemoveBootstrap", tc.args[0], tc.args[1]).Return(tc.sdkErr)
sdkCall := sdkMock.On("RemoveBootstrap", tc.args[0], tc.args[1], tc.args[2]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{rmCmd}, tc.args...)...)
switch tc.logType {
@@ -300,6 +313,7 @@ func TestUpdateBootstrapConfigCmd(t *testing.T) {
args: []string{
config,
newConfigJson,
domainID,
token,
},
logType: okLog,
@@ -309,6 +323,7 @@ func TestUpdateBootstrapConfigCmd(t *testing.T) {
args: []string{
config,
newConfigJson,
domainID,
invalidToken,
},
logType: errLog,
@@ -321,6 +336,7 @@ func TestUpdateBootstrapConfigCmd(t *testing.T) {
connection,
thing.ID,
chanIDsJson,
domainID,
token,
},
logType: okLog,
@@ -331,6 +347,7 @@ func TestUpdateBootstrapConfigCmd(t *testing.T) {
connection,
thing.ID,
fmt.Sprintf("[\"%s\"", thing.ID),
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -343,6 +360,7 @@ func TestUpdateBootstrapConfigCmd(t *testing.T) {
connection,
thing.ID,
chanIDsJson,
domainID,
invalidToken,
},
logType: errLog,
@@ -357,6 +375,7 @@ func TestUpdateBootstrapConfigCmd(t *testing.T) {
"client cert",
"client key",
"ca",
domainID,
token,
},
boot: bootConfig,
@@ -370,6 +389,7 @@ func TestUpdateBootstrapConfigCmd(t *testing.T) {
"client cert",
"client key",
"ca",
domainID,
invalidToken,
},
logType: errLog,
@@ -380,6 +400,7 @@ func TestUpdateBootstrapConfigCmd(t *testing.T) {
desc: "update bootstrap config with invalid args",
args: []string{
newConfigJson,
domainID,
token,
},
logType: usageLog,
@@ -389,6 +410,7 @@ func TestUpdateBootstrapConfigCmd(t *testing.T) {
args: []string{
config,
"{\"name\" : \"New Bootstrap\"",
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -410,9 +432,9 @@ func TestUpdateBootstrapConfigCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
var boot mgsdk.BootstrapConfig
sdkCall := sdkMock.On("UpdateBootstrap", mock.Anything, mock.Anything).Return(tc.sdkErr)
sdkCall1 := sdkMock.On("UpdateBootstrapConnection", mock.Anything, mock.Anything, mock.Anything).Return(tc.sdkErr)
sdkCall2 := sdkMock.On("UpdateBootstrapCerts", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.boot, tc.sdkErr)
sdkCall := sdkMock.On("UpdateBootstrap", mock.Anything, mock.Anything, mock.Anything).Return(tc.sdkErr)
sdkCall1 := sdkMock.On("UpdateBootstrapConnection", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.sdkErr)
sdkCall2 := sdkMock.On("UpdateBootstrapCerts", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.boot, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{updCmd}, tc.args...)...)
switch tc.logType {
@@ -453,6 +475,7 @@ func TestWhitelistConfigCmd(t *testing.T) {
desc: "whitelist config successfully",
args: []string{
jsonConfig,
domainID,
validToken,
},
logType: okLog,
@@ -461,6 +484,7 @@ func TestWhitelistConfigCmd(t *testing.T) {
desc: "whitelist config with invalid args",
args: []string{
jsonConfig,
domainID,
validToken,
extraArg,
},
@@ -470,6 +494,7 @@ func TestWhitelistConfigCmd(t *testing.T) {
desc: "whitelist config with invalid json",
args: []string{
fmt.Sprintf("{\"thing_id\": \"%s\", \"state\":%d", thing.ID, 1),
domainID,
validToken,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -480,6 +505,7 @@ func TestWhitelistConfigCmd(t *testing.T) {
desc: "whitelist config with invalid token",
args: []string{
jsonConfig,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusUnauthorized),
@@ -490,7 +516,7 @@ func TestWhitelistConfigCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("Whitelist", mock.Anything, mock.Anything, tc.args[1]).Return(tc.sdkErr)
sdkCall := sdkMock.On("Whitelist", mock.Anything, mock.Anything, tc.args[1], tc.args[2]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{whitelistCmd}, tc.args...)...)
switch tc.logType {
case okLog:
+10 -10
View File
@@ -9,16 +9,16 @@ import (
var cmdCerts = []cobra.Command{
{
Use: "get [<cert_serial> | thing <thing_id> ] <user_auth_token>",
Use: "get [<cert_serial> | thing <thing_id> ] <domain_id> <user_auth_token>",
Short: "Get certificate",
Long: `Gets a certificate for a given cert ID.`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) < 2 {
if len(args) < 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
if args[0] == "thing" {
cert, err := sdk.ViewCertByThing(args[1], args[2])
cert, err := sdk.ViewCertByThing(args[1], args[2], args[3])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -26,7 +26,7 @@ var cmdCerts = []cobra.Command{
logJSONCmd(*cmd, cert)
return
}
cert, err := sdk.ViewCert(args[0], args[1])
cert, err := sdk.ViewCert(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -35,15 +35,15 @@ var cmdCerts = []cobra.Command{
},
},
{
Use: "revoke <thing_id> <user_auth_token>",
Use: "revoke <thing_id> <domain_id> <user_auth_token>",
Short: "Revoke certificate",
Long: `Revokes a certificate for a given thing ID.`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
rtime, err := sdk.RevokeCert(args[0], args[1])
rtime, err := sdk.RevokeCert(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -58,18 +58,18 @@ func NewCertsCmd() *cobra.Command {
var ttl string
issueCmd := cobra.Command{
Use: "issue <thing_id> <user_auth_token> [--ttl=8760h]",
Use: "issue <thing_id> <domain_id> <user_auth_token> [--ttl=8760h]",
Short: "Issue certificate",
Long: `Issues new certificate for a thing`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
thingID := args[0]
c, err := sdk.IssueCert(thingID, ttl, args[1])
c, err := sdk.IssueCert(thingID, ttl, args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
+14 -4
View File
@@ -47,6 +47,7 @@ func TestGetCertCmd(t *testing.T) {
args: []string{
"thing",
thing.ID,
domainID,
validToken,
},
logType: entityLog,
@@ -63,6 +64,7 @@ func TestGetCertCmd(t *testing.T) {
desc: "get cert successfully by id",
args: []string{
thing.ID,
domainID,
validToken,
},
logType: entityLog,
@@ -73,6 +75,7 @@ func TestGetCertCmd(t *testing.T) {
args: []string{
"thing",
thing.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusUnauthorized),
@@ -83,6 +86,7 @@ func TestGetCertCmd(t *testing.T) {
desc: "get cert by id with invalid token",
args: []string{
thing.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusUnauthorized),
@@ -100,8 +104,8 @@ func TestGetCertCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("ViewCertByThing", mock.Anything, mock.Anything).Return(tc.serials, tc.sdkErr)
sdkCall1 := sdkMock.On("ViewCert", mock.Anything, mock.Anything).Return(tc.cert, tc.sdkErr)
sdkCall := sdkMock.On("ViewCertByThing", mock.Anything, mock.Anything, mock.Anything).Return(tc.serials, tc.sdkErr)
sdkCall1 := sdkMock.On("ViewCert", mock.Anything, mock.Anything, mock.Anything).Return(tc.cert, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{getCmd}, tc.args...)...)
switch tc.logType {
case entityLog:
@@ -147,6 +151,7 @@ func TestRevokeCertCmd(t *testing.T) {
desc: "revoke cert successfully",
args: []string{
thing.ID,
domainID,
token,
},
logType: revokeLog,
@@ -157,6 +162,7 @@ func TestRevokeCertCmd(t *testing.T) {
desc: "revoke cert with invalid args",
args: []string{
thing.ID,
domainID,
token,
extraArg,
},
@@ -166,6 +172,7 @@ func TestRevokeCertCmd(t *testing.T) {
desc: "revoke cert with invalid token",
args: []string{
thing.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -176,7 +183,7 @@ func TestRevokeCertCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("RevokeCert", tc.args[0], tc.args[1]).Return(tc.time, tc.sdkErr)
sdkCall := sdkMock.On("RevokeCert", tc.args[0], tc.args[1], tc.args[2]).Return(tc.time, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{revokeCmd}, tc.args...)...)
switch tc.logType {
@@ -215,6 +222,7 @@ func TestIssueCertCmd(t *testing.T) {
desc: "issue cert successfully",
args: []string{
thing.ID,
domainID,
validToken,
},
cert: cert,
@@ -224,6 +232,7 @@ func TestIssueCertCmd(t *testing.T) {
desc: "issue cert with invalid args",
args: []string{
thing.ID,
domainID,
validToken,
extraArg,
},
@@ -233,6 +242,7 @@ func TestIssueCertCmd(t *testing.T) {
desc: "issue cert with invalid token",
args: []string{
thing.ID,
domainID,
invalidToken,
},
logType: errLog,
@@ -243,7 +253,7 @@ func TestIssueCertCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("IssueCert", mock.Anything, mock.Anything, tc.args[1]).Return(tc.cert, tc.sdkErr)
sdkCall := sdkMock.On("IssueCert", mock.Anything, mock.Anything, tc.args[1], tc.args[2]).Return(tc.cert, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{issueCmd}, tc.args...)...)
switch tc.logType {
+56 -53
View File
@@ -14,11 +14,11 @@ const all = "all"
var cmdChannels = []cobra.Command{
{
Use: "create <JSON_channel> <user_auth_token>",
Use: "create <JSON_channel> <domain_id> <user_auth_token>",
Short: "Create channel",
Long: `Creates new channel and generates it's UUID`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -29,7 +29,7 @@ var cmdChannels = []cobra.Command{
return
}
channel, err := sdk.CreateChannel(channel, args[1])
channel, err := sdk.CreateChannel(channel, args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -39,14 +39,14 @@ var cmdChannels = []cobra.Command{
},
},
{
Use: "get [all | <channel_id>] <user_auth_token>",
Use: "get [all | <channel_id>] <domain_id> <user_auth_token>",
Short: "Get channel",
Long: `Get all channels or get channel by id. Channels can be filtered by name or metadata.
all - lists all channels
<channel_id> - shows thing with provided <channel_id>`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -63,7 +63,7 @@ var cmdChannels = []cobra.Command{
}
if args[0] == all {
l, err := sdk.Channels(pageMetadata, args[1])
l, err := sdk.Channels(pageMetadata, args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -72,7 +72,7 @@ var cmdChannels = []cobra.Command{
logJSONCmd(*cmd, l)
return
}
c, err := sdk.Channel(args[0], args[1])
c, err := sdk.Channel(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -82,17 +82,17 @@ var cmdChannels = []cobra.Command{
},
},
{
Use: "delete <channel_id> <user_auth_token>",
Use: "delete <channel_id> <domain_id> <user_auth_token>",
Short: "Delete channel",
Long: "Delete channel by id.\n" +
"Usage:\n" +
"\tmagistrala-cli channels delete <channel_id> $USERTOKEN - delete the given channel ID\n",
"\tmagistrala-cli channels delete <channel_id> $DOMAINID $USERTOKEN - delete the given channel ID\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
if err := sdk.DeleteChannel(args[0], args[1]); err != nil {
if err := sdk.DeleteChannel(args[0], args[1], args[2]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -100,11 +100,11 @@ var cmdChannels = []cobra.Command{
},
},
{
Use: "update <channel_id> <JSON_string> <user_auth_token>",
Use: "update <channel_id> <JSON_string> <domain_id> <user_auth_token>",
Short: "Update channel",
Long: `Updates channel record`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 3 {
if len(args) != 4 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -115,7 +115,7 @@ var cmdChannels = []cobra.Command{
return
}
channel.ID = args[0]
channel, err := sdk.UpdateChannel(channel, args[2])
channel, err := sdk.UpdateChannel(channel, args[2], args[3])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -125,19 +125,20 @@ var cmdChannels = []cobra.Command{
},
},
{
Use: "connections <channel_id> <user_auth_token>",
Use: "connections <channel_id> <domain_id> <user_auth_token>",
Short: "Connections list",
Long: `List of Things connected to a Channel`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
pm := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
Offset: Offset,
Limit: Limit,
DomainID: args[1],
}
cl, err := sdk.ThingsByChannel(args[0], pm, args[1])
cl, err := sdk.ThingsByChannel(args[0], pm, args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -147,16 +148,16 @@ var cmdChannels = []cobra.Command{
},
},
{
Use: "enable <channel_id> <user_auth_token>",
Use: "enable <channel_id> <domain_id> <user_auth_token>",
Short: "Change channel status to enabled",
Long: `Change channel status to enabled`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
channel, err := sdk.EnableChannel(args[0], args[1])
channel, err := sdk.EnableChannel(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -166,16 +167,16 @@ var cmdChannels = []cobra.Command{
},
},
{
Use: "disable <channel_id> <user_auth_token>",
Use: "disable <channel_id> <domain_id> <user_auth_token>",
Short: "Change channel status to disabled",
Long: `Change channel status to disabled`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
channel, err := sdk.DisableChannel(args[0], args[1])
channel, err := sdk.DisableChannel(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -185,21 +186,22 @@ var cmdChannels = []cobra.Command{
},
},
{
Use: "users <channel_id> <user_auth_token>",
Use: "users <channel_id> <domain_id> <user_auth_token>",
Short: "List users",
Long: "List users of a channel\n" +
"Usage:\n" +
"\tmagistrala-cli channels users <channel_id> $USERTOKEN\n",
"\tmagistrala-cli channels users <channel_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
pm := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
Offset: Offset,
Limit: Limit,
DomainID: args[1],
}
ul, err := sdk.ListChannelUsers(args[0], pm, args[1])
ul, err := sdk.ListChannelUsers(args[0], pm, args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -209,21 +211,22 @@ var cmdChannels = []cobra.Command{
},
},
{
Use: "groups <channel_id> <user_auth_token>",
Use: "groups <channel_id> <domain_id> <user_auth_token>",
Short: "List groups",
Long: "List groups of a channel\n" +
"Usage:\n" +
"\tmagistrala-cli channels groups <channel_id> $USERTOKEN\n",
"\tmagistrala-cli channels groups <channel_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
pm := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
Offset: Offset,
Limit: Limit,
DomainID: args[1],
}
ul, err := sdk.ListChannelUserGroups(args[0], pm, args[1])
ul, err := sdk.ListChannelUserGroups(args[0], pm, args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -236,13 +239,13 @@ var cmdChannels = []cobra.Command{
var channelAssignCmds = []cobra.Command{
{
Use: "users <relation> <user_ids> <channel_id> <user_auth_token>",
Use: "users <relation> <user_ids> <channel_id> <domain_id> <user_auth_token>",
Short: "Assign users",
Long: "Assign users to a channel\n" +
"Usage:\n" +
"\tmagistrala-cli channels assign users <relation> '[\"<user_id_1>\", \"<user_id_2>\"]' <channel_id> $USERTOKEN\n",
"\tmagistrala-cli channels assign users <relation> '[\"<user_id_1>\", \"<user_id_2>\"]' <channel_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 4 {
if len(args) != 5 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -251,7 +254,7 @@ var channelAssignCmds = []cobra.Command{
logErrorCmd(*cmd, err)
return
}
if err := sdk.AddUserToChannel(args[2], mgxsdk.UsersRelationRequest{Relation: args[0], UserIDs: userIDs}, args[3]); err != nil {
if err := sdk.AddUserToChannel(args[2], mgxsdk.UsersRelationRequest{Relation: args[0], UserIDs: userIDs}, args[3], args[4]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -259,14 +262,14 @@ var channelAssignCmds = []cobra.Command{
},
},
{
Use: "groups <group_ids> <channel_id> <user_auth_token>",
Use: "groups <group_ids> <channel_id> <domain_id> <user_auth_token>",
Short: "Assign groups",
Long: "Assign groups to a channel\n" +
"Usage:\n" +
"\tmagistrala-cli channels assign groups '[\"<group_id_1>\", \"<group_id_2>\"]' <channel_id> $USERTOKEN\n",
"\tmagistrala-cli channels assign groups '[\"<group_id_1>\", \"<group_id_2>\"]' <channel_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 3 {
if len(args) != 4 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -275,7 +278,7 @@ var channelAssignCmds = []cobra.Command{
logErrorCmd(*cmd, err)
return
}
if err := sdk.AddUserGroupToChannel(args[1], mgxsdk.UserGroupsRequest{UserGroupIDs: groupIDs}, args[2]); err != nil {
if err := sdk.AddUserGroupToChannel(args[1], mgxsdk.UserGroupsRequest{UserGroupIDs: groupIDs}, args[2], args[3]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -286,13 +289,13 @@ var channelAssignCmds = []cobra.Command{
var channelUnassignCmds = []cobra.Command{
{
Use: "groups <group_ids> <channel_id> <user_auth_token>",
Use: "groups <group_ids> <channel_id> <domain_id> <user_auth_token>",
Short: "Unassign groups",
Long: "Unassign groups from a channel\n" +
"Usage:\n" +
"\tmagistrala-cli channels unassign groups '[\"<group_id_1>\", \"<group_id_2>\"]' <channel_id> $USERTOKEN\n",
"\tmagistrala-cli channels unassign groups '[\"<group_id_1>\", \"<group_id_2>\"]' <channel_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 3 {
if len(args) != 4 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -301,7 +304,7 @@ var channelUnassignCmds = []cobra.Command{
logErrorCmd(*cmd, err)
return
}
if err := sdk.RemoveUserGroupFromChannel(args[1], mgxsdk.UserGroupsRequest{UserGroupIDs: groupIDs}, args[2]); err != nil {
if err := sdk.RemoveUserGroupFromChannel(args[1], mgxsdk.UserGroupsRequest{UserGroupIDs: groupIDs}, args[2], args[3]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -310,13 +313,13 @@ var channelUnassignCmds = []cobra.Command{
},
{
Use: "users <relation> <user_ids> <channel_id> <user_auth_token>",
Use: "users <relation> <user_ids> <channel_id> <domain_id> <user_auth_token>",
Short: "Unassign users",
Long: "Unassign users from a channel\n" +
"Usage:\n" +
"\tmagistrala-cli channels unassign users <relation> '[\"<user_id_1>\", \"<user_id_2>\"]' <channel_id> $USERTOKEN\n",
"\tmagistrala-cli channels unassign users <relation> '[\"<user_id_1>\", \"<user_id_2>\"]' <channel_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 4 {
if len(args) != 5 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -325,7 +328,7 @@ var channelUnassignCmds = []cobra.Command{
logErrorCmd(*cmd, err)
return
}
if err := sdk.RemoveUserFromChannel(args[2], mgxsdk.UsersRelationRequest{Relation: args[0], UserIDs: userIDs}, args[3]); err != nil {
if err := sdk.RemoveUserFromChannel(args[2], mgxsdk.UsersRelationRequest{Relation: args[0], UserIDs: userIDs}, args[3], args[4]); err != nil {
logErrorCmd(*cmd, err)
return
}
+68 -44
View File
@@ -45,6 +45,7 @@ func TestCreateChannelCmd(t *testing.T) {
desc: "create channel successfully",
args: []string{
channelJson,
domainID,
token,
},
channel: channel,
@@ -54,6 +55,7 @@ func TestCreateChannelCmd(t *testing.T) {
desc: "create channel with invalid args",
args: []string{
channelJson,
domainID,
token,
extraArg,
},
@@ -63,6 +65,7 @@ func TestCreateChannelCmd(t *testing.T) {
desc: "create channel with invalid json",
args: []string{
"{\"name\":\"testchannel\", \"metadata\":{\"key1\":\"value1\"}",
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -73,27 +76,18 @@ func TestCreateChannelCmd(t *testing.T) {
desc: "create channel with invalid token",
args: []string{
channelJson,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusUnauthorized),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusUnauthorized)),
logType: errLog,
},
{
desc: "create channel without domain token",
args: []string{
channelJson,
tokenWithoutDomain,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden)),
logType: errLog,
},
}
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("CreateChannel", mock.Anything, tc.args[1]).Return(tc.channel, tc.sdkErr)
sdkCall := sdkMock.On("CreateChannel", mock.Anything, tc.args[1], tc.args[2]).Return(tc.channel, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{createCmd}, tc.args...)...)
switch tc.logType {
@@ -133,6 +127,7 @@ func TestGetChannelsCmd(t *testing.T) {
desc: "get all channels successfully",
args: []string{
all,
domainID,
token,
},
page: mgsdk.ChannelsPage{
@@ -144,6 +139,7 @@ func TestGetChannelsCmd(t *testing.T) {
desc: "get channel with id",
args: []string{
channel.ID,
domainID,
token,
},
logType: entityLog,
@@ -153,6 +149,7 @@ func TestGetChannelsCmd(t *testing.T) {
desc: "get channels with invalid args",
args: []string{
all,
domainID,
token,
extraArg,
},
@@ -162,26 +159,18 @@ func TestGetChannelsCmd(t *testing.T) {
desc: "get all channels with invalid token",
args: []string{
all,
domainID,
invalidToken,
},
logType: errLog,
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden)),
},
{
desc: "get channel without domain token",
args: []string{
channel.ID,
tokenWithoutDomain,
},
logType: errLog,
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden)),
},
{
desc: "get channel with invalid id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -192,8 +181,8 @@ func TestGetChannelsCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("Channel", tc.args[0], tc.args[1]).Return(tc.channel, tc.sdkErr)
sdkCall1 := sdkMock.On("Channels", mock.Anything, tc.args[1]).Return(tc.page, tc.sdkErr)
sdkCall := sdkMock.On("Channel", tc.args[0], tc.args[1], tc.args[2]).Return(tc.channel, tc.sdkErr)
sdkCall1 := sdkMock.On("Channels", mock.Anything, tc.args[2]).Return(tc.page, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{getCmd}, tc.args...)...)
@@ -236,6 +225,7 @@ func TestDeleteChannelCmd(t *testing.T) {
desc: "delete channel successfully",
args: []string{
channel.ID,
domainID,
token,
},
logType: okLog,
@@ -244,6 +234,7 @@ func TestDeleteChannelCmd(t *testing.T) {
desc: "delete channel with invalid args",
args: []string{
channel.ID,
domainID,
token,
extraArg,
},
@@ -253,6 +244,7 @@ func TestDeleteChannelCmd(t *testing.T) {
desc: "delete channel with invalid channel id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -263,6 +255,7 @@ func TestDeleteChannelCmd(t *testing.T) {
desc: "delete channel with invalid token",
args: []string{
channel.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -273,7 +266,7 @@ func TestDeleteChannelCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("DeleteChannel", tc.args[0], tc.args[1]).Return(tc.sdkErr)
sdkCall := sdkMock.On("DeleteChannel", tc.args[0], tc.args[1], tc.args[2]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{delCmd}, tc.args...)...)
switch tc.logType {
@@ -309,6 +302,7 @@ func TestUpdateChannelCmd(t *testing.T) {
args: []string{
channel.ID,
newChannelJson,
domainID,
token,
},
channel: mgsdk.Channel{
@@ -322,6 +316,7 @@ func TestUpdateChannelCmd(t *testing.T) {
args: []string{
channel.ID,
newChannelJson,
domainID,
token,
extraArg,
},
@@ -332,6 +327,7 @@ func TestUpdateChannelCmd(t *testing.T) {
args: []string{
invalidID,
newChannelJson,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -343,6 +339,7 @@ func TestUpdateChannelCmd(t *testing.T) {
args: []string{
channel.ID,
"{\"name\" : \"channel1\"",
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -353,7 +350,7 @@ func TestUpdateChannelCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
var ch mgsdk.Channel
sdkCall := sdkMock.On("UpdateChannel", mock.Anything, tc.args[2]).Return(tc.channel, tc.sdkErr)
sdkCall := sdkMock.On("UpdateChannel", mock.Anything, tc.args[2], tc.args[3]).Return(tc.channel, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{updCmd}, tc.args...)...)
switch tc.logType {
@@ -390,6 +387,7 @@ func TestListConnectionsCmd(t *testing.T) {
desc: "list connections successfully",
args: []string{
channel.ID,
domainID,
token,
},
page: mgsdk.ThingsPage{
@@ -406,6 +404,7 @@ func TestListConnectionsCmd(t *testing.T) {
desc: "list connections with invalid args",
args: []string{
channel.ID,
domainID,
token,
extraArg,
},
@@ -415,6 +414,7 @@ func TestListConnectionsCmd(t *testing.T) {
desc: "list connections with invalid channel id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -425,7 +425,7 @@ func TestListConnectionsCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("ThingsByChannel", tc.args[0], mock.Anything, tc.args[1]).Return(tc.page, tc.sdkErr)
sdkCall := sdkMock.On("ThingsByChannel", tc.args[0], mock.Anything, tc.args[2]).Return(tc.page, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{connsCmd}, tc.args...)...)
switch tc.logType {
case entityLog:
@@ -463,6 +463,7 @@ func TestEnableChannelCmd(t *testing.T) {
desc: "enable channel successfully",
args: []string{
channel.ID,
domainID,
validToken,
},
channel: channel,
@@ -472,6 +473,7 @@ func TestEnableChannelCmd(t *testing.T) {
desc: "delete channel with invalid token",
args: []string{
channel.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -482,6 +484,7 @@ func TestEnableChannelCmd(t *testing.T) {
desc: "delete channel with invalid channel ID",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -492,6 +495,7 @@ func TestEnableChannelCmd(t *testing.T) {
desc: "enable channel with invalid args",
args: []string{
channel.ID,
domainID,
validToken,
extraArg,
},
@@ -501,7 +505,7 @@ func TestEnableChannelCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("EnableChannel", tc.args[0], tc.args[1]).Return(tc.channel, tc.sdkErr)
sdkCall := sdkMock.On("EnableChannel", tc.args[0], tc.args[1], tc.args[2]).Return(tc.channel, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{enableCmd}, tc.args...)...)
switch tc.logType {
@@ -540,6 +544,7 @@ func TestDisableChannelCmd(t *testing.T) {
desc: "disable channel successfully",
args: []string{
channel.ID,
domainID,
validToken,
},
logType: entityLog,
@@ -549,6 +554,7 @@ func TestDisableChannelCmd(t *testing.T) {
desc: "disable channel with invalid token",
args: []string{
channel.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -559,6 +565,7 @@ func TestDisableChannelCmd(t *testing.T) {
desc: "disable channel with invalid id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -569,6 +576,7 @@ func TestDisableChannelCmd(t *testing.T) {
desc: "disable thing with invalid args",
args: []string{
channel.ID,
domainID,
validToken,
extraArg,
},
@@ -578,7 +586,7 @@ func TestDisableChannelCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("DisableChannel", tc.args[0], tc.args[1]).Return(tc.channel, tc.sdkErr)
sdkCall := sdkMock.On("DisableChannel", tc.args[0], tc.args[1], tc.args[2]).Return(tc.channel, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{disableCmd}, tc.args...)...)
switch tc.logType {
@@ -619,6 +627,7 @@ func TestUsersChannelCmd(t *testing.T) {
desc: "get channel's users successfully",
args: []string{
channel.ID,
domainID,
token,
},
page: mgsdk.UsersPage{
@@ -635,25 +644,17 @@ func TestUsersChannelCmd(t *testing.T) {
desc: "list channel users with invalid args",
args: []string{
channel.ID,
domainID,
token,
extraArg,
},
logType: usageLog,
},
{
desc: "list channel users without domain token",
args: []string{
channel.ID,
tokenWithoutDomain,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden)),
logType: errLog,
},
{
desc: "list channel users with invalid id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -664,7 +665,7 @@ func TestUsersChannelCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("ListChannelUsers", tc.args[0], mock.Anything, tc.args[1]).Return(tc.page, tc.sdkErr)
sdkCall := sdkMock.On("ListChannelUsers", tc.args[0], mock.Anything, tc.args[2]).Return(tc.page, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{usrCmd}, tc.args...)...)
switch tc.logType {
@@ -703,6 +704,7 @@ func TestListGroupCmd(t *testing.T) {
desc: "list groups successfully",
args: []string{
channel.ID,
domainID,
token,
},
page: mgsdk.GroupsPage{
@@ -719,6 +721,7 @@ func TestListGroupCmd(t *testing.T) {
desc: "list groups with invalid args",
args: []string{
channel.ID,
domainID,
token,
extraArg,
},
@@ -728,6 +731,7 @@ func TestListGroupCmd(t *testing.T) {
desc: "list groups with invalid channel id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -737,7 +741,7 @@ func TestListGroupCmd(t *testing.T) {
}
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("ListChannelUserGroups", tc.args[0], mock.Anything, tc.args[1]).Return(tc.page, tc.sdkErr)
sdkCall := sdkMock.On("ListChannelUserGroups", tc.args[0], mock.Anything, tc.args[2]).Return(tc.page, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{grpCmd}, tc.args...)...)
switch tc.logType {
case entityLog:
@@ -777,6 +781,7 @@ func TestAssignUserCmd(t *testing.T) {
relation,
userIds,
channel.ID,
domainID,
token,
},
logType: okLog,
@@ -787,6 +792,7 @@ func TestAssignUserCmd(t *testing.T) {
relation,
userIds,
channel.ID,
domainID,
token,
extraArg,
},
@@ -798,6 +804,7 @@ func TestAssignUserCmd(t *testing.T) {
relation,
fmt.Sprintf("[\"%s\"", user.ID),
channel.ID,
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -810,6 +817,7 @@ func TestAssignUserCmd(t *testing.T) {
relation,
userIds,
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -822,6 +830,7 @@ func TestAssignUserCmd(t *testing.T) {
relation,
fmt.Sprintf("[\"%s\"]", invalidID),
channel.ID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAddPolicies, http.StatusBadRequest),
@@ -832,7 +841,7 @@ func TestAssignUserCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("AddUserToChannel", tc.args[2], mock.Anything, tc.args[3]).Return(tc.sdkErr)
sdkCall := sdkMock.On("AddUserToChannel", tc.args[2], mock.Anything, tc.args[3], tc.args[4]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{assignCmd, usrCmd}, tc.args...)...)
switch tc.logType {
case okLog:
@@ -867,6 +876,7 @@ func TestAssignGroupCmd(t *testing.T) {
args: []string{
grpIds,
channel.ID,
domainID,
token,
},
logType: okLog,
@@ -876,6 +886,7 @@ func TestAssignGroupCmd(t *testing.T) {
args: []string{
grpIds,
channel.ID,
domainID,
token,
extraArg,
},
@@ -886,6 +897,7 @@ func TestAssignGroupCmd(t *testing.T) {
args: []string{
fmt.Sprintf("[\"%s\"", group.ID),
channel.ID,
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -897,6 +909,7 @@ func TestAssignGroupCmd(t *testing.T) {
args: []string{
grpIds,
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -908,6 +921,7 @@ func TestAssignGroupCmd(t *testing.T) {
args: []string{
fmt.Sprintf("[\"%s\"]", invalidID),
channel.ID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAddPolicies, http.StatusBadRequest),
@@ -918,7 +932,7 @@ func TestAssignGroupCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("AddUserGroupToChannel", tc.args[1], mock.Anything, tc.args[2]).Return(tc.sdkErr)
sdkCall := sdkMock.On("AddUserGroupToChannel", tc.args[1], mock.Anything, tc.args[2], tc.args[3]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{assignCmd, grpCmd}, tc.args...)...)
switch tc.logType {
case okLog:
@@ -954,6 +968,7 @@ func TestUnassignUserCmd(t *testing.T) {
relation,
userIds,
channel.ID,
domainID,
token,
},
logType: okLog,
@@ -964,6 +979,7 @@ func TestUnassignUserCmd(t *testing.T) {
relation,
userIds,
channel.ID,
domainID,
token,
extraArg,
},
@@ -975,6 +991,7 @@ func TestUnassignUserCmd(t *testing.T) {
relation,
fmt.Sprintf("[\"%s\"", user.ID),
channel.ID,
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -987,6 +1004,7 @@ func TestUnassignUserCmd(t *testing.T) {
relation,
userIds,
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -999,6 +1017,7 @@ func TestUnassignUserCmd(t *testing.T) {
relation,
fmt.Sprintf("[\"%s\"]", invalidID),
channel.ID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAddPolicies, http.StatusBadRequest),
@@ -1009,7 +1028,7 @@ func TestUnassignUserCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("RemoveUserFromChannel", tc.args[2], mock.Anything, tc.args[3]).Return(tc.sdkErr)
sdkCall := sdkMock.On("RemoveUserFromChannel", tc.args[2], mock.Anything, tc.args[3], tc.args[4]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{unassignCmd, usrCmd}, tc.args...)...)
switch tc.logType {
case okLog:
@@ -1046,6 +1065,7 @@ func TestUnassignGroupCmd(t *testing.T) {
grpCmd,
grpIds,
channel.ID,
domainID,
token,
},
logType: okLog,
@@ -1055,6 +1075,7 @@ func TestUnassignGroupCmd(t *testing.T) {
args: []string{
grpIds,
channel.ID,
domainID,
token,
extraArg,
},
@@ -1065,6 +1086,7 @@ func TestUnassignGroupCmd(t *testing.T) {
args: []string{
fmt.Sprintf("[\"%s\"", group.ID),
channel.ID,
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -1076,6 +1098,7 @@ func TestUnassignGroupCmd(t *testing.T) {
args: []string{
grpIds,
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -1087,6 +1110,7 @@ func TestUnassignGroupCmd(t *testing.T) {
args: []string{
fmt.Sprintf("[\"%s\"]", invalidID),
channel.ID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAddPolicies, http.StatusBadRequest),
@@ -1097,7 +1121,7 @@ func TestUnassignGroupCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("RemoveUserGroupFromChannel", tc.args[1], mock.Anything, tc.args[2]).Return(tc.sdkErr)
sdkCall := sdkMock.On("RemoveUserGroupFromChannel", tc.args[1], mock.Anything, tc.args[2], tc.args[3]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{unassignCmd, grpCmd}, tc.args...)...)
switch tc.logType {
case okLog:
+67 -62
View File
@@ -13,13 +13,13 @@ import (
var cmdGroups = []cobra.Command{
{
Use: "create <JSON_group> <user_auth_token>",
Use: "create <JSON_group> <domain_id> <user_auth_token>",
Short: "Create group",
Long: "Creates new group\n" +
"Usage:\n" +
"\tmagistrala-cli groups create '{\"name\":\"new group\", \"description\":\"new group description\", \"metadata\":{\"key\": \"value\"}}' $USERTOKEN\n",
"\tmagistrala-cli groups create '{\"name\":\"new group\", \"description\":\"new group description\", \"metadata\":{\"key\": \"value\"}}' $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -29,7 +29,7 @@ var cmdGroups = []cobra.Command{
return
}
group.Status = mgclients.EnabledStatus.String()
group, err := sdk.CreateGroup(group, args[1])
group, err := sdk.CreateGroup(group, args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -38,13 +38,13 @@ var cmdGroups = []cobra.Command{
},
},
{
Use: "update <JSON_group> <user_auth_token>",
Use: "update <JSON_group> <domain_id> <user_auth_token>",
Short: "Update group",
Long: "Updates group\n" +
"Usage:\n" +
"\tmagistrala-cli groups update '{\"id\":\"<group_id>\", \"name\":\"new group\", \"description\":\"new group description\", \"metadata\":{\"key\": \"value\"}}' $USERTOKEN\n",
"\tmagistrala-cli groups update '{\"id\":\"<group_id>\", \"name\":\"new group\", \"description\":\"new group description\", \"metadata\":{\"key\": \"value\"}}' $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -55,7 +55,7 @@ var cmdGroups = []cobra.Command{
return
}
group, err := sdk.UpdateGroup(group, args[1])
group, err := sdk.UpdateGroup(group, args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -65,29 +65,30 @@ var cmdGroups = []cobra.Command{
},
},
{
Use: "get [all | children <group_id> | parents <group_id> | members <group_id> | <group_id>] <user_auth_token>",
Use: "get [all | children <group_id> | parents <group_id> | members <group_id> | <group_id>] <domain_id> <user_auth_token>",
Short: "Get group",
Long: "Get all users groups, group children or group by id.\n" +
"Usage:\n" +
"\tmagistrala-cli groups get all $USERTOKEN - lists all groups\n" +
"\tmagistrala-cli groups get children <group_id> $USERTOKEN - lists all children groups of <group_id>\n" +
"\tmagistrala-cli groups get parents <group_id> $USERTOKEN - lists all parent groups of <group_id>\n" +
"\tmagistrala-cli groups get <group_id> $USERTOKEN - shows group with provided group ID\n",
"\tmagistrala-cli groups get all $DOMAINID $USERTOKEN - lists all groups\n" +
"\tmagistrala-cli groups get children <group_id> $DOMAINID $USERTOKEN - lists all children groups of <group_id>\n" +
"\tmagistrala-cli groups get parents <group_id> $DOMAINID $USERTOKEN - lists all parent groups of <group_id>\n" +
"\tmagistrala-cli groups get <group_id> $DOMAINID $USERTOKEN - shows group with provided group ID\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) < 2 {
if len(args) < 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
if args[0] == all {
if len(args) > 2 {
if len(args) > 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
pm := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
Offset: Offset,
Limit: Limit,
DomainID: args[1],
}
l, err := sdk.Groups(pm, args[1])
l, err := sdk.Groups(pm, args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -96,15 +97,16 @@ var cmdGroups = []cobra.Command{
return
}
if args[0] == "children" {
if len(args) > 3 {
if len(args) > 4 {
logUsageCmd(*cmd, cmd.Use)
return
}
pm := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
Offset: Offset,
Limit: Limit,
DomainID: args[2],
}
l, err := sdk.Children(args[1], pm, args[2])
l, err := sdk.Children(args[1], pm, args[3])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -113,15 +115,16 @@ var cmdGroups = []cobra.Command{
return
}
if args[0] == "parents" {
if len(args) > 3 {
if len(args) > 4 {
logUsageCmd(*cmd, cmd.Use)
return
}
pm := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
Offset: Offset,
Limit: Limit,
DomainID: args[2],
}
l, err := sdk.Parents(args[1], pm, args[2])
l, err := sdk.Parents(args[1], pm, args[3])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -129,11 +132,11 @@ var cmdGroups = []cobra.Command{
logJSONCmd(*cmd, l)
return
}
if len(args) > 2 {
if len(args) > 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
t, err := sdk.Group(args[0], args[1])
t, err := sdk.Group(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -142,17 +145,17 @@ var cmdGroups = []cobra.Command{
},
},
{
Use: "delete <group_id> <user_auth_token>",
Use: "delete <group_id> <domain_id> <user_auth_token>",
Short: "Delete group",
Long: "Delete group by id.\n" +
"Usage:\n" +
"\tmagistrala-cli groups delete <group_id> $USERTOKEN - delete the given group ID\n",
"\tmagistrala-cli groups delete <group_id> $DOMAINID $USERTOKEN - delete the given group ID\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
if err := sdk.DeleteGroup(args[0], args[1]); err != nil {
if err := sdk.DeleteGroup(args[0], args[1], args[2]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -160,22 +163,23 @@ var cmdGroups = []cobra.Command{
},
},
{
Use: "users <group_id> <user_auth_token>",
Use: "users <group_id> <domain_id> <user_auth_token>",
Short: "List users",
Long: "List users in a group\n" +
"Usage:\n" +
"\tmagistrala-cli groups users <group_id> $USERTOKEN",
"\tmagistrala-cli groups users <group_id> $DOMAINID $USERTOKEN",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
pm := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
Status: Status,
Offset: Offset,
Limit: Limit,
Status: Status,
DomainID: args[1],
}
users, err := sdk.ListGroupUsers(args[0], pm, args[1])
users, err := sdk.ListGroupUsers(args[0], pm, args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -184,22 +188,23 @@ var cmdGroups = []cobra.Command{
},
},
{
Use: "channels <group_id> <user_auth_token>",
Use: "channels <group_id> <domain_id> <user_auth_token>",
Short: "List channels",
Long: "List channels in a group\n" +
"Usage:\n" +
"\tmagistrala-cli groups channels <group_id> $USERTOKEN",
"\tmagistrala-cli groups channels <group_id> $DOMAINID $USERTOKEN",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
pm := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
Status: Status,
Offset: Offset,
Limit: Limit,
Status: Status,
DomainID: args[1],
}
channels, err := sdk.ListGroupChannels(args[0], pm, args[1])
channels, err := sdk.ListGroupChannels(args[0], pm, args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -208,18 +213,18 @@ var cmdGroups = []cobra.Command{
},
},
{
Use: "enable <group_id> <user_auth_token>",
Use: "enable <group_id> <domain_id> <user_auth_token>",
Short: "Change group status to enabled",
Long: "Change group status to enabled\n" +
"Usage:\n" +
"\tmagistrala-cli groups enable <group_id> $USERTOKEN\n",
"\tmagistrala-cli groups enable <group_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
group, err := sdk.EnableGroup(args[0], args[1])
group, err := sdk.EnableGroup(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -229,18 +234,18 @@ var cmdGroups = []cobra.Command{
},
},
{
Use: "disable <group_id> <user_auth_token>",
Use: "disable <group_id> <domain_id> <user_auth_token>",
Short: "Change group status to disabled",
Long: "Change group status to disabled\n" +
"Usage:\n" +
"\tmagistrala-cli groups disable <group_id> $USERTOKEN\n",
"\tmagistrala-cli groups disable <group_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
group, err := sdk.DisableGroup(args[0], args[1])
group, err := sdk.DisableGroup(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -253,13 +258,13 @@ var cmdGroups = []cobra.Command{
var groupAssignCmds = []cobra.Command{
{
Use: "users <relation> <user_ids> <group_id> <user_auth_token>",
Use: "users <relation> <user_ids> <group_id> <domain_id> <user_auth_token>",
Short: "Assign users",
Long: "Assign users to a group\n" +
"Usage:\n" +
"\tmagistrala-cli groups assign users <relation> '[\"<user_id_1>\", \"<user_id_2>\"]' <group_id> $USERTOKEN\n",
"\tmagistrala-cli groups assign users <relation> '[\"<user_id_1>\", \"<user_id_2>\"]' <group_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 4 {
if len(args) != 5 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -268,7 +273,7 @@ var groupAssignCmds = []cobra.Command{
logErrorCmd(*cmd, err)
return
}
if err := sdk.AddUserToGroup(args[2], mgxsdk.UsersRelationRequest{Relation: args[0], UserIDs: userIDs}, args[3]); err != nil {
if err := sdk.AddUserToGroup(args[2], mgxsdk.UsersRelationRequest{Relation: args[0], UserIDs: userIDs}, args[3], args[4]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -279,13 +284,13 @@ var groupAssignCmds = []cobra.Command{
var groupUnassignCmds = []cobra.Command{
{
Use: "users <relation> <user_ids> <group_id> <user_auth_token>",
Use: "users <relation> <user_ids> <group_id> <domain_id> <user_auth_token>",
Short: "Unassign users",
Long: "Unassign users from a group\n" +
"Usage:\n" +
"\tmagistrala-cli groups unassign users <relation> '[\"<user_id_1>\", \"<user_id_2>\"]' <group_id> $USERTOKEN\n",
"\tmagistrala-cli groups unassign users <relation> '[\"<user_id_1>\", \"<user_id_2>\"]' <group_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 4 {
if len(args) != 5 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -294,7 +299,7 @@ var groupUnassignCmds = []cobra.Command{
logErrorCmd(*cmd, err)
return
}
if err := sdk.RemoveUserFromGroup(args[2], mgxsdk.UsersRelationRequest{Relation: args[0], UserIDs: userIDs}, args[3]); err != nil {
if err := sdk.RemoveUserFromGroup(args[2], mgxsdk.UsersRelationRequest{Relation: args[0], UserIDs: userIDs}, args[3], args[4]); err != nil {
logErrorCmd(*cmd, err)
return
}
+76 -26
View File
@@ -45,6 +45,7 @@ func TestCreateGroupCmd(t *testing.T) {
desc: "create group successfully",
args: []string{
groupJson,
domainID,
token,
},
group: group,
@@ -54,6 +55,7 @@ func TestCreateGroupCmd(t *testing.T) {
desc: "create group with invalid args",
args: []string{
groupJson,
domainID,
token,
extraArg,
},
@@ -63,6 +65,7 @@ func TestCreateGroupCmd(t *testing.T) {
desc: "create group with invalid json",
args: []string{
"{\"name\":\"testgroup\", \"metadata\":{\"key1\":\"value1\"}",
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -73,6 +76,7 @@ func TestCreateGroupCmd(t *testing.T) {
desc: "create group with invalid token",
args: []string{
groupJson,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusUnauthorized),
@@ -80,10 +84,11 @@ func TestCreateGroupCmd(t *testing.T) {
logType: errLog,
},
{
desc: "create group without domain token",
desc: "create group with invalid domain",
args: []string{
groupJson,
tokenWithoutDomain,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden)),
@@ -93,7 +98,7 @@ func TestCreateGroupCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("CreateGroup", mock.Anything, tc.args[1]).Return(tc.group, tc.sdkErr)
sdkCall := sdkMock.On("CreateGroup", mock.Anything, tc.args[1], tc.args[2]).Return(tc.group, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{createCmd}, tc.args...)...)
switch tc.logType {
@@ -133,6 +138,7 @@ func TestGetGroupsCmd(t *testing.T) {
desc: "get all groups successfully",
args: []string{
all,
domainID,
token,
},
page: mgsdk.GroupsPage{
@@ -144,28 +150,31 @@ func TestGetGroupsCmd(t *testing.T) {
desc: "get all groups with invalid args",
args: []string{
all,
domainID,
token,
extraArg,
},
logType: usageLog,
},
{
desc: "get children groups successfully",
args: []string{
childCmd,
group.ID,
token,
},
page: mgsdk.GroupsPage{
Groups: []mgsdk.Group{group},
},
logType: entityLog,
},
// {
// desc: "get children groups successfully",
// args: []string{
// childCmd,
// group.ID,
// domainID,
// token,
// },
// page: mgsdk.GroupsPage{
// Groups: []mgsdk.Group{group},
// },
// logType: entityLog,
// },
{
desc: "get children groups with invalid args",
args: []string{
childCmd,
group.ID,
domainID,
token,
extraArg,
},
@@ -176,6 +185,7 @@ func TestGetGroupsCmd(t *testing.T) {
args: []string{
childCmd,
group.ID,
domainID,
invalidToken,
},
logType: errLog,
@@ -187,6 +197,7 @@ func TestGetGroupsCmd(t *testing.T) {
args: []string{
parentCmd,
group.ID,
domainID,
token,
},
page: mgsdk.GroupsPage{
@@ -199,6 +210,7 @@ func TestGetGroupsCmd(t *testing.T) {
args: []string{
parentCmd,
group.ID,
domainID,
token,
extraArg,
},
@@ -209,6 +221,7 @@ func TestGetGroupsCmd(t *testing.T) {
args: []string{
parentCmd,
group.ID,
domainID,
invalidToken,
},
logType: errLog,
@@ -219,6 +232,7 @@ func TestGetGroupsCmd(t *testing.T) {
desc: "get group with id",
args: []string{
group.ID,
domainID,
token,
},
logType: entityLog,
@@ -235,6 +249,7 @@ func TestGetGroupsCmd(t *testing.T) {
desc: "get all groups with invalid token",
args: []string{
all,
domainID,
invalidToken,
},
logType: errLog,
@@ -242,10 +257,11 @@ func TestGetGroupsCmd(t *testing.T) {
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden)),
},
{
desc: "get group without domain token",
desc: "get group with invalid domain",
args: []string{
group.ID,
invalidToken,
invalidID,
token,
},
logType: errLog,
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden),
@@ -255,6 +271,7 @@ func TestGetGroupsCmd(t *testing.T) {
desc: "get group with invalid id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -265,6 +282,7 @@ func TestGetGroupsCmd(t *testing.T) {
desc: "get group with invalid args",
args: []string{
group.ID,
domainID,
token,
extraArg,
},
@@ -274,7 +292,7 @@ func TestGetGroupsCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("Group", mock.Anything, mock.Anything).Return(tc.group, tc.sdkErr)
sdkCall := sdkMock.On("Group", mock.Anything, mock.Anything, mock.Anything).Return(tc.group, tc.sdkErr)
sdkCall1 := sdkMock.On("Groups", mock.Anything, mock.Anything).Return(tc.page, tc.sdkErr)
sdkCall2 := sdkMock.On("Parents", mock.Anything, mock.Anything, mock.Anything).Return(tc.page, tc.sdkErr)
sdkCall3 := sdkMock.On("Children", mock.Anything, mock.Anything, mock.Anything).Return(tc.page, tc.sdkErr)
@@ -322,6 +340,7 @@ func TestDeletegroupCmd(t *testing.T) {
desc: "delete group successfully",
args: []string{
group.ID,
domainID,
token,
},
logType: okLog,
@@ -330,6 +349,7 @@ func TestDeletegroupCmd(t *testing.T) {
desc: "delete group with invalid args",
args: []string{
group.ID,
domainID,
token,
extraArg,
},
@@ -339,6 +359,7 @@ func TestDeletegroupCmd(t *testing.T) {
desc: "delete group with invalid id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -349,6 +370,7 @@ func TestDeletegroupCmd(t *testing.T) {
desc: "delete group with invalid token",
args: []string{
group.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -359,7 +381,7 @@ func TestDeletegroupCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("DeleteGroup", tc.args[0], tc.args[1]).Return(tc.sdkErr)
sdkCall := sdkMock.On("DeleteGroup", tc.args[0], tc.args[1], tc.args[2]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{delCmd}, tc.args...)...)
switch tc.logType {
@@ -394,6 +416,7 @@ func TestUpdategroupCmd(t *testing.T) {
desc: "update group successfully",
args: []string{
newGroupJson,
domainID,
token,
},
group: mgsdk.Group{
@@ -406,6 +429,7 @@ func TestUpdategroupCmd(t *testing.T) {
desc: "update group with invalid args",
args: []string{
newGroupJson,
domainID,
token,
extraArg,
},
@@ -415,6 +439,7 @@ func TestUpdategroupCmd(t *testing.T) {
desc: "update group with invalid group id",
args: []string{
fmt.Sprintf("{\"id\":\"%s\",\"name\" : \"group1\"}", invalidID),
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -425,6 +450,7 @@ func TestUpdategroupCmd(t *testing.T) {
desc: "update group with invalid json syntax",
args: []string{
fmt.Sprintf("{\"id\":\"%s\",\"name\" : \"group1\"", group.ID),
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -435,7 +461,7 @@ func TestUpdategroupCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
var ch mgsdk.Group
sdkCall := sdkMock.On("UpdateGroup", mock.Anything, tc.args[1]).Return(tc.group, tc.sdkErr)
sdkCall := sdkMock.On("UpdateGroup", mock.Anything, tc.args[1], tc.args[2]).Return(tc.group, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{updCmd}, tc.args...)...)
switch tc.logType {
@@ -472,6 +498,7 @@ func TestListUsersCmd(t *testing.T) {
desc: "list users successfully",
args: []string{
group.ID,
domainID,
token,
},
page: mgsdk.UsersPage{
@@ -488,6 +515,7 @@ func TestListUsersCmd(t *testing.T) {
desc: "list users with invalid args",
args: []string{
group.ID,
domainID,
token,
extraArg,
},
@@ -497,6 +525,7 @@ func TestListUsersCmd(t *testing.T) {
desc: "list users with invalid id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -506,7 +535,7 @@ func TestListUsersCmd(t *testing.T) {
}
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("ListGroupUsers", tc.args[0], mock.Anything, tc.args[1]).Return(tc.page, tc.sdkErr)
sdkCall := sdkMock.On("ListGroupUsers", tc.args[0], mock.Anything, tc.args[2]).Return(tc.page, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{usrCmd}, tc.args...)...)
switch tc.logType {
case entityLog:
@@ -544,6 +573,7 @@ func TestListChannelsCmd(t *testing.T) {
desc: "list channels successfully",
args: []string{
group.ID,
domainID,
token,
},
page: mgsdk.ChannelsPage{
@@ -560,6 +590,7 @@ func TestListChannelsCmd(t *testing.T) {
desc: "list channels with invalid args",
args: []string{
group.ID,
domainID,
token,
extraArg,
},
@@ -569,6 +600,7 @@ func TestListChannelsCmd(t *testing.T) {
desc: "list channels with invalid id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -578,7 +610,7 @@ func TestListChannelsCmd(t *testing.T) {
}
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("ListGroupChannels", tc.args[0], mock.Anything, tc.args[1]).Return(tc.page, tc.sdkErr)
sdkCall := sdkMock.On("ListGroupChannels", tc.args[0], mock.Anything, tc.args[2]).Return(tc.page, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{chansCmd}, tc.args...)...)
switch tc.logType {
case entityLog:
@@ -616,6 +648,7 @@ func TestEnablegroupCmd(t *testing.T) {
desc: "enable group successfully",
args: []string{
group.ID,
domainID,
validToken,
},
group: group,
@@ -625,6 +658,7 @@ func TestEnablegroupCmd(t *testing.T) {
desc: "delete group with invalid token",
args: []string{
group.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -635,6 +669,7 @@ func TestEnablegroupCmd(t *testing.T) {
desc: "delete group with invalid group ID",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -645,6 +680,7 @@ func TestEnablegroupCmd(t *testing.T) {
desc: "enable group with invalid args",
args: []string{
group.ID,
domainID,
validToken,
extraArg,
},
@@ -654,7 +690,7 @@ func TestEnablegroupCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("EnableGroup", tc.args[0], tc.args[1]).Return(tc.group, tc.sdkErr)
sdkCall := sdkMock.On("EnableGroup", tc.args[0], tc.args[1], tc.args[2]).Return(tc.group, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{enableCmd}, tc.args...)...)
switch tc.logType {
@@ -693,6 +729,7 @@ func TestDisablegroupCmd(t *testing.T) {
desc: "disable group successfully",
args: []string{
group.ID,
domainID,
validToken,
},
logType: entityLog,
@@ -702,6 +739,7 @@ func TestDisablegroupCmd(t *testing.T) {
desc: "disable group with invalid token",
args: []string{
group.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -712,6 +750,7 @@ func TestDisablegroupCmd(t *testing.T) {
desc: "disable group with invalid id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -722,6 +761,7 @@ func TestDisablegroupCmd(t *testing.T) {
desc: "disable thing with invalid args",
args: []string{
group.ID,
domainID,
validToken,
extraArg,
},
@@ -731,7 +771,7 @@ func TestDisablegroupCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("DisableGroup", tc.args[0], tc.args[1]).Return(tc.group, tc.sdkErr)
sdkCall := sdkMock.On("DisableGroup", tc.args[0], tc.args[1], tc.args[2]).Return(tc.group, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{disableCmd}, tc.args...)...)
switch tc.logType {
@@ -773,6 +813,7 @@ func TestAssignUserToGroupCmd(t *testing.T) {
relation,
userIds,
group.ID,
domainID,
token,
},
logType: okLog,
@@ -783,6 +824,7 @@ func TestAssignUserToGroupCmd(t *testing.T) {
relation,
userIds,
group.ID,
domainID,
token,
extraArg,
},
@@ -794,6 +836,7 @@ func TestAssignUserToGroupCmd(t *testing.T) {
relation,
fmt.Sprintf("[\"%s\"", user.ID),
group.ID,
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -806,6 +849,7 @@ func TestAssignUserToGroupCmd(t *testing.T) {
relation,
userIds,
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -818,6 +862,7 @@ func TestAssignUserToGroupCmd(t *testing.T) {
relation,
fmt.Sprintf("[\"%s\"]", invalidID),
group.ID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAddPolicies, http.StatusBadRequest),
@@ -828,7 +873,7 @@ func TestAssignUserToGroupCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("AddUserToGroup", tc.args[2], mock.Anything, tc.args[3]).Return(tc.sdkErr)
sdkCall := sdkMock.On("AddUserToGroup", tc.args[2], mock.Anything, tc.args[3], tc.args[4]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{assignCmd, usrCmd}, tc.args...)...)
switch tc.logType {
case okLog:
@@ -864,6 +909,7 @@ func TestUnassignUserToGroupCmd(t *testing.T) {
relation,
userIds,
group.ID,
domainID,
token,
},
logType: okLog,
@@ -874,6 +920,7 @@ func TestUnassignUserToGroupCmd(t *testing.T) {
relation,
userIds,
group.ID,
domainID,
token,
extraArg,
},
@@ -885,6 +932,7 @@ func TestUnassignUserToGroupCmd(t *testing.T) {
relation,
fmt.Sprintf("[\"%s\"", user.ID),
group.ID,
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -897,6 +945,7 @@ func TestUnassignUserToGroupCmd(t *testing.T) {
relation,
userIds,
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -909,6 +958,7 @@ func TestUnassignUserToGroupCmd(t *testing.T) {
relation,
fmt.Sprintf("[\"%s\"]", invalidID),
group.ID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAddPolicies, http.StatusBadRequest),
@@ -919,7 +969,7 @@ func TestUnassignUserToGroupCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("RemoveUserFromGroup", tc.args[2], mock.Anything, tc.args[3]).Return(tc.sdkErr)
sdkCall := sdkMock.On("RemoveUserFromGroup", tc.args[2], mock.Anything, tc.args[3], tc.args[4]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{unassignCmd, usrCmd}, tc.args...)...)
switch tc.logType {
case okLog:
+14 -14
View File
@@ -31,11 +31,11 @@ var (
var cmdProvision = []cobra.Command{
{
Use: "things <things_file> <user_token>",
Use: "things <things_file> <domain_id> <user_token>",
Short: "Provision things",
Long: `Bulk create things`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -51,7 +51,7 @@ var cmdProvision = []cobra.Command{
return
}
things, err = sdk.CreateThings(things, args[1])
things, err = sdk.CreateThings(things, args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -61,11 +61,11 @@ var cmdProvision = []cobra.Command{
},
},
{
Use: "channels <channels_file> <user_token>",
Use: "channels <channels_file> <domain_id> <user_token>",
Short: "Provision channels",
Long: `Bulk create channels`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -78,7 +78,7 @@ var cmdProvision = []cobra.Command{
var chs []mgxsdk.Channel
for _, c := range channels {
c, err = sdk.CreateChannel(c, args[1])
c, err = sdk.CreateChannel(c, args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -91,11 +91,11 @@ var cmdProvision = []cobra.Command{
},
},
{
Use: "connect <connections_file> <user_token>",
Use: "connect <connections_file> <domain_id> <user_token>",
Short: "Provision connections",
Long: `Bulk connect things to channels`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -106,7 +106,7 @@ var cmdProvision = []cobra.Command{
return
}
for _, conn := range connIDs {
if err := sdk.Connect(conn, args[1]); err != nil {
if err := sdk.Connect(conn, args[1], args[2]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -182,7 +182,7 @@ var cmdProvision = []cobra.Command{
things = append(things, t)
}
things, err = sdk.CreateThings(things, ut.AccessToken)
things, err = sdk.CreateThings(things, domain.ID, ut.AccessToken)
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -194,7 +194,7 @@ var cmdProvision = []cobra.Command{
Name: fmt.Sprintf("%s-channel-%d", name, i),
Status: mgxsdk.EnabledStatus,
}
c, err = sdk.CreateChannel(c, ut.AccessToken)
c, err = sdk.CreateChannel(c, domain.ID, ut.AccessToken)
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -208,7 +208,7 @@ var cmdProvision = []cobra.Command{
ChannelID: channels[0].ID,
ThingID: things[0].ID,
}
if err := sdk.Connect(conIDs, ut.AccessToken); err != nil {
if err := sdk.Connect(conIDs, domain.ID, ut.AccessToken); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -217,7 +217,7 @@ var cmdProvision = []cobra.Command{
ChannelID: channels[1].ID,
ThingID: things[0].ID,
}
if err := sdk.Connect(conIDs, ut.AccessToken); err != nil {
if err := sdk.Connect(conIDs, domain.ID, ut.AccessToken); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -226,7 +226,7 @@ var cmdProvision = []cobra.Command{
ChannelID: channels[0].ID,
ThingID: things[1].ID,
}
if err := sdk.Connect(conIDs, ut.AccessToken); err != nil {
if err := sdk.Connect(conIDs, domain.ID, ut.AccessToken); err != nil {
logErrorCmd(*cmd, err)
return
}
+56 -55
View File
@@ -13,13 +13,13 @@ import (
var cmdThings = []cobra.Command{
{
Use: "create <JSON_thing> <user_auth_token>",
Use: "create <JSON_thing> <domain_id> <user_auth_token>",
Short: "Create thing",
Long: "Creates new thing with provided name and metadata\n" +
"Usage:\n" +
"\tmagistrala-cli things create '{\"name\":\"new thing\", \"metadata\":{\"key\": \"value\"}}' $USERTOKEN\n",
"\tmagistrala-cli things create '{\"name\":\"new thing\", \"metadata\":{\"key\": \"value\"}}' $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -30,7 +30,7 @@ var cmdThings = []cobra.Command{
return
}
thing.Status = mgclients.EnabledStatus.String()
thing, err := sdk.CreateThing(thing, args[1])
thing, err := sdk.CreateThing(thing, args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -40,15 +40,15 @@ var cmdThings = []cobra.Command{
},
},
{
Use: "get [all | <thing_id>] <user_auth_token>",
Use: "get [all | <thing_id>] <domain_id> <user_auth_token>",
Short: "Get things",
Long: "Get all things or get thing by id. Things can be filtered by name or metadata\n" +
"Usage:\n" +
"\tmagistrala-cli things get all $USERTOKEN - lists all things\n" +
"\tmagistrala-cli things get all $USERTOKEN --offset=10 --limit=10 - lists all things with offset and limit\n" +
"\tmagistrala-cli things get all $DOMAINID $USERTOKEN - lists all things\n" +
"\tmagistrala-cli things get all $DOMAINID $USERTOKEN --offset=10 --limit=10 - lists all things with offset and limit\n" +
"\tmagistrala-cli things get <thing_id> $USERTOKEN - shows thing with provided <thing_id>\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -72,7 +72,7 @@ var cmdThings = []cobra.Command{
logJSONCmd(*cmd, l)
return
}
t, err := sdk.Thing(args[0], args[1])
t, err := sdk.Thing(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -82,17 +82,17 @@ var cmdThings = []cobra.Command{
},
},
{
Use: "delete <thing_id> <user_auth_token>",
Use: "delete <thing_id> <domain_id> <user_auth_token>",
Short: "Delete thing",
Long: "Delete thing by id\n" +
"Usage:\n" +
"\tmagistrala-cli things delete <thing_id> $USERTOKEN - delete thing with <thing_id>\n",
"\tmagistrala-cli things delete <thing_id> $DOMAINID $USERTOKEN - delete thing with <thing_id>\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
if err := sdk.DeleteThing(args[0], args[1]); err != nil {
if err := sdk.DeleteThing(args[0], args[1], args[2]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -100,15 +100,15 @@ var cmdThings = []cobra.Command{
},
},
{
Use: "update [<thing_id> <JSON_string> | tags <thing_id> <tags> | secret <thing_id> <secret> ] <user_auth_token>",
Use: "update [<thing_id> <JSON_string> | tags <thing_id> <tags> | secret <thing_id> <secret> ] <domain_id> <user_auth_token>",
Short: "Update thing",
Long: "Updates thing with provided id, name and metadata, or updates thing tags, secret\n" +
"Usage:\n" +
"\tmagistrala-cli things update <thing_id> '{\"name\":\"new name\", \"metadata\":{\"key\": \"value\"}}' $USERTOKEN\n" +
"\tmagistrala-cli things update tags <thing_id> '{\"tag1\":\"value1\", \"tag2\":\"value2\"}' $USERTOKEN\n" +
"\tmagistrala-cli things update secret <thing_id> <newsecret> $USERTOKEN\n",
"\tmagistrala-cli things update <thing_id> '{\"name\":\"new name\", \"metadata\":{\"key\": \"value\"}}' $DOMAINID $USERTOKEN\n" +
"\tmagistrala-cli things update tags <thing_id> '{\"tag1\":\"value1\", \"tag2\":\"value2\"}' $DOMAINID $USERTOKEN\n" +
"\tmagistrala-cli things update secret <thing_id> <newsecret> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 4 && len(args) != 3 {
if len(args) != 5 && len(args) != 4 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -120,7 +120,7 @@ var cmdThings = []cobra.Command{
return
}
thing.ID = args[1]
thing, err := sdk.UpdateThingTags(thing, args[3])
thing, err := sdk.UpdateThingTags(thing, args[3], args[4])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -131,7 +131,7 @@ var cmdThings = []cobra.Command{
}
if args[0] == "secret" {
thing, err := sdk.UpdateThingSecret(args[1], args[2], args[3])
thing, err := sdk.UpdateThingSecret(args[1], args[2], args[3], args[4])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -146,7 +146,7 @@ var cmdThings = []cobra.Command{
return
}
thing.ID = args[0]
thing, err := sdk.UpdateThing(thing, args[2])
thing, err := sdk.UpdateThing(thing, args[2], args[3])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -156,18 +156,18 @@ var cmdThings = []cobra.Command{
},
},
{
Use: "enable <thing_id> <user_auth_token>",
Use: "enable <thing_id> <domain_id> <user_auth_token>",
Short: "Change thing status to enabled",
Long: "Change thing status to enabled\n" +
"Usage:\n" +
"\tmagistrala-cli things enable <thing_id> $USERTOKEN\n",
"\tmagistrala-cli things enable <thing_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
thing, err := sdk.EnableThing(args[0], args[1])
thing, err := sdk.EnableThing(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -177,18 +177,18 @@ var cmdThings = []cobra.Command{
},
},
{
Use: "disable <thing_id> <user_auth_token>",
Use: "disable <thing_id> <domain_id> <user_auth_token>",
Short: "Change thing status to disabled",
Long: "Change thing status to disabled\n" +
"Usage:\n" +
"\tmagistrala-cli things disable <thing_id> $USERTOKEN\n",
"\tmagistrala-cli things disable <thing_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
thing, err := sdk.DisableThing(args[0], args[1])
thing, err := sdk.DisableThing(args[0], args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -198,13 +198,13 @@ var cmdThings = []cobra.Command{
},
},
{
Use: "share <thing_id> <user_id> <relation> <user_auth_token>",
Use: "share <thing_id> <user_id> <relation> <domain_id> <user_auth_token>",
Short: "Share thing with a user",
Long: "Share thing with a user\n" +
"Usage:\n" +
"\tmagistrala-cli things share <thing_id> <user_id> <relation> $USERTOKEN\n",
"\tmagistrala-cli things share <thing_id> <user_id> <relation> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 4 {
if len(args) != 5 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -212,7 +212,7 @@ var cmdThings = []cobra.Command{
Relation: args[2],
UserIDs: []string{args[1]},
}
err := sdk.ShareThing(args[0], req, args[3])
err := sdk.ShareThing(args[0], req, args[3], args[4])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -222,13 +222,13 @@ var cmdThings = []cobra.Command{
},
},
{
Use: "unshare <thing_id> <user_id> <relation> <user_auth_token>",
Use: "unshare <thing_id> <user_id> <relation> <domain_id> <user_auth_token>",
Short: "Unshare thing with a user",
Long: "Unshare thing with a user\n" +
"Usage:\n" +
"\tmagistrala-cli things share <thing_id> <user_id> <relation> $USERTOKEN\n",
"\tmagistrala-cli things share <thing_id> <user_id> <relation> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 4 {
if len(args) != 5 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -236,7 +236,7 @@ var cmdThings = []cobra.Command{
Relation: args[2],
UserIDs: []string{args[1]},
}
err := sdk.UnshareThing(args[0], req, args[3])
err := sdk.UnshareThing(args[0], req, args[3], args[4])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -246,13 +246,13 @@ var cmdThings = []cobra.Command{
},
},
{
Use: "connect <thing_id> <channel_id> <user_auth_token>",
Use: "connect <thing_id> <channel_id> <domain_id> <user_auth_token>",
Short: "Connect thing",
Long: "Connect thing to the channel\n" +
"Usage:\n" +
"\tmagistrala-cli things connect <thing_id> <channel_id> $USERTOKEN\n",
"\tmagistrala-cli things connect <thing_id> <channel_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 3 {
if len(args) != 4 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -261,7 +261,7 @@ var cmdThings = []cobra.Command{
ChannelID: args[1],
ThingID: args[0],
}
if err := sdk.Connect(connIDs, args[2]); err != nil {
if err := sdk.Connect(connIDs, args[2], args[3]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -270,13 +270,13 @@ var cmdThings = []cobra.Command{
},
},
{
Use: "disconnect <thing_id> <channel_id> <user_auth_token>",
Use: "disconnect <thing_id> <channel_id> <domain_id> <user_auth_token>",
Short: "Disconnect thing",
Long: "Disconnect thing to the channel\n" +
"Usage:\n" +
"\tmagistrala-cli things disconnect <thing_id> <channel_id> $USERTOKEN\n",
"\tmagistrala-cli things disconnect <thing_id> <channel_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 3 {
if len(args) != 4 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -285,7 +285,7 @@ var cmdThings = []cobra.Command{
ThingID: args[0],
ChannelID: args[1],
}
if err := sdk.Disconnect(connIDs, args[2]); err != nil {
if err := sdk.Disconnect(connIDs, args[2], args[3]); err != nil {
logErrorCmd(*cmd, err)
return
}
@@ -294,13 +294,13 @@ var cmdThings = []cobra.Command{
},
},
{
Use: "connections <thing_id> <user_auth_token>",
Use: "connections <thing_id> <domain_id> <user_auth_token>",
Short: "Connected list",
Long: "List of Channels connected to Thing\n" +
"Usage:\n" +
"\tmagistrala-cli connections <thing_id> $USERTOKEN\n",
"\tmagistrala-cli connections <thing_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
@@ -308,7 +308,7 @@ var cmdThings = []cobra.Command{
Offset: Offset,
Limit: Limit,
}
cl, err := sdk.ChannelsByThing(args[0], pm, args[1])
cl, err := sdk.ChannelsByThing(args[0], pm, args[1], args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
@@ -318,21 +318,22 @@ var cmdThings = []cobra.Command{
},
},
{
Use: "users <thing_id> <user_auth_token>",
Use: "users <thing_id> <domain_id> <user_auth_token>",
Short: "List users",
Long: "List users of a thing\n" +
"Usage:\n" +
"\tmagistrala-cli things users <thing_id> $USERTOKEN\n",
"\tmagistrala-cli things users <thing_id> $DOMAINID $USERTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 {
logUsageCmd(*cmd, cmd.Use)
return
}
pm := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
Offset: Offset,
Limit: Limit,
DomainID: args[1],
}
ul, err := sdk.ListThingUsers(args[0], pm, args[1])
ul, err := sdk.ListThingUsers(args[0], pm, args[2])
if err != nil {
logErrorCmd(*cmd, err)
return
+80 -50
View File
@@ -24,6 +24,7 @@ import (
var (
token = "valid" + "domaintoken"
domainID = "domain-id"
tokenWithoutDomain = "valid"
relation = "administrator"
all = "all"
@@ -60,6 +61,7 @@ func TestCreateThingsCmd(t *testing.T) {
desc: "create thing successfully with token",
args: []string{
thingJson,
domainID,
token,
},
thing: thing,
@@ -69,6 +71,7 @@ func TestCreateThingsCmd(t *testing.T) {
desc: "create thing without token",
args: []string{
thingJson,
domainID,
},
logType: usageLog,
},
@@ -76,6 +79,7 @@ func TestCreateThingsCmd(t *testing.T) {
desc: "create thing with invalid token",
args: []string{
thingJson,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusUnauthorized),
@@ -86,26 +90,18 @@ func TestCreateThingsCmd(t *testing.T) {
desc: "failed to create thing",
args: []string{
thingJson,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrCreateEntity, http.StatusUnprocessableEntity),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrCreateEntity, http.StatusUnprocessableEntity)),
logType: errLog,
},
{
desc: "create thing without domain token",
args: []string{
thingJson,
tokenWithoutDomain,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden)),
logType: errLog,
},
{
desc: "create thing with invalid metadata",
args: []string{
"{\"name\":\"testthing\", \"metadata\":{\"key1\":value1}}",
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(errors.New("invalid character 'v' looking for beginning of value"), 306),
@@ -116,7 +112,7 @@ func TestCreateThingsCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("CreateThing", mock.Anything, mock.Anything).Return(tc.thing, tc.sdkErr)
sdkCall := sdkMock.On("CreateThing", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.thing, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{createCmd}, tc.args...)...)
switch tc.logType {
@@ -157,6 +153,7 @@ func TestGetThingsCmd(t *testing.T) {
desc: "get all things successfully",
args: []string{
all,
domainID,
token,
},
logType: entityLog,
@@ -168,6 +165,7 @@ func TestGetThingsCmd(t *testing.T) {
desc: "get thing successfully with id",
args: []string{
thing.ID,
domainID,
token,
},
logType: entityLog,
@@ -177,6 +175,7 @@ func TestGetThingsCmd(t *testing.T) {
desc: "get things with invalid token",
args: []string{
all,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -184,16 +183,6 @@ func TestGetThingsCmd(t *testing.T) {
page: sdk.ThingsPage{},
logType: errLog,
},
{
desc: "get thing without domain token",
args: []string{
all,
tokenWithoutDomain,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden)),
logType: errLog,
},
{
desc: "get things with invalid args",
args: []string{
@@ -212,6 +201,7 @@ func TestGetThingsCmd(t *testing.T) {
desc: "get thing without token",
args: []string{
all,
domainID,
},
logType: usageLog,
},
@@ -219,6 +209,7 @@ func TestGetThingsCmd(t *testing.T) {
desc: "get thing with invalid thing id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -229,8 +220,8 @@ func TestGetThingsCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("Things", mock.Anything, mock.Anything).Return(tc.page, tc.sdkErr)
sdkCall1 := sdkMock.On("Thing", mock.Anything, mock.Anything).Return(tc.thing, tc.sdkErr)
sdkCall := sdkMock.On("Things", mock.Anything, mock.Anything, mock.Anything).Return(tc.page, tc.sdkErr)
sdkCall1 := sdkMock.On("Thing", mock.Anything, mock.Anything, mock.Anything).Return(tc.thing, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{getCmd}, tc.args...)...)
@@ -296,6 +287,7 @@ func TestUpdateThingCmd(t *testing.T) {
args: []string{
thing.ID,
newNameandMeta,
domainID,
token,
},
thing: sdk.Thing{
@@ -316,6 +308,7 @@ func TestUpdateThingCmd(t *testing.T) {
args: []string{
thing.ID,
"{\"name\": \"thingName\", \"metadata\": {\"role\": \"general\"}",
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
@@ -327,6 +320,7 @@ func TestUpdateThingCmd(t *testing.T) {
args: []string{
invalidID,
newNameandMeta,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -339,6 +333,7 @@ func TestUpdateThingCmd(t *testing.T) {
tagUpdateType,
thing.ID,
newTagsJson,
domainID,
token,
},
thing: sdk.Thing{
@@ -356,6 +351,7 @@ func TestUpdateThingCmd(t *testing.T) {
tagUpdateType,
thing.ID,
"[\"tag1\", \"tag2\"",
domainID,
token,
},
logType: errLog,
@@ -368,6 +364,7 @@ func TestUpdateThingCmd(t *testing.T) {
tagUpdateType,
invalidID,
newTagsJson,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -380,6 +377,7 @@ func TestUpdateThingCmd(t *testing.T) {
secretUpdateType,
thing.ID,
newSecret,
domainID,
token,
},
thing: sdk.Thing{
@@ -399,6 +397,7 @@ func TestUpdateThingCmd(t *testing.T) {
secretUpdateType,
thing.ID,
"",
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(errors.Wrap(apiutil.ErrValidation, apiutil.ErrMissingSecret), http.StatusBadRequest),
@@ -411,6 +410,7 @@ func TestUpdateThingCmd(t *testing.T) {
secretUpdateType,
thing.ID,
newSecret,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -423,6 +423,7 @@ func TestUpdateThingCmd(t *testing.T) {
secretUpdateType,
thing.ID,
newSecret,
domainID,
token,
extraArg,
},
@@ -433,9 +434,9 @@ func TestUpdateThingCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
var tg sdk.Thing
sdkCall := sdkMock.On("UpdateThing", mock.Anything, mock.Anything).Return(tc.thing, tc.sdkErr)
sdkCall1 := sdkMock.On("UpdateThingTags", mock.Anything, mock.Anything).Return(tc.thing, tc.sdkErr)
sdkCall2 := sdkMock.On("UpdateThingSecret", mock.Anything, mock.Anything, mock.Anything).Return(tc.thing, tc.sdkErr)
sdkCall := sdkMock.On("UpdateThing", mock.Anything, mock.Anything, mock.Anything).Return(tc.thing, tc.sdkErr)
sdkCall1 := sdkMock.On("UpdateThingTags", mock.Anything, mock.Anything, mock.Anything).Return(tc.thing, tc.sdkErr)
sdkCall2 := sdkMock.On("UpdateThingSecret", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.thing, tc.sdkErr)
switch {
case tc.args[0] == tagUpdateType:
@@ -488,6 +489,7 @@ func TestDeleteThingCmd(t *testing.T) {
desc: "delete thing successfully",
args: []string{
thing.ID,
domainID,
token,
},
logType: okLog,
@@ -496,6 +498,7 @@ func TestDeleteThingCmd(t *testing.T) {
desc: "delete thing with invalid token",
args: []string{
thing.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -506,6 +509,7 @@ func TestDeleteThingCmd(t *testing.T) {
desc: "delete thing with invalid thing id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -516,6 +520,7 @@ func TestDeleteThingCmd(t *testing.T) {
desc: "delete thing with invalid args",
args: []string{
thing.ID,
domainID,
token,
extraArg,
},
@@ -525,7 +530,7 @@ func TestDeleteThingCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("DeleteThing", tc.args[0], tc.args[1]).Return(tc.sdkErr)
sdkCall := sdkMock.On("DeleteThing", tc.args[0], tc.args[1], tc.args[2]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{delCmd}, tc.args...)...)
switch tc.logType {
@@ -560,6 +565,7 @@ func TestEnableThingCmd(t *testing.T) {
desc: "enable thing successfully",
args: []string{
thing.ID,
domainID,
validToken,
},
sdkErr: nil,
@@ -570,6 +576,7 @@ func TestEnableThingCmd(t *testing.T) {
desc: "delete thing with invalid token",
args: []string{
thing.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -580,6 +587,7 @@ func TestEnableThingCmd(t *testing.T) {
desc: "delete thing with invalid thing ID",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -590,6 +598,7 @@ func TestEnableThingCmd(t *testing.T) {
desc: "enable thing with invalid args",
args: []string{
thing.ID,
domainID,
validToken,
extraArg,
},
@@ -599,7 +608,7 @@ func TestEnableThingCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("EnableThing", tc.args[0], tc.args[1]).Return(tc.thing, tc.sdkErr)
sdkCall := sdkMock.On("EnableThing", tc.args[0], tc.args[1], tc.args[2]).Return(tc.thing, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{enableCmd}, tc.args...)...)
switch tc.logType {
@@ -638,6 +647,7 @@ func TestDisablethingCmd(t *testing.T) {
desc: "disable thing successfully",
args: []string{
thing.ID,
domainID,
validToken,
},
logType: entityLog,
@@ -647,6 +657,7 @@ func TestDisablethingCmd(t *testing.T) {
desc: "delete thing with invalid token",
args: []string{
thing.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -657,6 +668,7 @@ func TestDisablethingCmd(t *testing.T) {
desc: "delete thing with invalid thing ID",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -667,6 +679,7 @@ func TestDisablethingCmd(t *testing.T) {
desc: "disable thing with invalid args",
args: []string{
thing.ID,
domainID,
validToken,
extraArg,
},
@@ -676,7 +689,7 @@ func TestDisablethingCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("DisableThing", tc.args[0], tc.args[1]).Return(tc.thing, tc.sdkErr)
sdkCall := sdkMock.On("DisableThing", tc.args[0], tc.args[1], tc.args[2]).Return(tc.thing, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{disableCmd}, tc.args...)...)
switch tc.logType {
@@ -717,6 +730,7 @@ func TestUsersThingCmd(t *testing.T) {
desc: "get thing's users successfully",
args: []string{
thing.ID,
domainID,
token,
},
page: sdk.UsersPage{
@@ -733,16 +747,18 @@ func TestUsersThingCmd(t *testing.T) {
desc: "list thing users' with invalid args",
args: []string{
thing.ID,
domainID,
token,
extraArg,
},
logType: usageLog,
},
{
desc: "list thing users' without domain token",
desc: "list thing users' with invalid domain",
args: []string{
thing.ID,
tokenWithoutDomain,
invalidID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden)),
@@ -752,22 +768,13 @@ func TestUsersThingCmd(t *testing.T) {
desc: "list thing users with invalid id",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden)),
logType: errLog,
},
{
desc: "list thing users' without domain token",
args: []string{
thing.ID,
tokenWithoutDomain,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden)),
logType: errLog,
},
}
for _, tc := range cases {
@@ -810,6 +817,7 @@ func TestConnectThingCmd(t *testing.T) {
args: []string{
thing.ID,
channel.ID,
domainID,
token,
},
logType: okLog,
@@ -819,6 +827,7 @@ func TestConnectThingCmd(t *testing.T) {
args: []string{
thing.ID,
channel.ID,
domainID,
token,
extraArg,
},
@@ -829,6 +838,7 @@ func TestConnectThingCmd(t *testing.T) {
args: []string{
invalidID,
channel.ID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAddPolicies, http.StatusBadRequest),
@@ -840,6 +850,7 @@ func TestConnectThingCmd(t *testing.T) {
args: []string{
thing.ID,
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -847,11 +858,12 @@ func TestConnectThingCmd(t *testing.T) {
logType: errLog,
},
{
desc: "list thing users' without domain token",
desc: "list thing users' with invalid domain",
args: []string{
thing.ID,
channel.ID,
tokenWithoutDomain,
invalidID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden)),
@@ -861,7 +873,7 @@ func TestConnectThingCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("Connect", mock.Anything, tc.args[2]).Return(tc.sdkErr)
sdkCall := sdkMock.On("Connect", mock.Anything, tc.args[2], tc.args[3]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{connCmd}, tc.args...)...)
switch tc.logType {
@@ -895,6 +907,7 @@ func TestDisconnectThingCmd(t *testing.T) {
args: []string{
thing.ID,
channel.ID,
domainID,
token,
},
logType: okLog,
@@ -904,6 +917,7 @@ func TestDisconnectThingCmd(t *testing.T) {
args: []string{
thing.ID,
channel.ID,
domainID,
token,
extraArg,
},
@@ -914,6 +928,7 @@ func TestDisconnectThingCmd(t *testing.T) {
args: []string{
invalidID,
channel.ID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAddPolicies, http.StatusBadRequest),
@@ -925,6 +940,7 @@ func TestDisconnectThingCmd(t *testing.T) {
args: []string{
thing.ID,
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -932,11 +948,12 @@ func TestDisconnectThingCmd(t *testing.T) {
logType: errLog,
},
{
desc: "disconnect thing without domain token",
desc: "disconnect thing with invalid domain",
args: []string{
thing.ID,
channel.ID,
tokenWithoutDomain,
invalidID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrDomainAuthorization, http.StatusForbidden)),
@@ -946,7 +963,7 @@ func TestDisconnectThingCmd(t *testing.T) {
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("Disconnect", mock.Anything, tc.args[2]).Return(tc.sdkErr)
sdkCall := sdkMock.On("Disconnect", mock.Anything, tc.args[2], tc.args[3]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{disconnCmd}, tc.args...)...)
switch tc.logType {
@@ -981,6 +998,7 @@ func TestListConnectionCmd(t *testing.T) {
desc: "list connections successfully",
args: []string{
thing.ID,
domainID,
token,
},
page: sdk.ChannelsPage{
@@ -997,6 +1015,7 @@ func TestListConnectionCmd(t *testing.T) {
desc: "list connections with invalid args",
args: []string{
thing.ID,
domainID,
token,
extraArg,
},
@@ -1006,6 +1025,7 @@ func TestListConnectionCmd(t *testing.T) {
desc: "list connections with invalid thing ID",
args: []string{
invalidID,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -1016,6 +1036,7 @@ func TestListConnectionCmd(t *testing.T) {
desc: "list connections with invalid token",
args: []string{
thing.ID,
domainID,
invalidToken,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusUnauthorized),
@@ -1025,7 +1046,7 @@ func TestListConnectionCmd(t *testing.T) {
}
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("ChannelsByThing", tc.args[0], mock.Anything, tc.args[1]).Return(tc.page, tc.sdkErr)
sdkCall := sdkMock.On("ChannelsByThing", tc.args[0], mock.Anything, tc.args[1], tc.args[2]).Return(tc.page, tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{connsCmd}, tc.args...)...)
switch tc.logType {
@@ -1065,6 +1086,7 @@ func TestShareThingCmd(t *testing.T) {
thing.ID,
user.ID,
relation,
domainID,
token,
},
logType: okLog,
@@ -1075,6 +1097,7 @@ func TestShareThingCmd(t *testing.T) {
thing.ID,
invalidID,
relation,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAddPolicies, http.StatusBadRequest),
@@ -1087,6 +1110,7 @@ func TestShareThingCmd(t *testing.T) {
invalidID,
user.ID,
relation,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -1099,6 +1123,7 @@ func TestShareThingCmd(t *testing.T) {
thing.ID,
user.ID,
relation,
domainID,
token,
extraArg,
},
@@ -1110,6 +1135,7 @@ func TestShareThingCmd(t *testing.T) {
thing.ID,
user.ID,
"invalid",
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrUpdateEntity, http.StatusBadRequest),
@@ -1119,7 +1145,7 @@ func TestShareThingCmd(t *testing.T) {
}
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("ShareThing", tc.args[0], mock.Anything, tc.args[3]).Return(tc.sdkErr)
sdkCall := sdkMock.On("ShareThing", tc.args[0], mock.Anything, tc.args[3], tc.args[4]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{shrCmd}, tc.args...)...)
switch tc.logType {
@@ -1154,6 +1180,7 @@ func TestUnshareThingCmd(t *testing.T) {
thing.ID,
user.ID,
relation,
domainID,
token,
},
logType: okLog,
@@ -1164,6 +1191,7 @@ func TestUnshareThingCmd(t *testing.T) {
invalidID,
user.ID,
relation,
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
@@ -1176,6 +1204,7 @@ func TestUnshareThingCmd(t *testing.T) {
thing.ID,
user.ID,
relation,
domainID,
token,
extraArg,
},
@@ -1187,6 +1216,7 @@ func TestUnshareThingCmd(t *testing.T) {
thing.ID,
user.ID,
"invalid",
domainID,
token,
},
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrUpdateEntity, http.StatusBadRequest),
@@ -1196,7 +1226,7 @@ func TestUnshareThingCmd(t *testing.T) {
}
for _, tc := range cases {
t.Run(tc.desc, func(t *testing.T) {
sdkCall := sdkMock.On("UnshareThing", tc.args[0], mock.Anything, tc.args[3]).Return(tc.sdkErr)
sdkCall := sdkMock.On("UnshareThing", tc.args[0], mock.Anything, tc.args[3], tc.args[4]).Return(tc.sdkErr)
out := executeCommand(t, rootCmd, append([]string{unshrCmd}, tc.args...)...)
switch tc.logType {