internal/source/file_test.go

package source

import (
	"context"
	"os"
	"path/filepath"
	"strings"
	"testing"
)

const sampleHAR = `{
  "log": {
    "entries": [
      {
        "startedDateTime": "2024-05-30T12:00:00Z",
        "request": {
          "method": "GET",
          "url": "https://example.com/",
          "httpVersion": "HTTP/1.1",
          "headers": [{"name": "Host", "value": "example.com"}]
        },
        "response": {"status": 200, "statusText": "OK",
                     "httpVersion": "HTTP/1.1", "headers": [],
                     "content": {"text": ""}}
      }
    ]
  }
}`

func TestOpenFileHAR(t *testing.T) {
	dir := t.TempDir()
	path := filepath.Join(dir, "sample.har")
	if err := os.WriteFile(path, []byte(sampleHAR), 0o644); err != nil {
		t.Fatal(err)
	}
	f, err := OpenFile(path)
	if err != nil {
		t.Fatal(err)
	}
	defer f.Close()
	ev, err := f.Next(context.Background())
	if err != nil {
		t.Fatal(err)
	}
	if !strings.HasPrefix(string(ev.Payload), "GET https://example.com/ HTTP/1.1") {
		t.Errorf("unexpected payload: %q", ev.Payload)
	}
}

func TestOpenFileUnsupported(t *testing.T) {
	dir := t.TempDir()
	path := filepath.Join(dir, "data.xyz")
	if err := os.WriteFile(path, []byte("{}"), 0o644); err != nil {
		t.Fatal(err)
	}
	if _, err := OpenFile(path); err == nil {
		t.Fatal("expected error for .xyz")
	}
}

func TestFileCloseNil(t *testing.T) {
	f := &File{}
	if err := f.Close(); err != nil {
		t.Fatalf("close: %v", err)
	}
}