74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package app
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"runtime"
|
|
"testing"
|
|
)
|
|
|
|
func TestHandleVersion(t *testing.T) {
|
|
req := httptest.NewRequest("GET", "/version", nil)
|
|
rr := httptest.NewRecorder()
|
|
|
|
handleVersion(rr, req)
|
|
|
|
if rr.Code != http.StatusOK {
|
|
t.Errorf("Expected status 200, got %d", rr.Code)
|
|
}
|
|
|
|
contentType := rr.Header().Get("Content-Type")
|
|
if contentType != "application/json" {
|
|
t.Errorf("Expected Content-Type application/json, got %s", contentType)
|
|
}
|
|
|
|
var info VersionInfo
|
|
if err := json.Unmarshal(rr.Body.Bytes(), &info); err != nil {
|
|
t.Fatalf("Failed to decode response: %v", err)
|
|
}
|
|
|
|
// 验证版本字段
|
|
if info.Version == "" {
|
|
t.Error("Version should not be empty")
|
|
}
|
|
if info.Version != version {
|
|
t.Errorf("Version = %q, want %q", info.Version, version)
|
|
}
|
|
|
|
// 验证 Go 版本
|
|
if info.GoVersion != runtime.Version() {
|
|
t.Errorf("GoVersion = %q, want %q", info.GoVersion, runtime.Version())
|
|
}
|
|
|
|
// Commit 和 BuildTime 可能为默认值
|
|
if info.Commit == "" {
|
|
t.Error("Commit should not be empty (may be 'unknown' during development)")
|
|
}
|
|
if info.BuildTime == "" {
|
|
t.Error("BuildTime should not be empty (may be 'unknown' during development)")
|
|
}
|
|
}
|
|
|
|
func TestVersionEndpoint_Integration(t *testing.T) {
|
|
handler := NewAPIHandler("", ActionSet{})
|
|
|
|
req := httptest.NewRequest("GET", "/version", nil)
|
|
rr := httptest.NewRecorder()
|
|
|
|
handler.ServeHTTP(rr, req)
|
|
|
|
if rr.Code != http.StatusOK {
|
|
t.Errorf("Expected status 200, got %d", rr.Code)
|
|
}
|
|
|
|
var info VersionInfo
|
|
if err := json.Unmarshal(rr.Body.Bytes(), &info); err != nil {
|
|
t.Fatalf("Failed to decode response: %v", err)
|
|
}
|
|
|
|
if info.Version != version {
|
|
t.Errorf("Version = %q, want %q", info.Version, version)
|
|
}
|
|
}
|