Website Summary Files Commits Branches @commit @diff @stats
path: root / src / Tests / PCC.Service.Tests / PartsServiceTests.cs
diff options
context:
space:
mode:
1 files changed, 107 insertions, 0 deletions
-rw-r--r--src/Tests/PCC.Service.Tests/PartsServiceTests.cs107
diff --git a/src/Tests/PCC.Service.Tests/PartsServiceTests.cs b/src/Tests/PCC.Service.Tests/PartsServiceTests.cs
new file mode 100644
index 0000000..46b8624
--- /dev/null
+++ b/src/Tests/PCC.Service.Tests/PartsServiceTests.cs
@@ -0,0 +1,107 @@
+namespace PCC.Service.Tests
+{
+ using AutoMapperConfiguration;
+ using Microsoft.EntityFrameworkCore;
+ using NUnit.Framework;
+ using PCC.Data;
+ using PCC.Data.Models;
+ using PCC.Services;
+ using PCC.Services.Models.Parts;
+ using System;
+ using System.Threading.Tasks;
+
+ [TestFixture]
+ public class PartsServiceTests
+ {
+ private PCCDbContext pCCDbContext;
+
+ private IPartsService partService;
+
+ [SetUp]
+ public void Setup()
+ {
+ AutoMapperConfig.RegisterMappings(
+ typeof(PCCUser).Assembly.GetTypes(),
+ typeof(PartServiceModel).Assembly.GetTypes());
+
+ DbContextOptions<PCCDbContext> options = new DbContextOptionsBuilder<PCCDbContext>()
+ .UseInMemoryDatabase($"TESTS-DB-{Guid.NewGuid().ToString()}")
+ .Options;
+
+ this.pCCDbContext = new PCCDbContext(options);
+ this.partService = new PartsService(this.pCCDbContext);
+ }
+
+ [Test]
+ public async Task CreateProcessorPart_WithValidData_ShouldCorrectlyCreateEntity()
+ {
+ ProcessorServiceModel partServiceModel = new ProcessorServiceModel
+ {
+ Brand = "Intel",
+ Model = "Core I9",
+ Cores = 8,
+ Clockspeed = 4500,
+ ElectricalPowerConsumption = 3000,
+ Price = 2500,
+ Socket = "QWERTY",
+ ImageUrl = "https://never-gonna-give-you-up.com/rick.png",
+ };
+
+ Processor expectedEntity = new Processor
+ {
+ Brand = "Intel",
+ Model = "Core I9",
+ Cores = 8,
+ Clockspeed = 4500,
+ ElectricalPowerConsumption = 3000,
+ Price = 2500,
+ Socket = "QWERTY",
+ ImageUrl = "https://never-gonna-give-you-up.com/rick.png",
+ };
+
+ bool result = await this.partService.CreateProcessorPart(partServiceModel);
+ Processor actualEntity = await this.pCCDbContext.Processors.FirstOrDefaultAsync();
+
+ // TODO: Check if result is truthy (should be extracted into separate test)
+ Assert.True(result, "CreateProcessorPart() method should return truthy value with valid data.");
+
+ // TODO: This can be a constant message with placeholder
+ Assert.AreEqual(expectedEntity.Brand, actualEntity.Brand, "CreateProcessorPart() method does not map Brand property correctly.");
+ Assert.AreEqual(expectedEntity.Model, actualEntity.Model, "CreateProcessorPart() method does not map Model property correctly.");
+ Assert.AreEqual(expectedEntity.Cores, actualEntity.Cores, "CreateProcessorPart() method does not map Cores property correctly.");
+ Assert.AreEqual(expectedEntity.Clockspeed, actualEntity.Clockspeed, "CreateProcessorPart() method does not map Clockspeed property correctly.");
+ Assert.AreEqual(expectedEntity.ElectricalPowerConsumption, actualEntity.ElectricalPowerConsumption, "CreateProcessorPart() method does not map ElectricalPowerConsumption property correctly.");
+ Assert.AreEqual(expectedEntity.Price, actualEntity.Price, "CreateProcessorPart() method does not map Price property correctly.");
+ Assert.AreEqual(expectedEntity.Socket, actualEntity.Socket, "CreateProcessorPart() method does not map Socket property correctly.");
+ Assert.AreEqual(expectedEntity.ImageUrl, actualEntity.ImageUrl, "CreateProcessorPart() method does not map ImageUrl property correctly.");
+ Assert.NotNull(actualEntity.Id, "CreateProcessorPart() method does not set Id property correctly.");
+ }
+
+ [Test]
+ public async Task CreateProcessorPart_WithInvalidData_ShouldCorrectlyCreateEntity()
+ {
+ ProcessorServiceModel partServiceModel = new ProcessorServiceModel
+ {
+ Brand = null,
+ Model = "Core I9",
+ Cores = 8,
+ Clockspeed = 4500,
+ ElectricalPowerConsumption = 3000,
+ Price = 2500,
+ Socket = "QWERTY",
+ ImageUrl = "https://never-gonna-give-you-up.com/rick.png",
+ };
+
+ Exception ex = Assert.ThrowsAsync<ArgumentException>(() => this.partService.CreateProcessorPart(partServiceModel));
+
+ Assert.That(ex.Message == "Processor Brand cannot be null or empty!", "CreateProcessorPart() method with invalid Brand property, should throw ArgumentException with correct message.");
+ }
+
+ [TearDown]
+ public void Dispose()
+ {
+ this.pCCDbContext.Dispose();
+ this.partService = null;
+ }
+ }
+}