Files
sm-user-plugin/console_test.go
Jakub Zych 7cdcb7cf89 test(08-07): add failing RED anchor for fonoteka:oauth-client command
- TestPhase8RedOAuthClientCommand drives the not-implemented command
  stub's create path and fails with PHASE8_RED:oauth-command until the
  real create/update/list behavior lands (D-19)
- oauth_client.go stub declares the exact PHP-parity flag/argument
  contract (name, --redirect-uri=*, --scope=*, --auth-method,
  --client-id, --list) so the RED test exercises the real command shape
- user/console_test.go's emailArg gains Flags(string) []string: bonfire's
  Input interface (summercms.go) grew this method for D-19's repeatable
  flags, and emailArg must satisfy it to keep building
2026-09-23 21:54:54 +02:00

57 lines
1.5 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 }
func (e emailArg) Flags(string) []string { return nil }