package repo_manager

import (
	"context"
	"errors"
	"strings"
	"testing"

	"github.com/stretchr/testify/assert"
	"go.skia.org/infra/go/exec"
	"go.skia.org/infra/go/testutils"
)

func TestGetPreUploadStep(t *testing.T) {
	testutils.SmallTest(t)

	// Test for existing steps.
	infraStep, err := GetPreUploadStep("TrainInfra")
	assert.NoError(t, err)
	assert.NotNil(t, infraStep)
	flutterStep, err := GetPreUploadStep("FlutterLicenseScripts")
	assert.NoError(t, err)
	assert.NotNil(t, flutterStep)

	// Test for missing step.
	missingStep, err := GetPreUploadStep("I don't exist")
	assert.Error(t, err)
	assert.Equal(t, "No such pre-upload step: I don't exist", err.Error())
	assert.Nil(t, missingStep)
}

func TestFlutterLicenseScripts(t *testing.T) {
	testutils.SmallTest(t)

	pubErr := error(nil)
	dartErr := error(nil)
	gitErr := error(nil)

	mockRun := &exec.CommandCollector{}
	mockRun.SetDelegateRun(func(cmd *exec.Command) error {
		pubCmd := "get"
		dartCmd := "lib/main.dart --src ../../.. --out testing/out/licenses --golden testing/dir/ci/licenses_golden"
		if cmd.Name == "testing/third_party/dart/tools/sdks/dart-sdk/bin/pub" && strings.Join(cmd.Args, " ") == pubCmd {
			return pubErr
		} else if cmd.Name == "testing/third_party/dart/tools/sdks/dart-sdk/bin/dart" && strings.Join(cmd.Args, " ") == dartCmd {
			return dartErr
		} else if cmd.Name == "git" {
			expectedCheckoutArgs := "checkout -- pubspec.lock"
			expectedCommitArgs := "commit -a --amend --no-edit"
			if strings.Join(cmd.Args, " ") == expectedCheckoutArgs || strings.Join(cmd.Args, " ") == expectedCommitArgs {
				return gitErr
			}
		}
		return exec.DefaultRun(cmd)
	})
	ctx := exec.NewContext(context.Background(), mockRun.Run)

	// No errors should be throw.
	err := FlutterLicenseScripts(ctx, nil, "testing/dir")
	assert.NoError(t, err)

	// Now test for errors.
	pubErr = errors.New("pub error")
	err = FlutterLicenseScripts(ctx, nil, "testing/dir")
	assert.Error(t, err)
	assert.Equal(t, "Error when running pub get: pub error; Stdout+Stderr:\n", err.Error())

	pubErr = error(nil)
	dartErr = errors.New("dart error")
	err = FlutterLicenseScripts(ctx, nil, "testing/dir")
	assert.Error(t, err)
	assert.Equal(t, "Error when running dart license script: dart error", err.Error())

	pubErr = error(nil)
	dartErr = error(nil)
	err = FlutterLicenseScripts(ctx, nil, "testing/dir")
	assert.NoError(t, err)
}
