package process

import (
	"bytes"
	"context"
	"os/exec"
	"strings"
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestForwarded(t *testing.T) {
	ctx := context.Background()
	var buf bytes.Buffer
	err := Forwarded(ctx, []string{
		"python3", "-c", "print(input('input: '))",
	}, strings.NewReader("abc\n"), &buf, &buf)
	assert.NoError(t, err)

	assert.Equal(t, "input: abc", strings.TrimSpace(buf.String()))
}

func TestForwardedFails(t *testing.T) {
	ctx := context.Background()
	var buf bytes.Buffer
	err := Forwarded(ctx, []string{
		"_non_existent_",
	}, strings.NewReader("abc\n"), &buf, &buf)
	assert.NotNil(t, err)
}

func TestForwardedFailsOnStdinPipe(t *testing.T) {
	ctx := context.Background()
	var buf bytes.Buffer
	err := Forwarded(ctx, []string{
		"_non_existent_",
	}, strings.NewReader("abc\n"), &buf, &buf, func(_ context.Context, c *exec.Cmd) error {
		c.Stdin = strings.NewReader("x")
		return nil
	})
	assert.NotNil(t, err)
}