mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.1 KiB
91 lines
3.1 KiB
// Copyright 2025 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package cmd |
|
|
|
import ( |
|
"testing" |
|
|
|
"code.gitea.io/gitea/models/db" |
|
"code.gitea.io/gitea/models/unittest" |
|
user_model "code.gitea.io/gitea/models/user" |
|
|
|
"github.com/stretchr/testify/assert" |
|
"github.com/stretchr/testify/require" |
|
) |
|
|
|
func TestChangePasswordCommand(t *testing.T) { |
|
ctx := t.Context() |
|
|
|
defer func() { |
|
require.NoError(t, db.TruncateBeans(t.Context(), &user_model.User{})) |
|
}() |
|
|
|
t.Run("change password successfully", func(t *testing.T) { |
|
// defer func() { |
|
// require.NoError(t, db.TruncateBeans(t.Context(), &user_model.User{})) |
|
// }() |
|
// Prepare test user |
|
unittest.AssertNotExistsBean(t, &user_model.User{LowerName: "testuser"}) |
|
err := microcmdUserCreate().Run(ctx, []string{"create", "--username", "testuser", "--email", "testuser@gitea.local", "--random-password"}) |
|
require.NoError(t, err) |
|
|
|
// load test user |
|
userBase := unittest.AssertExistsAndLoadBean(t, &user_model.User{LowerName: "testuser"}) |
|
|
|
// Change the password |
|
err = microcmdUserChangePassword().Run(ctx, []string{"change-password", "--username", "testuser", "--password", "newpassword"}) |
|
require.NoError(t, err) |
|
|
|
// Verify the password has been changed |
|
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{LowerName: "testuser"}) |
|
assert.NotEqual(t, userBase.Passwd, user.Passwd) |
|
assert.NotEqual(t, userBase.Salt, user.Salt) |
|
|
|
// Additional check for must-change-password flag |
|
require.NoError(t, microcmdUserChangePassword().Run(ctx, []string{"change-password", "--username", "testuser", "--password", "anotherpassword", "--must-change-password=false"})) |
|
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{LowerName: "testuser"}) |
|
assert.False(t, user.MustChangePassword) |
|
|
|
require.NoError(t, microcmdUserChangePassword().Run(ctx, []string{"change-password", "--username", "testuser", "--password", "yetanotherpassword", "--must-change-password"})) |
|
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{LowerName: "testuser"}) |
|
assert.True(t, user.MustChangePassword) |
|
}) |
|
|
|
t.Run("failure cases", func(t *testing.T) { |
|
testCases := []struct { |
|
name string |
|
args []string |
|
expectedErr string |
|
}{ |
|
{ |
|
name: "user does not exist", |
|
args: []string{"change-password", "--username", "nonexistentuser", "--password", "newpassword"}, |
|
expectedErr: "user does not exist", |
|
}, |
|
{ |
|
name: "missing username", |
|
args: []string{"change-password", "--password", "newpassword"}, |
|
expectedErr: `"username" not set`, |
|
}, |
|
{ |
|
name: "missing password", |
|
args: []string{"change-password", "--username", "testuser"}, |
|
expectedErr: `"password" not set`, |
|
}, |
|
{ |
|
name: "too short password", |
|
args: []string{"change-password", "--username", "testuser", "--password", "1"}, |
|
expectedErr: "password is not long enough", |
|
}, |
|
} |
|
|
|
for _, tc := range testCases { |
|
t.Run(tc.name, func(t *testing.T) { |
|
err := microcmdUserChangePassword().Run(ctx, tc.args) |
|
require.Error(t, err) |
|
require.Contains(t, err.Error(), tc.expectedErr) |
|
}) |
|
} |
|
}) |
|
}
|
|
|