github.com/gophish/gophish@v0.12.2-0.20230915144530-8e7929441393/models/user_test.go (about) 1 package models 2 3 import ( 4 "github.com/jinzhu/gorm" 5 "gopkg.in/check.v1" 6 ) 7 8 func (s *ModelsSuite) TestGetUserExists(c *check.C) { 9 u, err := GetUser(1) 10 c.Assert(err, check.Equals, nil) 11 c.Assert(u.Username, check.Equals, "admin") 12 } 13 14 func (s *ModelsSuite) TestGetUserByUsernameWithExistingUser(c *check.C) { 15 u, err := GetUserByUsername("admin") 16 c.Assert(err, check.Equals, nil) 17 c.Assert(u.Username, check.Equals, "admin") 18 } 19 20 func (s *ModelsSuite) TestGetUserDoesNotExist(c *check.C) { 21 u, err := GetUser(100) 22 c.Assert(err, check.Equals, gorm.ErrRecordNotFound) 23 c.Assert(u.Username, check.Equals, "") 24 } 25 26 func (s *ModelsSuite) TestGetUserByAPIKeyWithExistingAPIKey(c *check.C) { 27 u, err := GetUser(1) 28 c.Assert(err, check.Equals, nil) 29 30 got, err := GetUserByAPIKey(u.ApiKey) 31 c.Assert(err, check.Equals, nil) 32 c.Assert(got.Id, check.Equals, u.Id) 33 } 34 35 func (s *ModelsSuite) TestGetUserByAPIKeyWithNotExistingAPIKey(c *check.C) { 36 u, err := GetUser(1) 37 c.Assert(err, check.Equals, nil) 38 39 u, err = GetUserByAPIKey(u.ApiKey + "test") 40 c.Assert(err, check.Equals, gorm.ErrRecordNotFound) 41 c.Assert(u.Username, check.Equals, "") 42 } 43 44 func (s *ModelsSuite) TestGetUserByUsernameWithNotExistingUser(c *check.C) { 45 u, err := GetUserByUsername("test user does not exist") 46 c.Assert(err, check.Equals, gorm.ErrRecordNotFound) 47 c.Assert(u.Username, check.Equals, "") 48 } 49 50 func (s *ModelsSuite) TestPutUser(c *check.C) { 51 u, _ := GetUser(1) 52 u.Username = "admin_changed" 53 err := PutUser(&u) 54 c.Assert(err, check.Equals, nil) 55 u, err = GetUser(1) 56 c.Assert(err, check.Equals, nil) 57 c.Assert(u.Username, check.Equals, "admin_changed") 58 } 59 60 func (s *ModelsSuite) TestGeneratedAPIKey(c *check.C) { 61 u, err := GetUser(1) 62 c.Assert(err, check.Equals, nil) 63 c.Assert(u.ApiKey, check.Not(check.Equals), "12345678901234567890123456789012") 64 } 65 66 func (s *ModelsSuite) verifyRoleCount(c *check.C, roleID, expected int64) { 67 var adminCount int64 68 err := db.Model(&User{}).Where("role_id=?", roleID).Count(&adminCount).Error 69 c.Assert(err, check.Equals, nil) 70 c.Assert(adminCount, check.Equals, expected) 71 } 72 73 func (s *ModelsSuite) TestDeleteLastAdmin(c *check.C) { 74 // Create a new admin user 75 role, err := GetRoleBySlug(RoleAdmin) 76 c.Assert(err, check.Equals, nil) 77 newAdmin := User{ 78 Username: "new-admin", 79 Hash: "123456", 80 ApiKey: "123456", 81 Role: role, 82 RoleID: role.ID, 83 } 84 err = PutUser(&newAdmin) 85 c.Assert(err, check.Equals, nil) 86 87 // Ensure that there are two admins 88 s.verifyRoleCount(c, role.ID, 2) 89 90 // Delete the newly created admin - this should work since we have more 91 // than one current admin. 92 err = DeleteUser(newAdmin.Id) 93 c.Assert(err, check.Equals, nil) 94 95 // Verify that we now have one admin 96 s.verifyRoleCount(c, role.ID, 1) 97 98 // Try to delete the last admin - this should fail since we always want at 99 // least one admin active in Gophish. 100 err = DeleteUser(1) 101 c.Assert(err, check.Equals, ErrModifyingOnlyAdmin) 102 103 // Verify that the admin wasn't deleted 104 s.verifyRoleCount(c, role.ID, 1) 105 }