package postfix_lookup

import (
	_ "embed"
	"github.com/stretchr/testify/assert"
	"strings"
	"testing"
)

var postfixLookupData = []struct {
	Input  string
	Output string
}{
	{"hi@example.com", "admin@example.com"},
	{"test@example.com", "admin@example.com"},
	{"user@example.org", "admin@example.org"},
	{"user@example.net", ""},
}

func TestDecoder_Load(t *testing.T) {
	p := &PostfixLookup{execCmd: func(key string) ([]byte, error) {
		n := strings.IndexByte(key, '@')
		if n == -1 {
			return []byte{}, nil
		}
		addr := key[n+1:]
		switch addr {
		case "example.com", "example.org":
			return []byte("result=admin@" + addr + "\nadmin@" + addr + "\n"), nil
		}
		return []byte{}, nil
	}}
	for _, i := range postfixLookupData {
		t.Run(i.Input, func(t *testing.T) {
			lookup, err := p.Lookup(i.Input)
			if i.Output == "" && err == nil {
				t.Fatal("expected error for empty output test case")
			}
			if i.Output != "" && err != nil {
				t.Fatal("expected no error for non-empty output test case")
			}
			assert.Equal(t, i.Output, lookup)
		})
	}
}