You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
5.5 KiB
188 lines
5.5 KiB
package mysqldriver
|
|
|
|
import (
|
|
"context"
|
|
"git.aiterp.net/stufflog/server/internal/xlerrors"
|
|
"git.aiterp.net/stufflog/server/models"
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
var issue1 = models.Issue{
|
|
ProjectID: "STUFF",
|
|
OwnerID: "Admin",
|
|
AssigneeID: "",
|
|
StatusStage: models.IssueStageActive,
|
|
StatusName: "IN PROGRESS",
|
|
DueTime: time.Now().UTC().Add(time.Hour * 72).Truncate(time.Hour * 24).Add(time.Hour * 16),
|
|
Name: "Do Stuff",
|
|
Title: "Do some important stuff.",
|
|
Description: "Stuff and things, items and artifacts, objects and creations.",
|
|
}
|
|
|
|
var issue2 = models.Issue{
|
|
ProjectID: "MODELING",
|
|
OwnerID: "Test",
|
|
AssigneeID: "Test",
|
|
StatusStage: models.IssueStagePostponed,
|
|
StatusName: "TOO HARD",
|
|
Name: "Hard Surface Course",
|
|
Title: "Run through the Hard Surface modeling course.",
|
|
Description: "maek robit",
|
|
}
|
|
|
|
var issue3 = models.Issue{
|
|
ProjectID: "MODELING",
|
|
OwnerID: "Test",
|
|
AssigneeID: "",
|
|
StatusStage: models.IssueStagePending,
|
|
StatusName: "TO DO",
|
|
Name: "Isometric Room Scene",
|
|
Title: "Create an isometric room-box scene.",
|
|
Description: "furniture and stuff.",
|
|
}
|
|
|
|
var issue3Updated = models.Issue{
|
|
ProjectID: "MODELING",
|
|
OwnerID: "Test",
|
|
AssigneeID: "Admin",
|
|
StatusStage: models.IssueStageActive,
|
|
StatusName: "WORK IN PROGRESS",
|
|
Name: "Room Scene",
|
|
Title: "Create a room-box scene.",
|
|
Description: "THREE DIMENSIONAL DESK CLUTTER",
|
|
}
|
|
|
|
var issue4 = models.Issue{
|
|
ProjectID: "DINNER",
|
|
OwnerID: "Test",
|
|
AssigneeID: "Test",
|
|
StatusStage: models.IssueStagePending,
|
|
StatusName: "SHOPPING LIST",
|
|
DueTime: mustParseTime("2020-04-22T17:30:00.000+02:00"),
|
|
Name: "Spaghetti Carbonara",
|
|
Title: "WEDNESDAY 2020-04-22: Spaghetti Carbonara",
|
|
Description: "See shopping list",
|
|
}
|
|
|
|
func TestIssueRepository(t *testing.T) {
|
|
issues := testDB.issues
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
|
defer cancel()
|
|
|
|
assert.NoError(t, clearTable("issue"))
|
|
|
|
// INSERT
|
|
result, err := issues.Insert(ctx, issue1)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "STUFF-1", result.ID)
|
|
if result != nil {
|
|
issue1.ID = result.ID
|
|
issue1.CreatedTime = result.CreatedTime.UTC()
|
|
issue1.UpdatedTime = result.UpdatedTime.UTC()
|
|
}
|
|
result, err = issues.Insert(ctx, issue2)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "MODELING-1", result.ID)
|
|
if result != nil {
|
|
issue2.ID = result.ID
|
|
issue2.CreatedTime = result.CreatedTime.UTC()
|
|
issue2.UpdatedTime = result.UpdatedTime.UTC()
|
|
}
|
|
result, err = issues.Insert(ctx, issue3)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "MODELING-2", result.ID)
|
|
if result != nil {
|
|
issue3.ID = result.ID
|
|
issue3.CreatedTime = result.CreatedTime.UTC()
|
|
issue3.UpdatedTime = result.UpdatedTime.UTC()
|
|
issue3Updated.ID = result.ID
|
|
issue3Updated.CreatedTime = result.CreatedTime.UTC()
|
|
issue3Updated.UpdatedTime = result.UpdatedTime.UTC()
|
|
}
|
|
result, err = issues.Insert(ctx, issue4)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "DINNER-1", result.ID)
|
|
if result != nil {
|
|
issue4.ID = result.ID
|
|
issue4.CreatedTime = result.CreatedTime.UTC()
|
|
issue4.UpdatedTime = result.UpdatedTime.UTC()
|
|
}
|
|
|
|
// FIND
|
|
result, err = issues.Find(ctx, issue1.ID)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, &issue1, result)
|
|
result, err = issues.Find(ctx, issue3.ID)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, &issue3, result)
|
|
|
|
// FIND't
|
|
result, err = issues.Find(ctx, "NONEXISTENT-666")
|
|
assert.Error(t, err)
|
|
assert.Nil(t, result)
|
|
assert.True(t, xlerrors.IsNotFound(err))
|
|
|
|
// LIST
|
|
results, err := issues.List(ctx, models.IssueFilter{})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.Issue{&issue4, &issue2, &issue3, &issue1}, results)
|
|
results, err = issues.List(ctx, models.IssueFilter{
|
|
ProjectIDs: []string{"DINNER", "MODELING"},
|
|
})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.Issue{&issue4, &issue2, &issue3}, results)
|
|
results, err = issues.List(ctx, models.IssueFilter{
|
|
IssueIDs: []string{"MODELING-2", "DINNER-1"},
|
|
})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.Issue{&issue4, &issue3}, results)
|
|
results, err = issues.List(ctx, models.IssueFilter{
|
|
OwnerIDs: []string{"Test"},
|
|
})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.Issue{&issue4, &issue2, &issue3}, results)
|
|
results, err = issues.List(ctx, models.IssueFilter{
|
|
AssigneeIDs: []string{"", "Admin"},
|
|
})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.Issue{&issue3, &issue1}, results)
|
|
results, err = issues.List(ctx, models.IssueFilter{
|
|
MinStage: ptrInt(models.IssueStageActive),
|
|
MaxStage: ptrInt(models.IssueStageReview),
|
|
})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.Issue{&issue1}, results)
|
|
results, err = issues.List(ctx, models.IssueFilter{
|
|
Limit: ptrInt(2),
|
|
})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.Issue{&issue4, &issue2}, results)
|
|
results, err = issues.List(ctx, models.IssueFilter{
|
|
OwnerIDs: []string{"Admin"},
|
|
AssigneeIDs: []string{""},
|
|
Search: ptrString("stuff"),
|
|
})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.Issue{&issue1}, results)
|
|
|
|
// SAVE
|
|
issue3Updated.UpdatedTime = time.Now().UTC().Truncate(time.Second)
|
|
err = issues.Save(ctx, issue3Updated)
|
|
assert.NoError(t, err)
|
|
|
|
// FIND after SAVE
|
|
result, err = issues.Find(ctx, issue3.ID)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, &issue3Updated, result)
|
|
|
|
// DELETE
|
|
err = issues.Delete(ctx, issue4)
|
|
assert.NoError(t, err)
|
|
|
|
// LIST after DELETE and SAVE
|
|
results, err = issues.List(ctx, models.IssueFilter{})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.Issue{&issue2, &issue3Updated, &issue1}, results)
|
|
}
|