Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/ja 110 students schedule is remote #105

Merged
merged 13 commits into from
Jun 16, 2024
Prev Previous commit
Next Next commit
Add xUnit tests to StudentService
  • Loading branch information
skrawus committed Jun 2, 2024
commit 380ba09d428a0d9a5fe26c6f37584ef136586423
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
using Moq;
using TutorLizard.BusinessLogic.Interfaces.Data.Repositories;
using TutorLizard.BusinessLogic.Models;
using TutorLizard.BusinessLogic.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Services;

namespace TutorLizard.BusinessLogic.Tests.Services.Student
{
public class StudentServiceScheduleItemRequestTests : StudentServiceTestBase
{
[Fact]
public async Task CreateScheduleItemRequest_WhenIsRemoteIsTrue_ShouldSetIsRemoteToTrue()
{
// Arrange
var scheduleItem = new ScheduleItem { Id = 1 };
var studentId = 1;
var isRemote = true;

SetupMockGetScheduleItemById(scheduleItem);

var request = new CreateScheduleItemRequestRequest
{
StudentId = studentId,
ScheduleItemId = scheduleItem.Id,
IsRemote = isRemote
};

// Act
var response = await StudentService.CreateScheduleItemRequest(request);

// Assert
Assert.True(response.Success);
Assert.NotNull(response.CreatedScheduleItemRequestId);

var createdScheduleItemRequest = DbContext.ScheduleItemRequests.FirstOrDefault();
Assert.NotNull(createdScheduleItemRequest);
Assert.True(createdScheduleItemRequest.IsRemote);
}

[Fact]
public async Task CreateScheduleItemRequest_WhenRequestSent_ShouldReturnSuccess()
{
// Arrange
var scheduleItem = new ScheduleItem { Id = 1 };
var studentId = 1;
var isRemote = true;

SetupMockGetScheduleItemById(scheduleItem);

var request = new CreateScheduleItemRequestRequest
{
StudentId = studentId,
ScheduleItemId = scheduleItem.Id,
IsRemote = isRemote
};

// Act
var response = await StudentService.CreateScheduleItemRequest(request);

// Assert
Assert.True(response.Success);
Assert.NotNull(response.CreatedScheduleItemRequestId);
Zjyslav marked this conversation as resolved.
Show resolved Hide resolved
}





}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
using AutoFixture;
using Microsoft.EntityFrameworkCore;
using Moq;
using TutorLizard.BusinessLogic.Data;
using TutorLizard.BusinessLogic.Interfaces.Data.Repositories;
using TutorLizard.BusinessLogic.Models;
using TutorLizard.BusinessLogic.Services;

namespace TutorLizard.BusinessLogic.Tests.Services.Student
{
public class StudentServiceTestBase : TestsWithInMemoryDbBase
{
protected StudentService StudentService;
protected Fixture Fixture = new();
protected Mock<IDbRepository<Ad>> MockAdRepository = new();
protected Mock<IDbRepository<AdRequest>> MockAdRequestRepository = new();
protected Mock<IDbRepository<ScheduleItem>> MockScheduleItemRepository = new();
protected Mock<IDbRepository<ScheduleItemRequest>> MockScheduleItemRequestRepository = new();


protected StudentServiceTestBase() : base()
{
StudentService = new StudentService(MockAdRepository.Object,
MockAdRequestRepository.Object,
MockScheduleItemRepository.Object,
MockScheduleItemRequestRepository.Object);
}

protected void SetupMockGetScheduleItemById(ScheduleItem? scheduleItem)
{
MockScheduleItemRepository
.Setup(x => x.GetById(It.IsAny<int>()))
.Returns(Task.FromResult(scheduleItem));
}

protected void SetupMockGetAllScheduleItems(List<ScheduleItem> scheduleItems)
{
var scheduleItemsInDb = AddEntitiesToInMemoryDb(scheduleItems);
MockScheduleItemRepository
.Setup(x => x.GetAll())
.Returns(scheduleItemsInDb);
}


protected IQueryable<TEntity> AddEntitiesToInMemoryDb<TEntity>(List<TEntity> entities)
where TEntity : class
{
DbContext
.Set<TEntity>()
.AddRange(entities);
DbContext.SaveChanges();

return DbContext
.Set<TEntity>()
.AsQueryable();
}
}
}