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.
165 lines
4.9 KiB
165 lines
4.9 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 projectStatus1 = models.ProjectStatus{
|
|
ProjectID: project1.ID,
|
|
Stage: models.IssueStagePending,
|
|
Name: "Ready",
|
|
Description: "This task is ready to be done.",
|
|
}
|
|
var projectStatus2 = models.ProjectStatus{
|
|
ProjectID: project1.ID,
|
|
Stage: models.IssueStageInactive,
|
|
Name: "Idea",
|
|
Description: "Maybe do this?",
|
|
}
|
|
var projectStatus3 = models.ProjectStatus{
|
|
ProjectID: project2.ID,
|
|
Stage: models.IssueStageActive,
|
|
Name: "In Progress",
|
|
Description: "It is being done.",
|
|
}
|
|
var projectStatus4 = models.ProjectStatus{
|
|
ProjectID: project2.ID,
|
|
Stage: models.IssueStageReview,
|
|
Name: "Rendered",
|
|
Description: "It is rendered and awaiting feedback.",
|
|
}
|
|
var projectStatus5 = models.ProjectStatus{
|
|
ProjectID: project3.ID,
|
|
Stage: models.IssueStageCompleted,
|
|
Name: "Om Nom Nom",
|
|
Description: "Sustenance intake complete.",
|
|
}
|
|
var projectStatus6 = models.ProjectStatus{
|
|
ProjectID: project1.ID,
|
|
Stage: models.IssueStageFailed,
|
|
Name: "Bad Stuff",
|
|
Description: "Stuff could not be done.",
|
|
}
|
|
var projectStatus7 = models.ProjectStatus{
|
|
ProjectID: project2.ID,
|
|
Stage: models.IssueStagePostponed,
|
|
Name: "Too Hard",
|
|
Description: "Do it later.",
|
|
}
|
|
var projectStatus7Updated = models.ProjectStatus{
|
|
ProjectID: project2.ID,
|
|
Stage: models.IssueStageInactive,
|
|
Name: "Too Hard",
|
|
Description: "Do it later, when you're less of newbie.",
|
|
}
|
|
|
|
func TestProjectStatusRepository(t *testing.T) {
|
|
statuses := testDB.projectStatuses
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
|
defer cancel()
|
|
|
|
assert.NoError(t, clearTable("project_status"))
|
|
|
|
// INSERT
|
|
assert.NoError(t, statuses.Save(ctx, projectStatus1))
|
|
assert.NoError(t, statuses.Save(ctx, projectStatus2))
|
|
assert.NoError(t, statuses.Save(ctx, projectStatus3))
|
|
assert.NoError(t, statuses.Save(ctx, projectStatus4))
|
|
assert.NoError(t, statuses.Save(ctx, projectStatus5))
|
|
assert.NoError(t, statuses.Save(ctx, projectStatus6))
|
|
assert.NoError(t, statuses.Save(ctx, projectStatus7))
|
|
|
|
// FIND
|
|
result, err := statuses.Find(ctx, project2.ID, projectStatus3.Name)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, &projectStatus3, result)
|
|
result, err = statuses.Find(ctx, project1.ID, projectStatus6.Name)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, &projectStatus6, result)
|
|
|
|
// FINDn't
|
|
result, err = statuses.Find(ctx, project3.ID, projectStatus6.Name)
|
|
assert.Error(t, err)
|
|
assert.True(t, xlerrors.IsNotFound(err))
|
|
assert.Nil(t, result)
|
|
result, err = statuses.Find(ctx, project2.ID, "Non-existent Name")
|
|
assert.Error(t, err)
|
|
assert.True(t, xlerrors.IsNotFound(err))
|
|
assert.Nil(t, result)
|
|
|
|
// LIST
|
|
results, err := statuses.List(ctx, models.ProjectStatusFilter{})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.ProjectStatus{
|
|
&projectStatus5,
|
|
&projectStatus3,
|
|
&projectStatus4,
|
|
&projectStatus7,
|
|
&projectStatus2,
|
|
&projectStatus1,
|
|
&projectStatus6,
|
|
}, results)
|
|
results, err = statuses.List(ctx, models.ProjectStatusFilter{ProjectID: &project1.ID})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.ProjectStatus{
|
|
&projectStatus2,
|
|
&projectStatus1,
|
|
&projectStatus6,
|
|
}, results)
|
|
results, err = statuses.List(ctx, models.ProjectStatusFilter{ProjectID: &project2.ID, MinStage: ptrInt(models.IssueStageReview)})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.ProjectStatus{
|
|
&projectStatus4,
|
|
&projectStatus7,
|
|
}, results)
|
|
results, err = statuses.List(ctx, models.ProjectStatusFilter{ProjectID: &project2.ID, MaxStage: ptrInt(models.IssueStageReview)})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.ProjectStatus{
|
|
&projectStatus3,
|
|
&projectStatus4,
|
|
}, results)
|
|
results, err = statuses.List(ctx, models.ProjectStatusFilter{ProjectID: &project3.ID, MaxStage: ptrInt(models.IssueStagePending)})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.ProjectStatus{}, results)
|
|
|
|
// UPDATE
|
|
assert.NoError(t, statuses.Save(ctx, projectStatus7Updated))
|
|
|
|
// FIND after UPDATE
|
|
result, err = statuses.Find(ctx, project2.ID, projectStatus7.Name)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, &projectStatus7Updated, result)
|
|
|
|
// LIST after UPDATE
|
|
results, err = statuses.List(ctx, models.ProjectStatusFilter{})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.ProjectStatus{
|
|
&projectStatus5,
|
|
&projectStatus7Updated,
|
|
&projectStatus3,
|
|
&projectStatus4,
|
|
&projectStatus2,
|
|
&projectStatus1,
|
|
&projectStatus6,
|
|
}, results)
|
|
|
|
// DELETE
|
|
assert.NoError(t, statuses.Delete(ctx, projectStatus7Updated))
|
|
|
|
// LIST after DELETE
|
|
results, err = statuses.List(ctx, models.ProjectStatusFilter{})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []*models.ProjectStatus{
|
|
&projectStatus5,
|
|
&projectStatus3,
|
|
&projectStatus4,
|
|
&projectStatus2,
|
|
&projectStatus1,
|
|
&projectStatus6,
|
|
}, results)
|
|
}
|