UpdateUpsUseCaseTests.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using NSubstitute;
  2. using RackPeek.Domain.Resources.Hardware;
  3. using RackPeek.Domain.Resources.Hardware.UpsUnits;
  4. using RackPeek.Domain.Resources.Models;
  5. namespace Tests.HardwareResources.Ups;
  6. public class UpdateUpsUseCaseTests
  7. {
  8. [Fact]
  9. public async Task ExecuteAsync_Throws_when_ups_not_found()
  10. {
  11. var repo = Substitute.For<IHardwareRepository>();
  12. repo.GetByNameAsync("ups01").Returns((Hardware?)null);
  13. var sut = new UpdateUpsUseCase(repo);
  14. var ex = await Assert.ThrowsAsync<InvalidOperationException>(async () =>
  15. await sut.ExecuteAsync("ups01")
  16. );
  17. Assert.Equal("UPS 'ups01' not found.", ex.Message);
  18. await repo.DidNotReceive().UpdateAsync(Arg.Any<RackPeek.Domain.Resources.Models.Ups>());
  19. }
  20. [Fact]
  21. public async Task ExecuteAsync_Updates_only_provided_fields()
  22. {
  23. var existing = new RackPeek.Domain.Resources.Models.Ups
  24. {
  25. Name = "ups01",
  26. Model = "OldModel",
  27. Va = 1000
  28. };
  29. var repo = Substitute.For<IHardwareRepository>();
  30. repo.GetByNameAsync("ups01").Returns(existing);
  31. var sut = new UpdateUpsUseCase(repo);
  32. await sut.ExecuteAsync(
  33. "ups01",
  34. "NewModel",
  35. 1500
  36. );
  37. await repo.Received(1).UpdateAsync(Arg.Is<RackPeek.Domain.Resources.Models.Ups>(u =>
  38. u.Name == "ups01" &&
  39. u.Model == "NewModel" &&
  40. u.Va == 1500
  41. ));
  42. }
  43. [Fact]
  44. public async Task ExecuteAsync_Does_not_update_model_when_empty_or_whitespace()
  45. {
  46. var existing = new RackPeek.Domain.Resources.Models.Ups
  47. {
  48. Name = "ups01",
  49. Model = "KeepMe",
  50. Va = 1000
  51. };
  52. var repo = Substitute.For<IHardwareRepository>();
  53. repo.GetByNameAsync("ups01").Returns(existing);
  54. var sut = new UpdateUpsUseCase(repo);
  55. await sut.ExecuteAsync(
  56. "ups01",
  57. " "
  58. );
  59. await repo.Received(1).UpdateAsync(Arg.Is<RackPeek.Domain.Resources.Models.Ups>(u =>
  60. u.Model == "KeepMe"
  61. ));
  62. }
  63. }