This commit is contained in:
commit
0ef15167d5
28 changed files with 2789 additions and 0 deletions
115
testsite_test.go
Normal file
115
testsite_test.go
Normal file
|
@ -0,0 +1,115 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.nakama.town/fmartingr/dharma/pkg/testutil"
|
||||
)
|
||||
|
||||
// TestFullIntegration runs a full integration test of the tool against testsite
|
||||
// This test uses the actual binary to verify everything works end-to-end
|
||||
func TestFullIntegration(t *testing.T) {
|
||||
// Skip this test if running in CI environment or if it's a short test run
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping full integration test in short mode")
|
||||
}
|
||||
|
||||
// Build the binary
|
||||
buildCmd := exec.Command("go", "build", "-o", "dharma_test", "./cmd/dharma")
|
||||
if err := buildCmd.Run(); err != nil {
|
||||
t.Fatalf("Failed to build binary: %v", err)
|
||||
}
|
||||
defer os.Remove("dharma_test") // Clean up after test
|
||||
|
||||
// Build absolute path to dharma_test binary
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get working directory: %v", err)
|
||||
}
|
||||
dharmaPath := filepath.Join(wd, "dharma_test")
|
||||
|
||||
// Start the testsite server
|
||||
serverURL, cleanup, err := testutil.StartTestsiteServer()
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to start test server: %v", err)
|
||||
}
|
||||
defer cleanup()
|
||||
|
||||
// Test cases for different formats
|
||||
testCases := []struct {
|
||||
name string
|
||||
args []string
|
||||
expectCode int
|
||||
expectText string
|
||||
}{
|
||||
{
|
||||
name: "Basic scan",
|
||||
args: []string{serverURL},
|
||||
expectCode: 0,
|
||||
expectText: "not_found.html",
|
||||
},
|
||||
{
|
||||
name: "JSON output",
|
||||
args: []string{"--format", "json", serverURL},
|
||||
expectCode: 0,
|
||||
expectText: `"url"`,
|
||||
},
|
||||
{
|
||||
name: "CSV output",
|
||||
args: []string{"--format", "csv", serverURL},
|
||||
expectCode: 0,
|
||||
expectText: "Status,Type,URL",
|
||||
},
|
||||
{
|
||||
name: "Internal links only",
|
||||
args: []string{"--internal-only", serverURL},
|
||||
expectCode: 0,
|
||||
expectText: "not_found.html",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
// Run the binary
|
||||
cmd := exec.Command(dharmaPath, tc.args...)
|
||||
output, err := cmd.CombinedOutput()
|
||||
|
||||
// Check exit code
|
||||
var exitCode int
|
||||
if err != nil {
|
||||
if exitError, ok := err.(*exec.ExitError); ok {
|
||||
exitCode = exitError.ExitCode()
|
||||
} else {
|
||||
t.Fatalf("Failed to run binary: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
if exitCode != tc.expectCode {
|
||||
t.Errorf("Expected exit code %d, got %d", tc.expectCode, exitCode)
|
||||
}
|
||||
|
||||
// Check output contains expected text
|
||||
if tc.expectText != "" && !containsString(string(output), tc.expectText) {
|
||||
t.Errorf("Expected output to contain %q but didn't.\nOutput:\n%s", tc.expectText, output)
|
||||
}
|
||||
|
||||
// Verify we got some output
|
||||
if len(output) == 0 {
|
||||
t.Errorf("Expected output but got none")
|
||||
}
|
||||
|
||||
// Print summary of the results
|
||||
fmt.Printf("Test %s: Found %d bytes of output\n", tc.name, len(output))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// containsString checks if a string contains another string
|
||||
func containsString(haystack, needle string) bool {
|
||||
return strings.Contains(haystack, needle)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue