Updating tests to ensure `ProjectV2ItemFieldIterationValue` actually populates `IterationId` appropriately.
367 lines
11 KiB
Go
367 lines
11 KiB
Go
package queries
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// Regression test from before ExportData was implemented.
|
|
func TestJSONProject_User(t *testing.T) {
|
|
project := Project{
|
|
ID: "123",
|
|
Number: 2,
|
|
URL: "a url",
|
|
ShortDescription: "short description",
|
|
Public: true,
|
|
Readme: "readme",
|
|
}
|
|
|
|
project.Items.TotalCount = 1
|
|
project.Fields.TotalCount = 2
|
|
project.Owner.TypeName = "User"
|
|
project.Owner.User.Login = "monalisa"
|
|
b, err := json.Marshal(project.ExportData(nil))
|
|
assert.NoError(t, err)
|
|
|
|
assert.JSONEq(t, `{"number":2,"url":"a url","shortDescription":"short description","public":true,"closed":false,"title":"","id":"123","readme":"readme","items":{"totalCount":1},"fields":{"totalCount":2},"owner":{"type":"User","login":"monalisa"}}`, string(b))
|
|
}
|
|
|
|
// Regression test from before ExportData was implemented.
|
|
func TestJSONProject_Org(t *testing.T) {
|
|
project := Project{
|
|
ID: "123",
|
|
Number: 2,
|
|
URL: "a url",
|
|
ShortDescription: "short description",
|
|
Public: true,
|
|
Readme: "readme",
|
|
}
|
|
|
|
project.Items.TotalCount = 1
|
|
project.Fields.TotalCount = 2
|
|
project.Owner.TypeName = "Organization"
|
|
project.Owner.Organization.Login = "github"
|
|
b, err := json.Marshal(project.ExportData(nil))
|
|
assert.NoError(t, err)
|
|
|
|
assert.JSONEq(t, `{"number":2,"url":"a url","shortDescription":"short description","public":true,"closed":false,"title":"","id":"123","readme":"readme","items":{"totalCount":1},"fields":{"totalCount":2},"owner":{"type":"Organization","login":"github"}}`, string(b))
|
|
}
|
|
|
|
// Regression test from before ExportData was implemented.
|
|
func TestJSONProjects(t *testing.T) {
|
|
userProject := Project{
|
|
ID: "123",
|
|
Number: 2,
|
|
URL: "a url",
|
|
ShortDescription: "short description",
|
|
Public: true,
|
|
Readme: "readme",
|
|
}
|
|
|
|
userProject.Items.TotalCount = 1
|
|
userProject.Fields.TotalCount = 2
|
|
userProject.Owner.TypeName = "User"
|
|
userProject.Owner.User.Login = "monalisa"
|
|
|
|
orgProject := Project{
|
|
ID: "123",
|
|
Number: 2,
|
|
URL: "a url",
|
|
ShortDescription: "short description",
|
|
Public: true,
|
|
Readme: "readme",
|
|
}
|
|
|
|
orgProject.Items.TotalCount = 1
|
|
orgProject.Fields.TotalCount = 2
|
|
orgProject.Owner.TypeName = "Organization"
|
|
orgProject.Owner.Organization.Login = "github"
|
|
|
|
projects := Projects{
|
|
Nodes: []Project{userProject, orgProject},
|
|
TotalCount: 2,
|
|
}
|
|
b, err := json.Marshal(projects.ExportData(nil))
|
|
assert.NoError(t, err)
|
|
|
|
assert.JSONEq(
|
|
t,
|
|
`{"projects":[{"number":2,"url":"a url","shortDescription":"short description","public":true,"closed":false,"title":"","id":"123","readme":"readme","items":{"totalCount":1},"fields":{"totalCount":2},"owner":{"type":"User","login":"monalisa"}},{"number":2,"url":"a url","shortDescription":"short description","public":true,"closed":false,"title":"","id":"123","readme":"readme","items":{"totalCount":1},"fields":{"totalCount":2},"owner":{"type":"Organization","login":"github"}}],"totalCount":2}`,
|
|
string(b))
|
|
}
|
|
|
|
func TestJSONProjectField_FieldType(t *testing.T) {
|
|
field := ProjectField{}
|
|
field.TypeName = "ProjectV2Field"
|
|
field.Field.ID = "123"
|
|
field.Field.Name = "name"
|
|
|
|
b, err := json.Marshal(field.ExportData(nil))
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, `{"id":"123","name":"name","type":"ProjectV2Field"}`, string(b))
|
|
}
|
|
|
|
func TestJSONProjectField_SingleSelectType(t *testing.T) {
|
|
field := ProjectField{}
|
|
field.TypeName = "ProjectV2SingleSelectField"
|
|
field.SingleSelectField.ID = "123"
|
|
field.SingleSelectField.Name = "name"
|
|
field.SingleSelectField.Options = []SingleSelectFieldOptions{
|
|
{
|
|
ID: "123",
|
|
Name: "name",
|
|
},
|
|
{
|
|
ID: "456",
|
|
Name: "name2",
|
|
},
|
|
}
|
|
|
|
b, err := json.Marshal(field.ExportData(nil))
|
|
assert.NoError(t, err)
|
|
|
|
assert.JSONEq(t, `{"id":"123","name":"name","type":"ProjectV2SingleSelectField","options":[{"id":"123","name":"name"},{"id":"456","name":"name2"}]}`, string(b))
|
|
}
|
|
|
|
func TestJSONProjectField_ProjectV2IterationField(t *testing.T) {
|
|
field := ProjectField{}
|
|
field.TypeName = "ProjectV2IterationField"
|
|
field.IterationField.ID = "123"
|
|
field.IterationField.Name = "name"
|
|
|
|
b, err := json.Marshal(field.ExportData(nil))
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, `{"id":"123","name":"name","type":"ProjectV2IterationField"}`, string(b))
|
|
}
|
|
|
|
func TestJSONProjectFields(t *testing.T) {
|
|
field := ProjectField{}
|
|
field.TypeName = "ProjectV2Field"
|
|
field.Field.ID = "123"
|
|
field.Field.Name = "name"
|
|
|
|
field2 := ProjectField{}
|
|
field2.TypeName = "ProjectV2SingleSelectField"
|
|
field2.SingleSelectField.ID = "123"
|
|
field2.SingleSelectField.Name = "name"
|
|
field2.SingleSelectField.Options = []SingleSelectFieldOptions{
|
|
{
|
|
ID: "123",
|
|
Name: "name",
|
|
},
|
|
{
|
|
ID: "456",
|
|
Name: "name2",
|
|
},
|
|
}
|
|
|
|
p := &Project{
|
|
Fields: struct {
|
|
TotalCount int
|
|
Nodes []ProjectField
|
|
PageInfo PageInfo
|
|
}{
|
|
Nodes: []ProjectField{field, field2},
|
|
TotalCount: 5,
|
|
},
|
|
}
|
|
b, err := json.Marshal(p.Fields.ExportData(nil))
|
|
assert.NoError(t, err)
|
|
|
|
assert.JSONEq(t, `{"fields":[{"id":"123","name":"name","type":"ProjectV2Field"},{"id":"123","name":"name","type":"ProjectV2SingleSelectField","options":[{"id":"123","name":"name"},{"id":"456","name":"name2"}]}],"totalCount":5}`, string(b))
|
|
}
|
|
|
|
func TestJSONProjectItem_DraftIssue(t *testing.T) {
|
|
item := ProjectItem{}
|
|
item.Content.TypeName = "DraftIssue"
|
|
item.Id = "123"
|
|
item.Content.DraftIssue.Title = "title"
|
|
item.Content.DraftIssue.Body = "a body"
|
|
|
|
b, err := json.Marshal(item.ExportData(nil))
|
|
assert.NoError(t, err)
|
|
|
|
assert.JSONEq(t, `{"id":"123","title":"title","body":"a body","type":"DraftIssue"}`, string(b))
|
|
}
|
|
|
|
func TestJSONProjectItem_Issue(t *testing.T) {
|
|
item := ProjectItem{}
|
|
item.Content.TypeName = "Issue"
|
|
item.Id = "123"
|
|
item.Content.Issue.Title = "title"
|
|
item.Content.Issue.Body = "a body"
|
|
item.Content.Issue.URL = "a-url"
|
|
|
|
b, err := json.Marshal(item.ExportData(nil))
|
|
assert.NoError(t, err)
|
|
|
|
assert.JSONEq(t, `{"id":"123","title":"title","body":"a body","type":"Issue","url":"a-url"}`, string(b))
|
|
}
|
|
|
|
func TestJSONProjectItem_PullRequest(t *testing.T) {
|
|
item := ProjectItem{}
|
|
item.Content.TypeName = "PullRequest"
|
|
item.Id = "123"
|
|
item.Content.PullRequest.Title = "title"
|
|
item.Content.PullRequest.Body = "a body"
|
|
item.Content.PullRequest.URL = "a-url"
|
|
|
|
b, err := json.Marshal(item.ExportData(nil))
|
|
assert.NoError(t, err)
|
|
|
|
assert.JSONEq(t, `{"id":"123","title":"title","body":"a body","type":"PullRequest","url":"a-url"}`, string(b))
|
|
}
|
|
|
|
func TestJSONProjectDetailedItems(t *testing.T) {
|
|
p := &Project{}
|
|
p.Items.TotalCount = 5
|
|
p.Items.Nodes = []ProjectItem{
|
|
{
|
|
Id: "issueId",
|
|
Content: ProjectItemContent{
|
|
TypeName: "Issue",
|
|
Issue: Issue{
|
|
Title: "Issue title",
|
|
Body: "a body",
|
|
Number: 1,
|
|
URL: "issue-url",
|
|
Repository: struct {
|
|
NameWithOwner string
|
|
}{
|
|
NameWithOwner: "cli/go-gh",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Id: "pullRequestId",
|
|
Content: ProjectItemContent{
|
|
TypeName: "PullRequest",
|
|
PullRequest: PullRequest{
|
|
Title: "Pull Request title",
|
|
Body: "a body",
|
|
Number: 2,
|
|
URL: "pr-url",
|
|
Repository: struct {
|
|
NameWithOwner string
|
|
}{
|
|
NameWithOwner: "cli/go-gh",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Id: "draftIssueId",
|
|
Content: ProjectItemContent{
|
|
TypeName: "DraftIssue",
|
|
DraftIssue: DraftIssue{
|
|
ID: "draftIssueId",
|
|
Title: "Pull Request title",
|
|
Body: "a body",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
out, err := json.Marshal(p.DetailedItems())
|
|
assert.NoError(t, err)
|
|
assert.JSONEq(
|
|
t,
|
|
`{"items":[{"content":{"type":"Issue","body":"a body","title":"Issue title","number":1,"repository":"cli/go-gh","url":"issue-url"},"id":"issueId"},{"content":{"type":"PullRequest","body":"a body","title":"Pull Request title","number":2,"repository":"cli/go-gh","url":"pr-url"},"id":"pullRequestId"},{"content":{"type":"DraftIssue","body":"a body","title":"Pull Request title","id":"draftIssueId"},"id":"draftIssueId"}],"totalCount":5}`,
|
|
string(out))
|
|
}
|
|
|
|
func TestJSONProjectDraftIssue(t *testing.T) {
|
|
item := DraftIssue{}
|
|
item.ID = "123"
|
|
item.Title = "title"
|
|
item.Body = "a body"
|
|
|
|
b, err := json.Marshal(item.ExportData(nil))
|
|
assert.NoError(t, err)
|
|
|
|
assert.JSONEq(t, `{"id":"123","title":"title","body":"a body","type":"DraftIssue"}`, string(b))
|
|
}
|
|
|
|
func TestJSONProjectItem_DraftIssue_ProjectV2ItemFieldIterationValue(t *testing.T) {
|
|
iterationField := ProjectField{TypeName: "ProjectV2IterationField"}
|
|
iterationField.IterationField.ID = "sprint"
|
|
iterationField.IterationField.Name = "Sprint"
|
|
|
|
iterationFieldValue := FieldValueNodes{Type: "ProjectV2ItemFieldIterationValue"}
|
|
iterationFieldValue.ProjectV2ItemFieldIterationValue.Title = "Iteration Title"
|
|
iterationFieldValue.ProjectV2ItemFieldIterationValue.Field = iterationField
|
|
iterationFieldValue.ProjectV2ItemFieldIterationValue.IterationId = "iterationId"
|
|
|
|
draftIssue := ProjectItem{
|
|
Id: "draftIssueId",
|
|
Content: ProjectItemContent{
|
|
TypeName: "DraftIssue",
|
|
DraftIssue: DraftIssue{
|
|
ID: "draftIssueId",
|
|
Title: "Pull Request title",
|
|
Body: "a body",
|
|
},
|
|
},
|
|
}
|
|
draftIssue.FieldValues.Nodes = []FieldValueNodes{
|
|
iterationFieldValue,
|
|
}
|
|
p := &Project{}
|
|
p.Fields.Nodes = []ProjectField{iterationField}
|
|
p.Items.TotalCount = 5
|
|
p.Items.Nodes = []ProjectItem{
|
|
draftIssue,
|
|
}
|
|
|
|
out, err := json.Marshal(p.DetailedItems())
|
|
assert.NoError(t, err)
|
|
assert.JSONEq(
|
|
t,
|
|
`{"items":[{"sprint":{"title":"Iteration Title","startDate":"","duration":0,"iterationId":"iterationId"},"content":{"type":"DraftIssue","body":"a body","title":"Pull Request title","id":"draftIssueId"},"id":"draftIssueId"}],"totalCount":5}`,
|
|
string(out))
|
|
|
|
}
|
|
|
|
func TestJSONProjectItem_DraftIssue_ProjectV2ItemFieldMilestoneValue(t *testing.T) {
|
|
milestoneField := ProjectField{TypeName: "ProjectV2IterationField"}
|
|
milestoneField.IterationField.ID = "milestone"
|
|
milestoneField.IterationField.Name = "Milestone"
|
|
|
|
milestoneFieldValue := FieldValueNodes{Type: "ProjectV2ItemFieldMilestoneValue"}
|
|
milestoneFieldValue.ProjectV2ItemFieldMilestoneValue.Milestone.Title = "Milestone Title"
|
|
milestoneFieldValue.ProjectV2ItemFieldMilestoneValue.Field = milestoneField
|
|
|
|
draftIssue := ProjectItem{
|
|
Id: "draftIssueId",
|
|
Content: ProjectItemContent{
|
|
TypeName: "DraftIssue",
|
|
DraftIssue: DraftIssue{
|
|
ID: "draftIssueId",
|
|
Title: "Pull Request title",
|
|
Body: "a body",
|
|
},
|
|
},
|
|
}
|
|
draftIssue.FieldValues.Nodes = []FieldValueNodes{
|
|
milestoneFieldValue,
|
|
}
|
|
p := &Project{}
|
|
p.Fields.Nodes = []ProjectField{milestoneField}
|
|
p.Items.TotalCount = 5
|
|
p.Items.Nodes = []ProjectItem{
|
|
draftIssue,
|
|
}
|
|
|
|
out, err := json.Marshal(p.DetailedItems())
|
|
assert.NoError(t, err)
|
|
assert.JSONEq(
|
|
t,
|
|
`{"items":[{"milestone":{"title":"Milestone Title","dueOn":"","description":""},"content":{"type":"DraftIssue","body":"a body","title":"Pull Request title","id":"draftIssueId"},"id":"draftIssueId"}],"totalCount":5}`,
|
|
string(out))
|
|
|
|
}
|