Skip to content
quarry Artifact [47e66e5a6d]
Login

Artifact [47e66e5a6d]

Artifact 47e66e5a6d08990ccba5669a74a8d9353434ddc9d9095952482610b9a4caf85c:


package oltp

import (
	"path/filepath"
	"testing"
)

func TestRecordMentionInsertAndIdempotentReinsert(t *testing.T) {
	db, err := Open(filepath.Join(t.TempDir(), "oltp.db"))
	if err != nil {
		t.Fatal(err)
	}
	defer db.Close()

	if err := db.RecordMention("alpha", "chat:12", "alice", "bob"); err != nil {
		t.Fatal(err)
	}
	got, err := db.Mentions("alpha", "chat:12")
	if err != nil {
		t.Fatal(err)
	}
	if len(got) != 1 || got[0] != "alice" {
		t.Fatalf("Mentions = %v, want [alice]", got)
	}

	// A replay of the same (repo, ref, who) — the point of the
	// address-based idempotency key — must not produce a second row.
	if err := db.RecordMention("alpha", "chat:12", "alice", "bob"); err != nil {
		t.Fatal(err)
	}
	got, err = db.Mentions("alpha", "chat:12")
	if err != nil {
		t.Fatal(err)
	}
	if len(got) != 1 {
		t.Fatalf("replayed RecordMention duplicated the row: %v", got)
	}

	// A different handle at the same ref is a distinct row.
	if err := db.RecordMention("alpha", "chat:12", "carol", "bob"); err != nil {
		t.Fatal(err)
	}
	got, err = db.Mentions("alpha", "chat:12")
	if err != nil {
		t.Fatal(err)
	}
	if len(got) != 2 {
		t.Fatalf("Mentions after a second handle = %v, want 2 rows", got)
	}
}

func TestRecordMentionIgnoresEmptyFields(t *testing.T) {
	db, err := Open(filepath.Join(t.TempDir(), "oltp.db"))
	if err != nil {
		t.Fatal(err)
	}
	defer db.Close()
	if err := db.RecordMention("", "chat:1", "alice", "bob"); err != nil {
		t.Fatal(err)
	}
	if err := db.RecordMention("alpha", "", "alice", "bob"); err != nil {
		t.Fatal(err)
	}
	if err := db.RecordMention("alpha", "chat:1", "", "bob"); err != nil {
		t.Fatal(err)
	}
	got, err := db.Mentions("alpha", "chat:1")
	if err != nil {
		t.Fatal(err)
	}
	if len(got) != 0 {
		t.Fatalf("Mentions = %v, want none recorded", got)
	}
}