mirror of
https://github.com/teamhanko/hanko.git
synced 2025-10-27 14:17:56 +08:00
137 lines
3.5 KiB
Go
137 lines
3.5 KiB
Go
package webhooks
|
|
|
|
import (
|
|
"github.com/gofrs/uuid"
|
|
"github.com/stretchr/testify/suite"
|
|
"github.com/teamhanko/hanko/backend/persistence"
|
|
"github.com/teamhanko/hanko/backend/persistence/models"
|
|
"github.com/teamhanko/hanko/backend/test"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestDatabaseHookSuite(t *testing.T) {
|
|
t.Parallel()
|
|
suite.Run(t, new(databaseHookSuite))
|
|
}
|
|
|
|
type databaseHookSuite struct {
|
|
test.Suite
|
|
}
|
|
|
|
func (s *databaseHookSuite) TestNewDatabaseHook() {
|
|
hookId, err := uuid.NewV4()
|
|
s.Require().NoError(err)
|
|
|
|
hook := models.Webhook{
|
|
ID: hookId,
|
|
Enabled: false,
|
|
Failures: 0,
|
|
ExpiresAt: time.Now().Add(WebhookExpireDuration),
|
|
}
|
|
|
|
dbHook := NewDatabaseHook(hook, s.Storage.GetWebhookPersister(nil), nil)
|
|
s.NotEmpty(dbHook)
|
|
}
|
|
|
|
func (s *databaseHookSuite) TestDatabaseHook_DisableOnExpiryDate() {
|
|
hook, whPersister := s.loadWebhook("8b00da9a-cacf-45ea-b25d-c1ce0f0d7da3")
|
|
dbHook := NewDatabaseHook(hook, whPersister, nil)
|
|
|
|
now := time.Now()
|
|
err := dbHook.DisableOnExpiryDate(now)
|
|
s.NoError(err)
|
|
|
|
updatedHook, err := whPersister.Get(hook.ID)
|
|
s.Require().NoError(err)
|
|
|
|
s.False(updatedHook.Enabled)
|
|
}
|
|
func (s *databaseHookSuite) TestDatabaseHook_DoNotDisableOnExpiryDate() {
|
|
hook, whPersister := s.loadWebhook("a47fe92a-1e4b-4119-8653-55ad82737c88")
|
|
|
|
dbHook := NewDatabaseHook(hook, whPersister, nil)
|
|
|
|
now := time.Now()
|
|
err := dbHook.DisableOnExpiryDate(now)
|
|
s.NoError(err)
|
|
|
|
updatedHook, err := whPersister.Get(hook.ID)
|
|
s.Require().NoError(err)
|
|
|
|
s.True(updatedHook.Enabled)
|
|
}
|
|
|
|
func (s *databaseHookSuite) TestDatabaseHook_DisableOnFailure() {
|
|
hook, whPersister := s.loadWebhook("8b00da9a-cacf-45ea-b25d-c1ce0f0d7da2")
|
|
|
|
dbHook := NewDatabaseHook(hook, whPersister, nil)
|
|
err := dbHook.DisableOnFailure()
|
|
s.Require().NoError(err)
|
|
|
|
updatedHook, err := whPersister.Get(hook.ID)
|
|
s.NoError(err)
|
|
|
|
s.False(updatedHook.Enabled)
|
|
}
|
|
|
|
func (s *databaseHookSuite) TestDatabaseHook_DoNotDisableOnFailure() {
|
|
hook, whPersister := s.loadWebhook("8b00da9a-cacf-45ea-b25d-c1ce0f0d7da3")
|
|
|
|
dbHook := NewDatabaseHook(hook, whPersister, nil)
|
|
err := dbHook.DisableOnFailure()
|
|
s.NoError(err)
|
|
|
|
updatedHook, err := whPersister.Get(hook.ID)
|
|
s.Require().NoError(err)
|
|
|
|
s.True(updatedHook.Enabled)
|
|
}
|
|
|
|
func (s *databaseHookSuite) TestDatabaseHook_Reset() {
|
|
hook, whPersister := s.loadWebhook("8b00da9a-cacf-45ea-b25d-c1ce0f0d7da2")
|
|
|
|
now := time.Now()
|
|
|
|
dbHook := NewDatabaseHook(hook, whPersister, nil)
|
|
err := dbHook.Reset()
|
|
s.NoError(err)
|
|
|
|
updatedHook, err := whPersister.Get(hook.ID)
|
|
s.Require().NoError(err)
|
|
|
|
s.Less(updatedHook.Failures, hook.Failures, "Failures should be reset to 0")
|
|
s.Equal(0, updatedHook.Failures)
|
|
|
|
s.True(updatedHook.ExpiresAt.After(now))
|
|
s.True(updatedHook.UpdatedAt.After(now))
|
|
}
|
|
|
|
func (s *databaseHookSuite) TestDatabaseHook_IsEnabled() {
|
|
hook, whPersister := s.loadWebhook("a47fe92a-1e4b-4119-8653-55ad82737c88")
|
|
|
|
dbHook := NewDatabaseHook(hook, whPersister, nil)
|
|
|
|
s.True(dbHook.IsEnabled())
|
|
}
|
|
|
|
func (s *databaseHookSuite) TestDatabaseHook_IsDisabled() {
|
|
hook, whPersister := s.loadWebhook("279beae1-8a6d-4eaf-a791-1fa79d21d37a")
|
|
|
|
dbHook := NewDatabaseHook(hook, whPersister, nil)
|
|
|
|
s.False(dbHook.IsEnabled())
|
|
}
|
|
|
|
func (s *databaseHookSuite) loadWebhook(hookId string) (models.Webhook, persistence.WebhookPersister) {
|
|
err := s.LoadFixtures("../test/fixtures/webhooks")
|
|
s.Require().NoError(err)
|
|
|
|
whPersister := s.Storage.GetWebhookPersister(nil)
|
|
hook, err := whPersister.Get(uuid.FromStringOrNil(hookId))
|
|
s.Require().NoError(err)
|
|
s.Require().NotEmpty(hook)
|
|
|
|
return *hook, whPersister
|
|
}
|