mirror of
https://github.com/go-gitea/gitea.git
synced 2025-06-02 10:44:47 +02:00
286 lines
6.1 KiB
Go
286 lines
6.1 KiB
Go
// Copyright 2025 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
auth_model "code.gitea.io/gitea/models/auth"
|
|
"code.gitea.io/gitea/services/auth/source/smtp"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/urfave/cli/v3"
|
|
)
|
|
|
|
func TestAddSMTP(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
args []string
|
|
source *auth_model.Source
|
|
errMsg string
|
|
}{
|
|
{
|
|
name: "missing name",
|
|
args: []string{
|
|
"--host", "localhost",
|
|
"--port", "25",
|
|
},
|
|
errMsg: "name must be set",
|
|
},
|
|
{
|
|
name: "missing host",
|
|
args: []string{
|
|
"--name", "test",
|
|
"--port", "25",
|
|
},
|
|
errMsg: "host must be set",
|
|
},
|
|
{
|
|
name: "missing port",
|
|
args: []string{
|
|
"--name", "test",
|
|
"--host", "localhost",
|
|
},
|
|
errMsg: "port must be set",
|
|
},
|
|
{
|
|
name: "valid config",
|
|
args: []string{
|
|
"--name", "test",
|
|
"--host", "localhost",
|
|
"--port", "25",
|
|
},
|
|
source: &auth_model.Source{
|
|
Type: auth_model.SMTP,
|
|
Name: "test",
|
|
IsActive: true,
|
|
Cfg: &smtp.Source{
|
|
Auth: "PLAIN",
|
|
Host: "localhost",
|
|
Port: 25,
|
|
// ForceSMTPS: true,
|
|
// SkipVerify: true,
|
|
},
|
|
TwoFactorPolicy: "skip",
|
|
},
|
|
},
|
|
{
|
|
name: "valid config with options",
|
|
args: []string{
|
|
"--name", "test",
|
|
"--host", "localhost",
|
|
"--port", "25",
|
|
"--auth-type", "LOGIN",
|
|
"--force-smtps=false",
|
|
"--skip-verify=false",
|
|
"--helo-hostname", "example.com",
|
|
"--disable-helo=false",
|
|
"--allowed-domains", "example.com,example.org",
|
|
"--skip-local-2fa=false",
|
|
"--active=false",
|
|
},
|
|
source: &auth_model.Source{
|
|
Type: auth_model.SMTP,
|
|
Name: "test",
|
|
IsActive: false,
|
|
Cfg: &smtp.Source{
|
|
Auth: "LOGIN",
|
|
Host: "localhost",
|
|
Port: 25,
|
|
ForceSMTPS: false,
|
|
SkipVerify: false,
|
|
HeloHostname: "example.com",
|
|
DisableHelo: false,
|
|
AllowedDomains: "example.com,example.org",
|
|
},
|
|
TwoFactorPolicy: "",
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
a := &authService{
|
|
initDB: func(ctx context.Context) error {
|
|
return nil
|
|
},
|
|
createAuthSource: func(ctx context.Context, source *auth_model.Source) error {
|
|
assert.Equal(t, tc.source, source)
|
|
return nil
|
|
},
|
|
}
|
|
|
|
cmd := &cli.Command{
|
|
Flags: microcmdAuthAddSMTP().Flags,
|
|
Action: a.runAddSMTP,
|
|
}
|
|
|
|
args := []string{"smtp-test"}
|
|
args = append(args, tc.args...)
|
|
|
|
t.Log(args)
|
|
err := cmd.Run(t.Context(), args)
|
|
|
|
if tc.errMsg != "" {
|
|
assert.EqualError(t, err, tc.errMsg)
|
|
} else {
|
|
assert.NoError(t, err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestUpdateSMTP(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
args []string
|
|
existingAuthSource *auth_model.Source
|
|
authSource *auth_model.Source
|
|
errMsg string
|
|
}{
|
|
{
|
|
name: "missing id",
|
|
args: []string{
|
|
"--name", "test",
|
|
"--host", "localhost",
|
|
"--port", "25",
|
|
},
|
|
errMsg: "--id flag is missing",
|
|
},
|
|
{
|
|
name: "valid config",
|
|
existingAuthSource: &auth_model.Source{
|
|
ID: 1,
|
|
Type: auth_model.SMTP,
|
|
Name: "old name",
|
|
IsActive: true,
|
|
Cfg: &smtp.Source{
|
|
Auth: "PLAIN",
|
|
Host: "old host",
|
|
Port: 26,
|
|
ForceSMTPS: true,
|
|
SkipVerify: true,
|
|
},
|
|
TwoFactorPolicy: "",
|
|
},
|
|
args: []string{
|
|
"--id", "1",
|
|
"--name", "test",
|
|
"--host", "localhost",
|
|
"--port", "25",
|
|
},
|
|
authSource: &auth_model.Source{
|
|
ID: 1,
|
|
Type: auth_model.SMTP,
|
|
Name: "test",
|
|
IsActive: true,
|
|
Cfg: &smtp.Source{
|
|
Auth: "PLAIN",
|
|
Host: "localhost",
|
|
Port: 25,
|
|
ForceSMTPS: true,
|
|
SkipVerify: true,
|
|
},
|
|
TwoFactorPolicy: "skip",
|
|
},
|
|
},
|
|
{
|
|
name: "valid config with options",
|
|
existingAuthSource: &auth_model.Source{
|
|
ID: 1,
|
|
Type: auth_model.SMTP,
|
|
Name: "old name",
|
|
IsActive: true,
|
|
Cfg: &smtp.Source{
|
|
Auth: "PLAIN",
|
|
Host: "old host",
|
|
Port: 26,
|
|
ForceSMTPS: true,
|
|
SkipVerify: true,
|
|
HeloHostname: "old.example.com",
|
|
DisableHelo: false,
|
|
AllowedDomains: "old.example.com",
|
|
},
|
|
TwoFactorPolicy: "",
|
|
},
|
|
args: []string{
|
|
"--id", "1",
|
|
"--name", "test",
|
|
"--host", "localhost",
|
|
"--port", "25",
|
|
"--auth-type", "LOGIN",
|
|
"--force-smtps=false",
|
|
"--skip-verify=false",
|
|
"--helo-hostname", "example.com",
|
|
"--disable-helo=true",
|
|
"--allowed-domains", "example.com,example.org",
|
|
"--skip-local-2fa=true",
|
|
"--active=false",
|
|
},
|
|
authSource: &auth_model.Source{
|
|
ID: 1,
|
|
Type: auth_model.SMTP,
|
|
Name: "test",
|
|
IsActive: false,
|
|
Cfg: &smtp.Source{
|
|
Auth: "LOGIN",
|
|
Host: "localhost",
|
|
Port: 25,
|
|
ForceSMTPS: false,
|
|
SkipVerify: false,
|
|
HeloHostname: "example.com",
|
|
DisableHelo: true,
|
|
AllowedDomains: "example.com,example.org",
|
|
},
|
|
TwoFactorPolicy: "skip",
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
a := &authService{
|
|
initDB: func(ctx context.Context) error {
|
|
return nil
|
|
},
|
|
getAuthSourceByID: func(ctx context.Context, id int64) (*auth_model.Source, error) {
|
|
return &auth_model.Source{
|
|
ID: 1,
|
|
Type: auth_model.SMTP,
|
|
Name: "test",
|
|
IsActive: true,
|
|
Cfg: &smtp.Source{
|
|
Auth: "PLAIN",
|
|
SkipVerify: true,
|
|
ForceSMTPS: true,
|
|
},
|
|
TwoFactorPolicy: "skip",
|
|
}, nil
|
|
},
|
|
|
|
updateAuthSource: func(ctx context.Context, source *auth_model.Source) error {
|
|
assert.Equal(t, tc.authSource, source)
|
|
return nil
|
|
},
|
|
}
|
|
|
|
app := &cli.Command{
|
|
Flags: microcmdAuthUpdateSMTP().Flags,
|
|
Action: a.runUpdateSMTP,
|
|
}
|
|
args := []string{"smtp-tests"}
|
|
args = append(args, tc.args...)
|
|
|
|
err := app.Run(t.Context(), args)
|
|
|
|
if tc.errMsg != "" {
|
|
assert.EqualError(t, err, tc.errMsg)
|
|
} else {
|
|
assert.NoError(t, err)
|
|
}
|
|
})
|
|
}
|
|
}
|