Use subtests
This commit is contained in:
parent
49d96be1e3
commit
150a7d562b
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user