code.gitea.io/gitea@v1.22.3/services/user/update_test.go (about)

     1  // Copyright 2024 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package user
     5  
     6  import (
     7  	"testing"
     8  
     9  	"code.gitea.io/gitea/models/db"
    10  	"code.gitea.io/gitea/models/unittest"
    11  	user_model "code.gitea.io/gitea/models/user"
    12  	password_module "code.gitea.io/gitea/modules/auth/password"
    13  	"code.gitea.io/gitea/modules/optional"
    14  	"code.gitea.io/gitea/modules/structs"
    15  
    16  	"github.com/stretchr/testify/assert"
    17  )
    18  
    19  func TestUpdateUser(t *testing.T) {
    20  	assert.NoError(t, unittest.PrepareTestDatabase())
    21  
    22  	admin := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
    23  
    24  	assert.Error(t, UpdateUser(db.DefaultContext, admin, &UpdateOptions{
    25  		IsAdmin: optional.Some(false),
    26  	}))
    27  
    28  	user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 28})
    29  
    30  	opts := &UpdateOptions{
    31  		KeepEmailPrivate:             optional.Some(false),
    32  		FullName:                     optional.Some("Changed Name"),
    33  		Website:                      optional.Some("https://gitea.com/"),
    34  		Location:                     optional.Some("location"),
    35  		Description:                  optional.Some("description"),
    36  		AllowGitHook:                 optional.Some(true),
    37  		AllowImportLocal:             optional.Some(true),
    38  		MaxRepoCreation:              optional.Some[int](10),
    39  		IsRestricted:                 optional.Some(true),
    40  		IsActive:                     optional.Some(false),
    41  		IsAdmin:                      optional.Some(true),
    42  		Visibility:                   optional.Some(structs.VisibleTypePrivate),
    43  		KeepActivityPrivate:          optional.Some(true),
    44  		Language:                     optional.Some("lang"),
    45  		Theme:                        optional.Some("theme"),
    46  		DiffViewStyle:                optional.Some("split"),
    47  		AllowCreateOrganization:      optional.Some(false),
    48  		EmailNotificationsPreference: optional.Some("disabled"),
    49  		SetLastLogin:                 true,
    50  	}
    51  	assert.NoError(t, UpdateUser(db.DefaultContext, user, opts))
    52  
    53  	assert.Equal(t, opts.KeepEmailPrivate.Value(), user.KeepEmailPrivate)
    54  	assert.Equal(t, opts.FullName.Value(), user.FullName)
    55  	assert.Equal(t, opts.Website.Value(), user.Website)
    56  	assert.Equal(t, opts.Location.Value(), user.Location)
    57  	assert.Equal(t, opts.Description.Value(), user.Description)
    58  	assert.Equal(t, opts.AllowGitHook.Value(), user.AllowGitHook)
    59  	assert.Equal(t, opts.AllowImportLocal.Value(), user.AllowImportLocal)
    60  	assert.Equal(t, opts.MaxRepoCreation.Value(), user.MaxRepoCreation)
    61  	assert.Equal(t, opts.IsRestricted.Value(), user.IsRestricted)
    62  	assert.Equal(t, opts.IsActive.Value(), user.IsActive)
    63  	assert.Equal(t, opts.IsAdmin.Value(), user.IsAdmin)
    64  	assert.Equal(t, opts.Visibility.Value(), user.Visibility)
    65  	assert.Equal(t, opts.KeepActivityPrivate.Value(), user.KeepActivityPrivate)
    66  	assert.Equal(t, opts.Language.Value(), user.Language)
    67  	assert.Equal(t, opts.Theme.Value(), user.Theme)
    68  	assert.Equal(t, opts.DiffViewStyle.Value(), user.DiffViewStyle)
    69  	assert.Equal(t, opts.AllowCreateOrganization.Value(), user.AllowCreateOrganization)
    70  	assert.Equal(t, opts.EmailNotificationsPreference.Value(), user.EmailNotificationsPreference)
    71  
    72  	user = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 28})
    73  	assert.Equal(t, opts.KeepEmailPrivate.Value(), user.KeepEmailPrivate)
    74  	assert.Equal(t, opts.FullName.Value(), user.FullName)
    75  	assert.Equal(t, opts.Website.Value(), user.Website)
    76  	assert.Equal(t, opts.Location.Value(), user.Location)
    77  	assert.Equal(t, opts.Description.Value(), user.Description)
    78  	assert.Equal(t, opts.AllowGitHook.Value(), user.AllowGitHook)
    79  	assert.Equal(t, opts.AllowImportLocal.Value(), user.AllowImportLocal)
    80  	assert.Equal(t, opts.MaxRepoCreation.Value(), user.MaxRepoCreation)
    81  	assert.Equal(t, opts.IsRestricted.Value(), user.IsRestricted)
    82  	assert.Equal(t, opts.IsActive.Value(), user.IsActive)
    83  	assert.Equal(t, opts.IsAdmin.Value(), user.IsAdmin)
    84  	assert.Equal(t, opts.Visibility.Value(), user.Visibility)
    85  	assert.Equal(t, opts.KeepActivityPrivate.Value(), user.KeepActivityPrivate)
    86  	assert.Equal(t, opts.Language.Value(), user.Language)
    87  	assert.Equal(t, opts.Theme.Value(), user.Theme)
    88  	assert.Equal(t, opts.DiffViewStyle.Value(), user.DiffViewStyle)
    89  	assert.Equal(t, opts.AllowCreateOrganization.Value(), user.AllowCreateOrganization)
    90  	assert.Equal(t, opts.EmailNotificationsPreference.Value(), user.EmailNotificationsPreference)
    91  }
    92  
    93  func TestUpdateAuth(t *testing.T) {
    94  	assert.NoError(t, unittest.PrepareTestDatabase())
    95  
    96  	user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 28})
    97  	userCopy := *user
    98  
    99  	assert.NoError(t, UpdateAuth(db.DefaultContext, user, &UpdateAuthOptions{
   100  		LoginName: optional.Some("new-login"),
   101  	}))
   102  	assert.Equal(t, "new-login", user.LoginName)
   103  
   104  	assert.NoError(t, UpdateAuth(db.DefaultContext, user, &UpdateAuthOptions{
   105  		Password:           optional.Some("%$DRZUVB576tfzgu"),
   106  		MustChangePassword: optional.Some(true),
   107  	}))
   108  	assert.True(t, user.MustChangePassword)
   109  	assert.NotEqual(t, userCopy.Passwd, user.Passwd)
   110  	assert.NotEqual(t, userCopy.Salt, user.Salt)
   111  
   112  	assert.NoError(t, UpdateAuth(db.DefaultContext, user, &UpdateAuthOptions{
   113  		ProhibitLogin: optional.Some(true),
   114  	}))
   115  	assert.True(t, user.ProhibitLogin)
   116  
   117  	assert.ErrorIs(t, UpdateAuth(db.DefaultContext, user, &UpdateAuthOptions{
   118  		Password: optional.Some("aaaa"),
   119  	}), password_module.ErrMinLength)
   120  }