DeleteServerUseCaseTests.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Microsoft.Extensions.DependencyInjection;
  2. using NSubstitute;
  3. using NSubstitute.ClearExtensions;
  4. using RackPeek.Domain.Helpers;
  5. using RackPeek.Domain.Resources.Hardware;
  6. using RackPeek.Domain.Resources.Hardware.Models;
  7. using RackPeek.Domain.Resources.Hardware.Servers;
  8. using RackPeek.Domain.Resources.Services;
  9. using RackPeek.Domain.Resources.SystemResources;
  10. namespace Tests.HardwareResources;
  11. public class UsecaseTestHost
  12. {
  13. public IHardwareRepository HardwareRepo { get; set; }
  14. public ISystemRepository SystemRepo { get; set; }
  15. public IServiceRepository ServiceRepo { get; set; }
  16. private readonly ServiceCollection _sc;
  17. public UsecaseTestHost()
  18. {
  19. HardwareRepo = Substitute.For<IHardwareRepository>();
  20. SystemRepo = Substitute.For<ISystemRepository>();
  21. ServiceRepo = Substitute.For<IServiceRepository>();
  22. _sc = new ServiceCollection();
  23. _sc.AddSingleton<IHardwareRepository>(HardwareRepo);
  24. _sc.AddSingleton<ISystemRepository>(SystemRepo);
  25. _sc.AddSingleton<IServiceRepository>(ServiceRepo);
  26. }
  27. public T Get<T>() where T : notnull
  28. {
  29. _sc.AddSingleton(typeof(T));
  30. var sp = _sc.BuildServiceProvider();
  31. return sp.GetRequiredService<T>();
  32. }
  33. }
  34. public class DeleteServerUseCaseTests
  35. {
  36. [Fact]
  37. public async Task ExecuteAsync_Deletes_server_when_exists()
  38. {
  39. // Arrange
  40. var host = new UsecaseTestHost();
  41. host.HardwareRepo.GetByNameAsync("node01").Returns(new Server { Name = "node01" });
  42. var sut = host.Get<DeleteServerUseCase>();
  43. // Act
  44. await sut.ExecuteAsync("node01");
  45. // Assert
  46. await host.HardwareRepo.Received(1).DeleteAsync("node01");
  47. }
  48. [Fact]
  49. public async Task ExecuteAsync_Throws_when_server_not_found()
  50. {
  51. // Arrange
  52. var host = new UsecaseTestHost();
  53. var repo = host.HardwareRepo;
  54. repo.GetByNameAsync("node01").Returns((Hardware?)null);
  55. var sut = host.Get<DeleteServerUseCase>();
  56. // Act
  57. var ex = await Assert.ThrowsAsync<NotFoundException>(() =>
  58. sut.ExecuteAsync("node01")
  59. );
  60. // Assert
  61. Assert.Equal("Server 'node01' not found.", ex.Message);
  62. await repo.DidNotReceive().DeleteAsync(Arg.Any<string>());
  63. }
  64. }