package dag

import (
	"context"
	"testing"

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

type testData struct {
	X string
}

type testEnvData struct {
	A string
	B int
	C testData
	D *testData
}

func (d *testEnvData) Name() string {
	return "test"
}

func (d *testEnvData) Setup(ctx context.Context) error { return nil }
func (d *testEnvData) Envs() []string {
	return nil
}

type testCaseData struct {
	A string
	B int
	C testData
	D *testData

	// unexported
	xxx int
}

func (d *testCaseData) Test(t *testing.T) {}
func (d *testCaseData) Envs() []string {
	return []string{"test"}
}

func TestInject(t *testing.T) {
	in := NewInjector(
		&testEnvData{
			A: "string",
			B: 10,
			C: testData{
				X: "struct",
			},
			D: &testData{
				X: "pointer",
			},
		},
	)

	d := testCaseData{}
	assert.NoError(t, in.Inject(&d))
	assert.Equal(t, "string", d.A)
	assert.Equal(t, 10, d.B)
	assert.Equal(t, "struct", d.C.X)
	assert.Equal(t, "pointer", d.D.X)
	assert.Equal(t, 0, d.xxx)
}
