From 433e18f94712d03c0756376aa704c96a41f4fd61 Mon Sep 17 00:00:00 2001 From: DCay Date: Sun, 14 Apr 2024 14:02:08 +0300 Subject: [PATCH] MT-00 Added 3 Unit Tests and CI workflow --- .github/workflows/ci.yml | 28 ++++ .github/workflows/docker-image.yml | 2 +- .../MeTube.Data/Repository/BaseRepository.cs | 2 +- .../Repository/Channels/ChannelRepository.cs | 2 +- .../Repository/Channels/IChannelRepository.cs | 7 + .../MeTube.Data/Repository/IBaseRepository.cs | 14 ++ .../Reactions/IReactionTypeRepository.cs | 7 + .../Reactions/IVideoReactionRepository.cs | 7 + .../Reactions/ReactionTypeRepository.cs | 2 +- .../Reactions/VideoReactionRepository.cs | 2 +- .../Repository/Videos/IVideoRepository.cs | 7 + .../Repository/Videos/VideoRepository.cs | 4 +- src/MeTube.sln | 7 + .../MeTube.Service.Tests.csproj | 33 +++++ .../Mocks/TaskAsyncEnumerable.cs | 29 ++++ .../Mocks/TestAsyncEnumerator.cs | 40 ++++++ .../Mocks/TestAsyncQueryProvider.cs | 49 +++++++ .../Utilities/MoqExtensions.cs | 55 +++++++ .../Videos/VideoServiceTests.cs | 134 ++++++++++++++++++ .../Playlist/PlaylistService.cs | 5 +- .../MeTube.Service/Videos/VideoService.cs | 27 ++-- src/Web/MeTube.Web/Program.cs | 5 +- 22 files changed, 446 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 src/Data/MeTube.Data/Repository/Channels/IChannelRepository.cs create mode 100644 src/Data/MeTube.Data/Repository/IBaseRepository.cs create mode 100644 src/Data/MeTube.Data/Repository/Reactions/IReactionTypeRepository.cs create mode 100644 src/Data/MeTube.Data/Repository/Reactions/IVideoReactionRepository.cs create mode 100644 src/Data/MeTube.Data/Repository/Videos/IVideoRepository.cs create mode 100644 src/Service/MeTube.Service.Tests/MeTube.Service.Tests.csproj create mode 100644 src/Service/MeTube.Service.Tests/Mocks/TaskAsyncEnumerable.cs create mode 100644 src/Service/MeTube.Service.Tests/Mocks/TestAsyncEnumerator.cs create mode 100644 src/Service/MeTube.Service.Tests/Mocks/TestAsyncQueryProvider.cs create mode 100644 src/Service/MeTube.Service.Tests/Utilities/MoqExtensions.cs create mode 100644 src/Service/MeTube.Service.Tests/Videos/VideoServiceTests.cs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..8f620cd --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,28 @@ +name: CI + +on: + push: + pull_request: + branches: [ main ] +env: + DOTNET_VERSION: '8.0.x' +jobs: + ci: + name: ci-${{matrix.os}} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest] + steps: + - name: Check out the repo + uses: actions/checkout@v4 + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: ${{ env.DOTNET_VERSION }} + - name: Install dependencies + run: dotnet restore + - name: Build + run: dotnet build --configuration Release --no-restore + - name: Test + run: dotnet test --no-restore --verbosity normal \ No newline at end of file diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index e90f18a..2d366a6 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -1,4 +1,4 @@ -name: Docker Image CI +name: Docker Image CD on: push: diff --git a/src/Data/MeTube.Data/Repository/BaseRepository.cs b/src/Data/MeTube.Data/Repository/BaseRepository.cs index e29dd18..5fd7092 100644 --- a/src/Data/MeTube.Data/Repository/BaseRepository.cs +++ b/src/Data/MeTube.Data/Repository/BaseRepository.cs @@ -3,7 +3,7 @@ namespace MeTube.Data.Repository; -public class BaseRepository where TEntity : BaseEntity +public class BaseRepository : IBaseRepository where TEntity : BaseEntity { protected readonly MeTubeDbContext _dbContext; diff --git a/src/Data/MeTube.Data/Repository/Channels/ChannelRepository.cs b/src/Data/MeTube.Data/Repository/Channels/ChannelRepository.cs index 1bd3901..519b0a3 100644 --- a/src/Data/MeTube.Data/Repository/Channels/ChannelRepository.cs +++ b/src/Data/MeTube.Data/Repository/Channels/ChannelRepository.cs @@ -2,7 +2,7 @@ namespace MeTube.Data.Repository.Channels; -public class ChannelRepository : BaseRepository +public class ChannelRepository : BaseRepository, IChannelRepository { public ChannelRepository(MeTubeDbContext dbContext) : base(dbContext) { diff --git a/src/Data/MeTube.Data/Repository/Channels/IChannelRepository.cs b/src/Data/MeTube.Data/Repository/Channels/IChannelRepository.cs new file mode 100644 index 0000000..59a6a80 --- /dev/null +++ b/src/Data/MeTube.Data/Repository/Channels/IChannelRepository.cs @@ -0,0 +1,7 @@ +using MeTube.Data.Models.Channels; + +namespace MeTube.Data.Repository.Channels; + +public interface IChannelRepository : IBaseRepository +{ +} diff --git a/src/Data/MeTube.Data/Repository/IBaseRepository.cs b/src/Data/MeTube.Data/Repository/IBaseRepository.cs new file mode 100644 index 0000000..c0516fd --- /dev/null +++ b/src/Data/MeTube.Data/Repository/IBaseRepository.cs @@ -0,0 +1,14 @@ +namespace MeTube.Data.Repository; + +public interface IBaseRepository +{ + Task CreateAsync(TEntity entity); + + IQueryable GetAll(); + + IQueryable GetAllAsNoTracking(); + + Task EditAsync(TEntity entity); + + Task DeleteAsync(TEntity entity); +} diff --git a/src/Data/MeTube.Data/Repository/Reactions/IReactionTypeRepository.cs b/src/Data/MeTube.Data/Repository/Reactions/IReactionTypeRepository.cs new file mode 100644 index 0000000..73704c6 --- /dev/null +++ b/src/Data/MeTube.Data/Repository/Reactions/IReactionTypeRepository.cs @@ -0,0 +1,7 @@ +using MeTube.Data.Models.Reactions; + +namespace MeTube.Data.Repository.Reactions; + +public interface IReactionTypeRepository : IBaseRepository +{ +} diff --git a/src/Data/MeTube.Data/Repository/Reactions/IVideoReactionRepository.cs b/src/Data/MeTube.Data/Repository/Reactions/IVideoReactionRepository.cs new file mode 100644 index 0000000..8822409 --- /dev/null +++ b/src/Data/MeTube.Data/Repository/Reactions/IVideoReactionRepository.cs @@ -0,0 +1,7 @@ +using MeTube.Data.Models.Reactions; + +namespace MeTube.Data.Repository.Reactions; + +public interface IVideoReactionRepository : IBaseRepository +{ +} diff --git a/src/Data/MeTube.Data/Repository/Reactions/ReactionTypeRepository.cs b/src/Data/MeTube.Data/Repository/Reactions/ReactionTypeRepository.cs index 0322543..69043e5 100644 --- a/src/Data/MeTube.Data/Repository/Reactions/ReactionTypeRepository.cs +++ b/src/Data/MeTube.Data/Repository/Reactions/ReactionTypeRepository.cs @@ -2,7 +2,7 @@ namespace MeTube.Data.Repository.Reactions; -public class ReactionTypeRepository : BaseRepository +public class ReactionTypeRepository : BaseRepository, IReactionTypeRepository { public ReactionTypeRepository(MeTubeDbContext dbContext) : base(dbContext) diff --git a/src/Data/MeTube.Data/Repository/Reactions/VideoReactionRepository.cs b/src/Data/MeTube.Data/Repository/Reactions/VideoReactionRepository.cs index b555941..de2a31a 100644 --- a/src/Data/MeTube.Data/Repository/Reactions/VideoReactionRepository.cs +++ b/src/Data/MeTube.Data/Repository/Reactions/VideoReactionRepository.cs @@ -2,7 +2,7 @@ namespace MeTube.Data.Repository.Reactions; -public class VideoReactionRepository : BaseRepository +public class VideoReactionRepository : BaseRepository, IVideoReactionRepository { public VideoReactionRepository(MeTubeDbContext dbContext) : base(dbContext) diff --git a/src/Data/MeTube.Data/Repository/Videos/IVideoRepository.cs b/src/Data/MeTube.Data/Repository/Videos/IVideoRepository.cs new file mode 100644 index 0000000..1716cc7 --- /dev/null +++ b/src/Data/MeTube.Data/Repository/Videos/IVideoRepository.cs @@ -0,0 +1,7 @@ +using MeTube.Data.Models.Videos; + +namespace MeTube.Data.Repository.Videos; + +public interface IVideoRepository : IBaseRepository