83 lines
2.7 KiB
Go
83 lines
2.7 KiB
Go
package github
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestPRFieldsBlockRequestsMergeQueueEntry(t *testing.T) {
|
|
block := prFieldsBlock()
|
|
if !strings.Contains(block, "mergeQueueEntry { id state position estimatedTimeToMerge headCommit { oid } }") {
|
|
t.Fatalf("prFieldsBlock() = %s, want merge queue fields", block)
|
|
}
|
|
}
|
|
|
|
func TestConvertBatchedPRResultPreservesMergeQueueObservation(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
entry string
|
|
wantState string
|
|
wantPosition *int
|
|
wantEstimate *int
|
|
wantObserved bool
|
|
}{
|
|
{
|
|
name: "queued with metadata",
|
|
entry: `{"id":"entry-a","state":"QUEUED","position":3,"estimatedTimeToMerge":125,"headCommit":{"oid":"head-a"}}`,
|
|
wantState: "queued",
|
|
wantPosition: intPtr(3),
|
|
wantEstimate: intPtr(125),
|
|
wantObserved: true,
|
|
},
|
|
{
|
|
name: "active entry without estimate",
|
|
entry: `{"state":"MERGEABLE","position":1,"estimatedTimeToMerge":null}`,
|
|
wantState: "mergeable",
|
|
wantPosition: intPtr(1),
|
|
wantObserved: true,
|
|
},
|
|
{
|
|
name: "queue exit",
|
|
entry: `null`,
|
|
wantObserved: true,
|
|
},
|
|
{
|
|
name: "unknown future state",
|
|
entry: `{"state":"PAUSED","position":7,"estimatedTimeToMerge":60}`,
|
|
wantState: "paused",
|
|
wantPosition: intPtr(7),
|
|
wantEstimate: intPtr(60),
|
|
wantObserved: true,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
raw := &batchedPRResult{}
|
|
payload := []byte(`{"state":"OPEN","mergeQueueEntry":` + test.entry + `}`)
|
|
if err := json.Unmarshal(payload, raw); err != nil {
|
|
t.Fatalf("decode GraphQL payload: %v", err)
|
|
}
|
|
status := convertBatchedPRResult(raw, "owner", "repo", 42)
|
|
if status.MergeQueueState != test.wantState {
|
|
t.Errorf("MergeQueueState = %q, want %q", status.MergeQueueState, test.wantState)
|
|
}
|
|
if !intPtrEqual(status.MergeQueuePosition, test.wantPosition) {
|
|
t.Errorf("MergeQueuePosition = %v, want %v", status.MergeQueuePosition, test.wantPosition)
|
|
}
|
|
if !intPtrEqual(status.MergeQueueEstimatedTimeToMergeSeconds, test.wantEstimate) {
|
|
t.Errorf("MergeQueueEstimatedTimeToMergeSeconds = %v, want %v", status.MergeQueueEstimatedTimeToMergeSeconds, test.wantEstimate)
|
|
}
|
|
if test.name == "queued with metadata" {
|
|
if status.MergeQueueEntryID != "entry-a" || status.MergeQueueEntryHeadSHA != "head-a" {
|
|
t.Errorf("merge queue entry = %q/%q, want entry-a/head-a", status.MergeQueueEntryID, status.MergeQueueEntryHeadSHA)
|
|
}
|
|
}
|
|
if status.mergeQueuePopulated != test.wantObserved {
|
|
t.Errorf("mergeQueuePopulated = %v, want %v", status.mergeQueuePopulated, test.wantObserved)
|
|
}
|
|
})
|
|
}
|
|
}
|