diff --git a/string_utils/string_utils.go b/string_utils/string_utils.go index 9a36862709b8a8d78a3b09e20c5ea78c5443a68d..17aa194f2073bae76ec6873853d181e3b5849706 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 04da56723ed34dc3cc054a82b69d8ba4a8fb9fab..7675486f0ace24fb80473311d39ea0be5cead525 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) } }) }