AddSystemDriveUseCaseTests.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System.ComponentModel.DataAnnotations;
  2. using NSubstitute;
  3. using RackPeek.Domain.Helpers;
  4. using RackPeek.Domain.Resources.Models;
  5. using RackPeek.Domain.Resources.SystemResources;
  6. using RackPeek.Domain.Resources.SystemResources.UseCases;
  7. namespace Tests.HardwareResources.Systems;
  8. public class AddSystemDriveUseCaseTests
  9. {
  10. [Fact]
  11. public async Task ExecuteAsync_Adds_drive_when_system_exists()
  12. {
  13. // Arrange
  14. var repo = Substitute.For<ISystemRepository>();
  15. var system = new SystemResource
  16. {
  17. Name = "sys1",
  18. Drives = new List<Drive>()
  19. };
  20. repo.GetByNameAsync("sys1").Returns(system);
  21. var sut = new AddSystemDriveUseCase(repo);
  22. // Act
  23. await sut.ExecuteAsync("sys1", "ssd", 512);
  24. // Assert
  25. Assert.Single(system.Drives);
  26. Assert.Equal("ssd", system.Drives[0].Type);
  27. Assert.Equal(512, system.Drives[0].Size);
  28. await repo.Received(1).UpdateAsync(Arg.Is<SystemResource>(s =>
  29. s.Name == "sys1" &&
  30. s.Drives.Count == 1 &&
  31. s.Drives[0].Type == "ssd" &&
  32. s.Drives[0].Size == 512
  33. ));
  34. }
  35. [Fact]
  36. public async Task ExecuteAsync_Initializes_drive_list_when_null()
  37. {
  38. // Arrange
  39. var repo = Substitute.For<ISystemRepository>();
  40. var system = new SystemResource
  41. {
  42. Name = "sys1",
  43. Drives = null
  44. };
  45. repo.GetByNameAsync("sys1").Returns(system);
  46. var sut = new AddSystemDriveUseCase(repo);
  47. // Act
  48. await sut.ExecuteAsync("sys1", "sata", 500);
  49. // Assert
  50. Assert.NotNull(system.Drives);
  51. Assert.Single(system.Drives);
  52. await repo.Received(1).UpdateAsync(Arg.Is<SystemResource>(s =>
  53. s.Drives != null &&
  54. s.Drives.Count == 1 &&
  55. s.Drives[0].Type == "sata"
  56. ));
  57. }
  58. [Fact]
  59. public async Task ExecuteAsync_Throws_when_system_not_found()
  60. {
  61. // Arrange
  62. var repo = Substitute.For<ISystemRepository>();
  63. repo.GetByNameAsync("sys1").Returns((SystemResource?)null);
  64. var sut = new AddSystemDriveUseCase(repo);
  65. // Act + Assert
  66. await Assert.ThrowsAsync<NotFoundException>(() =>
  67. sut.ExecuteAsync("sys1", "ssd", 512)
  68. );
  69. }
  70. [Fact]
  71. public async Task ExecuteAsync_Throws_when_type_invalid()
  72. {
  73. var repo = Substitute.For<ISystemRepository>();
  74. var sut = new AddSystemDriveUseCase(repo);
  75. await Assert.ThrowsAsync<ValidationException>(() =>
  76. sut.ExecuteAsync("sys1", "", 512)
  77. );
  78. }
  79. [Fact]
  80. public async Task ExecuteAsync_Throws_when_size_negative()
  81. {
  82. var repo = Substitute.For<ISystemRepository>();
  83. var sut = new AddSystemDriveUseCase(repo);
  84. await Assert.ThrowsAsync<ValidationException>(() =>
  85. sut.ExecuteAsync("sys1", "ssd", -1)
  86. );
  87. }
  88. }