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