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-112 BrowseServiceTests #102

Merged
merged 19 commits into from
May 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
8caa8bf
Correct BrowseService's namespace
Zjyslav May 21, 2024
b3fa6d1
Add BrowseServiceTests with basic setup
Zjyslav May 21, 2024
db14799
Add test to BrowseServiceTests for invalid request case
Zjyslav May 21, 2024
3784419
Modify GetBrowseAdsPage to return TotalPages = 1 when there are 0 Ads
Zjyslav May 21, 2024
df0c4d4
Add helper methods and more setup to BrowseServiceTests
Zjyslav May 21, 2024
a05d230
Add 4 tests to BrowseServiceTests for GetBrowseAdsPage
Zjyslav May 21, 2024
206487c
Add 6 tests to BrowseServiceTests for GetAdDetails
Zjyslav May 21, 2024
12cd2a5
Add 8 tests to BrowseServiceTests for GetUsersSchedule
Zjyslav May 21, 2024
4e917e0
Extract some helper methods in BrowseServiceTests
Zjyslav May 21, 2024
5a64d37
Fix some issues in BrowseServiceTests
Zjyslav May 22, 2024
8f77c33
Fix naming issues in BrowseServiceTests
Zjyslav May 22, 2024
0085b64
Merge branch 'develop' into feature/ja-112-browse-service-tests
Zjyslav May 26, 2024
090ff4e
Extract BrowseServiceTestsBase class
Zjyslav May 27, 2024
d0b8ce0
Split BrowseServiceTests based on tested method
Zjyslav May 27, 2024
e453674
Add IDisposable interface to BrowseServiceTestsBase
Zjyslav May 27, 2024
f75448c
Move some helper methods from base class to GetUsersScheduleTests
Zjyslav May 27, 2024
0479ec4
Add TestsWithInMemoryDbBase abstract class
Zjyslav May 27, 2024
6c8343d
Merge branch 'develop' into feature/ja-112-browse-service-tests
Zjyslav May 29, 2024
2b5a960
Merge develop into feature/ja-112, apply changes to request class names
Zjyslav May 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
using TutorLizard.BusinessLogic.Enums;
using TutorLizard.BusinessLogic.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Models;

namespace TutorLizard.BusinessLogic.Tests.Services.Browse;
public class BrowseServiceGetAdDetailsTests : BrowseServiceTestsBase
{
[Fact]
public async Task GetAdDetails_WhenAdDoesntExist_ShouldReturnNull()
{
// Arrange
int adId = 1;
int userId = 19;
GetAdDetailsRequest request = new()
{
AdId = adId,
UserId = userId
};

var ads = CreateTestAds(0);
SetupMockGetAllAds(ads);
SetupMockGetAdById(null);

// Act
var response = await BrowseService.GetAdDetails(request);

// Assert
Assert.Null(response);
}

[Fact]
public async Task GetAdDetails_WhenUserIsOwner_ShouldReturnCorrectUserRelationship()
{
// Arrange
var ads = CreateTestAds(1);
var ad = ads.Single();
SetupMockGetAllAds(ads);
SetupMockGetAdById(ad);

int adId = ad.Id;
int userId = ad.TutorId;
GetAdDetailsRequest request = new()
{
AdId = adId,
UserId = userId
};

var expectedRelationship = AdToUserRelationship.Owner;

// Act
var response = await BrowseService.GetAdDetails(request);
var actualRelationship = response!.UserRelationship;

// Assert
Assert.NotNull(response);
Assert.Equal(expectedRelationship, actualRelationship);
}

[Fact]
public async Task GetAdDetails_WhenUserIsAcceptedStudent_ShouldReturnCorrectUserRelationship()
{
// Arrange
var ads = CreateTestAds(1);
var ad = ads.Single();

int userId = ad.TutorId + 1;
AdRequest acceptedAdRequest = new()
{
StudentId = userId,
IsAccepted = true,
Message = "",
ReplyMessage = "",
ReviewDate = DateTime.Now,
};
ad.AdRequests.Add(acceptedAdRequest);

SetupMockGetAllAds(ads);
SetupMockGetAdById(ad);

int adId = ad.Id;

GetAdDetailsRequest request = new()
{
AdId = adId,
UserId = userId
};

var expectedRelationship = AdToUserRelationship.AcceptedStudent;

// Act
var response = await BrowseService.GetAdDetails(request);
var actualRelationship = response!.UserRelationship;

// Assert
Assert.NotNull(response);
Assert.Equal(expectedRelationship, actualRelationship);
}

[Fact]
public async Task GetAdDetails_WhenUserIsPendingStudent_ShouldReturnCorrectUserRelationship()
{
// Arrange
var ads = CreateTestAds(1);
var ad = ads.Single();

int userId = ad.TutorId + 1;
AdRequest acceptedAdRequest = new()
{
StudentId = userId,
IsAccepted = false,
Message = "",
ReplyMessage = "",
ReviewDate = null,
};
ad.AdRequests.Add(acceptedAdRequest);

SetupMockGetAllAds(ads);
SetupMockGetAdById(ad);

int adId = ad.Id;

GetAdDetailsRequest request = new()
{
AdId = adId,
UserId = userId
};

var expectedRelationship = AdToUserRelationship.PendingStudent;

// Act
var response = await BrowseService.GetAdDetails(request);
var actualRelationship = response!.UserRelationship;

// Assert
Assert.NotNull(response);
Assert.Equal(expectedRelationship, actualRelationship);
}

[Fact]
public async Task GetAdDetails_WhenUserHasNoRelationshipToAd_ShouldReturnCorrectUserRelationship()
{
// Arrange
var ads = CreateTestAds(1);
var ad = ads.Single();

int userId = ad.TutorId + 1;

SetupMockGetAllAds(ads);
SetupMockGetAdById(ad);

int adId = ad.Id;

GetAdDetailsRequest request = new()
{
AdId = adId,
UserId = userId
};

var expectedRelationship = AdToUserRelationship.None;

// Act
var response = await BrowseService.GetAdDetails(request);
var actualRelationship = response!.UserRelationship;

// Assert
Assert.NotNull(response);
Assert.Equal(expectedRelationship, actualRelationship);
}

[Fact]
public async Task GetAdDetails_WhenAdExists_ShouldReturnCorrectAdDetails()
{
// Arrange
var ads = CreateTestAds(1);
var ad = ads.Single();

SetupMockGetAllAds(ads);
SetupMockGetAdById(ad);

int adId = ad.Id;
int userId = 19;
GetAdDetailsRequest request = new()
{
AdId = adId,
UserId = userId
};

// Act
var response = await BrowseService.GetAdDetails(request);

// Assert
Assert.NotNull(response);

Assert.Equal(ad.Id, response.AdId);
Assert.Equal(ad.TutorId, response.TutorId);
Assert.Equal(ad.User.Id, response.TutorId);
Assert.Equal(ad.User.Name, response.TutorName);
Assert.Equal(ad.Title, response.Title);
Assert.Equal(ad.CategoryId, response.CategoryId);
Assert.Equal(ad.Category.Id, response.CategoryId);
Assert.Equal(ad.Category.Name, response.CategoryName);
Assert.Equal(ad.Subject, response.Subject);
Assert.Equal(ad.Location, response.Location);
Assert.Equal(ad.Price, response.Price);
Assert.Equal(ad.IsRemote, response.IsRemote);
Assert.Equal(ad.Description, response.Description);

Assert.True(Enum.IsDefined(response.UserRelationship));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
using TutorLizard.BusinessLogic.Models;
using TutorLizard.BusinessLogic.Models.DTOs;
using TutorLizard.BusinessLogic.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Models.DTOs.Responses;
using TutorLizard.BusinessLogic.Services;

namespace TutorLizard.BusinessLogic.Tests.Services.Browse;
public class BrowseServiceGetBrowseAdsPageTests : BrowseServiceTestsBase
{
[Theory]
[InlineData(0, 0)]
[InlineData(0, 1)]
[InlineData(1, 0)]
[InlineData(-1, -1)]
public async Task GetBrowseAdsPage_WhenRequestIsInvalid_ShouldReturnUnsuccessfulResponse(int pageSize, int pageNumber)
{
// Arrange
GetBrowseAdsPageRequest request = new(pageNumber, pageSize);
GetBrowseAdsPageResponse expectedResponse = new()
{
Success = false,
PageNumber = pageNumber,
PageSize = pageSize,
TotalPages = 0
};

// Act
var actualResponse = await BrowseService.GetBrowseAdsPage(request);

// Assert
Assert.Equivalent(expectedResponse, actualResponse);
}

[Fact]
public async Task GetBrowseAdsPage_WhenPageNumberIsLargerThanAvailable_ShouldReturnLastPage()
{
// Arrange
int adCount = 15;
int pageNumber = 4;
int pageSize = 5;

var ads = CreateTestAds(adCount);
SetupMockGetAllAds(ads);

GetBrowseAdsPageRequest request = new(pageNumber, pageSize);

// Act
var response = await BrowseService.GetBrowseAdsPage(request);

// Assert
Assert.True(response.Success);
Assert.Equal(response.TotalPages, response.PageNumber);
}

[Theory]
[InlineData(1, 1, 1, 1)]
[InlineData(1, 1, 0, 0)]
[InlineData(1, 10, 101, 10)]
[InlineData(10, 10, 101, 10)]
[InlineData(11, 10, 101, 1)]
[InlineData(12, 10, 101, 1)]
public async Task GetBrowseAdsPage_WhenRequestIsValid_ShouldReturnCorrectNumberOfAds(int pageNumber, int pageSize, int adCount, int expectedResponseAdCount)
{
// Arrange
var ads = CreateTestAds(adCount);
SetupMockGetAllAds(ads);

GetBrowseAdsPageRequest request = new(pageNumber, pageSize);

// Act
var response = await BrowseService.GetBrowseAdsPage(request);
int actualResponseAdCount = response.Ads.Count;

// Assert
Assert.True(response.Success);
Assert.Equal(expectedResponseAdCount, actualResponseAdCount);
}

[Theory]
[InlineData(1, 1, 1, 1)]
[InlineData(1, 1, 0, 1)]
[InlineData(1, 10, 101, 11)]
[InlineData(12, 10, 101, 11)]
public async Task GetBrowseAdsPage_WhenRequestIsValid_ShouldReturnCorrectTotalPages(int pageNumber, int pageSize, int adCount, int expectedTotalPages)
{
// Arrange
var ads = CreateTestAds(adCount);
SetupMockGetAllAds(ads);

GetBrowseAdsPageRequest request = new(pageNumber, pageSize);

// Act
var response = await BrowseService.GetBrowseAdsPage(request);
int actualTotalPages = response.TotalPages;

// Assert
Assert.True(response.Success);
Assert.Equal(expectedTotalPages, actualTotalPages);
}

[Theory]
[InlineData(1, 1, 1)]
[InlineData(1, 1, 0)]
[InlineData(1, 10, 101)]
[InlineData(10, 10, 101)]
[InlineData(11, 10, 101)]
public async Task GetBrowseAdsPage_WhenRequestIsValid_ShouldReturnCorrectAds(int pageNumber, int pageSize, int adCount)
{
// Arrange
var ads = CreateTestAds(adCount);
SetupMockGetAllAds(ads);

GetBrowseAdsPageRequest request = new(pageNumber, pageSize);

int expectedAdsSkipped = (pageNumber - 1) * pageSize;
List<Ad> expectedAds = ads
.Skip(expectedAdsSkipped)
.Take(pageSize)
.ToList();

// Act
var response = await BrowseService.GetBrowseAdsPage(request);

// Assert
Assert.True(response.Success);
Assert.Equal(expectedAds.Count, response.Ads.Count);
for (int i = 0; i < response.Ads.Count; i++)
{
Ad expected = expectedAds[i];
AdListItemDto actual = response.Ads[i];

Assert.Equal(expected.Id, actual.Id);
Assert.Equal(expected.TutorId, actual.TutorId);
Assert.Equal(expected.User.Name, actual.TutorName);
Assert.Equal(expected.Subject, actual.Subject);
Assert.Equal(expected.Title, actual.Title);
Assert.Equal(expected.Description, actual.Description);
Assert.Equal(expected.CategoryId, actual.CategoryId);
Assert.Equal(expected.Category.Name, actual.CategoryName);
Assert.Equal(expected.Price, actual.Price);
Assert.Equal(expected.Location, actual.Location);
Assert.Equal(expected.IsRemote, actual.IsRemote);
}

}
}
Loading
Loading