Add more tests, add mocks.
Этот коммит содержится в:
@@ -10,6 +10,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/mattermost/mattermost-server/v6/services/telemetry"
|
"github.com/mattermost/mattermost-server/v6/services/telemetry"
|
||||||
"github.com/mattermost/mattermost-server/v6/shared/mlog"
|
"github.com/mattermost/mattermost-server/v6/shared/mlog"
|
||||||
@@ -403,7 +404,8 @@ func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
dueDate := utils.GetNextTrueUpReviewDueDate()
|
now := time.Now().UTC()
|
||||||
|
dueDate := utils.GetNextTrueUpReviewDueDate(now)
|
||||||
status, err := c.App.Srv().Store().TrueUpReview().GetTrueUpReviewStatus(dueDate)
|
status, err := c.App.Srv().Store().TrueUpReview().GetTrueUpReviewStatus(dueDate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Err = model.NewAppError("trueUpReviewStatus", "api.license.true_up_review.get.fail.app_error", nil, "", http.StatusInternalServerError)
|
c.Err = model.NewAppError("trueUpReviewStatus", "api.license.true_up_review.get.fail.app_error", nil, "", http.StatusInternalServerError)
|
||||||
@@ -445,7 +447,8 @@ func trueUpReviewStatus(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
nextDueDate := utils.GetNextTrueUpReviewDueDate()
|
now := time.Now().UTC()
|
||||||
|
nextDueDate := utils.GetNextTrueUpReviewDueDate(now)
|
||||||
status, err := c.App.Srv().Store().TrueUpReview().GetTrueUpReviewStatus(nextDueDate)
|
status, err := c.App.Srv().Store().TrueUpReview().GetTrueUpReviewStatus(nextDueDate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Err = model.NewAppError("trueUpReviewStatus", "api.license.true_up_review.get.fail.app_error", nil, "", http.StatusInternalServerError)
|
c.Err = model.NewAppError("trueUpReviewStatus", "api.license.true_up_review.get.fail.app_error", nil, "", http.StatusInternalServerError)
|
||||||
|
|||||||
@@ -10640,7 +10640,7 @@ func (s *OpenTracingLayerTrueUpReviewStore) CreateTrueUpReviewStatusRecord(revie
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *OpenTracingLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate string) (*model.TrueUpReviewStatus, error) {
|
func (s *OpenTracingLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error) {
|
||||||
origCtx := s.Root.Store.Context()
|
origCtx := s.Root.Store.Context()
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "TrueUpReviewStore.GetTrueUpReviewStatus")
|
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "TrueUpReviewStore.GetTrueUpReviewStatus")
|
||||||
s.Root.Store.SetContext(newCtx)
|
s.Root.Store.SetContext(newCtx)
|
||||||
|
|||||||
@@ -12157,7 +12157,7 @@ func (s *RetryLayerTrueUpReviewStore) CreateTrueUpReviewStatusRecord(reviewStatu
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *RetryLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate string) (*model.TrueUpReviewStatus, error) {
|
func (s *RetryLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error) {
|
||||||
|
|
||||||
tries := 0
|
tries := 0
|
||||||
for {
|
for {
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ func genStore() *mocks.Store {
|
|||||||
mock.On("Draft").Return(&mocks.DraftStore{})
|
mock.On("Draft").Return(&mocks.DraftStore{})
|
||||||
mock.On("PostPriority").Return(&mocks.PostPriorityStore{})
|
mock.On("PostPriority").Return(&mocks.PostPriorityStore{})
|
||||||
mock.On("PostAcknowledgement").Return(&mocks.PostAcknowledgementStore{})
|
mock.On("PostAcknowledgement").Return(&mocks.PostAcknowledgementStore{})
|
||||||
|
mock.On("TrueUpReview").Return(&mocks.TrueUpReviewStore{})
|
||||||
return mock
|
return mock
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
package sqlstore
|
package sqlstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/mattermost/mattermost-server/v6/model"
|
"github.com/mattermost/mattermost-server/v6/model"
|
||||||
"github.com/mattermost/mattermost-server/v6/store"
|
"github.com/mattermost/mattermost-server/v6/store"
|
||||||
sq "github.com/mattermost/squirrel"
|
sq "github.com/mattermost/squirrel"
|
||||||
@@ -27,11 +29,11 @@ func trueUpReviewStatusColumns() []string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SqlTrueUpReviewStore) GetTrueUpReviewStatus(dueDate string) (*model.TrueUpReviewStatus, error) {
|
func (s *SqlTrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error) {
|
||||||
query := s.getQueryBuilder().
|
query := s.getQueryBuilder().
|
||||||
Select("*").
|
Select("*").
|
||||||
From("TrueUpReviewHistory").
|
From("TrueUpReviewHistory").
|
||||||
Where(sq.Eq{"DueDate": dueDate})
|
Where(sq.Eq{"DueDate": dueDate.Format("2006-01-02")})
|
||||||
|
|
||||||
queryString, args, err := query.ToSql()
|
queryString, args, err := query.ToSql()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -40,7 +42,7 @@ func (s *SqlTrueUpReviewStore) GetTrueUpReviewStatus(dueDate string) (*model.Tru
|
|||||||
var trueUpReviewStatus model.TrueUpReviewStatus
|
var trueUpReviewStatus model.TrueUpReviewStatus
|
||||||
if err := s.GetReplicaX().Get(&trueUpReviewStatus, queryString, args...); err != nil {
|
if err := s.GetReplicaX().Get(&trueUpReviewStatus, queryString, args...); err != nil {
|
||||||
trueUpReviewStatus.Completed = false
|
trueUpReviewStatus.Completed = false
|
||||||
trueUpReviewStatus.DueDate = dueDate
|
trueUpReviewStatus.DueDate = dueDate.Format("2006-01-02")
|
||||||
|
|
||||||
// If no record is available, create one so there is a record trail.
|
// If no record is available, create one so there is a record trail.
|
||||||
return s.CreateTrueUpReviewStatusRecord(&trueUpReviewStatus)
|
return s.CreateTrueUpReviewStatusRecord(&trueUpReviewStatus)
|
||||||
|
|||||||
@@ -1000,7 +1000,7 @@ type PostAcknowledgementStore interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type TrueUpReviewStore interface {
|
type TrueUpReviewStore interface {
|
||||||
GetTrueUpReviewStatus(dueDate string) (*model.TrueUpReviewStatus, error)
|
GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error)
|
||||||
CreateTrueUpReviewStatusRecord(reviewStatus *model.TrueUpReviewStatus) (*model.TrueUpReviewStatus, error)
|
CreateTrueUpReviewStatusRecord(reviewStatus *model.TrueUpReviewStatus) (*model.TrueUpReviewStatus, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ package mocks
|
|||||||
import (
|
import (
|
||||||
model "github.com/mattermost/mattermost-server/v6/model"
|
model "github.com/mattermost/mattermost-server/v6/model"
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
|
|
||||||
|
time "time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TrueUpReviewStore is an autogenerated mock type for the TrueUpReviewStore type
|
// TrueUpReviewStore is an autogenerated mock type for the TrueUpReviewStore type
|
||||||
@@ -38,11 +40,11 @@ func (_m *TrueUpReviewStore) CreateTrueUpReviewStatusRecord(reviewStatus *model.
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetTrueUpReviewStatus provides a mock function with given fields: dueDate
|
// GetTrueUpReviewStatus provides a mock function with given fields: dueDate
|
||||||
func (_m *TrueUpReviewStore) GetTrueUpReviewStatus(dueDate string) (*model.TrueUpReviewStatus, error) {
|
func (_m *TrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error) {
|
||||||
ret := _m.Called(dueDate)
|
ret := _m.Called(dueDate)
|
||||||
|
|
||||||
var r0 *model.TrueUpReviewStatus
|
var r0 *model.TrueUpReviewStatus
|
||||||
if rf, ok := ret.Get(0).(func(string) *model.TrueUpReviewStatus); ok {
|
if rf, ok := ret.Get(0).(func(time.Time) *model.TrueUpReviewStatus); ok {
|
||||||
r0 = rf(dueDate)
|
r0 = rf(dueDate)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
@@ -51,7 +53,7 @@ func (_m *TrueUpReviewStore) GetTrueUpReviewStatus(dueDate string) (*model.TrueU
|
|||||||
}
|
}
|
||||||
|
|
||||||
var r1 error
|
var r1 error
|
||||||
if rf, ok := ret.Get(1).(func(string) error); ok {
|
if rf, ok := ret.Get(1).(func(time.Time) error); ok {
|
||||||
r1 = rf(dueDate)
|
r1 = rf(dueDate)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
|
|||||||
@@ -9575,7 +9575,7 @@ func (s *TimerLayerTrueUpReviewStore) CreateTrueUpReviewStatusRecord(reviewStatu
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TimerLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate string) (*model.TrueUpReviewStatus, error) {
|
func (s *TimerLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error) {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
result, err := s.TrueUpReviewStore.GetTrueUpReviewStatus(dueDate)
|
result, err := s.TrueUpReviewStore.GetTrueUpReviewStatus(dueDate)
|
||||||
|
|||||||
@@ -229,8 +229,7 @@ func GetSanitizedClientLicense(l map[string]string) map[string]string {
|
|||||||
return sanitizedLicense
|
return sanitizedLicense
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetNextTrueUpReviewDueDate() string {
|
func GetNextTrueUpReviewDueDate(now time.Time) time.Time {
|
||||||
now := time.Now().UTC()
|
|
||||||
quaterEndMonths := []time.Month{time.March, time.June, time.September, time.December}
|
quaterEndMonths := []time.Month{time.March, time.June, time.September, time.December}
|
||||||
|
|
||||||
var nextQuaterEndMonth time.Month = time.March
|
var nextQuaterEndMonth time.Month = time.March
|
||||||
@@ -244,5 +243,5 @@ func GetNextTrueUpReviewDueDate() string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return time.Date(now.Year(), nextQuaterEndMonth, TrueUpReviewDueDay, 0, 0, 0, 0, now.Location()).Format("2006-01-02")
|
return time.Date(now.Year(), nextQuaterEndMonth, TrueUpReviewDueDay, 0, 0, 0, 0, now.Location())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
@@ -91,3 +92,58 @@ func TestGetLicenseFileFromDisk(t *testing.T) {
|
|||||||
assert.False(t, success, "should have been an invalid file")
|
assert.False(t, success, "should have been an invalid file")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetNextTrueUpReviewDueDate(t *testing.T) {
|
||||||
|
t.Run("Due date always falls on the 15th", func(t *testing.T) {
|
||||||
|
// Before the 15th
|
||||||
|
now := time.Date(2022, 12, 14, 0, 0, 0, 0, time.Local)
|
||||||
|
due := GetNextTrueUpReviewDueDate(now)
|
||||||
|
assert.Equal(t, due.Day(), TrueUpReviewDueDay)
|
||||||
|
|
||||||
|
// On the 15th
|
||||||
|
now = time.Date(2022, 12, 15, 0, 0, 0, 0, time.Local)
|
||||||
|
due = GetNextTrueUpReviewDueDate(now)
|
||||||
|
assert.Equal(t, due.Day(), TrueUpReviewDueDay)
|
||||||
|
|
||||||
|
// After the 15th
|
||||||
|
now = time.Date(2022, 12, 16, 0, 0, 0, 0, time.Local)
|
||||||
|
due = GetNextTrueUpReviewDueDate(now)
|
||||||
|
assert.Equal(t, due.Day(), TrueUpReviewDueDay)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Due date will always be in next quater if the current date is past the 15th", func(t *testing.T) {
|
||||||
|
now := time.Date(2022, time.March, 16, 0, 0, 0, 0, time.Local)
|
||||||
|
due := GetNextTrueUpReviewDueDate(now)
|
||||||
|
assert.Equal(t, time.June, due.Month())
|
||||||
|
|
||||||
|
now = time.Date(2022, time.June, 16, 0, 0, 0, 0, time.Local)
|
||||||
|
due = GetNextTrueUpReviewDueDate(now)
|
||||||
|
assert.Equal(t, time.September, due.Month())
|
||||||
|
|
||||||
|
now = time.Date(2022, time.September, 16, 0, 0, 0, 0, time.Local)
|
||||||
|
due = GetNextTrueUpReviewDueDate(now)
|
||||||
|
assert.Equal(t, time.December, due.Month())
|
||||||
|
|
||||||
|
now = time.Date(2022, time.December, 16, 0, 0, 0, 0, time.Local)
|
||||||
|
due = GetNextTrueUpReviewDueDate(now)
|
||||||
|
assert.Equal(t, time.March, due.Month())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Due date will always be in the current quater if the current date is before or on the 15th", func(t *testing.T) {
|
||||||
|
now := time.Date(2022, time.March, 15, 0, 0, 0, 0, time.Local)
|
||||||
|
due := GetNextTrueUpReviewDueDate(now)
|
||||||
|
assert.Equal(t, time.March, due.Month())
|
||||||
|
|
||||||
|
now = time.Date(2022, time.June, 15, 0, 0, 0, 0, time.Local)
|
||||||
|
due = GetNextTrueUpReviewDueDate(now)
|
||||||
|
assert.Equal(t, time.June, due.Month())
|
||||||
|
|
||||||
|
now = time.Date(2022, time.September, 14, 0, 0, 0, 0, time.Local)
|
||||||
|
due = GetNextTrueUpReviewDueDate(now)
|
||||||
|
assert.Equal(t, time.September, due.Month())
|
||||||
|
|
||||||
|
now = time.Date(2022, time.December, 14, 0, 0, 0, 0, time.Local)
|
||||||
|
due = GetNextTrueUpReviewDueDate(now)
|
||||||
|
assert.Equal(t, time.December, due.Month())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user