From c7a0531980e6a11c1e7a380099d6e50c4139dc20 Mon Sep 17 00:00:00 2001
From: ko_oler <kooler89@gmail.com>
Date: Thu, 22 Jun 2023 11:46:11 +0300
Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BF?=
 =?UTF-8?q?=D0=BE=20=D0=9F=D0=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/id/id.go      | 32 ++++++++++++---------------
 pkg/id/id_test.go | 56 ++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 67 insertions(+), 21 deletions(-)

diff --git a/pkg/id/id.go b/pkg/id/id.go
index e9339a6d..2f3a9add 100644
--- a/pkg/id/id.go
+++ b/pkg/id/id.go
@@ -14,11 +14,11 @@ const (
 )
 
 var (
-	ErrEmptyID    = errors.New("empty ID")
+	ErrEmptyID    = errors.New("empty id")
 	ErrNotValidID = errors.New("id contains invalid characters")
-	ErrLongID     = errors.New("id too long (max 64 symbols)")
+	ErrLongID     = errors.Errorf("id too long (max %d symbols)", MaxLengthID)
 	ErrEmptyName  = errors.New("empty name")
-	ErrLongName   = errors.New("name too long (max 256 symbols)")
+	ErrLongName   = errors.Errorf("name too long (max %d symbols)", MaxLengthName)
 	isValidID     = regexp.MustCompile(`^[A-Za-z][A-Za-z0-9-_]*$`).MatchString
 )
 
@@ -26,31 +26,27 @@ func GenerateNewID() string {
 	return xid.New().String()
 }
 
-func ValidateID(id *string) error {
-	trimmedID := *id
-	trimmedID = strings.TrimSpace(trimmedID)
+func ValidateID(id string) (string, error) {
+	trimmedID := strings.TrimSpace(id)
 	if trimmedID == "" {
-		return ErrEmptyID
+		return trimmedID, ErrEmptyID
 	}
 	if len(trimmedID) > MaxLengthID {
-		return ErrLongID
+		return trimmedID, ErrLongID
 	}
 	if !isValidID(trimmedID) {
-		return errors.WithDetail(ErrNotValidID, "must begin with latin letters and contain latin letters, numbers or '-', '_'")
+		return trimmedID, errors.WithDetail(ErrNotValidID, "must begin with latin letters and contain latin letters, numbers or '-', '_'")
 	}
-	*id = trimmedID
-	return nil
+	return trimmedID, nil
 }
 
-func ValidateName(name *string) error {
-	trimmedName := *name
-	trimmedName = strings.TrimSpace(trimmedName)
+func ValidateName(name string) (string, error) {
+	trimmedName := strings.TrimSpace(name)
 	if trimmedName == "" {
-		return ErrEmptyName
+		return trimmedName, ErrEmptyName
 	}
 	if len(trimmedName) > MaxLengthName {
-		return ErrLongName
+		return trimmedName, ErrLongName
 	}
-	*name = trimmedName
-	return nil
+	return trimmedName, nil
 }
diff --git a/pkg/id/id_test.go b/pkg/id/id_test.go
index a0a1e195..f778e3a9 100644
--- a/pkg/id/id_test.go
+++ b/pkg/id/id_test.go
@@ -1,49 +1,80 @@
 package id
 
-import "testing"
+import (
+	"testing"
+
+	"github.com/stretchr/testify/require"
+)
 
 func TestValidateID(t *testing.T) {
 	tests := []struct {
 		name    string
 		id      string
+		result  string
 		wantErr bool
 	}{
 		{
 			"Correct ID #1",
 			"test",
+			"test",
 			false,
 		},
 		{
 			"Correct ID #2",
 			"test_1",
+			"test_1",
 			false,
 		},
 		{
 			"Correct ID #3",
 			"test_1-2",
+			"test_1-2",
+			false,
+		},
+		{
+			"Trimmed ID #1",
+			" test_1-2 ",
+			"test_1-2",
+			false,
+		},
+		{
+			"Trimmed ID #2",
+			"test_1-2 			",
+			"test_1-2",
 			false,
 		},
 		{
 			"Fail, ID starts with number",
 			"1test",
+			"1test",
 			true,
 		},
 		{
 			"Fail, ID to long",
 			"9QoulAlFbIcnQYLSudMistN1IczCWrXUTtN5EgNQJd516DN9UjXYJxieJ1RcsNcs1",
+			"9QoulAlFbIcnQYLSudMistN1IczCWrXUTtN5EgNQJd516DN9UjXYJxieJ1RcsNcs1",
 			true,
 		},
 		{
 			"Fail, ID with symbols",
 			"test!_)(&&",
+			"test!_)(&&",
+			true,
+		},
+		{
+			"Fail, ID is empty",
+			"   ",
+			"",
 			true,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if err := ValidateID(&tt.id); (err != nil) != tt.wantErr {
+			res, err := ValidateID(tt.id)
+			if (err != nil) != tt.wantErr {
 				t.Errorf("ValidateID() error = %v, wantErr %v", err, tt.wantErr)
 			}
+			require.Equal(t, tt.result, res)
 		})
 	}
 }
@@ -52,34 +83,53 @@ func TestValidateName(t *testing.T) {
 	tests := []struct {
 		nameTest string
 		name     string
+		result   string
 		wantErr  bool
 	}{
 		{
 			"Correct name #1",
 			"test",
+			"test",
 			false,
 		},
 		{
 			"Correct name #2",
 			"test_1",
+			"test_1",
 			false,
 		},
 		{
 			"Correct name #3",
 			"test_1-2",
+			"test_1-2",
+			false,
+		},
+		{
+			"Trimmed name #1",
+			" test_1-3 ",
+			"test_1-3",
+			false,
+		},
+		{
+			"Trimmed name #2",
+			"test_1234 			",
+			"test_1234",
 			false,
 		},
 		{
 			"Fail, name to long",
 			"ChKRLdvWi0wYYPazuBXrIRtNFy96qGrhBDkuKQNd6N2DPV86IGdXVkeTjWj7qezKreIFUp9IUn03A8WJTTORHkgXAvkPuDVM8tVMcnHbR2hznooJ3gGUsXpn4uXo2QhsviHPyUKmE10GnkCOv9FgAMILNoFVHnIiSHI3cjWlGJglpS9YAMXFB1phOIRF5yol3jmPE7EeU1uZPUw9C2PChuksGsOuJQov07Zom0b13r6wOJv8PZVa4IKmjDDLGKlq1",
+			"ChKRLdvWi0wYYPazuBXrIRtNFy96qGrhBDkuKQNd6N2DPV86IGdXVkeTjWj7qezKreIFUp9IUn03A8WJTTORHkgXAvkPuDVM8tVMcnHbR2hznooJ3gGUsXpn4uXo2QhsviHPyUKmE10GnkCOv9FgAMILNoFVHnIiSHI3cjWlGJglpS9YAMXFB1phOIRF5yol3jmPE7EeU1uZPUw9C2PChuksGsOuJQov07Zom0b13r6wOJv8PZVa4IKmjDDLGKlq1",
 			true,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if err := ValidateName(&tt.name); (err != nil) != tt.wantErr {
+			res, err := ValidateName(tt.name)
+			if (err != nil) != tt.wantErr {
 				t.Errorf("ValidateName() error = %v, wantErr %v", err, tt.wantErr)
 			}
+			require.Equal(t, tt.result, res)
 		})
 	}
 }
-- 
GitLab