package service import ( "database/sql" "testing" "time" "github.com/daniil/homelab-api/internal/model" ) func TestCalculateInterestForDeposit_NotDeposit(t *testing.T) { s := &InterestService{} deposit := &model.SavingsCategory{IsDeposit: false} result, err := s.CalculateInterestForDeposit(deposit) if err != nil { t.Fatalf("unexpected error: %v", err) } if result != "" { t.Errorf("expected empty result for non-deposit, got %q", result) } } func TestCalculateInterestForDeposit_ZeroRate(t *testing.T) { s := &InterestService{} deposit := &model.SavingsCategory{IsDeposit: true, InterestRate: 0} result, err := s.CalculateInterestForDeposit(deposit) if err != nil { t.Fatalf("unexpected error: %v", err) } if result != "" { t.Errorf("expected empty result for zero rate, got %q", result) } } func TestCalculateInterestForDeposit_NoStartDate(t *testing.T) { s := &InterestService{} deposit := &model.SavingsCategory{ IsDeposit: true, InterestRate: 10, DepositStartDate: sql.NullTime{Valid: false}, } _, err := s.CalculateInterestForDeposit(deposit) if err == nil { t.Error("expected error for missing start date") } } func TestCalculateInterestForDeposit_ExpiredDeposit(t *testing.T) { s := &InterestService{} deposit := &model.SavingsCategory{ IsDeposit: true, InterestRate: 10, DepositTerm: 3, // 3 months DepositStartDate: sql.NullTime{ Time: time.Now().AddDate(0, -6, 0), // 6 months ago Valid: true, }, } result, err := s.CalculateInterestForDeposit(deposit) if err != nil { t.Fatalf("unexpected error: %v", err) } if result != "" { t.Errorf("expected empty result for expired deposit, got %q", result) } } func TestCalculateInterestForDeposit_WrongDay(t *testing.T) { s := &InterestService{} // Start date with day that is NOT today // We pick a day that will never be today unless very lucky today := time.Now() // Pick a start day that differs from today startDay := today.Day() + 1 if startDay > 28 { startDay = 1 } startDate := time.Date(today.Year()-1, today.Month(), startDay, 0, 0, 0, 0, time.UTC) deposit := &model.SavingsCategory{ Name: "Test", IsDeposit: true, InterestRate: 12, DepositStartDate: sql.NullTime{ Time: startDate, Valid: true, }, } // Should return empty string (not today's interest day) — no DB call result, err := s.CalculateInterestForDeposit(deposit) if err != nil { t.Fatalf("unexpected error: %v", err) } if result != "" { t.Errorf("expected empty result for non-interest day, got %q", result) } }