forked from mirrors/pkg-proxy
94 lines
2.4 KiB
Go
94 lines
2.4 KiB
Go
|
|
package handler
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"log/slog"
|
||
|
|
"testing"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/git-pkgs/proxy/internal/cooldown"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestPubRewriteMetadata(t *testing.T) {
|
||
|
|
h := &PubHandler{
|
||
|
|
proxy: testProxy(),
|
||
|
|
proxyURL: "http://localhost:8080",
|
||
|
|
}
|
||
|
|
|
||
|
|
input := `{
|
||
|
|
"name": "flutter_bloc",
|
||
|
|
"versions": [
|
||
|
|
{"version": "1.0.0", "archive_url": "https://pub.dev/packages/flutter_bloc/versions/1.0.0.tar.gz"},
|
||
|
|
{"version": "2.0.0", "archive_url": "https://pub.dev/packages/flutter_bloc/versions/2.0.0.tar.gz"}
|
||
|
|
]
|
||
|
|
}`
|
||
|
|
|
||
|
|
output, err := h.rewriteMetadata("flutter_bloc", []byte(input))
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("rewriteMetadata failed: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
var result map[string]any
|
||
|
|
if err := json.Unmarshal(output, &result); err != nil {
|
||
|
|
t.Fatalf("failed to parse output: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
versions := result["versions"].([]any)
|
||
|
|
if len(versions) != 2 {
|
||
|
|
t.Fatalf("expected 2 versions, got %d", len(versions))
|
||
|
|
}
|
||
|
|
|
||
|
|
v1 := versions[0].(map[string]any)
|
||
|
|
if v1["archive_url"] != "http://localhost:8080/pub/packages/flutter_bloc/versions/1.0.0.tar.gz" {
|
||
|
|
t.Errorf("unexpected archive_url: %s", v1["archive_url"])
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPubRewriteMetadataCooldown(t *testing.T) {
|
||
|
|
now := time.Now()
|
||
|
|
old := now.Add(-10 * 24 * time.Hour).Format(time.RFC3339)
|
||
|
|
recent := now.Add(-1 * time.Hour).Format(time.RFC3339)
|
||
|
|
|
||
|
|
proxy := &Proxy{Logger: slog.Default()}
|
||
|
|
proxy.Cooldown = &cooldown.Config{Default: "3d"}
|
||
|
|
|
||
|
|
h := &PubHandler{
|
||
|
|
proxy: proxy,
|
||
|
|
proxyURL: "http://localhost:8080",
|
||
|
|
}
|
||
|
|
|
||
|
|
input := `{
|
||
|
|
"name": "flutter_bloc",
|
||
|
|
"latest": {"version": "2.0.0"},
|
||
|
|
"versions": [
|
||
|
|
{"version": "1.0.0", "published": "` + old + `", "archive_url": "https://pub.dev/1.0.0.tar.gz"},
|
||
|
|
{"version": "2.0.0", "published": "` + recent + `", "archive_url": "https://pub.dev/2.0.0.tar.gz"}
|
||
|
|
]
|
||
|
|
}`
|
||
|
|
|
||
|
|
output, err := h.rewriteMetadata("flutter_bloc", []byte(input))
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("rewriteMetadata failed: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
var result map[string]any
|
||
|
|
if err := json.Unmarshal(output, &result); err != nil {
|
||
|
|
t.Fatalf("failed to parse output: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
versions := result["versions"].([]any)
|
||
|
|
if len(versions) != 1 {
|
||
|
|
t.Fatalf("expected 1 version after cooldown, got %d", len(versions))
|
||
|
|
}
|
||
|
|
|
||
|
|
v := versions[0].(map[string]any)
|
||
|
|
if v["version"] != "1.0.0" {
|
||
|
|
t.Errorf("expected version 1.0.0, got %v", v["version"])
|
||
|
|
}
|
||
|
|
|
||
|
|
// latest should be updated
|
||
|
|
latest := result["latest"].(map[string]any)
|
||
|
|
if latest["version"] != "1.0.0" {
|
||
|
|
t.Errorf("latest version = %v, want 1.0.0", latest["version"])
|
||
|
|
}
|
||
|
|
}
|