UpdateSwitchUseCaseTests.cs 2.3 KB

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