From 9f3f4ed903307a34188cd65ecef7c072a833a744 Mon Sep 17 00:00:00 2001
From: James Page <james@bob.co.za>
Date: Fri, 15 Sep 2023 10:57:14 +0200
Subject: [PATCH] Add HumanReadableToKey function

---
 string_utils/string_utils.go      |  7 ++++++
 string_utils/string_utils_test.go | 39 ++++++++++++++++++++-----------
 2 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/string_utils/string_utils.go b/string_utils/string_utils.go
index 9a36862..17aa194 100644
--- a/string_utils/string_utils.go
+++ b/string_utils/string_utils.go
@@ -191,6 +191,13 @@ func KeyToHumanReadable(s string) string {
 	return SentenceCase(string(s))
 }
 
+func HumanReadableToKey(s string, separator string) string {
+	re := regexp.MustCompile(" +")
+	s = re.ReplaceAllString(s, separator)
+	s = strings.ToLower(s)
+	return s
+}
+
 func SentenceCase(str string) string {
 	if len(str) > 0 {
 		str = strings.ToLower(str)
diff --git a/string_utils/string_utils_test.go b/string_utils/string_utils_test.go
index 04da567..7675486 100644
--- a/string_utils/string_utils_test.go
+++ b/string_utils/string_utils_test.go
@@ -2,35 +2,46 @@ package string_utils
 
 import "testing"
 
-func TestIsValidEmail(t *testing.T) {
+func TestHumanReadableToKey(t *testing.T) {
 	type args struct {
-		email string
+		humanReadableString string
+		separator           string
 	}
 	tests := []struct {
 		name string
 		args args
-		want bool
+		want string
 	}{
 		{
-			name: "valid",
-			args: args{email: "johan@bob.co.za"},
-			want: true,
+			name: "leading capitals with underscore",
+			args: args{"Test Courier Name", "_"},
+			want: "test_courier_name",
 		},
 		{
-			name: "invalid",
-			args: args{email: "johan@bob.co.za"},
-			want: false,
+			name: "leading capitals with hyphen",
+			args: args{"Test Courier Name", "-"},
+			want: "test-courier-name",
 		},
 		{
-			name: "invalid",
-			args: args{email: "johan@bob.co.za"},
-			want: false,
+			name: "all lowercase with underscore",
+			args: args{"test courier name", "_"},
+			want: "test_courier_name",
+		},
+		{
+			name: "random capitalisation with hyphen",
+			args: args{"tEsT CoURIer NAME", "-"},
+			want: "test-courier-name",
+		},
+		{
+			name: "weird characters",
+			args: args{"Tes*t $#@! (Couriers)", "_"},
+			want: "tes*t_$#@!_(couriers)",
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if got := IsValidEmail(tt.args.email); got != tt.want {
-				t.Errorf("IsValidEmail() = %v, want %v", got, tt.want)
+			if got := HumanReadableToKey(tt.args.humanReadableString, tt.args.separator); got != tt.want {
+				t.Errorf("HumanReadableToKey() = %v, want %v", got, tt.want)
 			}
 		})
 	}
-- 
GitLab