package server import ( "context" "fmt" "io/fs" "log" "net/http" "os" "testing" "git.javil.eu/jacob1123/budgeteer/bcrypt" "git.javil.eu/jacob1123/budgeteer/config" "git.javil.eu/jacob1123/budgeteer/jwt" "git.javil.eu/jacob1123/budgeteer/postgres" "git.javil.eu/jacob1123/budgeteer/web" ) func TestMain(t *testing.T) { t.Parallel() cfg := config.Config{ DatabaseConnection: "postgres://budgeteer:budgeteer@db:5432/budgeteer_test", SessionSecret: "random string for JWT authorization", } queries, err := postgres.Connect("pgtx", cfg.DatabaseConnection) if err != nil { log.Fatalf("Failed connecting to DB: %v", err) } static, err := fs.Sub(web.Static, "dist") if err != nil { panic("couldn't open static files") } tokenVerifier, err := jwt.NewTokenVerifier(cfg.SessionSecret) if err != nil { panic(fmt.Errorf("couldn't create token verifier: %w", err)) } handler := &Handler{ Service: queries, TokenVerifier: tokenVerifier, CredentialsVerifier: &bcrypt.Verifier{}, StaticFS: http.FS(static), } ctx := context.Background() createUserParams := postgres.CreateUserParams{ Email: "test@example.com", Name: "test@example.com", Password: "this is my dumb password", } user, err := handler.Service.CreateUser(ctx, createUserParams) if err != nil { fmt.Println(err) t.Fail() return } budget, err := handler.Service.NewBudget(ctx, "My nice Budget", user.ID) if err != nil { fmt.Println(err) t.Fail() return } handler.DoYNABImport(ctx, t, budget) // import from YNAB // check available balance // check categories // check accounts } func (h Handler) DoYNABImport(ctx context.Context, t *testing.T, budget *postgres.Budget) { t.Helper() budgetID := budget.ID ynab, err := postgres.NewYNABImport(ctx, h.Service.Queries, budgetID) if err != nil { fmt.Println(err) t.Fail() return } transactions, err := os.Open("../.vscode/Register.tsv") if err != nil { fmt.Println(err) t.Fail() return } assignments, err := os.Open("../.vscode/Budget.tsv") if err != nil { fmt.Println(err) t.Fail() return } err = ynab.ImportTransactions(ctx, transactions) if err != nil { fmt.Println(err) t.Fail() return } err = ynab.ImportAssignments(ctx, assignments) if err != nil { fmt.Println(err) t.Fail() return } }