Skip to content

Commit

Permalink
Move some helper methods from base class to GetUsersScheduleTests
Browse files Browse the repository at this point in the history
  • Loading branch information
Zjyslav committed May 27, 2024
1 parent e453674 commit f75448c
Show file tree
Hide file tree
Showing 2 changed files with 151 additions and 152 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,6 @@ public async Task GetUsersSchedule_WhenUserHasAdsWithScheduleItems_ShouldReturnC
}
}



[Fact]
public async Task GetUsersSchedule_WhenUserHasScheduleItemRequests_ShouldReturnCorrectStudentsSchedule()
{
Expand Down Expand Up @@ -267,4 +265,109 @@ public async Task GetUsersSchedule_WhenRequestIsPending_ShouldReturnCorrectStatu
// Assert
Assert.Equal(expectedStatus, actualStatus);
}

private void SetupMockScheduleData(int scheduleItemCount, int adCount, int scheduleItemRequestCount)
{
SetupMockGetAllScheduleItems(scheduleItemCount);

CreateAdsForScheduleItems(adCount);

CreateScheduleItemRequestsForScheduleItems(scheduleItemRequestCount);
}

private User CreateUserAndGiveHimExistingAds(int usersFinalAdCount)
{
User user = CreateTestUserAndAddToDb();

while (user.Ads.Count < usersFinalAdCount)
{
ChangeUserInRandomAdInDb(user);
}

return user;
}

private User CreateUserAndGiveHimExistingScheduleItemRequests(int usersFinalScheduleItemRequestCount)
{
User user = CreateTestUserAndAddToDb();

while (user.ScheduleItemRequests.Count < usersFinalScheduleItemRequestCount)
{
ChangeUserInRandomScheduleItemRequestInDb(user);
}

return user;
}

private void ChangeUserInRandomAdInDb(User user)
{
List<Ad> ads = DbContext.Ads.ToList();

Ad ad = ads[Random.Shared.Next(ads.Count)];

ad.User = user;
DbContext.SaveChanges();
}

private void ChangeUserInRandomScheduleItemRequestInDb(User user)
{
List<ScheduleItem> scheduleItems = DbContext.ScheduleItems.ToList();

ScheduleItem scheduleItem = scheduleItems[Random.Shared.Next(scheduleItems.Count)];

ScheduleItemRequest? request = scheduleItem.ScheduleItemRequests.FirstOrDefault();

if (request is not null)
{
request.User = user;
}

DbContext.SaveChanges();
}

private void CreateAdsForScheduleItems(int adCount)
{
var ads = CreateTestAds(adCount);
AddEntitiesToInMemoryDb(ads);

ChangeAdToRandomInAllScheduleItems();

DbContext.SaveChanges();
}

private void CreateScheduleItemRequestsForScheduleItems(int scheduleItemRequestCount)
{
var scheduleItemRequests = CreateTestScheduleItemRequests(scheduleItemRequestCount);
AddEntitiesToInMemoryDb(scheduleItemRequests);

ChangeScheduleItemToRandomInAllScheduleItemRequests();

DbContext.SaveChanges();
}

private void ChangeAdToRandomInAllScheduleItems()
{
List<ScheduleItem> scheduleItems = DbContext.ScheduleItems.ToList();
List<Ad> ads = DbContext.Ads.ToList();

foreach (ScheduleItem item in scheduleItems)
{
item.Ad = ads[Random.Shared.Next(ads.Count)];
}

DbContext.SaveChanges();
}

private void ChangeScheduleItemToRandomInAllScheduleItemRequests()
{
List<ScheduleItemRequest> scheduleItemRequests = DbContext.ScheduleItemRequests.ToList();
List<ScheduleItem> scheduleItems = DbContext.ScheduleItems.ToList();

foreach (ScheduleItemRequest request in scheduleItemRequests)
{
request.ScheduleItem = scheduleItems[Random.Shared.Next(scheduleItems.Count)];
}

DbContext.SaveChanges();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,89 +27,37 @@ public void Dispose()
DbContext.Dispose();
}

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

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

private void ChangeAdToRandomInAllScheduleItems()
{
List<ScheduleItem> scheduleItems = DbContext.ScheduleItems.ToList();
List<Ad> ads = DbContext.Ads.ToList();

foreach (ScheduleItem item in scheduleItems)
{
item.Ad = ads[Random.Shared.Next(ads.Count)];
}

DbContext.SaveChanges();
}

private void ChangeScheduleItemToRandomInAllScheduleItemRequests()
{
List<ScheduleItemRequest> scheduleItemRequests = DbContext.ScheduleItemRequests.ToList();
List<ScheduleItem> scheduleItems = DbContext.ScheduleItems.ToList();

foreach (ScheduleItemRequest request in scheduleItemRequests)
{
request.ScheduleItem = scheduleItems[Random.Shared.Next(scheduleItems.Count)];
}

DbContext.SaveChanges();
}

private void ChangeUserInRandomAdInDb(User user)
protected void SetupMockGetAllAds(List<Ad> ads)
{
List<Ad> ads = DbContext.Ads.ToList();

Ad ad = ads[Random.Shared.Next(ads.Count)];

ad.User = user;
DbContext.SaveChanges();
var adsInDb = AddEntitiesToInMemoryDb(ads);
MockAdRepository
.Setup(x => x.GetAll())
.Returns(adsInDb);
}

private void ChangeUserInRandomScheduleItemRequestInDb(User user)
protected void SetupMockGetAdById(Ad? ad)
{
List<ScheduleItem> scheduleItems = DbContext.ScheduleItems.ToList();

ScheduleItem scheduleItem = scheduleItems[Random.Shared.Next(scheduleItems.Count)];

ScheduleItemRequest? request = scheduleItem.ScheduleItemRequests.FirstOrDefault();

if (request is not null)
{
request.User = user;
}

DbContext.SaveChanges();
MockAdRepository
.Setup(x => x.GetById(It.IsAny<int>()))
.Returns(Task.FromResult(ad));
}

private void CreateAdsForScheduleItems(int adCount)
protected void SetupMockGetAllScheduleItems(int scheduleItemCount)
{
var ads = CreateTestAds(adCount);
AddEntitiesToInMemoryDb(ads);

ChangeAdToRandomInAllScheduleItems();

DbContext.SaveChanges();
var scheduleItems = CreateTestScheduleItems(scheduleItemCount);
var scheduleItemsInDb = AddEntitiesToInMemoryDb(scheduleItems);
MockScheduleItemRepository
.Setup(x => x.GetAll())
.Returns(scheduleItemsInDb);
}

private void CreateScheduleItemRequestsForScheduleItems(int scheduleItemRequestCount)
protected User CreateTestUserAndAddToDb(int usersAdCount = 0, int usersScheduleItemRequestCount = 0)
{
var scheduleItemRequests = CreateTestScheduleItemRequests(scheduleItemRequestCount);
AddEntitiesToInMemoryDb(scheduleItemRequests);

ChangeScheduleItemToRandomInAllScheduleItemRequests();

DbContext.SaveChanges();
User user = CreateTestUser();
user.Ads = CreateTestAds(usersAdCount);
user.ScheduleItemRequests = CreateTestScheduleItemRequests(usersScheduleItemRequestCount);
AddEntitiesToInMemoryDb([user]);
return user;
}

protected List<Ad> CreateTestAds(int adCount)
Expand All @@ -128,7 +76,19 @@ protected List<Ad> CreateTestAds(int adCount)
return ads;
}

private Category CreateTestCategory()
protected User CreateTestUser()
{
User user = Fixture
.Build<User>()
.Without(user => user.Ads)
.Without(user => user.AdRequests)
.Without(user => user.ScheduleItemRequests)
.Create();

return user;
}

protected Category CreateTestCategory()
{
Category category = Fixture
.Build<Category>()
Expand All @@ -138,7 +98,7 @@ private Category CreateTestCategory()
return category;
}

private List<ScheduleItemRequest> CreateTestScheduleItemRequests(int requestCount)
protected List<ScheduleItemRequest> CreateTestScheduleItemRequests(int requestCount)
{
List<ScheduleItemRequest> requests = Fixture
.Build<ScheduleItemRequest>()
Expand All @@ -151,7 +111,7 @@ private List<ScheduleItemRequest> CreateTestScheduleItemRequests(int requestCoun
return requests;
}

private List<ScheduleItem> CreateTestScheduleItems(int scheduleItemCount)
protected List<ScheduleItem> CreateTestScheduleItems(int scheduleItemCount)
{
var ads = CreateTestAds(scheduleItemCount);

Expand All @@ -165,89 +125,25 @@ private List<ScheduleItem> CreateTestScheduleItems(int scheduleItemCount)

return scheduleItems;
}
private User CreateTestUser()
{
User user = Fixture
.Build<User>()
.Without(user => user.Ads)
.Without(user => user.AdRequests)
.Without(user => user.ScheduleItemRequests)
.Create();

return user;
}

protected User CreateTestUserAndAddToDb(int usersAdCount = 0, int usersScheduleItemRequestCount = 0)
{
User user = CreateTestUser();
user.Ads = CreateTestAds(usersAdCount);
user.ScheduleItemRequests = CreateTestScheduleItemRequests(usersScheduleItemRequestCount);
AddEntitiesToInMemoryDb([user]);
return user;
}

protected User CreateUserAndGiveHimExistingAds(int usersFinalAdCount)
{
User user = CreateTestUserAndAddToDb();

while (user.Ads.Count < usersFinalAdCount)
{
ChangeUserInRandomAdInDb(user);
}

return user;
}

protected User CreateUserAndGiveHimExistingScheduleItemRequests(int usersFinalScheduleItemRequestCount)
protected IQueryable<TEntity> AddEntitiesToInMemoryDb<TEntity>(List<TEntity> entities)
where TEntity : class
{
User user = CreateTestUserAndAddToDb();

while (user.ScheduleItemRequests.Count < usersFinalScheduleItemRequestCount)
{
ChangeUserInRandomScheduleItemRequestInDb(user);
}
DbContext
.Set<TEntity>()
.AddRange(entities);
DbContext.SaveChanges();

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

protected JaszczurContext SetupInMemoryDbContext()
private JaszczurContext SetupInMemoryDbContext()
{
DbContextOptionsBuilder<JaszczurContext> dbBuilder = new();
dbBuilder.UseInMemoryDatabase(databaseName: $"FakeDb{Guid.NewGuid()}");
JaszczurContext context = new(dbBuilder.Options);
return context;
}

protected void SetupMockGetAdById(Ad? ad)
{
MockAdRepository
.Setup(x => x.GetById(It.IsAny<int>()))
.Returns(Task.FromResult(ad));
}

protected void SetupMockGetAllAds(List<Ad> ads)
{
var adsInDb = AddEntitiesToInMemoryDb(ads);
MockAdRepository
.Setup(x => x.GetAll())
.Returns(adsInDb);
}

protected void SetupMockGetAllScheduleItems(int scheduleItemCount)
{
var scheduleItems = CreateTestScheduleItems(scheduleItemCount);
var scheduleItemsInDb = AddEntitiesToInMemoryDb(scheduleItems);
MockScheduleItemRepository
.Setup(x => x.GetAll())
.Returns(scheduleItemsInDb);
}

protected void SetupMockScheduleData(int scheduleItemCount, int adCount, int scheduleItemRequestCount)
{
SetupMockGetAllScheduleItems(scheduleItemCount);

CreateAdsForScheduleItems(adCount);

CreateScheduleItemRequestsForScheduleItems(scheduleItemRequestCount);
}
}

0 comments on commit f75448c

Please sign in to comment.