Files
sm-user-plugin/console_test.go
2026-09-22 16:43:44 +02:00

55 lines
1.4 KiB
Go

package user
import (
"bytes"
"context"
"strings"
"testing"
"git.golem15.com/golem15/fonoteka/plugins/golem15/user/models"
"git.golem15.com/golem15/summercms/bonfire"
"git.golem15.com/golem15/summercms/pact"
)
func TestRequirePasswordChange(t *testing.T) {
app, gdb := sessionApp(t, "0s")
user := insertUser(t, gdb, "alice@example.com", "correct-horse")
p := &Plugin{app: app}
var _ pact.HasCommands = p
cmds := p.Commands()
if len(cmds) != 1 || cmds[0].Name != "user:require-password-change" {
t.Fatalf("commands = %#v", cmds)
}
var buf bytes.Buffer
out := bonfire.NewOutput(nil, &buf, &buf)
if err := cmds[0].Run(context.Background(), emailArg{email: "alice@example.com"}, out); err != nil {
t.Fatal(err)
}
if !strings.Contains(buf.String(), "alice@example.com") {
t.Fatalf("output = %q", buf.String())
}
var fresh models.User
if err := gdb.First(&fresh, user.ID).Error; err != nil {
t.Fatal(err)
}
if !fresh.MustChangePassword {
t.Fatal("must_change_password stayed false")
}
if err := cmds[0].Run(context.Background(), emailArg{email: "missing@example.com"}, out); err == nil {
t.Fatal("unknown email returned nil error")
}
}
type emailArg struct{ email string }
func (e emailArg) Args() []string { return []string{e.email} }
func (e emailArg) Argument(name string) (string, bool) {
if name == "email" {
return e.email, true
}
return "", false
}
func (e emailArg) Flag(string) (string, bool) { return "", false }