diff --git a/src/Logs.Services.Tests/Logs.Services.Tests.csproj b/src/Logs.Services.Tests/Logs.Services.Tests.csproj
index 1e091b3..37d9a2d 100644
--- a/src/Logs.Services.Tests/Logs.Services.Tests.csproj
+++ b/src/Logs.Services.Tests/Logs.Services.Tests.csproj
@@ -34,6 +34,22 @@
..\packages\Castle.Core.4.0.0\lib\net45\Castle.Core.dll
True
+
+ ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll
+ True
+
+
+ ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll
+ True
+
+
+ ..\packages\Microsoft.AspNet.Identity.Core.2.2.1\lib\net45\Microsoft.AspNet.Identity.Core.dll
+ True
+
+
+ ..\packages\Microsoft.AspNet.Identity.EntityFramework.2.2.1\lib\net45\Microsoft.AspNet.Identity.EntityFramework.dll
+ True
+
..\packages\Moq.4.7.1\lib\net45\Moq.dll
True
@@ -43,6 +59,7 @@
True
+
@@ -52,6 +69,7 @@
+
@@ -68,12 +86,17 @@
{42C607C4-8FB1-490C-AAD4-5AC9921F91FC}
Logs.Models
+
+ {FB8CF5FD-A33C-44D0-8517-A2D55CC7B470}
+ Logs.Providers
+
{4BD34CDB-E6CE-415C-95EF-5E04CC0A2FA0}
Logs.Services
+
diff --git a/src/Logs.Services.Tests/LogsServiceTests/CreateTrainingLogTests.cs b/src/Logs.Services.Tests/LogsServiceTests/CreateTrainingLogTests.cs
new file mode 100644
index 0000000..a391503
--- /dev/null
+++ b/src/Logs.Services.Tests/LogsServiceTests/CreateTrainingLogTests.cs
@@ -0,0 +1,205 @@
+using System;
+using Logs.Data.Contracts;
+using Logs.Factories;
+using Logs.Models;
+using Logs.Providers.Contracts;
+using Logs.Services.Contracts;
+using Moq;
+using NUnit.Framework;
+
+namespace Logs.Services.Tests.LogsServiceTests
+{
+ [TestFixture]
+ public class CreateTrainingLogTests
+ {
+ [TestCase("log", "test", "abcd-1234")]
+ public void TestCreateTrainingLog_ShouldCallUserServiceGetById(string name, string description, string userId)
+ {
+ // Arrange
+ var mockedLogRepository = new Mock>();
+ var mockedUnitOfWork = new Mock();
+ var mockedLogFactory = new Mock();
+ var mockedUserService = new Mock();
+ var mockedDateTimeProvider = new Mock();
+
+ var service = new LogsService(mockedLogRepository.Object,
+ mockedUnitOfWork.Object,
+ mockedLogFactory.Object,
+ mockedUserService.Object,
+ mockedDateTimeProvider.Object);
+
+ // Act
+ service.CreateTrainingLog(name, description, userId);
+
+ // Assert
+ mockedUserService.Verify(s => s.GetUserById(userId), Times.Once);
+ }
+
+ [TestCase("log", "test", "abcd-1234")]
+ public void TestCreateTrainingLog_ShouldCallProviderGetCurrentTime(string name, string description, string userId)
+ {
+ // Arrange
+ var mockedLogRepository = new Mock>();
+ var mockedUnitOfWork = new Mock();
+ var mockedLogFactory = new Mock();
+ var mockedUserService = new Mock();
+ var mockedDateTimeProvider = new Mock();
+
+ var service = new LogsService(mockedLogRepository.Object,
+ mockedUnitOfWork.Object,
+ mockedLogFactory.Object,
+ mockedUserService.Object,
+ mockedDateTimeProvider.Object);
+
+ // Act
+ service.CreateTrainingLog(name, description, userId);
+
+ // Assert
+ mockedDateTimeProvider.Verify(p => p.GetCurrenTime(), Times.Once);
+ }
+
+ [TestCase("log", "test", "abcd-1234")]
+ public void TestCreateTrainingLog_ShouldCallLogFactoryCreateTrainingLog(string name, string description, string userId)
+ {
+ // Arrange
+ var mockedUser = new Mock();
+
+ var mockedLogRepository = new Mock>();
+ var mockedUnitOfWork = new Mock();
+ var mockedLogFactory = new Mock();
+
+ var currentDate = new DateTime();
+
+ var mockedDateTimeProvider = new Mock();
+ mockedDateTimeProvider.Setup(p => p.GetCurrenTime()).Returns(currentDate);
+
+ var mockedUserService = new Mock();
+ mockedUserService.Setup(s => s.GetUserById(It.IsAny())).Returns(mockedUser.Object);
+
+ var service = new LogsService(mockedLogRepository.Object,
+ mockedUnitOfWork.Object,
+ mockedLogFactory.Object,
+ mockedUserService.Object,
+ mockedDateTimeProvider.Object);
+
+ // Act
+ service.CreateTrainingLog(name, description, userId);
+
+ // Assert
+ mockedLogFactory.Verify(f => f.CreateTrainingLog(name, description, currentDate, mockedUser.Object));
+ }
+
+ [TestCase("log", "test", "abcd-1234")]
+ public void TestCreateTrainingLog_ShouldCallRepositoryAddCorrectly(string name, string description, string userId)
+ {
+ // Arrange
+ var mockedUser = new Mock();
+
+ var mockedLogRepository = new Mock>();
+ var mockedUnitOfWork = new Mock();
+
+ var mockedLog = new Mock();
+
+ var mockedLogFactory = new Mock();
+ mockedLogFactory.Setup(
+ f => f.CreateTrainingLog(It.IsAny(), It.IsAny(), It.IsAny(),
+ It.IsAny())).Returns(mockedLog.Object);
+
+ var currentDate = new DateTime();
+
+ var mockedDateTimeProvider = new Mock();
+ mockedDateTimeProvider.Setup(p => p.GetCurrenTime()).Returns(currentDate);
+
+ var mockedUserService = new Mock();
+ mockedUserService.Setup(s => s.GetUserById(It.IsAny())).Returns(mockedUser.Object);
+
+ var service = new LogsService(mockedLogRepository.Object,
+ mockedUnitOfWork.Object,
+ mockedLogFactory.Object,
+ mockedUserService.Object,
+ mockedDateTimeProvider.Object);
+
+ // Act
+ service.CreateTrainingLog(name, description, userId);
+
+ // Assert
+ mockedLogRepository.Verify(r => r.Add(mockedLog.Object), Times.Once);
+ }
+
+ [TestCase("log", "test", "abcd-1234")]
+ public void TestCreateTrainingLog_ShouldCallUnitOfWorkCommit(string name, string description, string userId)
+ {
+ // Arrange
+ var mockedUser = new Mock();
+
+ var mockedLogRepository = new Mock>();
+ var mockedUnitOfWork = new Mock();
+
+ var mockedLog = new Mock();
+
+ var mockedLogFactory = new Mock();
+ mockedLogFactory.Setup(
+ f => f.CreateTrainingLog(It.IsAny(), It.IsAny(), It.IsAny(),
+ It.IsAny())).Returns(mockedLog.Object);
+
+ var currentDate = new DateTime();
+
+ var mockedDateTimeProvider = new Mock();
+ mockedDateTimeProvider.Setup(p => p.GetCurrenTime()).Returns(currentDate);
+
+ var mockedUserService = new Mock();
+ mockedUserService.Setup(s => s.GetUserById(It.IsAny())).Returns(mockedUser.Object);
+
+ var service = new LogsService(mockedLogRepository.Object,
+ mockedUnitOfWork.Object,
+ mockedLogFactory.Object,
+ mockedUserService.Object,
+ mockedDateTimeProvider.Object);
+
+ // Act
+ service.CreateTrainingLog(name, description, userId);
+
+ // Assert
+ mockedUnitOfWork.Verify(u => u.Commit(), Times.Once);
+ }
+
+
+
+ [TestCase("log", "test", "abcd-1234")]
+ public void TestCreateTrainingLog_ShouldReturnCorrectly(string name, string description, string userId)
+ {
+ // Arrange
+ var mockedUser = new Mock();
+
+ var mockedLogRepository = new Mock>();
+ var mockedUnitOfWork = new Mock();
+
+ var mockedLog = new Mock();
+
+ var mockedLogFactory = new Mock();
+ mockedLogFactory.Setup(
+ f => f.CreateTrainingLog(It.IsAny(), It.IsAny(), It.IsAny(),
+ It.IsAny())).Returns(mockedLog.Object);
+
+ var currentDate = new DateTime();
+
+ var mockedDateTimeProvider = new Mock();
+ mockedDateTimeProvider.Setup(p => p.GetCurrenTime()).Returns(currentDate);
+
+ var mockedUserService = new Mock();
+ mockedUserService.Setup(s => s.GetUserById(It.IsAny())).Returns(mockedUser.Object);
+
+ var service = new LogsService(mockedLogRepository.Object,
+ mockedUnitOfWork.Object,
+ mockedLogFactory.Object,
+ mockedUserService.Object,
+ mockedDateTimeProvider.Object);
+
+ // Act
+ var result = service.CreateTrainingLog(name, description, userId);
+
+ // Assert
+ Assert.AreSame(mockedLog.Object, result);
+ }
+ }
+}
diff --git a/src/Logs.Services.Tests/packages.config b/src/Logs.Services.Tests/packages.config
index 36688ee..3b279cc 100644
--- a/src/Logs.Services.Tests/packages.config
+++ b/src/Logs.Services.Tests/packages.config
@@ -1,6 +1,9 @@
+
+
+