From df27b194f4f02906a87a538f7f2d69a6e387045a Mon Sep 17 00:00:00 2001 From: KUNAL KUMAR Date: Sat, 3 Jan 2026 19:04:01 +0530 Subject: [PATCH] test: added test coverage for AddUser func --- internal/users/users.go | 44 ++++++++++++++++++ internal/users/users_test.go | 90 ++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 internal/users/users.go create mode 100644 internal/users/users_test.go diff --git a/internal/users/users.go b/internal/users/users.go new file mode 100644 index 0000000..f5bfb2e --- /dev/null +++ b/internal/users/users.go @@ -0,0 +1,44 @@ +package users + +import ( + "fmt" + "net/mail" +) + +type User struct { + FirstName string + LastName string + Email mail.Address +} + +type Manager struct { + users []User +} + +func NewManager() *Manager { + return &Manager{} +} + +func (m *Manager) AddUser(firstName string, lastName string, email string) error { + if firstName == "" { + return fmt.Errorf("invalid first name: %q", firstName) + } + if lastName == "" { + return fmt.Errorf("invalid last name:%q", lastName) + } + + parsedAddress, err := mail.ParseAddress(email) + if err != nil { + return fmt.Errorf("invalid email: %s", email) + } + + newUser := User{ + FirstName: firstName, + LastName: lastName, + Email: *parsedAddress, + } + + m.users = append(m.users, newUser) + + return nil +} diff --git a/internal/users/users_test.go b/internal/users/users_test.go new file mode 100644 index 0000000..74d8a94 --- /dev/null +++ b/internal/users/users_test.go @@ -0,0 +1,90 @@ +package users + +import ( + "errors" + "net/mail" + "reflect" + "testing" +) + +func TestAddUser(t *testing.T) { + testManager := NewManager() + + testFirstName := "jhon" + testLastName := "smith" + testEmail, err := mail.ParseAddress("foo@bar.com") + if err != nil { + t.Fatalf("failed to parse email: %v", err) + } + + err = testManager.AddUser(testFirstName, testLastName, testEmail.Address) + if err != nil { + t.Fatalf("failed to add user: %v", err) + } + + if len(testManager.users) != 1 { + t.Fatalf("failed to add user: expected 1 user, got %v", len(testManager.users)) + if len(testManager.users) < 1 { + t.Fatal() + } + } + + expectedUser := User{ + FirstName: testFirstName, + LastName: testLastName, + Email: *testEmail, + } + + founduser := testManager.users[0] + if !reflect.DeepEqual(expectedUser, founduser) { + t.Fatalf("failed to add user: expected %v, got %v", + expectedUser, founduser) + } +} + +func TestAddUserInvalidEmail(t *testing.T) { + testManager := NewManager() + + testFirstName := "jhon" + testLastName := "smith" + testEmail := "foobar" + + err := testManager.AddUser(testFirstName, testLastName, testEmail) + if err == nil { + t.Errorf("no error returned when adding invalid email") + } else { + expectedErr := errors.New("invalid email: foobar") + if err.Error() != expectedErr.Error() { + t.Errorf("error mismatch: expected %v, got %v", expectedErr, err) + } + } + + if len(testManager.users) > 0 { + t.Fatalf("bad test manager count: expected 1 user, got %v", len(testManager.users)) + } +} + +func TestAddUserFirstName(t *testing.T) { + testManager := NewManager() + + testFirstName := "" + testLastName := "smith" + testEmail, err := mail.ParseAddress("foo@bar.com") + if err != nil { + t.Errorf("no error returned when adding invalid email %v", err) + } + + err = testManager.AddUser(testFirstName, testLastName, testEmail.String()) + if err == nil { + t.Errorf("no error returned or invalid email") + } else { + expectedErr := "invalid first name: \"\"" + if err.Error() != expectedErr { + t.Errorf("error mismatch: expected %v, got %v", expectedErr, err) + } + } + + if len(testManager.users) > 0 { + t.Fatalf("bad test manager count: expected 1 user, got %v", len(testManager.users)) + } +}