Skip to content

Commit

Permalink
Merge develop into feature/ja-120
Browse files Browse the repository at this point in the history
  • Loading branch information
Zjyslav committed Jun 26, 2024
2 parents 23414ce + ec1435d commit 15e446b
Show file tree
Hide file tree
Showing 161 changed files with 3,056 additions and 747 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using TutorLizard.BusinessLogic.Enums;
using TutorLizard.BusinessLogic.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Models;
using TutorLizard.BusinessLogic.Models;
using TutorLizard.Shared.Enums;
using TutorLizard.Shared.Models.DTOs.Requests;

namespace TutorLizard.BusinessLogic.Tests.Services.Browse;
public class BrowseServiceGetAdDetailsTests : BrowseServiceTestsBase
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
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;
using TutorLizard.Shared.Models.DTOs;
using TutorLizard.Shared.Models.DTOs.Requests;
using TutorLizard.Shared.Models.DTOs.Responses;

namespace TutorLizard.BusinessLogic.Tests.Services.Browse;
public class BrowseServiceGetBrowseAdsPageTests : BrowseServiceTestsBase
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using TutorLizard.BusinessLogic.Models;
using TutorLizard.BusinessLogic.Models.DTOs;
using TutorLizard.BusinessLogic.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Services;
using TutorLizard.Shared.Models.DTOs;
using TutorLizard.Shared.Models.DTOs.Requests;

namespace TutorLizard.BusinessLogic.Tests.Services.Browse;
public class BrowseServiceGetUsersScheduleTests : BrowseServiceTestsBase
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
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;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
using Moq;
using TutorLizard.BusinessLogic.Models;
using TutorLizard.Shared.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Services;

namespace TutorLizard.BusinessLogic.Tests.Services.Student
{
public class StudentServiceScheduleItemRequestTests : StudentServiceTestBase
{
[Theory]
[InlineData(true)]
[InlineData(false)]
public async Task CreateScheduleItemRequest_ShouldSetIsRemoteCorrectly(bool isRemote)
{
// Arrange
var ad = new Ad
{
Description = "Test Description",
Location = "Test Location",
Subject = "Test Subject",
Title = "Test Title",
TutorId = 2
};
var scheduleItem = new ScheduleItem { Id = 1, Ad = ad };

SetupMockGetScheduleItemById(scheduleItem);
SetupMockGetAllScheduleItems(new List<ScheduleItem> { scheduleItem });

var request = new CreateScheduleItemRequestRequest
{
StudentId = 3,
ScheduleItemId = 1,
IsRemote = isRemote
};

MockScheduleItemRequestRepository
.Setup(x => x.Create(It.Is<ScheduleItemRequest>(req => req.IsRemote == isRemote)))
.Returns((ScheduleItemRequest req) => Task.FromResult(req))
.Verifiable(Times.Once);

// Act
await StudentService.CreateScheduleItemRequest(request);

// Assert
MockScheduleItemRequestRepository.VerifyAll();
}

[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);
}





}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using AutoFixture;
using Moq;
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();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using AutoFixture;
using Microsoft.AspNetCore.Mvc;
using Moq;
using TutorLizard.BusinessLogic.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Models.DTOs.Responses;
using TutorLizard.Shared.Models.DTOs.Requests;
using TutorLizard.Shared.Models.DTOs.Responses;

namespace TutorLizard.Web.Tests.Controllers.Browse;
public class BrowseControllerAdDetailsTests : BrowseControllerTestsBase
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
using AutoFixture;
using Microsoft.AspNetCore.Mvc;
using Moq;
using TutorLizard.BusinessLogic.Models.DTOs;
using TutorLizard.BusinessLogic.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Models.DTOs.Responses;
using TutorLizard.Shared.Models.DTOs;
using TutorLizard.Shared.Models.DTOs.Requests;
using TutorLizard.Shared.Models.DTOs.Responses;

namespace TutorLizard.Web.Tests.Controllers.Browse;
public class BrowseControllerAdsTests : BrowseControllerTestsBase
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using AutoFixture;
using Microsoft.AspNetCore.Mvc;
using Moq;
using TutorLizard.BusinessLogic.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Models.DTOs.Responses;
using TutorLizard.Shared.Models.DTOs.Requests;
using TutorLizard.Shared.Models.DTOs.Responses;

namespace TutorLizard.Web.Tests.Controllers.Browse;
public class BrowseControllerScheduleTests : BrowseControllerTestsBase
Expand Down
10 changes: 10 additions & 0 deletions TutorLizard.Blazor/Components/_Imports.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using static Microsoft.AspNetCore.Components.Web.RenderMode
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using TutorLizard.Blazor
@using TutorLizard.Blazor.Components
5 changes: 5 additions & 0 deletions TutorLizard.Blazor/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;

var builder = WebAssemblyHostBuilder.CreateDefault(args);

await builder.Build().RunAsync();
19 changes: 19 additions & 0 deletions TutorLizard.Blazor/TutorLizard.Blazor.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.5" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\TutorLizard.Shared\TutorLizard.Shared.csproj" />
</ItemGroup>

</Project>
5 changes: 5 additions & 0 deletions TutorLizard.BusinessLogic/Data/JaszczurContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
.Property(user => user.Id)
.ValueGeneratedOnAdd();

modelBuilder.Entity<User>()
.Property(user => user.IsActive)
.HasDefaultValue(false)
.IsRequired();

modelBuilder.Entity<User>()
.Property(user => user.UserType)
.HasConversion<byte>();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Microsoft.Extensions.Options;
using TutorLizard.BusinessLogic.Enums;
using TutorLizard.Shared.Enums;
using TutorLizard.BusinessLogic.Interfaces.Data.Repositories;
using TutorLizard.BusinessLogic.Models;
using TutorLizard.BusinessLogic.Options;
Expand All @@ -15,9 +15,9 @@ public UserJsonRepository(IOptions<DataJsonFilePaths> options) : base(options.Va

}

public User CreateUser(string name, UserType type, string email, string passwordHash)
public User CreateUser(string name, UserType type, string email, string passwordHash, string googleid)
{
User newUser = new(GetNewId(), name, type, email, passwordHash);
User newUser = new(GetNewId(), name, type, email, passwordHash, googleid);
Data.Add(newUser);
SaveToJson();

Expand Down
3 changes: 0 additions & 3 deletions TutorLizard.BusinessLogic/Enums/UserType.cs

This file was deleted.

35 changes: 12 additions & 23 deletions TutorLizard.BusinessLogic/Extensions/DtoExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,30 +1,19 @@
using TutorLizard.BusinessLogic.Models;
using TutorLizard.BusinessLogic.Models.DTOs;
using TutorLizard.Shared.Models.DTOs;

namespace TutorLizard.BusinessLogic.Extensions;
public static class DtoExtensions
{
private static readonly ScheduleItemDto.ScheduleItemRequestStatus status;
public static CategoryDto ToDto(this Category category)
=> new CategoryDto(category.Id,
category.Name,
category.Description);

public static AdDto ToDto(this Ad ad) => new AdDto(ad);
public static AdRequestDto ToDto(this AdRequest adRequest) => new AdRequestDto(adRequest);
public static CategoryDto ToDto(this Category category) => new CategoryDto(category);
public static ScheduleItemDto ToDto(this ScheduleItem scheduleItem) => new ScheduleItemDto(scheduleItem, status);
public static ScheduleItemRequestDto ToDto(this ScheduleItemRequest scheduleItemRequest) => new ScheduleItemRequestDto(scheduleItemRequest);
public static UserDto ToDto(this User user) => new UserDto(user);

public static AdListItemDto ToAdListItemDto(this Ad ad)
{
return new AdListItemDto(id: ad.Id,
tutorId: ad.TutorId,
tutorName: ad.User.Name,
subject: ad.Subject,
title: ad.Title,
description: ad.Description,
categoryId: ad.CategoryId,
categoryName: ad.Category.Name,
price: ad.Price,
location: ad.Location,
isRemote: ad.IsRemote);
}
public static UserDto ToDto(this User user)
=> new UserDto(user.Id,
user.Name,
user.UserType,
user.Email,
user.DateCreated,
user.GoogleId);
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
using TutorLizard.BusinessLogic.Enums;
using TutorLizard.Shared.Enums;
using TutorLizard.BusinessLogic.Models;
using TutorLizard.BusinessLogic.Models.DTOs;

namespace TutorLizard.BusinessLogic.Interfaces.Data.Repositories;
public interface IUserRepository
{
User CreateUser(string name, UserType type, string email, string passwordHash);
User CreateUser(string name, UserType type, string email, string passwordHash, string googleId);
void DeleteUserById(int id);
List<User> GetAllUsers();
User? GetUserById(int id);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using TutorLizard.BusinessLogic.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Models.DTOs.Responses;
using TutorLizard.Shared.Models.DTOs.Requests;
using TutorLizard.Shared.Models.DTOs.Responses;

namespace TutorLizard.BusinessLogic.Interfaces.Services;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using TutorLizard.BusinessLogic.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Models.DTOs.Responses;
using TutorLizard.Shared.Models.DTOs.Requests;
using TutorLizard.Shared.Models.DTOs.Responses;

namespace TutorLizard.BusinessLogic.Interfaces.Services;
public interface ICategoryService
Expand Down
15 changes: 7 additions & 8 deletions TutorLizard.BusinessLogic/Interfaces/Services/IStudentService.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
using TutorLizard.BusinessLogic.Models;
using TutorLizard.BusinessLogic.Models.DTOs.Requests;
using TutorLizard.BusinessLogic.Models.DTOs.Responses;
using TutorLizard.Shared.Models.DTOs.Requests;
using TutorLizard.Shared.Models.DTOs.Responses;

namespace TutorLizard.BusinessLogic.Interfaces.Services;

public interface IStudentService
{
Task<StudentsAcceptedAdsResponse> ViewAcceptedAds(StudentsAcceptedAdsRequest request);
Task<StudentsAdRequestsResponse> ViewAdRequests(StudentsAdRequestsRequest request);
Task<AdRequestStatusResponse> ViewAdRequestStatus(AdRequestStatusRequest request);
Task<StudentCancelAdRequestResponse> DeleteAdRequest(StudentCancelAdRequestRequest request);
Task<GetStudentsAcceptedAdsResponse> GetStudentsAcceptedAds(GetStudentsAcceptedAdsRequest request);
Task<GetStudentsAdRequestsResponse> GetStudentsAdRequests(GetStudentsAdRequestsRequest request);
Task<GetAdRequestStatusResponse> GetAdRequestStatus(GetAdRequestStatusRequest request);
Task<DeleteAdRequestResponse> DeleteAdRequest(DeleteAdRequestRequest request);
Task<CreateScheduleItemRequestResponse> CreateScheduleItemRequest(CreateScheduleItemRequestRequest request);
Task<AvailableScheduleForAdResponse> GetAvailableScheduleForAd(AvailableScheduleForAdRequest request);
Task<GetAvailableScheduleForAdResponse> GetAvailableScheduleForAd(GetAvailableScheduleForAdRequest request);
Task<CreateAdRequestResponse> CreateAdRequest(CreateAdRequestRequest request);
}
Loading

0 comments on commit 15e446b

Please sign in to comment.