summaryrefslogtreecommitdiffstats
path: root/repo/repo_test.go
diff options
context:
space:
mode:
authorMarc Pervaz Boocha <mboocha@sudomsg.com>2025-08-02 22:23:13 +0530
committerMarc Pervaz Boocha <mboocha@sudomsg.com>2025-08-02 23:02:30 +0530
commit178e0bfc2d8709ae4d3abd7519b260df09b2d3b5 (patch)
tree10cbdd013c62586190074d9f088e2269f88c4cab /repo/repo_test.go
parentFixed Broken .gitignore (diff)
downloadgopkgserver-0.1.0.tar
gopkgserver-0.1.0.tar.gz
gopkgserver-0.1.0.tar.bz2
gopkgserver-0.1.0.tar.lz
gopkgserver-0.1.0.tar.xz
gopkgserver-0.1.0.tar.zst
gopkgserver-0.1.0.zip
Switched to go.sudomsg.com/kitHEADv0.1.0main
Diffstat (limited to 'repo/repo_test.go')
-rw-r--r--repo/repo_test.go137
1 files changed, 137 insertions, 0 deletions
diff --git a/repo/repo_test.go b/repo/repo_test.go
new file mode 100644
index 0000000..57f249c
--- /dev/null
+++ b/repo/repo_test.go
@@ -0,0 +1,137 @@
+package repo_test
+
+import (
+ "bytes"
+ "net/http"
+ "net/http/httptest"
+ "strings"
+ "testing"
+
+ "go.sudomsg.com/gopkgserver/repo"
+)
+
+func TestMetaExec(t *testing.T) {
+ t.Parallel()
+
+ meta, err := repo.NewMeta()
+ if err != nil {
+ t.Fatalf("failed to create Meta: %v", err)
+ }
+
+ pkg := "example.com/foo"
+ r := repo.Repo{
+ VCS: "git",
+ Repository: "https://github.com/user/foo",
+ Home: "https://github.com/user/foo",
+ Directory: "https://github.com/user/foo/tree/master{/dir}",
+ File: "https://github.com/user/foo/blob/master{/dir}/{file}#L{line}",
+ }
+
+ html, err := meta.Exec(pkg, r)
+ if err != nil {
+ t.Fatalf("Exec failed: %v", err)
+ }
+
+ htmlStr := string(html)
+ if !strings.Contains(htmlStr, `<meta name="go-import"`) {
+ t.Fatalf("missing go-import meta tag: %q", htmlStr)
+ }
+ if !strings.Contains(htmlStr, `<meta name="go-source"`) {
+ t.Fatalf("missing go-source meta tag: %q", htmlStr)
+ }
+ if !strings.Contains(htmlStr, pkg) {
+ t.Fatalf("missing package name in output: %q", htmlStr)
+ }
+}
+
+func TestServeHTTP(t *testing.T) {
+ t.Parallel()
+
+ repos := map[string]repo.Repo{
+ "example.com/foo": {
+ VCS: "git",
+ Repository: "https://github.com/user/foo",
+ Home: "https://github.com/user/foo",
+ Directory: "https://github.com/user/foo/tree/master{/dir}",
+ File: "https://github.com/user/foo/blob/master{/dir}/{file}#L{line}",
+ },
+ }
+
+ t.Run("returns meta tag for go-get=1", func(t *testing.T) {
+ t.Parallel()
+
+ handler, err := repo.New(repos)
+ if err != nil {
+ t.Fatalf("failed to create handler: %v", err)
+ }
+
+ req := httptest.NewRequest(http.MethodGet, "http://example.com/foo?go-get=1", nil)
+ w := httptest.NewRecorder()
+
+ handler.ServeHTTP(w, req)
+
+ resp := w.Result()
+ defer resp.Body.Close()
+
+ if resp.StatusCode != http.StatusOK {
+ t.Fatalf("expected %v, got %v", http.StatusOK, resp.StatusCode)
+ }
+
+ var buf bytes.Buffer
+ buf.ReadFrom(resp.Body)
+ body := buf.String()
+
+ if !strings.Contains(body, `<meta name="go-import"`) {
+ t.Fatalf("expected go-import tag in body, got: %v", body)
+ }
+ })
+
+ t.Run("redirects to pkg.go.dev otherwise", func(t *testing.T) {
+ t.Parallel()
+
+ handler, err := repo.New(repos)
+ if err != nil {
+ t.Fatalf("failed to create handler: %v", err)
+ }
+
+ req := httptest.NewRequest(http.MethodGet, "http://example.com/foo", nil)
+ w := httptest.NewRecorder()
+
+ handler.ServeHTTP(w, req)
+
+ resp := w.Result()
+ defer resp.Body.Close()
+
+ if resp.StatusCode != http.StatusFound {
+ t.Fatalf("expected %v, got %v", http.StatusFound, resp.StatusCode)
+ }
+ loc, err := resp.Location()
+ if err != nil {
+ t.Fatalf("Invalid redirect location: %v", err)
+ }
+
+ if !strings.HasPrefix(loc.String(), "https://pkg.go.dev/example.com/foo") {
+ t.Fatalf("unexpected redirect location: %v", loc)
+ }
+ })
+
+ t.Run("returns 404 for unknown path", func(t *testing.T) {
+ t.Parallel()
+
+ handler, err := repo.New(repos)
+ if err != nil {
+ t.Fatalf("failed to create handler: %v", err)
+ }
+
+ w := httptest.NewRecorder()
+ req := httptest.NewRequest(http.MethodGet, "http://example.com/bar", nil)
+ handler.ServeHTTP(w, req)
+
+ resp := w.Result()
+ defer resp.Body.Close()
+
+ if resp.StatusCode != http.StatusNotFound {
+ t.Fatalf("expected %v, got %v", http.StatusNotFound, resp.StatusCode)
+ }
+ })
+}