Complete tasks 4.1-4.2: Page management service and HTTP endpoints
- 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
This commit is contained in:
73
internal/services/page_service_unit_test.go
Normal file
73
internal/services/page_service_unit_test.go
Normal file
@@ -0,0 +1,73 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user