118 lines
2.3 KiB
Go
118 lines
2.3 KiB
Go
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
|
|
}
|
|
}
|