~james/core

core/spindle/db/pull_tickets_test.go -rw-r--r-- 1.8 KiB
452f17b7 — james chore(import): snapshot james.dad.town/core at f70c71c7696a 16 hours ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package db

import (
	"errors"
	"testing"
	"time"

	"github.com/bluesky-social/indigo/atproto/syntax"
)

func TestAStaleTicketAdvanceIsRefusedAndLeavesNoEvent(t *testing.T) {
	d := newTestDB(t)
	repo := syntax.DID("did:plc:a")
	if err := d.AddPullTicket(repo, "t1", PullTicket{Author: "did:plc:bob", State: "open", Version: "v1"}); err != nil {
		t.Fatal(err)
	}
	ev := PullEvent{RepoDid: repo, Ticket: "t1", Event: "closed", Pull: []byte("{}")}

	if err := d.AdvancePullTicket(repo, "t1", "v1", "v2", "closed", &ev); err != nil {
		t.Fatal(err)
	}
	err := d.AdvancePullTicket(repo, "t1", "v1", "v3", "open", &ev)
	if !errors.Is(err, ErrPullRaced) {
		t.Fatalf("a second advance from v1 = %v, want ErrPullRaced", err)
	}

	got, err := d.GetPullTicket(repo, "t1")
	if err != nil || got.Version != "v2" || got.State != "closed" {
		t.Fatalf("ticket = %+v, %v, want the first advance kept", got, err)
	}
	due, err := d.DuePullEvents(repo, time.Now().Add(time.Hour), 100)
	if err != nil || len(due) != 1 {
		t.Fatalf("events = %d, %v, want only the first advance's", len(due), err)
	}
}

func TestAStaleStateSetIsRefusedAndLeavesNoEvent(t *testing.T) {
	d := newTestDB(t)
	repo := syntax.DID("did:plc:a")
	if err := d.AddPullTicket(repo, "t1", PullTicket{Author: "did:plc:bob", State: "open"}); err != nil {
		t.Fatal(err)
	}
	ev := PullEvent{RepoDid: repo, Ticket: "t1", Event: "closed", Pull: []byte("{}")}
	if err := d.SetPullTicketState(repo, "t1", "open", "closed", ev); err != nil {
		t.Fatal(err)
	}
	if err := d.SetPullTicketState(repo, "t1", "open", "completed", ev); !errors.Is(err, ErrPullRaced) {
		t.Fatalf("a second set from open = %v, want ErrPullRaced", err)
	}
	due, err := d.DuePullEvents(repo, time.Now().Add(time.Hour), 100)
	if err != nil || len(due) != 1 {
		t.Fatalf("events = %d, %v, want only the first set's", len(due), err)
	}
}