- Implemented PageService with full CRUD operations - Added GetPages, CreatePage, UpdatePage, DeletePage, ReorderPages methods - Cascade deletion of widgets when page is deleted - Prevention of last page deletion - Created page HTTP endpoints (GET, POST, PUT, DELETE, reorder) - HTMX-friendly HTML fragment responses - Comprehensive unit tests for service and handlers - Updated dashboard to use PageService and create default pages
74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package services
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"custom-start-page/internal/models"
|
|
)
|
|
|
|
// TestSortPagesByOrder tests the sorting function without requiring DynamoDB
|
|
func TestSortPagesByOrder(t *testing.T) {
|
|
pages := []*models.Page{
|
|
{ID: "page-3", Order: 2},
|
|
{ID: "page-1", Order: 0},
|
|
{ID: "page-2", Order: 1},
|
|
}
|
|
|
|
sortPagesByOrder(pages)
|
|
|
|
assert.Equal(t, "page-1", pages[0].ID)
|
|
assert.Equal(t, "page-2", pages[1].ID)
|
|
assert.Equal(t, "page-3", pages[2].ID)
|
|
}
|
|
|
|
// TestSortPagesByOrderAlreadySorted tests sorting already sorted pages
|
|
func TestSortPagesByOrderAlreadySorted(t *testing.T) {
|
|
pages := []*models.Page{
|
|
{ID: "page-1", Order: 0},
|
|
{ID: "page-2", Order: 1},
|
|
{ID: "page-3", Order: 2},
|
|
}
|
|
|
|
sortPagesByOrder(pages)
|
|
|
|
assert.Equal(t, "page-1", pages[0].ID)
|
|
assert.Equal(t, "page-2", pages[1].ID)
|
|
assert.Equal(t, "page-3", pages[2].ID)
|
|
}
|
|
|
|
// TestSortPagesByOrderReversed tests sorting reversed pages
|
|
func TestSortPagesByOrderReversed(t *testing.T) {
|
|
pages := []*models.Page{
|
|
{ID: "page-3", Order: 2},
|
|
{ID: "page-2", Order: 1},
|
|
{ID: "page-1", Order: 0},
|
|
}
|
|
|
|
sortPagesByOrder(pages)
|
|
|
|
assert.Equal(t, "page-1", pages[0].ID)
|
|
assert.Equal(t, "page-2", pages[1].ID)
|
|
assert.Equal(t, "page-3", pages[2].ID)
|
|
}
|
|
|
|
// TestSortPagesByOrderEmpty tests sorting empty slice
|
|
func TestSortPagesByOrderEmpty(t *testing.T) {
|
|
pages := []*models.Page{}
|
|
sortPagesByOrder(pages)
|
|
assert.Empty(t, pages)
|
|
}
|
|
|
|
// TestSortPagesByOrderSingle tests sorting single page
|
|
func TestSortPagesByOrderSingle(t *testing.T) {
|
|
pages := []*models.Page{
|
|
{ID: "page-1", Order: 0},
|
|
}
|
|
|
|
sortPagesByOrder(pages)
|
|
|
|
assert.Len(t, pages, 1)
|
|
assert.Equal(t, "page-1", pages[0].ID)
|
|
}
|