package main import ( "strings" "testing" ) // Who may write (the review of mesh-catalog#206): a proposal is revised only by its author, proven; a number // reserved by a proven caller is proposed only by that caller. A record with a version whose writer was never // proven is never reviewed (review_test.go). func TestARevisionIsTakenOnlyFromTheRecordsAuthor(t *testing.T) { w := imported(t, newMemStore()) n := proposed(t, w, "author@g14", false) p := valid(n) p.Sections[2].Text = "Merges land a little sooner." if _, err := w.k.Propose("other@novox", p); err == nil || !strings.Contains(err.Error(), "only its author") { t.Fatalf("a revision by someone else: %v", err) } if _, err := w.k.Propose(Unproven, p); err == nil || !strings.Contains(err.Error(), "only its author") { t.Fatalf("a revision by an unproven caller: %v", err) } if mustGet(t, w.k.Store, Key{KindDecision, n}).Versions != 2 { t.Fatal("a refused revision wrote a version") } if _, err := w.k.Propose("author@g14", p); err != nil { t.Fatalf("the author's revision: %v", err) } } func TestAReservedNumberIsProposedOnlyByWhoReservedIt(t *testing.T) { w := imported(t, newMemStore()) n := w.reserved(t, "author@g14") if _, err := w.k.Propose("other@novox", valid(n)); err == nil || !strings.Contains(err.Error(), "reserved by author@g14") { t.Fatalf("a proposal under another's number: %v", err) } if _, err := w.k.Propose("author@g14", valid(n)); err != nil { t.Fatal(err) } }