Use subtests
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing

This commit is contained in:
Jan Bader 2022-04-05 20:52:37 +00:00
parent 49d96be1e3
commit 150a7d562b

View File

@ -87,33 +87,37 @@ func TestMain(t *testing.T) {
loc := time.Now().Location()
AssertCategoriesAndAvailableEqual(t, loc, handler, ctx, budget)
AssertCategoriesAndAvailableEqual(ctx, t, loc, handler, budget)
// check accounts
}
func AssertCategoriesAndAvailableEqual(t *testing.T, loc *time.Location, handler *Handler, ctx context.Context, budget *postgres.Budget) {
resultDir := "../testdata/production-export/results"
files, err := os.ReadDir(resultDir)
if err != nil {
t.Errorf("could not load results: %s", err)
return
}
func AssertCategoriesAndAvailableEqual(ctx context.Context, t *testing.T, loc *time.Location, handler *Handler, budget *postgres.Budget) {
t.Helper()
for _, file := range files {
if file.IsDir() {
continue
t.Run("Categories and available balance", func(t *testing.T) {
t.Parallel()
resultDir := "../testdata/production-export/results"
files, err := os.ReadDir(resultDir)
if err != nil {
t.Errorf("could not load results: %s", err)
return
}
name := file.Name()[0 : len(file.Name())-5]
parts := strings.Split(name, "-")
year, _ := strconv.Atoi(parts[0])
month, _ := strconv.Atoi(parts[1])
first := time.Date(year, time.Month(month), 1, 0, 0, 0, 0, loc)
t.Logf("Checking balances for %s", first.Format("2006-01"))
testCaseFile := filepath.Join(resultDir, file.Name())
handler.CheckAvailableBalance(ctx, t, testCaseFile, budget, first)
}
for _, file := range files {
if file.IsDir() {
continue
}
name := file.Name()[0 : len(file.Name())-5]
parts := strings.Split(name, "-")
year, _ := strconv.Atoi(parts[0])
month, _ := strconv.Atoi(parts[1])
first := time.Date(year, time.Month(month), 1, 0, 0, 0, 0, loc)
testCaseFile := filepath.Join(resultDir, file.Name())
handler.CheckAvailableBalance(ctx, t, testCaseFile, budget, first)
}
})
}
type TestData struct {
@ -130,45 +134,48 @@ type CategoryTestData struct {
func (h Handler) CheckAvailableBalance(ctx context.Context, t *testing.T, testCaseFile string, budget *postgres.Budget, first time.Time) {
t.Helper()
data, err := h.prepareBudgeting(ctx, *budget, first)
if err != nil {
t.Errorf("prepare budgeting: %s", err)
return
}
t.Run(first.Format("2006-01"), func(t *testing.T) {
t.Parallel()
data, err := h.prepareBudgeting(ctx, *budget, first)
if err != nil {
t.Errorf("prepare budgeting: %s", err)
return
}
testDataFile, err := os.Open(testCaseFile)
if err != nil {
t.Errorf("could not load category test data: %s", err)
return
}
testDataFile, err := os.Open(testCaseFile)
if err != nil {
t.Errorf("could not load category test data: %s", err)
return
}
var testData TestData
dec := json.NewDecoder(testDataFile)
err = dec.Decode(&testData)
if err != nil {
t.Errorf("could not decode category test data: %s", err)
return
}
var testData TestData
dec := json.NewDecoder(testDataFile)
err = dec.Decode(&testData)
if err != nil {
t.Errorf("could not decode category test data: %s", err)
return
}
assertEqual(t, testData.AvailableBalance, data.AvailableBalance.GetFloat64(), "available balance")
assertEqual(t, testData.AvailableBalance, data.AvailableBalance.GetFloat64(), "available balance")
for categoryName, categoryTestData := range testData.Categories {
found := false
for _, category := range data.Categories {
name := category.Group + " : " + category.Name
for categoryName, categoryTestData := range testData.Categories {
found := false
for _, category := range data.Categories {
name := category.Group + " : " + category.Name
if name == categoryName {
assertEqual(t, categoryTestData.Available, category.Available.GetFloat64(), "available for "+categoryName)
assertEqual(t, categoryTestData.Activity, category.Activity.GetFloat64(), "activity for "+categoryName)
assertEqual(t, categoryTestData.Assigned, category.Assigned.GetFloat64(), "assigned for "+categoryName)
found = true
if name == categoryName {
assertEqual(t, categoryTestData.Available, category.Available.GetFloat64(), "available for "+categoryName)
assertEqual(t, categoryTestData.Activity, category.Activity.GetFloat64(), "activity for "+categoryName)
assertEqual(t, categoryTestData.Assigned, category.Assigned.GetFloat64(), "assigned for "+categoryName)
found = true
}
}
if !found {
t.Errorf("category " + categoryName + " was not found in result")
}
}
if !found {
t.Errorf("category " + categoryName + " was not found in result")
}
}
})
}
func assertEqual(t *testing.T, expected, actual float64, message string) {