- Implement tests for AuthMiddleware to handle cookie and token authentication. - Create tests for the Importer and Manager in the Caddy package. - Enhance AuthService tests with password change and token validation scenarios. - Introduce tests for CertificateService to validate certificate listing and expiry. - Expand LogService tests to cover log querying and pagination. - Add NotificationService tests for creating, listing, and marking notifications as read. - Implement ProxyHostService tests for CRUD operations and unique domain validation. - Create RemoteServerService tests for CRUD operations. - Add UpdateService tests to mock GitHub API responses for version checking. - Introduce UptimeService tests to check host availability and notifications for down hosts.
80 lines
2.1 KiB
Go
80 lines
2.1 KiB
Go
package services
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/Wikid82/CaddyProxyManagerPlus/backend/internal/models"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func setupNotificationTestDB(t *testing.T) *gorm.DB {
|
|
db, err := gorm.Open(sqlite.Open("file::memory:"), &gorm.Config{})
|
|
require.NoError(t, err)
|
|
db.AutoMigrate(&models.Notification{})
|
|
return db
|
|
}
|
|
|
|
func TestNotificationService_Create(t *testing.T) {
|
|
db := setupNotificationTestDB(t)
|
|
svc := NewNotificationService(db)
|
|
|
|
notif, err := svc.Create(models.NotificationTypeInfo, "Test", "Message")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "Test", notif.Title)
|
|
assert.Equal(t, "Message", notif.Message)
|
|
assert.False(t, notif.Read)
|
|
}
|
|
|
|
func TestNotificationService_List(t *testing.T) {
|
|
db := setupNotificationTestDB(t)
|
|
svc := NewNotificationService(db)
|
|
|
|
svc.Create(models.NotificationTypeInfo, "N1", "M1")
|
|
svc.Create(models.NotificationTypeInfo, "N2", "M2")
|
|
|
|
list, err := svc.List(false)
|
|
require.NoError(t, err)
|
|
assert.Len(t, list, 2)
|
|
|
|
// Mark one as read
|
|
db.Model(&models.Notification{}).Where("title = ?", "N1").Update("read", true)
|
|
|
|
listUnread, err := svc.List(true)
|
|
require.NoError(t, err)
|
|
assert.Len(t, listUnread, 1)
|
|
assert.Equal(t, "N2", listUnread[0].Title)
|
|
}
|
|
|
|
func TestNotificationService_MarkAsRead(t *testing.T) {
|
|
db := setupNotificationTestDB(t)
|
|
svc := NewNotificationService(db)
|
|
|
|
notif, _ := svc.Create(models.NotificationTypeInfo, "N1", "M1")
|
|
|
|
err := svc.MarkAsRead(fmt.Sprintf("%s", notif.ID))
|
|
require.NoError(t, err)
|
|
|
|
var updated models.Notification
|
|
db.First(&updated, "id = ?", notif.ID)
|
|
assert.True(t, updated.Read)
|
|
}
|
|
|
|
func TestNotificationService_MarkAllAsRead(t *testing.T) {
|
|
db := setupNotificationTestDB(t)
|
|
svc := NewNotificationService(db)
|
|
|
|
svc.Create(models.NotificationTypeInfo, "N1", "M1")
|
|
svc.Create(models.NotificationTypeInfo, "N2", "M2")
|
|
|
|
err := svc.MarkAllAsRead()
|
|
require.NoError(t, err)
|
|
|
|
var count int64
|
|
db.Model(&models.Notification{}).Where("read = ?", false).Count(&count)
|
|
assert.Equal(t, int64(0), count)
|
|
}
|