From d19ec59bab041fd35e7e244dd7bd518a658c0ed8 Mon Sep 17 00:00:00 2001 From: Evgeny Abramovich Date: Sat, 27 May 2023 11:32:06 -0300 Subject: [PATCH] Added tests for config models --- internal/config/model.go | 8 ++-- internal/config/model_test.go | 78 ++++++++++++++++++++++++++++++++++ internal/helpers/clone.go | 4 ++ internal/helpers/clone_test.go | 6 +++ 4 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 internal/config/model_test.go diff --git a/internal/config/model.go b/internal/config/model.go index 5989ed88..3d5e59cf 100644 --- a/internal/config/model.go +++ b/internal/config/model.go @@ -2,6 +2,8 @@ package config import ( "time" + + "github.com/evg4b/uncors/internal/helpers" ) type Response struct { @@ -15,7 +17,7 @@ type Response struct { func (r Response) Clone() Response { return Response{ Code: r.Code, - Headers: r.Headers, + Headers: helpers.CloneMap(r.Headers), RawContent: r.RawContent, File: r.File, Delay: r.Delay, @@ -34,8 +36,8 @@ func (m Mock) Clone() Mock { return Mock{ Path: m.Path, Method: m.Method, - Queries: m.Queries, - Headers: m.Headers, + Queries: helpers.CloneMap(m.Queries), + Headers: helpers.CloneMap(m.Headers), Response: m.Response.Clone(), } } diff --git a/internal/config/model_test.go b/internal/config/model_test.go new file mode 100644 index 00000000..d8d6fc1c --- /dev/null +++ b/internal/config/model_test.go @@ -0,0 +1,78 @@ +package config_test + +import ( + "github.com/evg4b/uncors/internal/config" + "github.com/go-http-utils/headers" + "github.com/stretchr/testify/assert" + "net/http" + "testing" + "time" +) + +func TestResponseClone(t *testing.T) { + object := config.Response{ + Code: http.StatusOK, + Headers: map[string]string{ + headers.ContentType: "plain/text", + headers.CacheControl: "none", + }, + RawContent: "this is plain text", + File: "~/projects/uncors/response/demo.json", + Delay: time.Hour, + } + + actual := object.Clone() + + t.Run("not same", func(t *testing.T) { + assert.NotSame(t, &object, &actual) + }) + + t.Run("equals values", func(t *testing.T) { + assert.EqualValues(t, object, actual) + }) + + t.Run("not same Headers map", func(t *testing.T) { + assert.NotSame(t, &object.Headers, &actual.Headers) + }) +} + +func TestMockClone(t *testing.T) { + object := config.Mock{ + Path: "/constants", + Method: http.MethodGet, + Queries: map[string]string{ + "page": "10", + "size": "50", + }, + Headers: map[string]string{ + headers.ContentType: "plain/text", + headers.CacheControl: "none", + }, + Response: config.Response{ + Code: http.StatusOK, + RawContent: `{ "status": "ok" }`, + }, + } + + actual := object.Clone() + + t.Run("not same", func(t *testing.T) { + assert.NotSame(t, &object, &actual) + }) + + t.Run("equals values", func(t *testing.T) { + assert.EqualValues(t, object, actual) + }) + + t.Run("not same Headers map", func(t *testing.T) { + assert.NotSame(t, &object.Headers, &actual.Headers) + }) + + t.Run("not same Queries map", func(t *testing.T) { + assert.NotSame(t, &object.Headers, &actual.Headers) + }) + + t.Run("not same Response", func(t *testing.T) { + assert.NotSame(t, &object.Response, &actual.Response) + }) +} diff --git a/internal/helpers/clone.go b/internal/helpers/clone.go index e4f7ef25..8ea5858a 100644 --- a/internal/helpers/clone.go +++ b/internal/helpers/clone.go @@ -3,6 +3,10 @@ package helpers import "github.com/samber/lo" func CloneMap[K comparable, V any](data map[K]V) map[K]V { + if data == nil { + return nil + } + cloned := make(map[K]V, len(data)) for key, value := range data { if cloneable, ok := any(value).(lo.Clonable[V]); ok { diff --git a/internal/helpers/clone_test.go b/internal/helpers/clone_test.go index f288a85c..2bb859f1 100644 --- a/internal/helpers/clone_test.go +++ b/internal/helpers/clone_test.go @@ -105,6 +105,12 @@ func TestCloneMap(t *testing.T) { assert.NotSame(t, &data, &actual) assert.EqualValues(t, &data, &actual) }) + + t.Run("nil", func(t *testing.T) { + actual := helpers.CloneMap[string, string](nil) + + assert.Nil(t, actual) + }) } func assertClone[K comparable, V any](t *testing.T, data map[K]V) {