// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package integration

import (
	"context"
	"fmt"
	"net/http"
	"testing"

	"golang.org/x/pkgsite/internal/postgres"
	"golang.org/x/pkgsite/internal/proxy"
	"golang.org/x/pkgsite/internal/testing/sample"
	"golang.org/x/pkgsite/internal/testing/testhelper"
)

func TestFrontendFetchForMasterVersion(t *testing.T) {
	defer postgres.ResetTestDB(testDB, t)

	// Add sample.ModulePath@sample.VersionString to the database.
	// Check that GET /sample.ModulePath returns a 200.
	testModule := &proxy.Module{
		ModulePath: sample.ModulePath,
		Version:    "v1.0.0",
		Files: map[string]string{
			"found.go":       "package found\nconst Value = 123",
			"dir/pkg/pkg.go": "package pkg\nconst Value = 321",
			"LICENSE":        testhelper.MITLicense,
		},
	}
	ctx := context.Background()
	q, teardown := setupQueue(ctx, t, []*proxy.Module{testModule})
	defer teardown()
	ts := setupFrontend(ctx, t, q)

	for _, req := range []struct {
		method, urlPath string
		status          int
	}{
		// Validate that the sample.ModulePath does not exist in the database.
		{http.MethodGet, sample.ModulePath, http.StatusNotFound},
		// Insert the latest version of the module using the frontend fetch
		// endpoint.
		{http.MethodPost, fmt.Sprintf("fetch/%s", sample.ModulePath), http.StatusOK},
		// Validate that sample.ModulePath@master does not exist in the
		// database. GET /sample.ModulePath@master should return a 404.
		{http.MethodGet, fmt.Sprintf("%s@master", sample.ModulePath), http.StatusNotFound},
		// Insert the master version of the module using the frontend fetch
		// endpoint.
		{http.MethodPost, fmt.Sprintf("fetch/%s@master", sample.ModulePath), http.StatusOK},
		// Check that GET /sample.ModulePath@master now returns a 200.
		{http.MethodGet, fmt.Sprintf("%s@master", sample.ModulePath), http.StatusOK},
		// Check that GET /mod/sample.ModulePath@master also returns a 200.
		{http.MethodGet, fmt.Sprintf("mod/%s@master", sample.ModulePath), http.StatusOK},
	} {
		testURL := ts.URL + "/" + req.urlPath
		validateResponse(t, req.method, testURL, req.status, nil)
	}
}
