From 68768291bc3ed9ceefc447e1984b3493a48ded69 Mon Sep 17 00:00:00 2001
From: Danis Kirasirov <kirasirov@perx.ru>
Date: Fri, 12 Apr 2024 13:38:48 +0000
Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?=
 =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20`fa?=
 =?UTF-8?q?tal=20error:=20stack=20overflow`=20=D0=BF=D1=80=D0=B8=20=D0=BF?=
 =?UTF-8?q?=D0=BE=D0=BF=D1=8B=D1=82=D0=BA=D0=B5=20=D0=BF=D1=80=D0=B8=D0=B2?=
 =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D0=B1=D1=8A=D0=B5?=
 =?UTF-8?q?=D0=BA=D1=82=D0=B0=20Role=20=D0=BA=20=D1=81=D1=82=D1=80=D0=BE?=
 =?UTF-8?q?=D0=BA=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/members/members.go      |  8 ++++-
 pkg/members/members_test.go | 65 +++++++++++++++++++++++++++++++++++++
 2 files changed, 72 insertions(+), 1 deletion(-)
 create mode 100644 pkg/members/members_test.go

diff --git a/pkg/members/members.go b/pkg/members/members.go
index 4e153058..77d5b1c4 100644
--- a/pkg/members/members.go
+++ b/pkg/members/members.go
@@ -2,6 +2,7 @@ package members
 
 import (
 	"fmt"
+	"strconv"
 )
 
 type Member struct {
@@ -24,7 +25,12 @@ func (r Role) IsPrivileged() bool {
 }
 
 func (r Role) Format(s fmt.State, verb rune) {
-	s.Write([]byte(r.String()))
+	switch verb {
+	case 's':
+		s.Write([]byte(r.String()))
+	default:
+		s.Write([]byte(strconv.Itoa(int(r))))
+	}
 }
 
 func (r Role) String() string {
diff --git a/pkg/members/members_test.go b/pkg/members/members_test.go
new file mode 100644
index 00000000..4343b75e
--- /dev/null
+++ b/pkg/members/members_test.go
@@ -0,0 +1,65 @@
+package members
+
+import (
+	"fmt"
+	"testing"
+
+	"github.com/stretchr/testify/require"
+)
+
+func TestFormat(t *testing.T) {
+	tests := []struct {
+		name     string
+		template string
+		want     string
+		role     Role
+	}{
+		{
+			name:     "NotMember with %s",
+			template: "%s",
+			role:     NotMember,
+			want:     "not member",
+		},
+		{
+			name:     "RoleMember with %s",
+			role:     RoleMember,
+			template: "%s",
+			want:     "member",
+		},
+		{
+			name:     "RoleOwner with %s",
+			role:     RoleOwner,
+			template: "%s",
+			want:     "owner",
+		},
+		{
+			name:     "RoleAdmin with %s",
+			role:     RoleAdmin,
+			template: "%s",
+			want:     "admin",
+		},
+		{
+			name:     "Existent role with %d",
+			role:     RoleAdmin,
+			template: "%d",
+			want:     "3",
+		},
+		{
+			name:     "Non-existent role with %s",
+			role:     4,
+			template: "%s",
+			want:     "4",
+		},
+		{
+			name:     "Non-existent role with %d",
+			role:     4,
+			template: "%d",
+			want:     "4",
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			require.Equal(t, tt.want, fmt.Sprintf(tt.template, tt.role))
+		})
+	}
+}
-- 
GitLab