From 1780d481e784b3987dd3c7a0381f4d4a76b54d3c Mon Sep 17 00:00:00 2001 From: "kevin.monteiro" Date: Sat, 16 Mar 2024 22:41:28 +0100 Subject: [PATCH] :clown_face: 3/5 :white_check_mark: --- .../Controllers/ActivityControllerTest.cs | 220 ++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 src/Tests/TestsAPI/UnitTestApi/Controllers/ActivityControllerTest.cs diff --git a/src/Tests/TestsAPI/UnitTestApi/Controllers/ActivityControllerTest.cs b/src/Tests/TestsAPI/UnitTestApi/Controllers/ActivityControllerTest.cs new file mode 100644 index 0000000..317edc7 --- /dev/null +++ b/src/Tests/TestsAPI/UnitTestApi/Controllers/ActivityControllerTest.cs @@ -0,0 +1,220 @@ +using APIMappers; +using Dto; +using HeartTrackAPI.Controllers; +using HeartTrackAPI.Request; +using HeartTrackAPI.Responce; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging.Abstractions; +using Model; +using Model.Manager; +using Model.Repository; +using Moq; +using Shared; +using StubAPI; + + +namespace UnitTestApi.Controllers +{ + [TestClass] + public class ActivityControllerTest + { + private Mock _dataManagerMock; + private ActivityController _activityController; + + private readonly List _activities = new List + { + new Activity { Id = 1, Type = "Running", Date = DateTime.Today, StartTime = DateTime.Now, EndTime = DateTime.Now.AddHours(1), Effort = 3, Variability = 0.5f, Variance = 0.1f, StandardDeviation = 0.2f, Average = 150.5f, Maximum = 180, Minimum = 120, AverageTemperature = 25.5f, HasAutoPause = false }, + new Activity { Id = 2, Type = "Cycling", Date = DateTime.Today, StartTime = DateTime.Now, EndTime = DateTime.Now.AddHours(2), Effort = 4, Variability = 0.6f, Variance = 0.2f, StandardDeviation = 0.3f, Average = 200.5f, Maximum = 220, Minimum = 160, AverageTemperature = 28.5f, HasAutoPause = true }, + new Activity { Id = 3, Type = "Swimming", Date = DateTime.Today, StartTime = DateTime.Now, EndTime = DateTime.Now.AddHours(1.5), Effort = 2, Variability = 0.4f, Variance = 0.05f, StandardDeviation = 0.15f, Average = 120.5f, Maximum = 140, Minimum = 100, AverageTemperature = 20.5f, HasAutoPause = false } + }; + + [TestInitialize] + public void SetUp() + { + _dataManagerMock = new Mock(); + + _dataManagerMock.Setup(dm => dm.ActivityRepo.GetNbItems()).ReturnsAsync(_activities.Count); + _dataManagerMock.Setup(dm => + dm.ActivityRepo.GetActivities(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync((int index, int count, ActivityOrderCriteria criteria, bool descending) => + _activities.GetItemsWithFilterAndOrdering(c => true, index, count, + criteria != ActivityOrderCriteria.None ? criteria : null, descending)); + + _activityController = new ActivityController(_dataManagerMock.Object, new NullLogger()); + } + + [TestMethod] + public async Task GetActivities_ReturnsPageResponse_WhenRequestIsValid() + { + var request = new PageRequest + { + Index = 0, + Count = 3, + OrderingPropertyName = "Id", + Descending = false + }; + + var result = await _activityController.GetActivities(request); + + Assert.IsInstanceOfType(result.Result, typeof(OkObjectResult)); + var okResult = result.Result as OkObjectResult; + + Assert.IsNotNull(okResult); + Assert.IsInstanceOfType(okResult.Value, typeof(PageResponse)); + var pageResponse = okResult.Value as PageResponse; + + Assert.IsNotNull(pageResponse); + Assert.AreEqual(3, pageResponse.Total); + Assert.AreEqual(0, pageResponse.Index); + Assert.AreEqual(3, pageResponse.Count); + } + + [TestMethod] + public async Task PostActivity_ReturnsCreatedAtAction_WhenRequestIsValid() + { + var activityDto = new ActivityDto + { + Id = 4, + Type = "Running", + Date = DateTime.Today, + StartTime = DateTime.Now, + EndTime = DateTime.Now.AddHours(1), + EffortFelt = 3, + Variability = 0.5f, + Variance = 0.1f, + StandardDeviation = 0.2f, + Average = 150.5f, + Maximum = 180, + Minimum = 120, + AverageTemperature = 25.5f, + HasAutoPause = false + }; + + _dataManagerMock.Setup(dm => dm.ActivityRepo.AddActivity(It.IsAny())).ReturnsAsync(_activities.Last()); + + var result = await _activityController.PostActivity(activityDto); + + Assert.IsInstanceOfType(result, typeof(CreatedAtActionResult)); + var createdAtActionResult = result as CreatedAtActionResult; + + Assert.IsNotNull(createdAtActionResult); + Assert.AreEqual("GetActivity", createdAtActionResult.ActionName); + Assert.AreEqual(201, createdAtActionResult.StatusCode); + } + + + [TestMethod] + public async Task GetActivity_ReturnsNotFound_WhenActivityDoesNotExist() + { + var id = 1; + _dataManagerMock.Setup(dm => dm.ActivityRepo.GetActivityByIdAsync(id)).ReturnsAsync((Activity)null); + + var result = await _activityController.GetActivity(id); + + Assert.IsInstanceOfType(result.Result, typeof(NotFoundObjectResult)); + var notFoundResult = result.Result as NotFoundObjectResult; + + Assert.IsNotNull(notFoundResult); + Assert.AreEqual(404, notFoundResult.StatusCode); + } + + [TestMethod] + public async Task GetActivity_ReturnsInternalServerError_WhenExceptionOccurs() + { + var id = 1; + _dataManagerMock.Setup(dm => dm.ActivityRepo.GetActivityByIdAsync(id)).ThrowsAsync(new Exception("Simulated exception")); + + var result = await _activityController.GetActivity(id); + + Assert.IsInstanceOfType(result.Result, typeof(ObjectResult)); + var objectResult = result.Result as ObjectResult; + + Assert.IsNotNull(objectResult); + Assert.AreEqual(500, objectResult.StatusCode); + } + + [TestMethod] + public async Task PutActivity_ReturnsNoContent_WhenRequestIsValid() + { + // Créer un exemple d'ActivityDto avec des données factices + var activityDto = new ActivityDto + { + Id = 1, + Type = "Running", + Date = DateTime.Today, + StartTime = DateTime.Now, + EndTime = DateTime.Now.AddHours(1), + EffortFelt = 3, + Variability = 0.5f, + Variance = 0.1f, + StandardDeviation = 0.2f, + Average = 150.5f, + Maximum = 180, + Minimum = 120, + AverageTemperature = 25.5f, + HasAutoPause = false, + HeartRates = new List + { + new HeartRateDto + { + Timestamp = DateTime.Now, + Latitude = 40.7128, + Longitude = -74.0060, + Altitude = 10.5, + HeartRate = 120, + Cadence = 80, + Distance = 5.0, + Speed = 10.0, + Power = 150, + Temperature = 20.0 + } + // Ajoutez d'autres objets HeartRateDto si nécessaire + } + }; + + // Configurer le mock pour simuler le comportement de la méthode UpdateActivity + _dataManagerMock.Setup(dm => dm.ActivityRepo.UpdateActivity(It.IsAny(), It.IsAny())).Returns(Task.FromResult(new Model.Activity())); + + + // Appeler la méthode à tester + var result = await _activityController.PutActivity(activityDto.Id, activityDto); + + // Vérifier le résultat + Assert.IsInstanceOfType(result, typeof(NoContentResult)); + } + + [TestMethod] + public async Task DeleteActivity_ReturnsOk_WhenRequestIsValid() + { + var id = 1; + + _dataManagerMock.Setup(dm => dm.ActivityRepo.GetActivityByIdAsync(id)).ReturnsAsync(_activities.FirstOrDefault(a => a.Id == id)); + _dataManagerMock.Setup(dm => dm.ActivityRepo.DeleteActivity(id)).ReturnsAsync(true); + + var result = await _activityController.DeleteActivity(id); + + Assert.IsInstanceOfType(result, typeof(OkResult)); + var okResult = result as OkResult; + + Assert.IsNotNull(okResult); + Assert.AreEqual(200, okResult.StatusCode); + } + + [TestMethod] + public async Task DeleteActivity_ReturnsNotFound_WhenActivityDoesNotExist() + { + var id = 100; + + _dataManagerMock.Setup(dm => dm.ActivityRepo.GetActivityByIdAsync(id)).ReturnsAsync((Activity)null); + + var result = await _activityController.DeleteActivity(id); + + Assert.IsInstanceOfType(result, typeof(NotFoundObjectResult)); + var notFoundResult = result as NotFoundObjectResult; + + Assert.IsNotNull(notFoundResult); + Assert.AreEqual(404, notFoundResult.StatusCode); + } + } +}