mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-31 18:48:08 +00:00 
			
		
		
		
	 24e5c2c2f3
			
		
	
	24e5c2c2f3
	
	
	
		
			
			* 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)
 | |
| }
 |