commit - a49ed26aed68f00abaf9d48e1ba9c25fa5a311d1
commit + 15c79f9461ab2d4a71b192444f6d658c39664377
blob - b5fda3dfa1d1be4ae42a25f38af58a45577a7298
blob + 83c74ab0fcd60f6843b6cae323cd7be93756a179
--- jira/jira.go
+++ jira/jira.go
const timestamp = "2006-01-02T15:04:05.999-0700"
+// Issue represents a limited subset of a Jira issue's data.
+// For a complete example of all issue data,
+// see https://jira.atlassian.com/rest/api/2/issue/JRA-9.
type Issue struct {
ID string `json:"id,omitempty"` // TODO(otl): int?
URL string `json:"url,omitempty"`
Project Project `json:"project"`
Created time.Time `json:"created,omitzero"`
Updated time.Time `json:"updated,omitzero"`
- Due time.Time `json:"duedate,omitzero"`
+ Due time.Time `json:"duedate,omitzero"`
Type struct {
Name string `json:"name"`
} `json:"issuetype"`
iaux := &struct {
Created string `json:"created"`
Updated string `json:"updated"`
- Due string `json:"duedate"`
+ Due string `json:"duedate"`
Comment map[string]json.RawMessage
IssueLinks []struct {
InwardIssue *Issue
blob - 569d9044a8d842febb0dddae295bc66bd98a58ca
blob + 6df697e71e0111e9cf28d647d5a6a401391b7428
--- jira/jira_test.go
+++ jira/jira_test.go
"encoding/json"
"os"
"testing"
+ "time"
)
func TestDecode(t *testing.T) {
- dents, err := os.ReadDir("testdata/issue")
+ name := "testdata/issue/TEST-1"
+ f, err := os.Open(name)
if err != nil {
t.Fatal(err)
}
- for _, d := range dents {
- f, err := os.Open("testdata/issue/" + d.Name())
- if err != nil {
- t.Fatal(err)
- }
- var i Issue
- if err := json.NewDecoder(f).Decode(&i); err != nil {
- t.Errorf("decode %s: %v", f.Name(), err)
- }
- f.Close()
+ defer f.Close()
+
+ var issue Issue
+ if err := json.NewDecoder(f).Decode(&issue); err != nil {
+ t.Fatal(err)
}
+
+ want := Issue{
+ ID: "10148",
+ URL: "https://jira.atlassian.com/rest/api/latest/issue/10148",
+ Key: "TEST-1",
+ Created: time.Date(2002, time.Month(2), 8, 5, 8, 0, 0, time.UTC),
+ Updated: time.Date(2022, time.Month(5), 18, 18, 35, 49, 533*1e6, time.UTC),
+ }
+
+ if !issue.Created.Equal(want.Created) {
+ t.Errorf("Created: got %s want %s", issue.Created, want.Created)
+ }
+ if !issue.Updated.Equal(want.Updated) {
+ t.Errorf("Updated: got %s want %s", issue.Updated, want.Updated)
+ }
+
+ if len(issue.Links) == 0 {
+ t.Errorf("Links: no linked issues decoded")
+ }
}
/*