ops_repo_metrics_test.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package repository
  2. import (
  3. "context"
  4. "database/sql/driver"
  5. "testing"
  6. "time"
  7. "github.com/DATA-DOG/go-sqlmock"
  8. "github.com/Wei-Shaw/sub2api/internal/service"
  9. )
  10. func TestInsertSystemMetricsNullableIntegerMetrics(t *testing.T) {
  11. createdAt := time.Date(2026, time.September, 4, 12, 0, 0, 0, time.UTC)
  12. zero := 0
  13. tests := []struct {
  14. name string
  15. dbConnActive *int
  16. wantDBActive driver.Value
  17. }{
  18. {name: "explicit zero is preserved", dbConnActive: &zero, wantDBActive: int64(0)},
  19. {name: "unavailable metric remains null", dbConnActive: nil, wantDBActive: nil},
  20. }
  21. for _, tt := range tests {
  22. t.Run(tt.name, func(t *testing.T) {
  23. db, mock, err := sqlmock.New()
  24. if err != nil {
  25. t.Fatalf("sqlmock.New: %v", err)
  26. }
  27. t.Cleanup(func() { _ = db.Close() })
  28. args := make([]driver.Value, 40)
  29. args[0] = createdAt
  30. args[1] = int64(1)
  31. for i := 4; i <= 12; i++ {
  32. args[i] = int64(0)
  33. }
  34. args[35] = tt.wantDBActive
  35. mock.ExpectExec("INSERT INTO ops_system_metrics").
  36. WithArgs(args...).
  37. WillReturnResult(sqlmock.NewResult(1, 1))
  38. repo := &opsRepository{db: db}
  39. err = repo.InsertSystemMetrics(context.Background(), &service.OpsInsertSystemMetricsInput{
  40. CreatedAt: createdAt,
  41. DBConnActive: tt.dbConnActive,
  42. })
  43. if err != nil {
  44. t.Fatalf("InsertSystemMetrics: %v", err)
  45. }
  46. if err := mock.ExpectationsWereMet(); err != nil {
  47. t.Fatalf("unmet SQL expectations: %v", err)
  48. }
  49. })
  50. }
  51. }