mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
Source files keep their SPDX-License-Identifier and Hanzo copyright line; the Gitea, Gogs and LFS Test Server copyrights they used to repeat now live once in NOTICE, alongside LICENSE. The header lint accepts any copyright line above the SPDX line, so it no longer demands an upstream one. Co-authored-by: Hanzo Dev <[email protected]>
112 lines
4.0 KiB
Go
112 lines
4.0 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
"testing"
|
|
|
|
auth_model "github.com/hanzoai/git/models/auth"
|
|
"github.com/hanzoai/git/models/db"
|
|
"github.com/hanzoai/git/models/unittest"
|
|
user_model "github.com/hanzoai/git/models/user"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestAdminUserDelete(t *testing.T) {
|
|
ctx := t.Context()
|
|
defer func() {
|
|
require.NoError(t, db.TruncateBeans(t.Context(), &user_model.User{}))
|
|
require.NoError(t, db.TruncateBeans(t.Context(), &user_model.EmailAddress{}))
|
|
require.NoError(t, db.TruncateBeans(t.Context(), &auth_model.AccessToken{}))
|
|
}()
|
|
|
|
setupTestUser := func(t *testing.T) {
|
|
unittest.AssertNotExistsBean(t, &user_model.User{LowerName: "testuser"})
|
|
err := microcmdUserCreate().Run(t.Context(), []string{"create", "--username", "testuser", "--email", "[email protected]", "--random-password"})
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
t.Run("delete user by id", func(t *testing.T) {
|
|
setupTestUser(t)
|
|
|
|
u := unittest.AssertExistsAndLoadBean(t, &user_model.User{LowerName: "testuser"})
|
|
err := microcmdUserDelete().Run(ctx, []string{"delete-test", "--id", strconv.FormatInt(u.ID, 10)})
|
|
require.NoError(t, err)
|
|
unittest.AssertNotExistsBean(t, &user_model.User{LowerName: "testuser"})
|
|
})
|
|
t.Run("delete user by username", func(t *testing.T) {
|
|
setupTestUser(t)
|
|
|
|
err := microcmdUserDelete().Run(ctx, []string{"delete-test", "--username", "testuser"})
|
|
require.NoError(t, err)
|
|
unittest.AssertNotExistsBean(t, &user_model.User{LowerName: "testuser"})
|
|
})
|
|
t.Run("delete user by email", func(t *testing.T) {
|
|
setupTestUser(t)
|
|
|
|
err := microcmdUserDelete().Run(ctx, []string{"delete-test", "--email", "[email protected]"})
|
|
require.NoError(t, err)
|
|
unittest.AssertNotExistsBean(t, &user_model.User{LowerName: "testuser"})
|
|
})
|
|
t.Run("delete user by all 3 attributes", func(t *testing.T) {
|
|
setupTestUser(t)
|
|
|
|
u := unittest.AssertExistsAndLoadBean(t, &user_model.User{LowerName: "testuser"})
|
|
err := microcmdUserDelete().Run(ctx, []string{"delete", "--id", strconv.FormatInt(u.ID, 10), "--username", "testuser", "--email", "[email protected]"})
|
|
require.NoError(t, err)
|
|
unittest.AssertNotExistsBean(t, &user_model.User{LowerName: "testuser"})
|
|
})
|
|
}
|
|
|
|
func TestAdminUserDeleteFailure(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
args []string
|
|
expectedErr string
|
|
}{
|
|
{
|
|
name: "no user to delete",
|
|
args: []string{"delete", "--username", "nonexistentuser"},
|
|
expectedErr: "user does not exist",
|
|
},
|
|
{
|
|
name: "user exists but provided username does not match",
|
|
args: []string{"delete", "--email", "[email protected]", "--username", "wrongusername"},
|
|
expectedErr: "the user testuser who has email [email protected] does not match the provided username wrongusername",
|
|
},
|
|
{
|
|
name: "user exists but provided id does not match",
|
|
args: []string{"delete", "--username", "testuser", "--id", "999"},
|
|
expectedErr: "the user testuser does not match the provided id 999",
|
|
},
|
|
{
|
|
name: "no required flags are provided",
|
|
args: []string{"delete"},
|
|
expectedErr: "You must provide the id, username or email of a user to delete",
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
ctx := t.Context()
|
|
if strings.Contains(tc.name, "user exists") {
|
|
unittest.AssertNotExistsBean(t, &user_model.User{LowerName: "testuser"})
|
|
err := microcmdUserCreate().Run(t.Context(), []string{"create", "--username", "testuser", "--email", "[email protected]", "--random-password"})
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
err := microcmdUserDelete().Run(ctx, tc.args)
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), tc.expectedErr)
|
|
})
|
|
|
|
require.NoError(t, db.TruncateBeans(t.Context(), &user_model.User{}))
|
|
require.NoError(t, db.TruncateBeans(t.Context(), &user_model.EmailAddress{}))
|
|
require.NoError(t, db.TruncateBeans(t.Context(), &auth_model.AccessToken{}))
|
|
}
|
|
}
|