No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

82 líneas
2.4KB

  1. using CartWise.Domain.Entities;
  2. using CartWise.Domain.Enums;
  3. namespace CartWise.Domain.Tests;
  4. public class ShoppingListTests
  5. {
  6. private static readonly DateTime Now = new(2026, 8, 10, 12, 0, 0, DateTimeKind.Utc);
  7. [Fact]
  8. public void Constructor_CreatesActiveListWithNoItems()
  9. {
  10. var list = new ShoppingList(Guid.NewGuid(), "Groceries", "user-1", Now);
  11. Assert.Equal(ShoppingListStatus.Active, list.Status);
  12. Assert.Empty(list.Items);
  13. }
  14. [Theory]
  15. [InlineData("")]
  16. [InlineData(" ")]
  17. [InlineData(null)]
  18. public void Constructor_ThrowsWhenNameIsMissing(string? name)
  19. {
  20. Assert.Throws<ArgumentException>(() => new ShoppingList(Guid.NewGuid(), name!, "user-1", Now));
  21. }
  22. [Fact]
  23. public void Constructor_ThrowsWhenHouseholdIdIsEmpty()
  24. {
  25. Assert.Throws<ArgumentException>(() => new ShoppingList(Guid.Empty, "Groceries", "user-1", Now));
  26. }
  27. [Fact]
  28. public void AddItem_AddsItemWithNeededStatusAndZeroSortOrder()
  29. {
  30. var list = new ShoppingList(Guid.NewGuid(), "Groceries", "user-1", Now);
  31. var item = list.AddItem("Milk", 2m, "gal", "user-1", Now);
  32. Assert.Single(list.Items);
  33. Assert.Equal("Milk", item.DisplayName);
  34. Assert.Equal(ShoppingListItemStatus.Needed, item.Status);
  35. Assert.Equal(0, item.SortOrder);
  36. Assert.Equal(list.ShoppingListId, item.ShoppingListId);
  37. }
  38. [Fact]
  39. public void AddItem_AssignsIncrementingSortOrder()
  40. {
  41. var list = new ShoppingList(Guid.NewGuid(), "Groceries", "user-1", Now);
  42. var first = list.AddItem("Milk", null, null, "user-1", Now);
  43. var second = list.AddItem("Bread", null, null, "user-1", Now);
  44. Assert.Equal(0, first.SortOrder);
  45. Assert.Equal(1, second.SortOrder);
  46. }
  47. [Fact]
  48. public void AddItem_DoesNotRequireQuantityOrUnit()
  49. {
  50. var list = new ShoppingList(Guid.NewGuid(), "Groceries", "user-1", Now);
  51. var item = list.AddItem("Milk", null, null, "user-1", Now);
  52. Assert.Null(item.Quantity);
  53. Assert.Null(item.Unit);
  54. }
  55. [Theory]
  56. [InlineData("")]
  57. [InlineData(" ")]
  58. [InlineData(null)]
  59. public void AddItem_ThrowsWhenDisplayNameIsMissing(string? displayName)
  60. {
  61. var list = new ShoppingList(Guid.NewGuid(), "Groceries", "user-1", Now);
  62. Assert.Throws<ArgumentException>(() => list.AddItem(displayName!, null, null, "user-1", Now));
  63. }
  64. }

Powered by TurnKey Linux.