UpdateAccessPointUseCaseTests.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using NSubstitute;
  2. using RackPeek.Domain.Helpers;
  3. using RackPeek.Domain.Resources.Hardware;
  4. using RackPeek.Domain.Resources.Hardware.AccessPoints;
  5. using RackPeek.Domain.Resources.Models;
  6. namespace Tests.HardwareResources.AccessPoints;
  7. public class UpdateAccessPointUseCaseTests
  8. {
  9. [Fact]
  10. public async Task ExecuteAsync_Throws_when_ap_not_found()
  11. {
  12. // Arrange
  13. var repo = Substitute.For<IHardwareRepository>();
  14. repo.GetByNameAsync("ap01").Returns((Hardware?)null);
  15. var sut = new UpdateAccessPointUseCase(repo);
  16. // Act
  17. var ex = await Assert.ThrowsAsync<NotFoundException>(async () =>
  18. await sut.ExecuteAsync("ap01")
  19. );
  20. // Assert
  21. Assert.Equal("Access point 'ap01' not found.", ex.Message);
  22. await repo.DidNotReceive().UpdateAsync(Arg.Any<AccessPoint>());
  23. }
  24. [Fact]
  25. public async Task ExecuteAsync_Updates_only_provided_fields()
  26. {
  27. // Arrange
  28. var existing = new AccessPoint
  29. {
  30. Name = "ap01",
  31. Model = "OldModel",
  32. Speed = 1.0
  33. };
  34. var repo = Substitute.For<IHardwareRepository>();
  35. repo.GetByNameAsync("ap01").Returns(existing);
  36. var sut = new UpdateAccessPointUseCase(repo);
  37. // Act
  38. await sut.ExecuteAsync(
  39. "ap01",
  40. "NewModel",
  41. 2.5
  42. );
  43. // Assert
  44. await repo.Received(1).UpdateAsync(Arg.Is<AccessPoint>(ap =>
  45. ap.Name == "ap01" &&
  46. ap.Model == "NewModel" &&
  47. ap.Speed == 2.5
  48. ));
  49. }
  50. [Fact]
  51. public async Task ExecuteAsync_Does_not_update_model_when_empty_or_whitespace()
  52. {
  53. // Arrange
  54. var existing = new AccessPoint
  55. {
  56. Name = "ap01",
  57. Model = "KeepMe",
  58. Speed = 1.0
  59. };
  60. var repo = Substitute.For<IHardwareRepository>();
  61. repo.GetByNameAsync("ap01").Returns(existing);
  62. var sut = new UpdateAccessPointUseCase(repo);
  63. // Act
  64. await sut.ExecuteAsync(
  65. "ap01",
  66. " "
  67. );
  68. // Assert
  69. await repo.Received(1).UpdateAsync(Arg.Is<AccessPoint>(ap =>
  70. ap.Model == "KeepMe"
  71. ));
  72. }
  73. }