package pipeline

import "testing"

func TestMergeSnippetFillsOnlyEmptyHalf(t *testing.T) {
	existing := `{"related_kw":["old kw"],"description":["old desc"]}`

	// New scrape found nothing related but new descriptions: keep old related.
	merged := mergeSnippet(existing, nil, []string{"new desc"})
	data := parseSnippet(merged)
	if len(data.RelatedKW) != 1 || data.RelatedKW[0] != "old kw" {
		t.Errorf("old related_kw must be kept, got %v", data.RelatedKW)
	}
	if len(data.Description) != 1 || data.Description[0] != "new desc" {
		t.Errorf("new description must win, got %v", data.Description)
	}

	// New scrape found related only: keep old descriptions.
	merged = mergeSnippet(existing, []string{"new kw"}, nil)
	data = parseSnippet(merged)
	if len(data.RelatedKW) != 1 || data.RelatedKW[0] != "new kw" {
		t.Errorf("new related must win, got %v", data.RelatedKW)
	}
	if len(data.Description) != 1 || data.Description[0] != "old desc" {
		t.Errorf("old description must be kept, got %v", data.Description)
	}

	// Both empty on a partial row: nothing is lost.
	merged = mergeSnippet(existing, nil, nil)
	data = parseSnippet(merged)
	if len(data.RelatedKW) != 1 || len(data.Description) != 1 {
		t.Errorf("existing data must survive empty re-scrape, got %+v", data)
	}
}

func TestMergeSnippetOnEmpty(t *testing.T) {
	merged := mergeSnippet("", []string{"k"}, []string{"d"})
	data := parseSnippet(merged)
	if len(data.RelatedKW) != 1 || len(data.Description) != 1 {
		t.Errorf("fresh data must be written, got %+v", data)
	}
}
