283 lines
8.0 KiB
Go
283 lines
8.0 KiB
Go
package unit
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"wish-list-api/pkg/entities"
|
|
wishlist "wish-list-api/pkg/wish-list"
|
|
)
|
|
|
|
func TestCreateWishList(t *testing.T) {
|
|
mockRepo := NewMockWishListRepository()
|
|
service := wishlist.NewService(mockRepo)
|
|
|
|
t.Run("CreateWishList_Success", func(t *testing.T) {
|
|
wishList := &entities.WishList{
|
|
Title: "Test WishList",
|
|
UserID: "user123",
|
|
Description: "Test Description",
|
|
IsPublic: true,
|
|
}
|
|
|
|
result, err := service.CreateWishList(wishList)
|
|
if err != nil {
|
|
t.Errorf("Ошибка при создании списка желаний: %v", err)
|
|
}
|
|
|
|
if result.Title != wishList.Title {
|
|
t.Errorf("Ожидалось название '%s', получено '%s'", wishList.Title, result.Title)
|
|
}
|
|
|
|
if result.UserID != wishList.UserID {
|
|
t.Errorf("Ожидался UserID '%s', получен '%s'", wishList.UserID, result.UserID)
|
|
}
|
|
|
|
if result.ID == "" {
|
|
t.Error("ID не должен быть пустым")
|
|
}
|
|
|
|
if result.CreatedAt.IsZero() {
|
|
t.Error("CreatedAt не должен быть пустым")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestGetWishList(t *testing.T) {
|
|
mockRepo := NewMockWishListRepository()
|
|
service := wishlist.NewService(mockRepo)
|
|
|
|
wishList := &entities.WishList{
|
|
ID: "test-id-123",
|
|
Title: "Test WishList",
|
|
UserID: "user123",
|
|
Description: "Test Description",
|
|
IsPublic: true,
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
}
|
|
|
|
createdWishList, _ := service.CreateWishList(wishList)
|
|
|
|
t.Run("GetWishList_Success", func(t *testing.T) {
|
|
result, err := service.GetWishList(createdWishList.ID)
|
|
if err != nil {
|
|
t.Errorf("Ошибка при получении списка желаний: %v", err)
|
|
}
|
|
|
|
if result.ID != createdWishList.ID {
|
|
t.Errorf("Ожидался ID '%s', получен '%s'", createdWishList.ID, result.ID)
|
|
}
|
|
|
|
if result.Title != wishList.Title {
|
|
t.Errorf("Ожидалось название '%s', получено '%s'", wishList.Title, result.Title)
|
|
}
|
|
})
|
|
|
|
t.Run("GetWishList_NotFound", func(t *testing.T) {
|
|
_, err := service.GetWishList("non-existent-id")
|
|
if err == nil {
|
|
t.Error("Должна быть ошибка при поиске несуществующего списка")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestUpdateWishList(t *testing.T) {
|
|
mockRepo := NewMockWishListRepository()
|
|
service := wishlist.NewService(mockRepo)
|
|
|
|
wishList := &entities.WishList{
|
|
Title: "Original Title",
|
|
UserID: "user123",
|
|
Description: "Original Description",
|
|
IsPublic: true,
|
|
}
|
|
|
|
createdWishList, _ := service.CreateWishList(wishList)
|
|
|
|
t.Run("UpdateWishList_Success", func(t *testing.T) {
|
|
updatedWishList := &entities.WishList{
|
|
ID: createdWishList.ID,
|
|
Title: "Updated Title",
|
|
UserID: "user123",
|
|
Description: "Updated Description",
|
|
IsPublic: false,
|
|
}
|
|
|
|
result, err := service.UpdateWishList(updatedWishList)
|
|
if err != nil {
|
|
t.Errorf("Ошибка при обновлении списка желаний: %v", err)
|
|
}
|
|
|
|
if result.Title != "Updated Title" {
|
|
t.Errorf("Название не обновилось. Ожидалось 'Updated Title', получено '%s'", result.Title)
|
|
}
|
|
|
|
if result.Description != "Updated Description" {
|
|
t.Errorf("Описание не обновилось. Ожидалось 'Updated Description', получено '%s'", result.Description)
|
|
}
|
|
|
|
if result.IsPublic != false {
|
|
t.Error("Флаг IsPublic не обновился. Ожидалось false")
|
|
}
|
|
})
|
|
|
|
t.Run("UpdateWishList_NotFound", func(t *testing.T) {
|
|
nonExistentWishList := &entities.WishList{
|
|
ID: "non-existent-id",
|
|
Title: "Test Title",
|
|
UserID: "user123",
|
|
Description: "Test Description",
|
|
}
|
|
|
|
_, err := service.UpdateWishList(nonExistentWishList)
|
|
if err == nil {
|
|
t.Error("Должна быть ошибка при обновлении несуществующего списка")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestDeleteWishList(t *testing.T) {
|
|
mockRepo := NewMockWishListRepository()
|
|
service := wishlist.NewService(mockRepo)
|
|
|
|
wishList := &entities.WishList{
|
|
Title: "Test WishList",
|
|
UserID: "user123",
|
|
Description: "Test Description",
|
|
IsPublic: true,
|
|
}
|
|
|
|
createdWishList, _ := service.CreateWishList(wishList)
|
|
|
|
t.Run("DeleteWishList_Success", func(t *testing.T) {
|
|
err := service.DeleteWishList(createdWishList.ID)
|
|
if err != nil {
|
|
t.Errorf("Ошибка при удалении списка желаний: %v", err)
|
|
}
|
|
|
|
_, err = service.GetWishList(createdWishList.ID)
|
|
if err == nil {
|
|
t.Error("Список желаний не был удален")
|
|
}
|
|
})
|
|
|
|
t.Run("DeleteWishList_NotFound", func(t *testing.T) {
|
|
err := service.DeleteWishList("non-existent-id")
|
|
if err == nil {
|
|
t.Error("Должна быть ошибка при удалении несуществующего списка")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestCreateWishListItem(t *testing.T) {
|
|
mockRepo := NewMockWishListRepository()
|
|
service := wishlist.NewService(mockRepo)
|
|
|
|
wishList := &entities.WishList{
|
|
Title: "Test WishList",
|
|
UserID: "user123",
|
|
Description: "Test Description",
|
|
IsPublic: true,
|
|
}
|
|
|
|
createdWishList, _ := service.CreateWishList(wishList)
|
|
|
|
t.Run("CreateWishListItem_Success", func(t *testing.T) {
|
|
item := &entities.WishListItem{
|
|
Title: "Test Item",
|
|
URL: "https://example.com",
|
|
Cost: 100.50,
|
|
WishListID: createdWishList.ID,
|
|
Description: "Test Item Description",
|
|
}
|
|
|
|
result, err := service.CreateWishListItem(item)
|
|
if err != nil {
|
|
t.Errorf("Ошибка при создании элемента списка желаний: %v", err)
|
|
}
|
|
|
|
if result.Title != item.Title {
|
|
t.Errorf("Ожидалось название '%s', получено '%s'", item.Title, result.Title)
|
|
}
|
|
|
|
if result.WishListID != createdWishList.ID {
|
|
t.Errorf("Ожидался WishListID '%s', получен '%s'", createdWishList.ID, result.WishListID)
|
|
}
|
|
|
|
if result.ID == "" {
|
|
t.Error("ID не должен быть пустым")
|
|
}
|
|
})
|
|
|
|
t.Run("CreateWishListItem_InvalidWishListID", func(t *testing.T) {
|
|
item := &entities.WishListItem{
|
|
Title: "Test Item",
|
|
URL: "https://example.com",
|
|
Cost: 100.50,
|
|
WishListID: "non-existent-id",
|
|
Description: "Test Item Description",
|
|
}
|
|
|
|
_, err := service.CreateWishListItem(item)
|
|
if err == nil {
|
|
t.Error("Должна быть ошибка при создании элемента для несуществующего списка")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestGetWishListItems(t *testing.T) {
|
|
mockRepo := NewMockWishListRepository()
|
|
service := wishlist.NewService(mockRepo)
|
|
|
|
wishList := &entities.WishList{
|
|
Title: "Test WishList",
|
|
UserID: "user123",
|
|
Description: "Test Description",
|
|
IsPublic: true,
|
|
}
|
|
|
|
createdWishList, _ := service.CreateWishList(wishList)
|
|
|
|
for i := 0; i < 3; i++ {
|
|
item := &entities.WishListItem{
|
|
Title: "Item",
|
|
URL: "https://example.com",
|
|
Cost: 100.50,
|
|
WishListID: createdWishList.ID,
|
|
Description: "Item Description",
|
|
}
|
|
service.CreateWishListItem(item)
|
|
}
|
|
|
|
t.Run("GetAllWishListItems_Success", func(t *testing.T) {
|
|
items, err := service.GetAllWishListItems(createdWishList.ID)
|
|
if err != nil {
|
|
t.Errorf("Ошибка при получении элементов списка желаний: %v", err)
|
|
}
|
|
|
|
if len(*items) != 3 {
|
|
t.Errorf("Ожидалось 3 элемента, получено %d", len(*items))
|
|
}
|
|
})
|
|
|
|
t.Run("GetAllWishListItems_EmptyList", func(t *testing.T) {
|
|
emptyWishList := &entities.WishList{
|
|
Title: "Empty WishList",
|
|
UserID: "user123",
|
|
Description: "Empty List",
|
|
IsPublic: true,
|
|
}
|
|
createdEmptyWishList, _ := service.CreateWishList(emptyWishList)
|
|
|
|
items, err := service.GetAllWishListItems(createdEmptyWishList.ID)
|
|
if err != nil {
|
|
t.Errorf("Ошибка при получении элементов пустого списка: %v", err)
|
|
}
|
|
|
|
if len(*items) != 0 {
|
|
t.Errorf("Ожидалось 0 элементов, получено %d", len(*items))
|
|
}
|
|
})
|
|
}
|