mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-06 22:57:02 +02:00
* add methods in Sys struct to manipulate UI Custom Messages * adding go-docs * extracting recurring URL path into a constant * using same stretchr/testify version as the main go.mod
194 lines
6.3 KiB
Go
194 lines
6.3 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package api
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
var messageBase64 string = base64.StdEncoding.EncodeToString([]byte("message"))
|
|
|
|
// TestUICustomMessageJsonMarshalling verifies that json marshalling (struct to
|
|
// json) works with the uiCustomMessageRequest type.
|
|
func TestUICustomMessageJsonMarshalling(t *testing.T) {
|
|
for _, testcase := range []struct {
|
|
name string
|
|
request UICustomMessageRequest
|
|
expectedJSON string
|
|
}{
|
|
{
|
|
name: "no-link-no-options",
|
|
request: UICustomMessageRequest{
|
|
Title: "title",
|
|
Message: messageBase64,
|
|
StartTime: "2024-01-01T00:00:00.000Z",
|
|
EndTime: "",
|
|
Type: "banner",
|
|
Authenticated: true,
|
|
},
|
|
expectedJSON: fmt.Sprintf(`{"title":"title","message":"%s","authenticated":true,"type":"banner","start_time":"2024-01-01T00:00:00.000Z"}`, messageBase64),
|
|
},
|
|
{
|
|
name: "link-no-options",
|
|
request: UICustomMessageRequest{
|
|
Title: "title",
|
|
Message: messageBase64,
|
|
StartTime: "2024-01-01T00:00:00.000Z",
|
|
EndTime: "",
|
|
Type: "modal",
|
|
Authenticated: false,
|
|
Link: &uiCustomMessageLink{
|
|
Title: "Click here",
|
|
Href: "https://www.example.org",
|
|
},
|
|
},
|
|
expectedJSON: fmt.Sprintf(`{"title":"title","message":"%s","authenticated":false,"type":"modal","start_time":"2024-01-01T00:00:00.000Z","link":{"Click here":"https://www.example.org"}}`, messageBase64),
|
|
},
|
|
{
|
|
name: "no-link-options",
|
|
request: UICustomMessageRequest{
|
|
Title: "title",
|
|
Message: messageBase64,
|
|
StartTime: "2024-01-01T00:00:00.000Z",
|
|
EndTime: "",
|
|
Authenticated: true,
|
|
Type: "banner",
|
|
Options: map[string]any{
|
|
"key": "value",
|
|
},
|
|
},
|
|
expectedJSON: fmt.Sprintf(`{"title":"title","message":"%s","authenticated":true,"type":"banner","start_time":"2024-01-01T00:00:00.000Z","options":{"key":"value"}}`, messageBase64),
|
|
},
|
|
{
|
|
name: "link-and-options",
|
|
request: UICustomMessageRequest{
|
|
Title: "title",
|
|
Message: messageBase64,
|
|
StartTime: "2024-01-01T00:00:00.000Z",
|
|
EndTime: "",
|
|
Authenticated: true,
|
|
Type: "banner",
|
|
Link: &uiCustomMessageLink{
|
|
Title: "Click here",
|
|
Href: "https://www.example.org",
|
|
},
|
|
Options: map[string]any{
|
|
"key": "value",
|
|
},
|
|
},
|
|
expectedJSON: fmt.Sprintf(`{"title":"title","message":"%s","authenticated":true,"type":"banner","start_time":"2024-01-01T00:00:00.000Z","link":{"Click here":"https://www.example.org"},"options":{"key":"value"}}`, messageBase64),
|
|
},
|
|
} {
|
|
tc := testcase
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
bytes, err := json.Marshal(&tc.request)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, tc.expectedJSON, string(bytes))
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestUICustomMessageJsonUnmarshal verifies that json unmarshalling (json to
|
|
// struct) works with the uiCustomMessageRequest type.
|
|
func TestUICustomMessageJsonUnmarshal(t *testing.T) {
|
|
for _, testcase := range []struct {
|
|
name string
|
|
encodedBytes string
|
|
linkAssertion func(assert.TestingT, any, ...any) bool
|
|
checkLink bool
|
|
optionsAssertion func(assert.TestingT, any, ...any) bool
|
|
checkOptions bool
|
|
}{
|
|
{
|
|
name: "no-link-no-options",
|
|
encodedBytes: fmt.Sprintf(`{"title":"title","message":"%s","authenticated":false,"type":"modal","start_time":"2024-01-01T00:00:00.000Z"}`, messageBase64),
|
|
linkAssertion: assert.Nil,
|
|
optionsAssertion: assert.Nil,
|
|
},
|
|
{
|
|
name: "link-no-options",
|
|
encodedBytes: fmt.Sprintf(`{"title":"title","message":"%s","authenticated":false,"type":"modal","start_time":"2024-01-01T00:00:00.000Z","link":{"Click here":"https://www.example.org"}}`, messageBase64),
|
|
linkAssertion: assert.NotNil,
|
|
checkLink: true,
|
|
optionsAssertion: assert.Nil,
|
|
},
|
|
{
|
|
name: "no-link-options",
|
|
encodedBytes: fmt.Sprintf(`{"title":"title","message":"%s","authenticated":false,"type":"modal","start_time":"2024-01-01T00:00:00.000Z","options":{"key":"value"}}`, messageBase64),
|
|
linkAssertion: assert.Nil,
|
|
optionsAssertion: assert.NotNil,
|
|
checkOptions: true,
|
|
},
|
|
{
|
|
name: "link-and-options",
|
|
encodedBytes: fmt.Sprintf(`{"title":"title","message":"%s","authenticated":false,"type":"modal","start_time":"2024-01-01T00:00:00.000Z","link":{"Click here":"https://www.example.org"},"options":{"key":"value"}}`, messageBase64),
|
|
linkAssertion: assert.NotNil,
|
|
checkLink: true,
|
|
optionsAssertion: assert.NotNil,
|
|
checkOptions: true,
|
|
},
|
|
} {
|
|
tc := testcase
|
|
t.Run(testcase.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var request UICustomMessageRequest
|
|
|
|
err := json.Unmarshal([]byte(tc.encodedBytes), &request)
|
|
assert.NoError(t, err)
|
|
tc.linkAssertion(t, request.Link)
|
|
tc.optionsAssertion(t, request.Options)
|
|
|
|
if tc.checkLink {
|
|
assert.Equal(t, "Click here", request.Link.Title)
|
|
assert.Equal(t, "https://www.example.org", request.Link.Href)
|
|
}
|
|
|
|
if tc.checkOptions {
|
|
assert.Contains(t, request.Options, "key")
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestUICustomMessageListRequestOptions verifies the correct behaviour of all
|
|
// of the With... methods of the UICustomMessageListRequest.
|
|
func TestUICustomMessageListRequestOptions(t *testing.T) {
|
|
request := &UICustomMessageListRequest{}
|
|
assert.Nil(t, request.Active)
|
|
assert.Nil(t, request.Authenticated)
|
|
assert.Nil(t, request.Type)
|
|
|
|
request = (&UICustomMessageListRequest{}).WithActive(true)
|
|
assert.NotNil(t, request.Active)
|
|
assert.True(t, *request.Active)
|
|
|
|
request = (&UICustomMessageListRequest{}).WithActive(false)
|
|
assert.NotNil(t, request.Active)
|
|
assert.False(t, *request.Active)
|
|
|
|
request = (&UICustomMessageListRequest{}).WithAuthenticated(true)
|
|
assert.NotNil(t, request.Authenticated)
|
|
assert.True(t, *request.Authenticated)
|
|
|
|
request = (&UICustomMessageListRequest{}).WithAuthenticated(false)
|
|
assert.NotNil(t, request.Authenticated)
|
|
assert.False(t, *request.Authenticated)
|
|
|
|
request = (&UICustomMessageListRequest{}).WithType("banner")
|
|
assert.NotNil(t, request.Type)
|
|
assert.Equal(t, "banner", *request.Type)
|
|
|
|
request = (&UICustomMessageListRequest{}).WithType("modal")
|
|
assert.NotNil(t, request.Type)
|
|
assert.Equal(t, "modal", *request.Type)
|
|
}
|