cli/pkg/cmd/project/shared/format/json_test.go
Ariel Deitcher 1fef870916 fix tests
2023-08-30 09:55:58 -07:00

365 lines
11 KiB
Go

package format
import (
"testing"
"github.com/cli/cli/v2/pkg/cmd/project/shared/queries"
"github.com/stretchr/testify/assert"
)
func TestJSONProject_User(t *testing.T) {
project := queries.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 := JSONProject(project)
assert.NoError(t, err)
assert.Equal(t, `{"number":2,"url":"a url","shortDescription":"short description","public":true,"closed":false,"template":false,"title":"","id":"123","readme":"readme","items":{"totalCount":1},"fields":{"totalCount":2},"owner":{"type":"User","login":"monalisa"}}`, string(b))
}
func TestJSONProject_Org(t *testing.T) {
project := queries.Project{
ID: "123",
Number: 2,
URL: "a url",
ShortDescription: "short description",
Public: true,
Readme: "readme",
Template: true,
}
project.Items.TotalCount = 1
project.Fields.TotalCount = 2
project.Owner.TypeName = "Organization"
project.Owner.Organization.Login = "github"
b, err := JSONProject(project)
assert.NoError(t, err)
assert.Equal(t, `{"number":2,"url":"a url","shortDescription":"short description","public":true,"closed":false,"template":true,"title":"","id":"123","readme":"readme","items":{"totalCount":1},"fields":{"totalCount":2},"owner":{"type":"Organization","login":"github"}}`, string(b))
}
func TestJSONProjects(t *testing.T) {
userProject := queries.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 := queries.Project{
ID: "123",
Number: 2,
URL: "a url",
ShortDescription: "short description",
Public: true,
Readme: "readme",
Template: true,
}
orgProject.Items.TotalCount = 1
orgProject.Fields.TotalCount = 2
orgProject.Owner.TypeName = "Organization"
orgProject.Owner.Organization.Login = "github"
b, err := JSONProjects([]queries.Project{userProject, orgProject}, 2)
assert.NoError(t, err)
assert.Equal(
t,
`{"projects":[{"number":2,"url":"a url","shortDescription":"short description","public":true,"closed":false,"template":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,"template":true,"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 := queries.ProjectField{}
field.TypeName = "ProjectV2Field"
field.Field.ID = "123"
field.Field.Name = "name"
b, err := JSONProjectField(field)
assert.NoError(t, err)
assert.Equal(t, `{"id":"123","name":"name","type":"ProjectV2Field"}`, string(b))
}
func TestJSONProjectField_SingleSelectType(t *testing.T) {
field := queries.ProjectField{}
field.TypeName = "ProjectV2SingleSelectField"
field.SingleSelectField.ID = "123"
field.SingleSelectField.Name = "name"
field.SingleSelectField.Options = []queries.SingleSelectFieldOptions{
{
ID: "123",
Name: "name",
},
{
ID: "456",
Name: "name2",
},
}
b, err := JSONProjectField(field)
assert.NoError(t, err)
assert.Equal(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 := queries.ProjectField{}
field.TypeName = "ProjectV2IterationField"
field.IterationField.ID = "123"
field.IterationField.Name = "name"
b, err := JSONProjectField(field)
assert.NoError(t, err)
assert.Equal(t, `{"id":"123","name":"name","type":"ProjectV2IterationField"}`, string(b))
}
func TestJSONProjectFields(t *testing.T) {
field := queries.ProjectField{}
field.TypeName = "ProjectV2Field"
field.Field.ID = "123"
field.Field.Name = "name"
field2 := queries.ProjectField{}
field2.TypeName = "ProjectV2SingleSelectField"
field2.SingleSelectField.ID = "123"
field2.SingleSelectField.Name = "name"
field2.SingleSelectField.Options = []queries.SingleSelectFieldOptions{
{
ID: "123",
Name: "name",
},
{
ID: "456",
Name: "name2",
},
}
p := &queries.Project{
Fields: struct {
TotalCount int
Nodes []queries.ProjectField
PageInfo queries.PageInfo
}{
Nodes: []queries.ProjectField{field, field2},
TotalCount: 5,
},
}
b, err := JSONProjectFields(p)
assert.NoError(t, err)
assert.Equal(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 := queries.ProjectItem{}
item.Content.TypeName = "DraftIssue"
item.Id = "123"
item.Content.DraftIssue.Title = "title"
item.Content.DraftIssue.Body = "a body"
b, err := JSONProjectItem(item)
assert.NoError(t, err)
assert.Equal(t, `{"id":"123","title":"title","body":"a body","type":"DraftIssue"}`, string(b))
}
func TestJSONProjectItem_Issue(t *testing.T) {
item := queries.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 := JSONProjectItem(item)
assert.NoError(t, err)
assert.Equal(t, `{"id":"123","title":"title","body":"a body","type":"Issue","url":"a-url"}`, string(b))
}
func TestJSONProjectItem_PullRequest(t *testing.T) {
item := queries.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 := JSONProjectItem(item)
assert.NoError(t, err)
assert.Equal(t, `{"id":"123","title":"title","body":"a body","type":"PullRequest","url":"a-url"}`, string(b))
}
func TestJSONProjectDetailedItems(t *testing.T) {
p := &queries.Project{}
p.Items.TotalCount = 5
p.Items.Nodes = []queries.ProjectItem{
{
Id: "issueId",
Content: queries.ProjectItemContent{
TypeName: "Issue",
Issue: queries.Issue{
Title: "Issue title",
Body: "a body",
Number: 1,
URL: "issue-url",
Repository: struct {
NameWithOwner string
}{
NameWithOwner: "cli/go-gh",
},
},
},
},
{
Id: "pullRequestId",
Content: queries.ProjectItemContent{
TypeName: "PullRequest",
PullRequest: queries.PullRequest{
Title: "Pull Request title",
Body: "a body",
Number: 2,
URL: "pr-url",
Repository: struct {
NameWithOwner string
}{
NameWithOwner: "cli/go-gh",
},
},
},
},
{
Id: "draftIssueId",
Content: queries.ProjectItemContent{
TypeName: "DraftIssue",
DraftIssue: queries.DraftIssue{
Title: "Pull Request title",
Body: "a body",
},
},
},
}
out, err := JSONProjectDetailedItems(p)
assert.NoError(t, err)
assert.Equal(
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"}],"totalCount":5}`,
string(out))
}
func TestJSONProjectDraftIssue(t *testing.T) {
item := queries.DraftIssue{}
item.ID = "123"
item.Title = "title"
item.Body = "a body"
b, err := JSONProjectDraftIssue(item)
assert.NoError(t, err)
assert.Equal(t, `{"id":"123","title":"title","body":"a body","type":"DraftIssue"}`, string(b))
}
func TestJSONProjectItem_DraftIssue_ProjectV2ItemFieldIterationValue(t *testing.T) {
iterationField := queries.ProjectField{TypeName: "ProjectV2IterationField"}
iterationField.IterationField.ID = "sprint"
iterationField.IterationField.Name = "Sprint"
iterationFieldValue := queries.FieldValueNodes{Type: "ProjectV2ItemFieldIterationValue"}
iterationFieldValue.ProjectV2ItemFieldIterationValue.Title = "Iteration Title"
iterationFieldValue.ProjectV2ItemFieldIterationValue.Field = iterationField
draftIssue := queries.ProjectItem{
Id: "draftIssueId",
Content: queries.ProjectItemContent{
TypeName: "DraftIssue",
DraftIssue: queries.DraftIssue{
Title: "Pull Request title",
Body: "a body",
},
},
}
draftIssue.FieldValues.Nodes = []queries.FieldValueNodes{
iterationFieldValue,
}
p := &queries.Project{}
p.Fields.Nodes = []queries.ProjectField{iterationField}
p.Items.TotalCount = 5
p.Items.Nodes = []queries.ProjectItem{
draftIssue,
}
out, err := JSONProjectDetailedItems(p)
assert.NoError(t, err)
assert.JSONEq(
t,
`{"items":[{"sprint":{"title":"Iteration Title","startDate":"","duration":0},"content":{"type":"DraftIssue","body":"a body","title":"Pull Request title"},"id":"draftIssueId"}],"totalCount":5}`,
string(out))
}
func TestJSONProjectItem_DraftIssue_ProjectV2ItemFieldMilestoneValue(t *testing.T) {
milestoneField := queries.ProjectField{TypeName: "ProjectV2IterationField"}
milestoneField.IterationField.ID = "milestone"
milestoneField.IterationField.Name = "Milestone"
milestoneFieldValue := queries.FieldValueNodes{Type: "ProjectV2ItemFieldMilestoneValue"}
milestoneFieldValue.ProjectV2ItemFieldMilestoneValue.Milestone.Title = "Milestone Title"
milestoneFieldValue.ProjectV2ItemFieldMilestoneValue.Field = milestoneField
draftIssue := queries.ProjectItem{
Id: "draftIssueId",
Content: queries.ProjectItemContent{
TypeName: "DraftIssue",
DraftIssue: queries.DraftIssue{
Title: "Pull Request title",
Body: "a body",
},
},
}
draftIssue.FieldValues.Nodes = []queries.FieldValueNodes{
milestoneFieldValue,
}
p := &queries.Project{}
p.Fields.Nodes = []queries.ProjectField{milestoneField}
p.Items.TotalCount = 5
p.Items.Nodes = []queries.ProjectItem{
draftIssue,
}
out, err := JSONProjectDetailedItems(p)
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"}],"totalCount":5}`,
string(out))
}
func TestCamelCase(t *testing.T) {
assert.Equal(t, "camelCase", CamelCase("camelCase"))
assert.Equal(t, "camelCase", CamelCase("CamelCase"))
assert.Equal(t, "c", CamelCase("C"))
assert.Equal(t, "", CamelCase(""))
}