package main

import (
	"bytes"
	"strings"
	"testing"
)

func TestCommandHelp(t *testing.T) {
	t.Setenv("DATABASE_URL", "postgres://test:secret-help-sentinel@127.0.0.1:1/nonexistent")
	for _, args := range [][]string{{"--help"}, {"-h"}, {"help"}, {"migrate", "--help"}, {"migrate", "-h"}, {"help", "migrate"}} {
		var out bytes.Buffer
		done, err := commandHelp(args, &out)
		if !done || err != nil {
			t.Fatalf("%v: done=%v err=%v", args, done, err)
		}
		for _, want := range []string{"Usage: contentd", "DATABASE_URL", "Example"} {
			if !strings.Contains(out.String(), want) {
				t.Errorf("%v missing %q", args, want)
			}
		}
		if strings.Contains(out.String(), "secret-help-sentinel") {
			t.Fatal("help leaked credentials")
		}
	}
}

func TestCommandDispatch(t *testing.T) {
	for _, args := range [][]string{nil, {"migrate"}} {
		var out bytes.Buffer
		done, err := commandHelp(args, &out)
		if done || err != nil || out.Len() != 0 {
			t.Fatalf("valid command %v intercepted", args)
		}
	}
	for _, args := range [][]string{{"--unknown"}, {"migrate", "extra"}, {"serve"}} {
		var out bytes.Buffer
		done, err := commandHelp(args, &out)
		if !done || err == nil {
			t.Fatalf("invalid command %v accepted", args)
		}
	}
}
