Files
pulse-api/internal/service/interest_test.go
Cosmo f3cdad1b80
Some checks failed
CI / lint-test (push) Failing after 1s
test: expand handler tests to 53.4% coverage
2026-03-26 19:21:30 +00:00

98 lines
2.5 KiB
Go

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)
}
}