RemoveNicUseCaseTests.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using NSubstitute;
  2. using RackPeek.Domain.Resources.Hardware;
  3. using RackPeek.Domain.Resources.Hardware.Models;
  4. using RackPeek.Domain.Resources.Hardware.Server.Nic;
  5. namespace Tests.Hardware;
  6. public class RemoveNicUseCaseTests
  7. {
  8. [Fact]
  9. public async Task ExecuteAsync_Removes_nic_when_index_valid()
  10. {
  11. var repo = Substitute.For<IHardwareRepository>();
  12. var server = new Server
  13. {
  14. Name = "node01",
  15. Nics = new List<Nic>
  16. {
  17. new() { Type = "10GBase-T", Speed = 10000, Ports = 2 },
  18. new() { Type = "SFP+", Speed = 10000, Ports = 1 }
  19. }
  20. };
  21. repo.GetByNameAsync("node01").Returns(server);
  22. var sut = new RemoveNicUseCase(repo);
  23. await sut.ExecuteAsync("node01", 0);
  24. Assert.Single(server.Nics);
  25. Assert.Equal("SFP+", server.Nics[0].Type);
  26. await repo.Received(1).UpdateAsync(Arg.Any<Server>());
  27. }
  28. [Fact]
  29. public async Task ExecuteAsync_Throws_when_index_out_of_range()
  30. {
  31. var repo = Substitute.For<IHardwareRepository>();
  32. var server = new Server
  33. {
  34. Name = "node01",
  35. Nics = new List<Nic> { new() }
  36. };
  37. repo.GetByNameAsync("node01").Returns(server);
  38. var sut = new RemoveNicUseCase(repo);
  39. await Assert.ThrowsAsync<ArgumentOutOfRangeException>(() =>
  40. sut.ExecuteAsync("node01", 1));
  41. await repo.DidNotReceive().UpdateAsync(Arg.Any<Server>());
  42. }
  43. [Fact]
  44. public async Task ExecuteAsync_Does_nothing_when_server_not_found()
  45. {
  46. var repo = Substitute.For<IHardwareRepository>();
  47. repo.GetByNameAsync("node01")
  48. .Returns((RackPeek.Domain.Resources.Hardware.Models.Hardware?)null);
  49. var sut = new RemoveNicUseCase(repo);
  50. await sut.ExecuteAsync("node01", 0);
  51. await repo.DidNotReceive().UpdateAsync(Arg.Any<Server>());
  52. }
  53. }