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)) } }) }