You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.4KB

  1. using CartWise.Application.Services;
  2. using CartWise.Infrastructure.Data;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace CartWise.Application.Tests;
  5. public class HouseholdServiceTests : IDisposable
  6. {
  7. private readonly CartWiseDbContext _db;
  8. private readonly HouseholdService _sut;
  9. public HouseholdServiceTests()
  10. {
  11. var options = new DbContextOptionsBuilder<CartWiseDbContext>()
  12. .UseInMemoryDatabase(Guid.NewGuid().ToString())
  13. .Options;
  14. _db = new CartWiseDbContext(options);
  15. _sut = new HouseholdService(_db, TimeProvider.System);
  16. }
  17. public void Dispose()
  18. {
  19. _db.Dispose();
  20. GC.SuppressFinalize(this);
  21. }
  22. [Fact]
  23. public async Task CreateHouseholdAsync_CreatesHouseholdWithOwnerMembership()
  24. {
  25. var result = await _sut.CreateHouseholdAsync("The Smiths", "user-1");
  26. Assert.True(result.IsSuccess);
  27. Assert.Equal("The Smiths", result.Value!.Name);
  28. Assert.True(await _sut.IsMemberAsync(result.Value.HouseholdId, "user-1"));
  29. }
  30. [Fact]
  31. public async Task CreateHouseholdAsync_FailsWhenUserAlreadyBelongsToAHousehold()
  32. {
  33. await _sut.CreateHouseholdAsync("The Smiths", "user-1");
  34. var result = await _sut.CreateHouseholdAsync("Second Household", "user-1");
  35. Assert.False(result.IsSuccess);
  36. Assert.NotNull(result.Error);
  37. }
  38. [Fact]
  39. public async Task CreateHouseholdAsync_FailsWhenNameIsMissing()
  40. {
  41. var result = await _sut.CreateHouseholdAsync(" ", "user-1");
  42. Assert.False(result.IsSuccess);
  43. }
  44. [Fact]
  45. public async Task GetCurrentHouseholdAsync_ReturnsNullWhenUserHasNoHousehold()
  46. {
  47. var household = await _sut.GetCurrentHouseholdAsync("user-1");
  48. Assert.Null(household);
  49. }
  50. [Fact]
  51. public async Task GetCurrentHouseholdAsync_ReturnsHouseholdForMember()
  52. {
  53. var created = await _sut.CreateHouseholdAsync("The Smiths", "user-1");
  54. var household = await _sut.GetCurrentHouseholdAsync("user-1");
  55. Assert.NotNull(household);
  56. Assert.Equal(created.Value!.HouseholdId, household!.HouseholdId);
  57. }
  58. [Fact]
  59. public async Task IsMemberAsync_ReturnsFalseForNonMember()
  60. {
  61. var created = await _sut.CreateHouseholdAsync("The Smiths", "user-1");
  62. Assert.False(await _sut.IsMemberAsync(created.Value!.HouseholdId, "user-2"));
  63. }
  64. }

Powered by TurnKey Linux.