This commit is contained in:
parent
35690681cf
commit
8fe91293e1
@ -88,7 +88,7 @@ func (*Handler) getAvailableBalance(budget postgres.Budget, month Month,
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if !month.InPast(bal.Date) {
|
if month.InFuture(bal.Date) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,6 +245,15 @@ func (h Handler) CheckAvailableBalance(ctx context.Context, t *testing.T, testCa
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AssertEqualBool(t *testing.T, expected, actual bool, message string) {
|
||||||
|
t.Helper()
|
||||||
|
if expected == actual {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Errorf("%s: expected %v, got %v", message, expected, actual)
|
||||||
|
}
|
||||||
|
|
||||||
func assertEqual(t *testing.T, expected, actual float64, message string) {
|
func assertEqual(t *testing.T, expected, actual float64, message string) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
if expected == actual {
|
if expected == actual {
|
||||||
|
55
server/month.go
Normal file
55
server/month.go
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package server
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Month struct {
|
||||||
|
Year int
|
||||||
|
Month int
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFromTime(date time.Time) Month {
|
||||||
|
return Month{date.Year(), int(date.Month())}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Month) String() string {
|
||||||
|
return fmt.Sprintf("%d-%d", m.Year, m.Month)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Month) FirstOfMonth() time.Time {
|
||||||
|
return time.Date(m.Year, time.Month(m.Month), 1, 0, 0, 0, 0, time.Now().Location())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Month) InFuture(date time.Time) bool {
|
||||||
|
if m.Year < date.Year() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if m.Year > date.Year() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return time.Month(m.Month) < date.Month()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Month) InPast(date time.Time) bool {
|
||||||
|
if m.Year > date.Year() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if m.Year < date.Year() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return time.Month(m.Month) > date.Month()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Month) InPresent(date time.Time) bool {
|
||||||
|
if date.Year() != m.Year {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return date.Month() == time.Month(m.Month)
|
||||||
|
}
|
46
server/month_test.go
Normal file
46
server/month_test.go
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package server_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.javil.eu/jacob1123/budgeteer/server"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TestCaseCompare struct {
|
||||||
|
Value server.Month
|
||||||
|
Date time.Time
|
||||||
|
InPast bool
|
||||||
|
InPresent bool
|
||||||
|
InFuture bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestComparisons(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
loc := time.Now().Location()
|
||||||
|
tests := []TestCaseCompare{
|
||||||
|
{server.Month{2022, 2}, time.Date(2022, 3, 1, 0, 0, 0, 0, loc), false, false, true},
|
||||||
|
{server.Month{2022, 3}, time.Date(2022, 3, 1, 0, 0, 0, 0, loc), false, true, false},
|
||||||
|
{server.Month{2022, 4}, time.Date(2022, 3, 1, 0, 0, 0, 0, loc), true, false, false},
|
||||||
|
{server.Month{2022, 2}, time.Date(2022, 3, 31, 0, 0, 0, 0, loc), false, false, true},
|
||||||
|
{server.Month{2022, 3}, time.Date(2022, 3, 31, 0, 0, 0, 0, loc), false, true, false},
|
||||||
|
{server.Month{2022, 4}, time.Date(2022, 3, 31, 0, 0, 0, 0, loc), true, false, false},
|
||||||
|
{server.Month{2021, 2}, time.Date(2022, 3, 31, 0, 0, 0, 0, loc), false, false, true},
|
||||||
|
{server.Month{2021, 3}, time.Date(2022, 3, 31, 0, 0, 0, 0, loc), false, false, true},
|
||||||
|
{server.Month{2021, 4}, time.Date(2022, 3, 31, 0, 0, 0, 0, loc), false, false, true},
|
||||||
|
{server.Month{2023, 2}, time.Date(2022, 3, 31, 0, 0, 0, 0, loc), true, false, false},
|
||||||
|
{server.Month{2023, 3}, time.Date(2022, 3, 31, 0, 0, 0, 0, loc), true, false, false},
|
||||||
|
{server.Month{2023, 4}, time.Date(2022, 3, 31, 0, 0, 0, 0, loc), true, false, false},
|
||||||
|
{server.Month{2021, 11}, time.Date(2021, 12, 1, 0, 0, 0, 0, loc), false, false, true},
|
||||||
|
}
|
||||||
|
for i := range tests { //nolint:paralleltest
|
||||||
|
test := tests[i]
|
||||||
|
t.Run(test.Date.Format("2006-01-02")+" is in of "+test.Value.String(), func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
server.AssertEqualBool(t, test.InPast, test.Value.InPast(test.Date), "in past")
|
||||||
|
server.AssertEqualBool(t, test.InPresent, test.Value.InPresent(test.Date), "in present")
|
||||||
|
server.AssertEqualBool(t, test.InFuture, test.Value.InFuture(test.Date), "in future")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -8,74 +8,6 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Month struct {
|
|
||||||
Year int
|
|
||||||
Month int
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewFromTime(date time.Time) Month {
|
|
||||||
return Month{date.Year(), int(date.Month())}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m Month) String() string {
|
|
||||||
return fmt.Sprintf("%d-%d", m.Year, m.Month)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m Month) FirstOfMonth() time.Time {
|
|
||||||
return time.Date(m.Year, time.Month(m.Month), 1, 0, 0, 0, 0, time.Now().Location())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m Month) nextMonth() Month {
|
|
||||||
if m.Month == 12 {
|
|
||||||
return Month{m.Year + 1, 1}
|
|
||||||
}
|
|
||||||
return Month{m.Year, m.Month}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m Month) InFuture(date time.Time) bool {
|
|
||||||
if m.Year < date.Year() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if m.Year > date.Year() {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return time.Month(m.Month) < date.Month()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m Month) isBeforeOrContains(date time.Time) bool {
|
|
||||||
if m.Year < date.Year() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if m.Year > date.Year() {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return time.Month(m.Month) <= date.Month()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m Month) InPast(date time.Time) bool {
|
|
||||||
if m.Year > date.Year() {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if m.Year < date.Year() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return time.Month(m.Month) > date.Month()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m Month) InPresent(date time.Time) bool {
|
|
||||||
if date.Year() != m.Year {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return date.Month() == time.Month(m.Month)
|
|
||||||
}
|
|
||||||
|
|
||||||
func getDate(c *gin.Context) (Month, error) {
|
func getDate(c *gin.Context) (Month, error) {
|
||||||
var year, month int
|
var year, month int
|
||||||
yearString := c.Param("year")
|
yearString := c.Param("year")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user