gitea源码

admin_user_change_password_test.go 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package cmd
  4. import (
  5. "testing"
  6. "code.gitea.io/gitea/models/db"
  7. "code.gitea.io/gitea/models/unittest"
  8. user_model "code.gitea.io/gitea/models/user"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func TestChangePasswordCommand(t *testing.T) {
  13. ctx := t.Context()
  14. defer func() {
  15. require.NoError(t, db.TruncateBeans(t.Context(), &user_model.User{}))
  16. }()
  17. t.Run("change password successfully", func(t *testing.T) {
  18. // defer func() {
  19. // require.NoError(t, db.TruncateBeans(t.Context(), &user_model.User{}))
  20. // }()
  21. // Prepare test user
  22. unittest.AssertNotExistsBean(t, &user_model.User{LowerName: "testuser"})
  23. err := microcmdUserCreate().Run(ctx, []string{"create", "--username", "testuser", "--email", "testuser@gitea.local", "--random-password"})
  24. require.NoError(t, err)
  25. // load test user
  26. userBase := unittest.AssertExistsAndLoadBean(t, &user_model.User{LowerName: "testuser"})
  27. // Change the password
  28. err = microcmdUserChangePassword().Run(ctx, []string{"change-password", "--username", "testuser", "--password", "newpassword"})
  29. require.NoError(t, err)
  30. // Verify the password has been changed
  31. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{LowerName: "testuser"})
  32. assert.NotEqual(t, userBase.Passwd, user.Passwd)
  33. assert.NotEqual(t, userBase.Salt, user.Salt)
  34. // Additional check for must-change-password flag
  35. require.NoError(t, microcmdUserChangePassword().Run(ctx, []string{"change-password", "--username", "testuser", "--password", "anotherpassword", "--must-change-password=false"}))
  36. user = unittest.AssertExistsAndLoadBean(t, &user_model.User{LowerName: "testuser"})
  37. assert.False(t, user.MustChangePassword)
  38. require.NoError(t, microcmdUserChangePassword().Run(ctx, []string{"change-password", "--username", "testuser", "--password", "yetanotherpassword", "--must-change-password"}))
  39. user = unittest.AssertExistsAndLoadBean(t, &user_model.User{LowerName: "testuser"})
  40. assert.True(t, user.MustChangePassword)
  41. })
  42. t.Run("failure cases", func(t *testing.T) {
  43. testCases := []struct {
  44. name string
  45. args []string
  46. expectedErr string
  47. }{
  48. {
  49. name: "user does not exist",
  50. args: []string{"change-password", "--username", "nonexistentuser", "--password", "newpassword"},
  51. expectedErr: "user does not exist",
  52. },
  53. {
  54. name: "missing username",
  55. args: []string{"change-password", "--password", "newpassword"},
  56. expectedErr: `"username" not set`,
  57. },
  58. {
  59. name: "missing password",
  60. args: []string{"change-password", "--username", "testuser"},
  61. expectedErr: `"password" not set`,
  62. },
  63. {
  64. name: "too short password",
  65. args: []string{"change-password", "--username", "testuser", "--password", "1"},
  66. expectedErr: "password is not long enough",
  67. },
  68. }
  69. for _, tc := range testCases {
  70. t.Run(tc.name, func(t *testing.T) {
  71. err := microcmdUserChangePassword().Run(ctx, tc.args)
  72. require.Error(t, err)
  73. require.Contains(t, err.Error(), tc.expectedErr)
  74. })
  75. }
  76. })
  77. }