blob: 3c5865807e1dfe4defdc09187e534791064c9a22 [file] [log] [blame]
// 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 (
"bufio"
"bytes"
"context"
"fmt"
"io"
"net/http"
"strings"
"testing"
"github.com/google/go-cmp/cmp"
"golang.org/x/pkgsite/internal/experiment"
"golang.org/x/pkgsite/internal/postgres"
)
// Test that the worker saves the information needed to render
// doc on the frontend.
func TestFrontendDocRender(t *testing.T) {
defer postgres.ResetTestDB(testDB, t)
// Process with saving the source.
processVersions(
experiment.NewContext(context.Background()),
t, testModules)
const modulePath = "example.com/basic"
workerDoc := getDoc(t, modulePath)
frontendDoc := getDoc(t, modulePath)
if diff := cmp.Diff(workerDoc, frontendDoc); diff != "" {
t.Errorf("mismatch (-worker, +frontend):\n%s", diff)
}
}
func getDoc(t *testing.T, modulePath string, exps ...string) string {
return getFrontendPage(t, "/"+modulePath, exps...)
}
func getFrontendPage(t *testing.T, urlPath string, exps ...string) string {
ctx := experiment.NewContext(context.Background(), exps...)
ts := setupFrontend(ctx, t, nil, nil)
url := ts.URL + urlPath
resp, err := http.Get(url)
if err != nil {
t.Fatalf("%s: %v", url, err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
t.Fatalf("%s: status code %d", url, resp.StatusCode)
}
content, err := io.ReadAll(resp.Body)
if err != nil {
t.Fatalf("%s: %v", url, err)
}
// Remove surrounding whitespace from lines, and blank lines.
scan := bufio.NewScanner(bytes.NewReader(content))
var b strings.Builder
for scan.Scan() {
line := strings.TrimSpace(scan.Text())
if len(line) > 0 {
fmt.Fprintln(&b, line)
}
}
if scan.Err() != nil {
t.Fatal(scan.Err())
}
return b.String()
}