package deps_parser

import (
	"context"
	"testing"

	"github.com/go-python/gpython/ast"
	"github.com/stretchr/testify/require"
	"go.skia.org/infra/go/deepequal/assertdeep"
	"go.skia.org/infra/go/gitiles"
	"go.skia.org/infra/go/testutils/unittest"
)

func TestParseDepsRealWorld(t *testing.T) {
	// Manual test, since it loads data from real APIs.
	unittest.ManualTest(t)
	unittest.MediumTest(t)

	type depsEntryPos struct {
		*DepsEntry
		*ast.Pos
	}
	ctx := context.Background()

	// checkDeps loads the DEPS file from the given repo at the given
	// revision and asserts that it contains the given deps.
	checkDeps := func(repo string, rev string, expectMap map[string]*depsEntryPos) {
		contents, err := gitiles.NewRepo(repo, nil).ReadFileAtRef(ctx, "DEPS", rev)
		require.NoError(t, err)
		actual, poss, err := parseDeps(string(contents))
		require.NoError(t, err)
		actualMap := make(map[string]*depsEntryPos, len(actual))
		for depId, dep := range actual {
			actualMap[depId] = &depsEntryPos{
				DepsEntry: dep,
				Pos:       poss[depId],
			}
		}
		for id, expect := range expectMap {
			assertdeep.Equal(t, expect, actualMap[id])
		}
	}

	// Chromium DEPS. We expect this to be the most complex example of a
	// DEPS file. Check a few example dependencies.
	checkDeps("https://chromium.googlesource.com/chromium/src.git", "9f0b31d5560995206ce92535935c2989913bd5bd", map[string]*depsEntryPos{
		"skia.googlesource.com/skia": {
			// Skia is a simple (non-dict) dep with a vars lookup.
			DepsEntry: &DepsEntry{
				Id:      "skia.googlesource.com/skia",
				Version: "85755f46a8810b1863493a81887f1dc17c2e49e1",
				Path:    "src/third_party/skia",
			},
			Pos: &ast.Pos{
				Lineno:    178,
				ColOffset: 19,
			},
		},
		"infra/tools/luci/swarming": {
			// Swarming client is a CIPD dep with a vars lookup.
			DepsEntry: &DepsEntry{
				Id:      "infra/tools/luci/swarming",
				Version: "git_revision:de73cf6c4bde86f0a9c8d54151b69b0154a398f1",
				Path:    "src/tools/luci-go",
			},
			Pos: &ast.Pos{
				Lineno:    159,
				ColOffset: 13,
			},
		},
		"android.googlesource.com/platform/external/protobuf": {
			// This is a dict entry whose version is defined in place.
			DepsEntry: &DepsEntry{
				Id:      "android.googlesource.com/platform/external/protobuf",
				Version: "7fca48d8ce97f7ba3ab8eea5c472f1ad3711762f",
				Path:    "src/third_party/android_protobuf/src",
			},
			Pos: &ast.Pos{
				Lineno:    640,
				ColOffset: 76,
			},
		},
	})

	// ANGLE. This entry caused a problem in the past.
	checkDeps("https://chromium.googlesource.com/angle/angle.git", "390ef29999bc0b1c1b976c1428b5914718477f4e", map[string]*depsEntryPos{
		"chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools": {
			DepsEntry: &DepsEntry{
				Id:      "chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools",
				Version: "e95fbfb1f509ad7a7fdfb72ac35fe412d72fc4a4",
				Path:    "third_party/spirv-tools/src",
			},
			Pos: &ast.Pos{
				Lineno:    49,
				ColOffset: 26,
			},
		},
	})

	// This DEPS file has an unpinned entry.
	checkDeps("https://chromium.googlesource.com/infra/infra.git", "fbd6fe605e30b496eab7a1ddb367cfb24cb86d99", map[string]*depsEntryPos{
		"chromium.googlesource.com/chromium/tools/build": {
			DepsEntry: &DepsEntry{
				Id:      "chromium.googlesource.com/chromium/tools/build",
				Version: "",
				Path:    "build",
			},
			Pos: &ast.Pos{
				Lineno:    8,
				ColOffset: 4,
			},
		},
	})
}
