summaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/db/storage.go (renamed from pkg/db/client.go)19
-rw-r--r--pkg/gitlab/issue.go2
-rw-r--r--pkg/gitlab/issue_test.go102
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)
- })
- })
-}