This repository has been archived on 2025-08-04. You can view files and clone it, but cannot push or open issues or pull requests.
heroagent_go_old/pkg2_dont_use/heroagent/web/endpoint_test.go
2025-05-23 15:40:41 +04:00

133 lines
3.3 KiB
Go

package web
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
"testing"
"time"
)
// TestConfig holds configuration for the tests
type TestConfig struct {
BaseURL string
Timeout time.Duration
}
// NewTestConfig creates a new test configuration
func NewTestConfig() *TestConfig {
return &TestConfig{
BaseURL: "http://localhost:9021",
Timeout: 5 * time.Second,
}
}
// testEndpoint tests a single endpoint
func testEndpoint(t *testing.T, config *TestConfig, method, path string, expectedStatus int, formData map[string]string) {
t.Helper()
client := &http.Client{
Timeout: config.Timeout,
}
var req *http.Request
var err error
fullURL := config.BaseURL + path
if method == "GET" {
req, err = http.NewRequest(method, fullURL, nil)
} else if method == "POST" {
if formData != nil {
form := make(url.Values)
for key, value := range formData {
form.Add(key, value)
}
req, err = http.NewRequest(method, fullURL, strings.NewReader(form.Encode()))
if err == nil {
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
}
} else {
req, err = http.NewRequest(method, fullURL, nil)
}
}
if err != nil {
t.Fatalf("Failed to create request: %v", err)
}
resp, err := client.Do(req)
if err != nil {
t.Fatalf("Failed to make request: %v", err)
}
defer resp.Body.Close()
if resp.StatusCode != expectedStatus {
body, _ := io.ReadAll(resp.Body)
t.Errorf("Expected status %d for %s %s, got %d. Response: %s",
expectedStatus, method, path, resp.StatusCode, string(body))
} else {
t.Logf("✅ %s %s - Status: %d", method, path, resp.StatusCode)
}
}
// TestGetEndpoints tests all GET endpoints
func TestGetEndpoints(t *testing.T) {
config := NewTestConfig()
// All endpoints to test
getEndpoints := []string{
"/", // Root redirect to admin
"/admin", // Admin dashboard
"/admin/system/info", // System info page
"/admin/services", // Services page
"/admin/system/processes", // Processes page
"/admin/system/logs", // System logs page
"/admin/system/settings", // System settings page
}
// Test all endpoints
for _, endpoint := range getEndpoints {
t.Run(fmt.Sprintf("GET %s", endpoint), func(t *testing.T) {
testEndpoint(t, config, "GET", endpoint, http.StatusOK, nil)
})
}
}
// TestAPIEndpoints tests all API endpoints
func TestAPIEndpoints(t *testing.T) {
t.Skip("API endpoints need to be fixed")
config := NewTestConfig()
apiEndpoints := []string{
"/admin/api/hardware-stats", // Hardware stats API
"/admin/api/process-stats", // Process stats API
}
for _, endpoint := range apiEndpoints {
t.Run(fmt.Sprintf("GET %s", endpoint), func(t *testing.T) {
testEndpoint(t, config, "GET", endpoint, http.StatusOK, nil)
})
}
}
// TestFragmentEndpoints tests all fragment endpoints used for AJAX updates
func TestFragmentEndpoints(t *testing.T) {
config := NewTestConfig()
// All fragment endpoints to test
fragmentEndpoints := []string{
"/admin/system/hardware-stats", // Hardware stats fragment
"/admin/system/processes-data", // Processes data fragment
}
// Test all fragment endpoints
for _, endpoint := range fragmentEndpoints {
t.Run(fmt.Sprintf("GET %s", endpoint), func(t *testing.T) {
testEndpoint(t, config, "GET", endpoint, http.StatusOK, nil)
})
}
}