summary history files

desktop/backend/services/testingtools.go
package services

import (
	"context"
	"fmt"
	"os"
	"pennyapp/backend/config"
	"pennyapp/backend/defaultresources"
	"pennyapp/backend/logwrap"
	"pennyapp/backend/model"
	"testing"
)

type TestServices struct {
	DB                  *dbService
	Accounts            *accountService
	Transactions        *transactionService
	Splits              *splitsService
	TransactionImporter *transactionImporterService
}

func TestSetupApp(t *testing.T) (TestServices, error) {
	t.Helper()

	var err error
	var services TestServices

	ctx := context.Background()
	logger := logwrap.Get("logger")
	if logger == nil {
		logger = logwrap.New("logger", os.Stdout, true)
	}
	logger.SetLevel(logwrap.INFO)

	dbFile, err := os.CreateTemp("/tmp", "pennyapp")
	if err != nil {
		return services, err
	}

	conf, err := config.NewConfig(config.WithDBFile(dbFile.Name()))
	if err != nil {
		return services, err
	}

	dbSvc := DB()
	transactionImporterSvc := TransactionImporter()
	transactionSvc := Transaction()
	splitSvc := Splits()
	accountSvc := Account()
	dbSvc.Start(ctx, conf)

	defaultResources, err := defaultresources.NewDefaultResources(ctx, dbSvc.DB)
	if err != nil {
		return services, err
	}

	transactionSvc.Start(ctx, dbSvc.DB, logger, transactionImporterSvc)
	splitSvc.Start(ctx, dbSvc.DB, logger)
	accountSvc.Start(ctx, dbSvc.DB, logger, defaultResources)

	services = TestServices{
		DB:           dbSvc,
		Accounts:     accountSvc,
		Transactions: transactionSvc,
		Splits:       splitSvc,
	}

	return services, nil
}

func TestCreateTestTransactions(t *testing.T, s TestServices) (model.Transaction, error) {
	var err error
	var transaction model.Transaction

	transaction, err = s.Transactions.createTransaction("testTransactionMemo", "2024-05-22T20:36:00.000Z")
	if err != nil {
		return transaction, err
	}

	expenseChildAccountType, err := s.Accounts.getChildAccountType("expense")
	if err != nil {
		return transaction, err
	}

	account, err := s.Accounts.createAccount("testAccountName", "testAccountDescription", expenseChildAccountType.ID)
	if err != nil {
		return transaction, err
	}

	splitType := s.Splits.CreateSplit(transaction.ID, account.ID, float64(0))
	if !splitType.Success {
		return transaction, fmt.Errorf("failed create split")
	}

	return transaction, nil
}