Skip to content
quarry Artifact [3b1310cafb]
Login

Artifact [3b1310cafb]

Artifact 3b1310cafb4387ed642658aeb8579b54d31c9a04121c6ba24ae7bd4b95767ecd:


package events

import (
	"testing"

	"craftdesign.group/quarry/internal/evt"
)

func TestRecentIsNewestFirstAndPerRepo(t *testing.T) {
	s := testServer(t)
	for _, k := range []evt.Kind{evt.TicketOpened, evt.WikiEdited, evt.LandingOpened} {
		if err := s.Raise(k, "alpha", map[string]any{"actor": "dan", "summary": string(k)}); err != nil {
			t.Fatal(err)
		}
	}
	if err := s.Raise(evt.TicketClosed, "beta", map[string]any{"actor": "eve"}); err != nil {
		t.Fatal(err)
	}
	got, err := s.Recent("alpha", 10)
	if err != nil {
		t.Fatal(err)
	}
	if len(got) != 3 {
		t.Fatalf("got %d events for alpha, want 3 (%v)", len(got), got)
	}
	// Newest first.
	want := []evt.Kind{evt.LandingOpened, evt.WikiEdited, evt.TicketOpened}
	for i := range want {
		if got[i].Kind != want[i] {
			t.Fatalf("order = %v, want newest first %v", kindsOf(got), want)
		}
	}
	if got[0].Actor != "dan" || got[0].Repo != "alpha" {
		t.Errorf("actor/repo = %q/%q", got[0].Actor, got[0].Repo)
	}
	if got[0].At.IsZero() {
		t.Error("no timestamp; the log's whole job is when")
	}
	// Another repository's events must not appear in this one's log.
	for _, e := range got {
		if e.Repo != "alpha" {
			t.Errorf("beta's event leaked into alpha's log: %+v", e)
		}
	}
}

func TestRecentHonoursItsLimit(t *testing.T) {
	s := testServer(t)
	for i := 0; i < 8; i++ {
		if err := s.Raise(evt.CheckinCreated, "alpha", map[string]any{"summary": "c"}); err != nil {
			t.Fatal(err)
		}
	}
	got, err := s.Recent("alpha", 3)
	if err != nil {
		t.Fatal(err)
	}
	if len(got) != 3 {
		t.Fatalf("limit 3 returned %d", len(got))
	}
}

// A repository nothing has happened to has an empty log, not an error:
// "nothing yet" is an answer.
func TestRecentOnAQuietRepo(t *testing.T) {
	s := testServer(t)
	got, err := s.Recent("silent", 10)
	if err != nil {
		t.Fatalf("quiet repo errored: %v", err)
	}
	if len(got) != 0 {
		t.Errorf("got %v", got)
	}
}

func kindsOf(es []Logged) []evt.Kind {
	out := make([]evt.Kind, 0, len(es))
	for _, e := range es {
		out = append(out, e.Kind)
	}
	return out
}