admin_proxy_partial_update_test.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. //go:build unit
  2. package service
  3. import (
  4. "context"
  5. "testing"
  6. "time"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func TestAdminProxyPartialUpdatePreservesOmittedSettings(t *testing.T) {
  10. for _, input := range []*UpdateProxyInput{{Status: "inactive"}, {Name: "renamed"}, {Host: "new.example"}} {
  11. expiry := time.Now().Add(24 * time.Hour)
  12. backup := int64(10)
  13. original := &Proxy{ID: 9, Name: "original", Host: "old.example", Status: StatusActive, ExpiresAt: &expiry, FallbackMode: FallbackModeProxy, BackupProxyID: &backup, ExpiryWarnDays: 7}
  14. repo := &updatingProxyRepoStub{proxyRepoStub: &proxyRepoStub{}, proxy: original}
  15. svc := &adminServiceImpl{proxyRepo: repo}
  16. got, err := svc.UpdateProxy(context.Background(), 9, input)
  17. require.NoError(t, err)
  18. require.Equal(t, original.ExpiresAt, got.ExpiresAt)
  19. require.Equal(t, original.FallbackMode, got.FallbackMode)
  20. require.Equal(t, original.BackupProxyID, got.BackupProxyID)
  21. require.Equal(t, original.ExpiryWarnDays, got.ExpiryWarnDays)
  22. require.Equal(t, 1, repo.updateCalls)
  23. }
  24. }
  25. func TestAdminProxyPartialUpdateClearsAndSetsSettings(t *testing.T) {
  26. expiry := time.Now().Add(time.Hour)
  27. backup := int64(10)
  28. zero := 0
  29. repo := &updatingProxyRepoStub{proxyRepoStub: &proxyRepoStub{}, proxy: &Proxy{ID: 9, ExpiresAt: &expiry, FallbackMode: FallbackModeProxy, BackupProxyID: &backup, ExpiryWarnDays: 7}}
  30. svc := &adminServiceImpl{proxyRepo: repo}
  31. got, err := svc.UpdateProxy(context.Background(), 9, &UpdateProxyInput{
  32. ClearExpiresAt: true, FallbackMode: FallbackModeNone, ClearBackupID: true, ExpiryWarnDays: &zero,
  33. })
  34. require.NoError(t, err)
  35. require.Nil(t, got.ExpiresAt)
  36. require.Nil(t, got.BackupProxyID)
  37. require.Equal(t, FallbackModeNone, got.FallbackMode)
  38. require.Zero(t, got.ExpiryWarnDays)
  39. days := 3
  40. got, err = svc.UpdateProxy(context.Background(), 9, &UpdateProxyInput{
  41. ExpiresAt: &expiry, FallbackMode: FallbackModeProxy, BackupProxyID: &backup, ExpiryWarnDays: &days,
  42. })
  43. require.NoError(t, err)
  44. require.Equal(t, &expiry, got.ExpiresAt)
  45. require.Equal(t, &backup, got.BackupProxyID)
  46. require.Equal(t, FallbackModeProxy, got.FallbackMode)
  47. require.Equal(t, days, got.ExpiryWarnDays)
  48. }
  49. func TestAdminProxyPartialUpdateValidatesMergedFallback(t *testing.T) {
  50. backup := int64(10)
  51. self := int64(9)
  52. negative := -1
  53. for _, tc := range []struct {
  54. name string
  55. input UpdateProxyInput
  56. wantError bool
  57. }{
  58. {name: "reuse existing backup", input: UpdateProxyInput{FallbackMode: FallbackModeProxy}},
  59. {name: "clear required backup", input: UpdateProxyInput{ClearBackupID: true}, wantError: true},
  60. {name: "self backup", input: UpdateProxyInput{BackupProxyID: &self}, wantError: true},
  61. {name: "negative warning", input: UpdateProxyInput{ExpiryWarnDays: &negative}, wantError: true},
  62. } {
  63. t.Run(tc.name, func(t *testing.T) {
  64. repo := &updatingProxyRepoStub{proxyRepoStub: &proxyRepoStub{}, proxy: &Proxy{ID: 9, FallbackMode: FallbackModeProxy, BackupProxyID: &backup}}
  65. svc := &adminServiceImpl{proxyRepo: repo}
  66. _, err := svc.UpdateProxy(context.Background(), 9, &tc.input)
  67. if tc.wantError {
  68. require.Error(t, err)
  69. require.Zero(t, repo.updateCalls)
  70. } else {
  71. require.NoError(t, err)
  72. }
  73. })
  74. }
  75. }