mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-20 05:13:18 -07:00
Added the Rules Engine Pattern and the Auto approve and request rules #865
This commit is contained in:
parent
7f2cfdafd1
commit
d10b0f7081
11 changed files with 238 additions and 48 deletions
22
src/Ombi.Core.Tests/Ombi.Core.Tests.csproj
Normal file
22
src/Ombi.Core.Tests/Ombi.Core.Tests.csproj
Normal file
|
@ -0,0 +1,22 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp1.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
|
||||
<PackageReference Include="Moq" Version="4.7.10" />
|
||||
<PackageReference Include="xunit" Version="2.2.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Ombi.Core\Ombi.Core.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
87
src/Ombi.Core.Tests/Rule/AutoApproveRuleTests.cs
Normal file
87
src/Ombi.Core.Tests/Rule/AutoApproveRuleTests.cs
Normal file
|
@ -0,0 +1,87 @@
|
|||
using Ombi.Core.Rule.Rules;
|
||||
using Xunit;
|
||||
using System.Security.Principal;
|
||||
using Moq;
|
||||
using Ombi.Core.Models.Requests;
|
||||
using Ombi.Core.Claims;
|
||||
|
||||
namespace Ombi.Core.Tests
|
||||
{
|
||||
public class AutoApproveRuleTests
|
||||
{
|
||||
public AutoApproveRuleTests()
|
||||
{
|
||||
PrincipalMock = new Mock<IPrincipal>();
|
||||
Rule = new AutoApproveRule(PrincipalMock.Object);
|
||||
}
|
||||
|
||||
private AutoApproveRule Rule { get; }
|
||||
private Mock<IPrincipal> PrincipalMock { get; }
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnSuccess_WhenAdminAndRequestMovie()
|
||||
{
|
||||
PrincipalMock.Setup(x => x.IsInRole(OmbiClaims.Admin)).Returns(true);
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.Movie };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, true);
|
||||
Assert.Equal(request.Approved, true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnSuccess_WhenAdminAndRequestTV()
|
||||
{
|
||||
PrincipalMock.Setup(x => x.IsInRole(OmbiClaims.Admin)).Returns(true);
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.TvShow };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, true);
|
||||
Assert.Equal(request.Approved, true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnSuccess_WhenAutoApproveMovieAndRequestMovie()
|
||||
{
|
||||
PrincipalMock.Setup(x => x.IsInRole(OmbiClaims.AutoApproveMovie)).Returns(true);
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.Movie };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, true);
|
||||
Assert.Equal(request.Approved, true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnSuccess_WhenAutoApproveTVAndRequestTV()
|
||||
{
|
||||
PrincipalMock.Setup(x => x.IsInRole(OmbiClaims.AutoApproveTv)).Returns(true);
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.TvShow };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, true);
|
||||
Assert.Equal(request.Approved, true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnFail_WhenNoClaimsAndRequestMovie()
|
||||
{
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.Movie };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, true);
|
||||
Assert.Equal(request.Approved, false);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnFail_WhenNoClaimsAndRequestTV()
|
||||
{
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.TvShow };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, true);
|
||||
Assert.Equal(request.Approved, false);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
83
src/Ombi.Core.Tests/Rule/CanRequestRuleTests.cs
Normal file
83
src/Ombi.Core.Tests/Rule/CanRequestRuleTests.cs
Normal file
|
@ -0,0 +1,83 @@
|
|||
using Ombi.Core.Rule.Rules;
|
||||
using Xunit;
|
||||
using System.Security.Principal;
|
||||
using Moq;
|
||||
using Ombi.Core.Models.Requests;
|
||||
using Ombi.Core.Claims;
|
||||
|
||||
namespace Ombi.Core.Tests
|
||||
{
|
||||
public class CanRequestRuleTests
|
||||
{
|
||||
public CanRequestRuleTests()
|
||||
{
|
||||
PrincipalMock = new Mock<IPrincipal>();
|
||||
Rule = new CanRequestRule(PrincipalMock.Object);
|
||||
}
|
||||
|
||||
private CanRequestRule Rule { get; }
|
||||
private Mock<IPrincipal> PrincipalMock { get; }
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnSuccess_WhenRequestingMovieWithMovieRole()
|
||||
{
|
||||
PrincipalMock.Setup(x => x.IsInRole(OmbiClaims.RequestMovie)).Returns(true);
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.Movie };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnFail_WhenRequestingMovieWithoutMovieRole()
|
||||
{
|
||||
PrincipalMock.Setup(x => x.IsInRole(OmbiClaims.RequestMovie)).Returns(false);
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.Movie };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, false);
|
||||
Assert.Equal(string.IsNullOrEmpty(result.Message), false);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnSuccess_WhenRequestingMovieWithAdminRole()
|
||||
{
|
||||
PrincipalMock.Setup(x => x.IsInRole(OmbiClaims.Admin)).Returns(true);
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.Movie };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnSuccess_WhenRequestingTVWithAdminRole()
|
||||
{
|
||||
PrincipalMock.Setup(x => x.IsInRole(OmbiClaims.Admin)).Returns(true);
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.TvShow };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnSuccess_WhenRequestingTVWithTVRole()
|
||||
{
|
||||
PrincipalMock.Setup(x => x.IsInRole(OmbiClaims.RequestTv)).Returns(true);
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.TvShow };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Should_ReturnFail_WhenRequestingTVWithoutTVRole()
|
||||
{
|
||||
PrincipalMock.Setup(x => x.IsInRole(OmbiClaims.RequestTv)).Returns(false);
|
||||
var request = new BaseRequestModel() { Type = Store.Entities.RequestType.TvShow };
|
||||
var result = Rule.Execute(request);
|
||||
|
||||
Assert.Equal(result.Success, false);
|
||||
Assert.Equal(string.IsNullOrEmpty(result.Message), false);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue