X Tutup
package api import ( "bytes" "encoding/json" "strings" "testing" "github.com/MakeNowJust/heredoc" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestIssue_ExportData(t *testing.T) { tests := []struct { name string fields []string inputJSON string outputJSON string }{ { name: "simple", fields: []string{"number", "title"}, inputJSON: heredoc.Doc(` { "title": "Bugs hugs", "number": 2345 } `), outputJSON: heredoc.Doc(` { "number": 2345, "title": "Bugs hugs" } `), }, { name: "milestone", fields: []string{"number", "milestone"}, inputJSON: heredoc.Doc(` { "number": 2345, "milestone": {"title": "The next big thing"} } `), outputJSON: heredoc.Doc(` { "milestone": { "number": 0, "title": "The next big thing", "description": "", "dueOn": null }, "number": 2345 } `), }, { name: "project cards", fields: []string{"projectCards"}, inputJSON: heredoc.Doc(` { "projectCards": { "nodes": [ { "project": { "name": "Rewrite" }, "column": { "name": "TO DO" } } ] } } `), outputJSON: heredoc.Doc(` { "projectCards": [ { "project": { "name": "Rewrite" }, "column": { "name": "TO DO" } } ] } `), }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { var issue Issue dec := json.NewDecoder(strings.NewReader(tt.inputJSON)) require.NoError(t, dec.Decode(&issue)) exported := issue.ExportData(tt.fields) buf := bytes.Buffer{} enc := json.NewEncoder(&buf) enc.SetIndent("", "\t") require.NoError(t, enc.Encode(exported)) assert.Equal(t, tt.outputJSON, buf.String()) }) } } func TestPullRequest_ExportData(t *testing.T) { tests := []struct { name string fields []string inputJSON string outputJSON string }{ { name: "simple", fields: []string{"number", "title"}, inputJSON: heredoc.Doc(` { "title": "Bugs hugs", "number": 2345 } `), outputJSON: heredoc.Doc(` { "number": 2345, "title": "Bugs hugs" } `), }, { name: "milestone", fields: []string{"number", "milestone"}, inputJSON: heredoc.Doc(` { "number": 2345, "milestone": {"title": "The next big thing"} } `), outputJSON: heredoc.Doc(` { "milestone": { "number": 0, "title": "The next big thing", "description": "", "dueOn": null }, "number": 2345 } `), }, { name: "status checks", fields: []string{"statusCheckRollup"}, inputJSON: heredoc.Doc(` { "statusCheckRollup": { "nodes": [ { "commit": { "statusCheckRollup": { "contexts": { "nodes": [ { "__typename": "CheckRun", "name": "mycheck", "status": "COMPLETED", "conclusion": "SUCCESS", "startedAt": "2020-08-31T15:44:24+02:00", "completedAt": "2020-08-31T15:45:24+02:00", "detailsUrl": "http://example.com/details" } ] } } } } ] } } `), outputJSON: heredoc.Doc(` { "statusCheckRollup": [ { "__typename": "CheckRun", "name": "mycheck", "status": "COMPLETED", "conclusion": "SUCCESS", "startedAt": "2020-08-31T15:44:24+02:00", "completedAt": "2020-08-31T15:45:24+02:00", "detailsUrl": "http://example.com/details" } ] } `), }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { var pr PullRequest dec := json.NewDecoder(strings.NewReader(tt.inputJSON)) require.NoError(t, dec.Decode(&pr)) exported := pr.ExportData(tt.fields) buf := bytes.Buffer{} enc := json.NewEncoder(&buf) enc.SetIndent("", "\t") require.NoError(t, enc.Encode(exported)) assert.Equal(t, tt.outputJSON, buf.String()) }) } }
X Tutup