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 }