package trimmer_test

import (
	"testing"

	"edge-infra.dev/pkg/edge/gitops/fn"
	"edge-infra.dev/pkg/edge/gitops/fn/testutil"
	"edge-infra.dev/pkg/edge/gitops/fns/trimmer"

	"github.com/stretchr/testify/assert"
	"sigs.k8s.io/kustomize/kyaml/yaml"
)

func TestTrimmer(t *testing.T) {
	needsToBeTrimmedObj := yaml.MustParse(`kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: foo
  creationTimestamp: null
status: {}`)

	y, _ := needsToBeTrimmedObj.String()
	t.Logf("Yaml before trimming:\n%s", y)

	err := trimmer.Trim(needsToBeTrimmedObj)
	assert.NoError(t, err)

	status, err := needsToBeTrimmedObj.Pipe(yaml.Get("status"))
	assert.True(t, yaml.IsMissingOrError(status, err))
	assert.NoError(t, err)

	creationTimestamp, err := needsToBeTrimmedObj.Pipe(yaml.Get("metadata.creationTimestamp"))
	assert.True(t, yaml.IsMissingOrError(creationTimestamp, err))
	assert.NoError(t, err)

	y, _ = needsToBeTrimmedObj.String()
	t.Logf("Yaml after trimming:\n%s", y)
	// test using vendored expected results
	// standalone mode is required to pass config file
	fn.EnableStandalone()
	tc := testutil.CommandResultsChecker{
		Command:             trimmer.NewKptFunction,
		OutputAssertionFunc: testutil.NormalizeAndAssert(t),
	}
	tc.Assert(t)
}