mesh/merge-gate pass: builds new: modules/mesh-knowledge, sent nowhere; no bus step; every machine composes with the change as it did without (4 of 4 compo…
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
mesh/delivery superseded: a newer head of the same pull request
A revision came from anyone and a review was refused only to the first author, so a co-writer could approve, and a record proposed before callers are proven would later be reviewable by its own unproven author. Now a revision is taken only from the proven author, a reserved number only from whoever reserved it, and a review is refused from any writer of any version or for any record with an unproven writer. The rules held records from no date, so a correction to an older record was refused by rules hq never held it to; each dated rule now holds from hq's own start date, and a new record cannot be dated before its reservation. history and the question to ask are bounded like the other answers.
83 lines
3.3 KiB
Go
83 lines
3.3 KiB
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// Who may write and review (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 review is refused from anyone who wrote
|
|
// any version of the record, and for a record whose author was never proven.
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
// A writer of any version, not only the first, does not review it.
|
|
func TestAReviewByAnyoneWhoWroteAVersionIsRefused(t *testing.T) {
|
|
w := imported(t, newMemStore())
|
|
n := w.reserved(t, "author@g14")
|
|
if _, err := w.k.Propose("author@g14", valid(n)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// An insight to an accepted record: its writers are the record's and the insight's.
|
|
if _, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
p := valid(n)
|
|
p.Sections[2].Text = "Merges land sooner, by a minute."
|
|
p.Insight = "it said only that merges land sooner"
|
|
if _, err := w.k.Propose("corrector@ace", p); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, writer := range []string{"author@g14", "corrector@ace"} {
|
|
if _, err := w.k.Review(writer, ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}); err == nil ||
|
|
!strings.Contains(err.Error(), "wrote") {
|
|
t.Fatalf("a review by %s, who wrote a version: %v", writer, err)
|
|
}
|
|
}
|
|
if _, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
// A record proposed while callers were unproven is never reviewable, even once callers are proven: its real
|
|
// author cannot be told from its reviewer. It is proposed again.
|
|
func TestARecordProposedUnprovenIsNeverReviewed(t *testing.T) {
|
|
w := imported(t, newMemStore())
|
|
n := proposed(t, w, Unproven, false)
|
|
_, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove})
|
|
if err == nil || !strings.Contains(err.Error(), "propose it again") {
|
|
t.Fatalf("a review of a record whose author is unproven: %v", err)
|
|
}
|
|
if mustGet(t, w.k.Store, Key{KindDecision, n}).Current.Status != StatusProposed {
|
|
t.Fatal("accepted")
|
|
}
|
|
}
|