diff options
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/db/storage.go (renamed from pkg/db/client.go) | 19 | ||||
| -rw-r--r-- | pkg/gitlab/issue.go | 2 | ||||
| -rw-r--r-- | pkg/gitlab/issue_test.go | 102 |
3 files changed, 11 insertions, 112 deletions
diff --git a/pkg/db/client.go b/pkg/db/storage.go index 4f43403..1c1c428 100644 --- a/pkg/db/client.go +++ b/pkg/db/storage.go @@ -12,15 +12,15 @@ import ( "github.com/xlgmokha/x/pkg/x" ) -type Paramable interface { - ToParam() string +type Entity interface { + Identifier() string } -type Storage[T Paramable] struct { +type Storage[T Entity] struct { dir string } -func New[T Paramable](dir string) *Storage[T] { +func New[T Entity](dir string) *Storage[T] { fullPath := x.Must(filepath.Abs(dir)) x.Check(os.MkdirAll(fullPath, 0700)) @@ -35,9 +35,10 @@ func (db *Storage[T]) Save(item T) error { if env.Fetch("DUMP", "") != "" { fmt.Println(w.String()) } - return ioutil.WriteFile( - fmt.Sprintf("%v/%v.yaml", db.dir, item.ToParam()), - w.Bytes(), - 0700, - ) + + return ioutil.WriteFile(db.filePathFor(item), w.Bytes(), 0700) +} + +func (db *Storage[T]) filePathFor(item T) string { + return fmt.Sprintf("%v/%v.yaml", db.dir, item.Identifier()) } diff --git a/pkg/gitlab/issue.go b/pkg/gitlab/issue.go index 995f149..2d003d9 100644 --- a/pkg/gitlab/issue.go +++ b/pkg/gitlab/issue.go @@ -53,7 +53,7 @@ type Issue struct { TaskStatus string `json:"task_status" yaml:"task_status"` } -func (issue *Issue) ToParam() string { +func (issue *Issue) Identifier() string { return fmt.Sprintf("%v", issue.ID) } diff --git a/pkg/gitlab/issue_test.go b/pkg/gitlab/issue_test.go deleted file mode 100644 index 41034fb..0000000 --- a/pkg/gitlab/issue_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package gitlab - -import ( - "bufio" - "os" - "strings" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/xlgmokha/x/pkg/x" -) - -func TestIssue(t *testing.T) { - t.Run("FromIssues", func(t *testing.T) { - t.Run("parses the array of issues from IO", func(t *testing.T) { - body := strings.NewReader(`[{"ID":1,"title":"Issue Title"}]`) - - results, err := FromIssues(body) - - require.NoError(t, err) - require.Equal(t, 1, len(results)) - assert.Equal(t, 1, results[0].ID) - assert.Equal(t, "Issue Title", results[0].Title) - }) - }) - - t.Run("From", func(t *testing.T) { - t.Run("parses each field", func(t *testing.T) { - file, err := os.Open("../../test/data/issues.json") - require.NoError(t, err) - - reader := bufio.NewReader(file) - results, err := FromIssues(reader) - require.NoError(t, err) - - assert.Len(t, results, 20) - - result := results[0] - - assert.Equal(t, 146760799, result.ID) - assert.Equal(t, 6375, result.IID) - assert.Equal(t, 40549124, result.ProjectID) - assert.Contains(t, result.Title, "`gitlab-org/gitlab` broken `master` with rspec unit") - assert.Contains(t, result.Description, "## How to close this incident\n\n- Follow the steps in the") - assert.Equal(t, IssueClosed, result.State) - assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T17:39:14.548Z")), result.CreatedAt) - assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T18:14:37.830Z")), result.UpdatedAt) - assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T17:39:16.837Z")), result.ClosedAt) - - t.Run("closed_by", func(t *testing.T) { - user := result.ClosedBy - assert.Equal(t, 1786152, user.ID) - assert.Equal(t, "gitlab-bot", user.Username) - assert.Equal(t, UserActive, user.State) - assert.Equal(t, false, user.Locked) - assert.Equal(t, "https://gitlab.com/uploads/-/system/user/avatar/1786152/avatar.png", user.AvatarUrl) - assert.Equal(t, "https://gitlab.com/gitlab-bot", user.WebUrl) - }) - - assert.ElementsMatch(t, []string{ - "Engineering Productivity", - "master-broken::job-timeout", - "master:broken", - }, result.Labels) - - assert.Nil(t, result.Milestone) - assert.Empty(t, result.Assignees) - - assert.Equal(t, 1786152, result.Author.ID) - assert.Equal(t, IssueTypeIncident, result.Type) - assert.Nil(t, result.Assignee) - assert.Equal(t, 4, result.UserNotesCount) - assert.Equal(t, 0, result.MergeRequestsCount) - assert.Equal(t, 0, result.Upvotes) - assert.Equal(t, 0, result.Downvotes) - assert.Nil(t, result.DueDate) - assert.False(t, result.Confidential) - assert.Nil(t, result.DiscussionLocked) - assert.Equal(t, "https://gitlab.com/gitlab-org/quality/engineering-productivity/master-broken-incidents/-/issues/6375", result.WebUrl) - - // t.Run("time_stats", func(t *testing.T) { - // stats := result.TimeStatistics - // assert.Equal(t, 0, stats.TimeEstimate) - // assert.Equal(t, 0, stats.TotalTimeSpent) - // assert.Nil(t, stats.HumanTimeEstimate) - // assert.Nil(t, stats.HumanTimeSpent) - // }) - - // t.Run("task_completion_status", func(t *testing.T) { - // status := result.TaskCompletionStatus - // assert.Equal(t, 0, status.Count) - // assert.Equal(t, 0, status.CompletedCount) - // }) - - assert.Equal(t, 0, result.BlockingIssuesCount) - assert.True(t, result.HasTasks) - assert.Equal(t, "0 of 0 checklist items completed", result.TaskStatus) - }) - }) -} |
