From 150a7d562b21b43b96a84779534a8a4b609a9a9b Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Tue, 5 Apr 2022 20:52:37 +0000 Subject: [PATCH] Use subtests --- server/main_test.go | 111 +++++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 52 deletions(-) diff --git a/server/main_test.go b/server/main_test.go index d951d31..8d70027 100644 --- a/server/main_test.go +++ b/server/main_test.go @@ -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) {