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  }