SMQ-3108 - Add support for public and private metadata for users and clients (#3155)

Signed-off-by: Felix Gateru <felix.gateru@gmail.com>
This commit is contained in:
Felix Gateru
2026-01-22 10:55:25 +03:00
committed by GitHub
parent 9293de7636
commit 5b913dd46b
40 changed files with 1045 additions and 533 deletions
+93 -7
View File
@@ -28,6 +28,8 @@ var (
relation = "administrator"
all = "all"
conntype = `["publish","subscribe"]`
errEndJSONInput = errors.New("unexpected end of JSON input")
)
var client = smqsdk.Client{
@@ -295,6 +297,8 @@ func TestUpdateClientCmd(t *testing.T) {
newTagsJson := "[\"tag1\", \"tag2\"]"
newTagString := []string{"tag1", "tag2"}
newNameandMeta := "{\"name\": \"clientName\", \"metadata\": {\"role\": \"general\"}}"
newMetadata := "{\"metadata\": {\"role\": \"general\"}}"
newPublicMeta := "{\"public_metadata\": {\"role\": \"general\"}}"
newSecret := "secret"
cases := []struct {
@@ -305,6 +309,26 @@ func TestUpdateClientCmd(t *testing.T) {
client smqsdk.Client
logType outputLog
}{
{
desc: "update client name and public metadata successfully",
args: []string{
client.ID,
updateCmd,
newNameandMeta,
domainID,
token,
},
client: smqsdk.Client{
Name: "clientName",
PublicMetadata: map[string]any{
"role": "general",
},
ID: client.ID,
DomainID: client.DomainID,
Status: client.Status,
},
logType: entityLog,
},
{
desc: "update client name and metadata successfully",
args: []string{
@@ -317,9 +341,7 @@ func TestUpdateClientCmd(t *testing.T) {
client: smqsdk.Client{
Name: "clientName",
Metadata: map[string]any{
"metadata": map[string]any{
"role": "general",
},
"role": "general",
},
ID: client.ID,
DomainID: client.DomainID,
@@ -327,6 +349,70 @@ func TestUpdateClientCmd(t *testing.T) {
},
logType: entityLog,
},
{
desc: "update client public metadata successfully",
args: []string{
client.ID,
updateCmd,
newPublicMeta,
domainID,
token,
},
client: smqsdk.Client{
PublicMetadata: map[string]any{
"role": "general",
},
ID: client.ID,
DomainID: client.DomainID,
Status: client.Status,
},
logType: entityLog,
},
{
desc: "update client metadata successfully",
args: []string{
client.ID,
updateCmd,
newMetadata,
domainID,
token,
},
client: smqsdk.Client{
Metadata: map[string]any{
"role": "general",
},
ID: client.ID,
DomainID: client.DomainID,
Status: client.Status,
},
logType: entityLog,
},
{
desc: "update client public metadata with invalid json",
args: []string{
client.ID,
updateCmd,
"{\"public_metadata\": {\"role\": \"general\"}",
domainID,
token,
},
sdkErr: errors.NewSDKError(errEndJSONInput),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errEndJSONInput),
logType: errLog,
},
{
desc: "update client metadata with invalid json",
args: []string{
client.ID,
updateCmd,
"{\"metadata\": {\"role\": \"general\"}",
domainID,
token,
},
sdkErr: errors.NewSDKError(errEndJSONInput),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errEndJSONInput),
logType: errLog,
},
{
desc: "update client name and metadata with invalid json",
args: []string{
@@ -336,8 +422,8 @@ func TestUpdateClientCmd(t *testing.T) {
domainID,
token,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.New("unexpected end of JSON input")),
sdkErr: errors.NewSDKError(errEndJSONInput),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errEndJSONInput),
logType: errLog,
},
{
@@ -383,8 +469,8 @@ func TestUpdateClientCmd(t *testing.T) {
token,
},
logType: errLog,
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.New("unexpected end of JSON input")),
sdkErr: errors.NewSDKError(errEndJSONInput),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errEndJSONInput),
},
{
desc: "update client tags with invalid client id",
+53 -5
View File
@@ -519,6 +519,8 @@ func TestUpdateUserCmd(t *testing.T) {
newRole := "administrator"
newTagsJSON := "[\"tag1\", \"tag2\"]"
newNameMetadataJSON := "{\"name\":\"new name\", \"metadata\":{\"key\": \"value\"}}"
newMetadataJSON := "{\"metadata\":{\"key\": \"value\"}}"
newPublicMetadataJSON := "{\"public_metadata\":{\"key\": \"value\"}}"
cases := []struct {
desc string
@@ -550,8 +552,8 @@ func TestUpdateUserCmd(t *testing.T) {
"[\"tag1\", \"tag2\"",
validToken,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.New("unexpected end of JSON input")),
sdkErr: errors.NewSDKError(errEndJSONInput),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errEndJSONInput),
logType: errLog,
},
{
@@ -567,6 +569,52 @@ func TestUpdateUserCmd(t *testing.T) {
sdkErr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden)),
},
{
desc: "update user public metadata successfully",
args: []string{
userID,
updateCmd,
newPublicMetadataJSON,
validToken,
},
logType: entityLog,
user: user,
},
{
desc: "update user public metadata with invalid json",
args: []string{
userID,
updateCmd,
"{\"public_metadata\":{\"key\": \"value\"",
validToken,
},
sdkErr: errors.NewSDKError(errEndJSONInput),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errEndJSONInput),
logType: errLog,
},
{
desc: "update user metadata successfully",
args: []string{
userID,
updateCmd,
newMetadataJSON,
validToken,
},
logType: entityLog,
user: user,
},
{
desc: "update user metadata with invalid json",
args: []string{
userID,
updateCmd,
"{\"metadata\":{\"key\": \"value\"",
validToken,
},
sdkErr: errors.NewSDKError(errEndJSONInput),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errEndJSONInput),
logType: errLog,
},
{
desc: "update user email successfully",
args: []string{
@@ -623,8 +671,8 @@ func TestUpdateUserCmd(t *testing.T) {
"{\"name\":\"new name\", \"metadata\":{\"key\": \"value\"}",
validToken,
},
sdkErr: errors.NewSDKError(errors.New("unexpected end of JSON input")),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.New("unexpected end of JSON input")),
sdkErr: errors.NewSDKError(errEndJSONInput),
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errEndJSONInput),
logType: errLog,
},
{
@@ -708,7 +756,7 @@ Available update options:
case len(tc.args) == 4: // Basic user update
sdkCall = sdkMock.On("UpdateUser", mock.Anything, mgsdk.User{
FirstName: "new name",
Metadata: mgsdk.Metadata{
PublicMetadata: mgsdk.Metadata{
"key": "value",
},
}, tc.args[3]).Return(tc.user, tc.sdkErr)