| // Copyright 2019 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 postgres |
| |
| import ( |
| "context" |
| "testing" |
| |
| "github.com/google/go-cmp/cmp" |
| "github.com/lib/pq" |
| "golang.org/x/pkgsite/internal/testing/sample" |
| ) |
| |
| func TestToTsvectorParentDirectoriesStoredProcedure(t *testing.T) { |
| ctx, cancel := context.WithTimeout(context.Background(), testTimeout*2) |
| defer cancel() |
| |
| for _, tc := range []struct { |
| path, modulePath string |
| want []string |
| }{ |
| { |
| path: "github.com/a/b", |
| modulePath: "github.com/a/b", |
| want: []string{"github.com/a/b"}, |
| }, |
| { |
| path: "github.com/a/b/c", |
| modulePath: "github.com/a/b", |
| want: []string{ |
| "github.com/a/b", |
| "github.com/a/b/c", |
| }, |
| }, |
| { |
| path: "github.com/a/b/c/github.com/a/b/c", |
| modulePath: "github.com/a/b", |
| want: []string{ |
| "github.com/a/b", |
| "github.com/a/b/c", |
| "github.com/a/b/c/github.com", |
| "github.com/a/b/c/github.com/a", |
| "github.com/a/b/c/github.com/a/b", |
| "github.com/a/b/c/github.com/a/b/c", |
| }, |
| }, |
| { |
| path: "bufio", |
| modulePath: "std", |
| want: []string{ |
| "bufio", |
| }, |
| }, |
| { |
| path: "archive/zip", |
| modulePath: "std", |
| want: []string{ |
| "archive", |
| "archive/zip", |
| }, |
| }, |
| } { |
| t.Run(tc.path, func(t *testing.T) { |
| defer ResetTestDB(testDB, t) |
| |
| var suffix string |
| switch tc.modulePath { |
| case "std": |
| suffix = tc.path |
| case tc.path: |
| suffix = "" |
| default: |
| suffix = tc.path[len(tc.modulePath)+1:] |
| } |
| m := sample.LegacyModule(tc.modulePath, sample.VersionString, suffix) |
| if err := testDB.InsertModule(ctx, m); err != nil { |
| t.Fatal(err) |
| } |
| |
| var got []string |
| err := testDB.db.QueryRow(ctx, |
| `SELECT tsvector_to_array(tsv_parent_directories) FROM packages WHERE path = $1;`, |
| tc.path).Scan(pq.Array(&got)) |
| if err != nil { |
| t.Fatal(err) |
| } |
| if diff := cmp.Diff(tc.want, got); diff != "" { |
| t.Errorf("tsvector_to_array FROM packages for %q mismatch (-want +got):\n%s", tc.path, diff) |
| } |
| |
| err = testDB.db.QueryRow(ctx, |
| `SELECT tsvector_to_array(tsv_parent_directories) FROM search_documents WHERE package_path = $1;`, |
| tc.path).Scan(pq.Array(&got)) |
| if err != nil { |
| t.Fatal(err) |
| } |
| if diff := cmp.Diff(tc.want, got); diff != "" { |
| t.Errorf("tsvector_to_array FROM search_documents for %q mismatch (-want +got):\n%s", tc.path, diff) |
| } |
| }) |
| } |
| } |