Bei Firmenanlage (Registrierung + Betreiber-Firmenanlage) müssen jetzt Adresse (Straße, PLZ, Ort, Land) und Abrechnungsdaten (Rechnungsemail, optional USt-IdNr.) erfasst werden, nicht nur der Firmenname (Migration 0023). USt-IdNr. bewusst optional - Kleinunternehmer nach §19 UStG haben keine. Neue Seite /verwaltung/firma (admin-only) zum Einsehen/ Nachtragen für bestehende Firmen. store.CreateAccount nimmt jetzt ein AccountInput statt nur einen Namen entgegen (Signaturänderung betrifft ~20 Testaufrufe, mechanisch umgestellt). register.html/ betreiber_account_neu.html auf form-card/form-grid umgestellt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package store_test
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/netcell-it/deklarix/internal/store"
|
|
)
|
|
|
|
// Diese Tests brauchen eine laufende Postgres-Instanz und werden ohne
|
|
// DATABASE_URL übersprungen, statt eine Verbindung vorzutäuschen.
|
|
func testDatabaseURL(t *testing.T) string {
|
|
t.Helper()
|
|
url := os.Getenv("DATABASE_URL")
|
|
if url == "" {
|
|
t.Skip("DATABASE_URL nicht gesetzt, überspringe Store-Integrationstest")
|
|
}
|
|
return url
|
|
}
|
|
|
|
func openTestStore(t *testing.T) *store.Store {
|
|
t.Helper()
|
|
url := testDatabaseURL(t)
|
|
if err := store.Migrate(url); err != nil {
|
|
t.Fatalf("Migrate: %v", err)
|
|
}
|
|
s, err := store.Open(context.Background(), url)
|
|
if err != nil {
|
|
t.Fatalf("Open: %v", err)
|
|
}
|
|
t.Cleanup(s.Close)
|
|
return s
|
|
}
|
|
|
|
// testAccountID legt einen Mandanten an und liefert dessen ID.
|
|
func testAccountID(t *testing.T, s *store.Store) string {
|
|
t.Helper()
|
|
acc, err := s.CreateAccount(context.Background(), store.AccountInput{Name: "Test-Mandant"})
|
|
if err != nil {
|
|
t.Fatalf("CreateAccount: %v", err)
|
|
}
|
|
return acc.ID
|
|
}
|
|
|
|
func TestMigrateAndOpen(t *testing.T) {
|
|
url := testDatabaseURL(t)
|
|
|
|
if err := store.Migrate(url); err != nil {
|
|
t.Fatalf("Migrate: %v", err)
|
|
}
|
|
|
|
s, err := store.Open(context.Background(), url)
|
|
if err != nil {
|
|
t.Fatalf("Open: %v", err)
|
|
}
|
|
defer s.Close()
|
|
|
|
var tableCount int
|
|
err = s.Pool.QueryRow(context.Background(), `
|
|
SELECT count(*) FROM information_schema.tables
|
|
WHERE table_schema = 'public' AND table_name = ANY($1)
|
|
`, []string{"account", "app_user", "session", "audit_log", "abteilung", "werkzeug", "werkzeug_sperre", "antrag"}).Scan(&tableCount)
|
|
if err != nil {
|
|
t.Fatalf("query tables: %v", err)
|
|
}
|
|
if tableCount != 8 {
|
|
t.Fatalf("expected 8 tables, got %d", tableCount)
|
|
}
|
|
}
|