Skip to content

Commit

Permalink
feat: CRUD operations for Filetype (#8)
Browse files Browse the repository at this point in the history
* tmp

* tmp

* impl
  • Loading branch information
Andras-Csanyi authored Sep 15, 2024
1 parent 6f41835 commit 1a7d5ea
Show file tree
Hide file tree
Showing 28 changed files with 1,054 additions and 15 deletions.
7 changes: 6 additions & 1 deletion Backend.sln.DotSettings
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,16 @@
<s:String x:Key="/Default/CodeStyle/CSharpVarKeywordUsage/ForBuiltInTypes/@EntryValue">UseExplicitType</s:String>
<s:String x:Key="/Default/CodeStyle/CSharpVarKeywordUsage/ForOtherTypes/@EntryValue">UseExplicitType</s:String>
<s:String x:Key="/Default/CodeStyle/CSharpVarKeywordUsage/ForSimpleTypes/@EntryValue">UseExplicitType</s:String>
<s:String x:Key="/Default/Environment/ContinuousTesting/ContinuousTestingMode/@EntryValue">CoverNewAndOutdated</s:String>
<s:Boolean x:Key="/Default/Environment/ContinuousTesting/TriggerOnBuild/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/Environment/ContinuousTesting/TriggerOnSave/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/General/RunTestClassesInParallel/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/Environment/Hierarchy/NuGetOptions/ConfigRestoreAuto/@EntryValue">Enable</s:String>
<s:String x:Key="/Default/Environment/Hierarchy/NuGetOptions/ConfigRestoreEnabled/@EntryValue">Enable</s:String>
<s:String x:Key="/Default/Environment/Highlighting/HighlightingMode/@EntryValue">OnlyMarkers</s:String>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
<s:String x:Key="/Default/Environment/SolutionCoverage/CoverageBrowserActivationType/@EntryValue">Never</s:String>
<s:Boolean x:Key="/Default/Environment/UnitTesting/ShowNotificationOnFinish/@EntryValue">False</s:Boolean></wpf:ResourceDictionary>
14 changes: 4 additions & 10 deletions Backend.sln.DotSettings.user
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,9 @@
<s:Boolean x:Key="/Default/Environment/Hierarchy/Build/SolutionBuilderNext/LogToOutput/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/Environment/Highlighting/HighlightingSourceSnapshotLocation/@EntryValue">/Users/andrascsanyi/Library/Caches/JetBrains/Rider2024.2/resharper-host/temp/Rider/vAny/CoverageData/_Backend.1702169323/Snapshot/snapshot.utdcvr</s:String>

<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=1ea6a038_002D2494_002D4766_002D9d9d_002D09bf8dda2fe0/@EntryIndexedValue">&lt;SessionState ContinuousTestingIsOn="True" ContinuousTestingMode="3" IsActive="True" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;Solution /&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=58c56b00_002Df81e_002D48fd_002Da74f_002Dc8e84271fcf4/@EntryIndexedValue">&lt;SessionState ContinuousTestingIsOn="True" ContinuousTestingMode="2" Name="Continuous Testing" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;Solution /&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=66696bc4_002D0714_002D4b58_002D81e2_002De1afddf7648f/@EntryIndexedValue">&lt;SessionState ContinuousTestingIsOn="True" ContinuousTestingMode="3" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;

<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=58c56b00_002Df81e_002D48fd_002Da74f_002Dc8e84271fcf4/@EntryIndexedValue">&lt;SessionState ContinuousTestingIsOn="True" ContinuousTestingMode="3" IsActive="True" Name="Continuous Testing" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;Solution /&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=7441b784_002D06a2_002D43a0_002Daff4_002D99de79a9485e/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;Solution /&gt;
&lt;/SessionState&gt;</s:String></wpf:ResourceDictionary>

</wpf:ResourceDictionary>
4 changes: 2 additions & 2 deletions DocumentDomain.Spec/DocumentDomain.Spec.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.12.0"/>
<PackageReference Include="FluentAssertions" Version="6.12.1"/>
<PackageReference Include="FluentAssertions.Analyzers" Version="0.33.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand All @@ -31,7 +31,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="EncyclopediaGalactica.BusinessLogic.Contracts" Version="2.5.0"/>
<PackageReference Include="EncyclopediaGalactica.BusinessLogic.Contracts" Version="2.6.0"/>
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
namespace DocumentDomain.Spec.Operations.Scenario.Filetype;

using EncyclopediaGalactica.BusinessLogic.Contracts;
using EncyclopediaGalactica.DocumentDomain.Operations.Scenarios;
using EncyclopediaGalactica.DocumentDomain.Operations.Scenarios.Filetype;
using FluentAssertions;
using LanguageExt;

public class AddFiletypeScenario : ScenarioBaseTest
{
[Theory]
[ClassData(typeof(AddFiletypeScenarioInputValidationInvalidInputData))]
public async Task ReturnErrorResult_WhenInputIsInvalid(FiletypeInput input)
{
Either<ErrorResult, FiletypeResult> result = await AddFiletypeScenario.ExecuteAsync(
new AddFiletypeScenarioContext(Guid.NewGuid(), input));
result.IsLeft.Should().BeTrue();
result.IsRight.Should().BeFalse();
result.IfLeft(er =>
{
er.CorrelationId.Should().NotBeEmpty();
er.ErrorMessage.Should().NotBeEmpty();
});
}

[Fact]
public async Task ReturnFiletypeResult_WhenOperationIsSuccessful()
{
Either<ErrorResult, FiletypeResult> result = await AddFiletypeScenario.ExecuteAsync(
new AddFiletypeScenarioContext(Guid.NewGuid(),
new FiletypeInput { Id = 0, Name = "asdd", Description = "asd", FileExtension = "asd" }));
result.IsLeft.Should().BeFalse();
result.IsRight.Should().BeTrue();
result.IfRight(r =>
{
r.Id.Should().BeGreaterOrEqualTo(1);
r.Name.Should().Be("asdd");
r.Description.Should().Be("asd");
r.FileExtension.Should().Be("asd");
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
namespace DocumentDomain.Spec.Operations.Scenario.Filetype;

using System.Collections;
using System.Diagnostics.CodeAnalysis;
using EncyclopediaGalactica.BusinessLogic.Contracts;
using EncyclopediaGalactica.DocumentDomain.Operations.Scenarios.Filetype;
using FluentAssertions;
using FluentValidation.Results;

public class AddFiletypeScenarioInputValidatorShould
{
private AddFiletypeScenarioInputValidator validator = new();

[Theory]
[ClassData(typeof(AddFiletypeScenarioInputValidationInvalidInputData))]
public void ShowInvalidState_WhenInputIsInvalid(FiletypeInput input)
{
ValidationResult result = validator.Validate(input);
result.IsValid.Should().BeFalse();
result.Errors.Should().NotBeEmpty();
}

[Fact]
public void ShowValidState_WhenInputIsValid()
{
ValidationResult validationResult = validator.Validate(
new FiletypeInput { Id = 0, Name = "asd", Description = "asd", FileExtension = "asd" });
validationResult.IsValid.Should().BeTrue();
validationResult.Errors.Should().BeEmpty();
}
}

[ExcludeFromCodeCoverage]
public class AddFiletypeScenarioInputValidationInvalidInputData : IEnumerable<object[]>
{
public IEnumerator<object[]> GetEnumerator()
{
yield return new object[] { new FiletypeInput { Id = 1, Name = "asd", Description = "asd", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 0, Name = null, Description = "asd", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 0, Name = string.Empty, Description = "asd", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 0, Name = " ", Description = "asd", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 0, Name = "as", Description = "asd", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 0, Name = " as ", Description = "asd", FileExtension = "asd" } };

yield return new object[] { new FiletypeInput { Id = 1, Name = "asd", Description = null, FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 0, Name = "asd", Description = string.Empty, FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 0, Name = "asd", Description = " ", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 0, Name = "asd", Description = "as", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 0, Name = "asd", Description = " as ", FileExtension = "asd" } };

yield return new object[] { new FiletypeInput { Id = 0, Name = "asd", Description = "asd", FileExtension = null } };
yield return new object[] { new FiletypeInput { Id = 0, Name = "asd", Description = "asd", FileExtension = string.Empty } };
}

IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
namespace DocumentDomain.Spec.Operations.Scenario.Filetype;

using EncyclopediaGalactica.BusinessLogic.Contracts;
using EncyclopediaGalactica.DocumentDomain.Operations.Scenarios.Filetype;
using FluentAssertions;
using FluentValidation.Results;

public class DeleteFiletypeScenarioInputValidatorShould
{
private DeleteFiletypeScenarioInputValidator validator = new();

[Fact]
public void ShowInvalidState_WhenTheInputIsInvalid()
{
ValidationResult result = validator.Validate(new FiletypeInput { Id = 0 });
result.IsValid.Should().BeFalse();
result.Errors.Should().NotBeEmpty();
}

[Fact]
public void ShowValidState_WhenTheInputIsValid()
{
ValidationResult result = validator.Validate(new FiletypeInput { Id = 1 });
result.IsValid.Should().BeTrue();
result.Errors.Should().BeEmpty();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
namespace DocumentDomain.Spec.Operations.Scenario.Filetype;

using EncyclopediaGalactica.BusinessLogic.Contracts;
using EncyclopediaGalactica.DocumentDomain.Operations.Scenarios;
using EncyclopediaGalactica.DocumentDomain.Operations.Scenarios.Filetype;
using FluentAssertions;
using LanguageExt;

public class DeleteFiletypeScenarioShould : ScenarioBaseTest
{
[Fact]
public async Task ReturnErrorResult_WhenInputIsInvalid()
{
Either<ErrorResult, FiletypeResult> result = await DeleteFiletypeScenario.ExecuteAsync(
new DeleteFiletypeScenarioContext(Guid.NewGuid(),
new FiletypeInput { Id = 0 }));
result.IsLeft.Should().BeTrue();
result.IsRight.Should().BeFalse();
result.IfLeft(er =>
{
er.CorrelationId.Should().NotBeEmpty();
er.ErrorMessage.Should().NotBeEmpty();
});
}

[Fact]
public async Task ReturnErrorResult_WhenNoSuchEntity()
{
Either<ErrorResult, FiletypeResult> result = await DeleteFiletypeScenario.ExecuteAsync(
new DeleteFiletypeScenarioContext(Guid.NewGuid(),
new FiletypeInput { Id = 190 }));
result.IsLeft.Should().BeTrue();
result.IsRight.Should().BeFalse();
result.IfLeft(er =>
{
er.CorrelationId.Should().NotBeEmpty();
er.ErrorMessage.Should().NotBeEmpty();
});
}

[Fact]
public async Task ReturnFiletypeResult_WhenTheOperationIsSuccessful()
{
FiletypeInput delete = null;
Either<ErrorResult, FiletypeResult> data = await AddFiletypeScenario.ExecuteAsync(
new AddFiletypeScenarioContext(Guid.NewGuid(), new FiletypeInput
{
Id = 0, Name = "asd", Description = "asd", FileExtension = "asd"
}));
data.IsRight.Should().BeTrue();
data.IsLeft.Should().BeFalse();
data.IfRight(res => delete = new FiletypeInput { Id = res.Id });

Either<ErrorResult, FiletypeResult> result = await DeleteFiletypeScenario.ExecuteAsync(
new DeleteFiletypeScenarioContext(Guid.NewGuid(), delete!));

result.IsLeft.Should().BeFalse();
result.IsRight.Should().BeTrue();
result.IfRight(r => { r.Id.Should().Be(0); });
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
namespace DocumentDomain.Spec.Operations.Scenario.Filetype;

using System.Collections;
using System.Diagnostics.CodeAnalysis;
using EncyclopediaGalactica.BusinessLogic.Contracts;
using EncyclopediaGalactica.DocumentDomain.Entity;
using EncyclopediaGalactica.DocumentDomain.Operations.Scenarios.Filetype;
using FluentAssertions;
using FluentValidation.Results;

public class EditFiletypeScenarioInputValidatorShould
{
private EditFiletypeScenarioInputValidator _validator = new();


[Theory]
[ClassData(typeof(EditFiletypeScenarioInputValidatorInvalidInputData))]
public void ShowsInvalidResult_WhenInputIsInvalid(FiletypeInput filetypeInput)
{
ValidationResult result = _validator.Validate(filetypeInput);
result.IsValid.Should().BeFalse();
result.Errors.Should().NotBeEmpty();
}

[Fact]
public void ShowsValidResult_WhenInputIsValid()
{
ValidationResult result = _validator.Validate(new FiletypeInput
{
Id = 1,
Name = "asd",
Description = "asd",
FileExtension = "asd"
});
result.IsValid.Should().BeTrue();
result.Errors.Should().BeEmpty();
}
}

[ExcludeFromCodeCoverage]
public class EditFiletypeScenarioInputValidatorInvalidInputData : IEnumerable<object[]>
{
public IEnumerator<object[]> GetEnumerator()
{
yield return new object[] { new FiletypeInput { Id = 0, Name = "asd", Description = "asd", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 1, Name = null, Description = "asd", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 1, Name = string.Empty, Description = "asd", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 1, Name = " ", Description = "asd", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 1, Name = " as ", Description = "asd", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 1, Name = "asd", Description = null, FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 1, Name = "asd", Description = string.Empty, FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 1, Name = "asd", Description = " ", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 1, Name = "asd", Description = " as ", FileExtension = "asd" } };
yield return new object[] { new FiletypeInput { Id = 1, Name = "asd", Description = "asd", FileExtension = null } };
yield return new object[] { new FiletypeInput { Id = 1, Name = "asd", Description = "asd", FileExtension = string.Empty } };
yield return new object[] { new FiletypeInput { Id = 1, Name = "asd", Description = "asd", FileExtension = " " } };
}

IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
namespace DocumentDomain.Spec.Operations.Scenario.Filetype;

using System.Diagnostics.CodeAnalysis;
using EncyclopediaGalactica.BusinessLogic.Contracts;
using EncyclopediaGalactica.DocumentDomain.Operations.Scenarios;
using EncyclopediaGalactica.DocumentDomain.Operations.Scenarios.Filetype;
using FluentAssertions;
using LanguageExt;

public class EditFiletypeScenarioShould : ScenarioBaseTest
{
[Theory]
[ClassData(typeof(EditFiletypeScenarioInputValidatorInvalidInputData))]
public async Task ReturnErrorResult_WhenOperationFails(FiletypeInput input)
{
Either<ErrorResult, FiletypeResult> result = await EditFiletypeScenario.ExecuteAsync(
new EditFiletypeScenarioContext(Guid.NewGuid(), input));

result.IsRight.Should().BeFalse();
result.IsLeft.Should().BeTrue();
result.IfLeft(er =>
{
er.CorrelationId.Should().NotBeEmpty();
er.ErrorMessage.Should().NotBeEmpty();
});
}

[Fact]
public async Task ReturnErrorResult_WhenThereIsNoSuchEntity()
{
Either<ErrorResult, FiletypeResult> result = await EditFiletypeScenario.ExecuteAsync(
new EditFiletypeScenarioContext(Guid.NewGuid(), new FiletypeInput { Id = 1000 }));

result.IsRight.Should().BeFalse();
result.IsLeft.Should().BeTrue();
result.IfLeft(er =>
{
er.CorrelationId.Should().NotBeEmpty();
er.ErrorMessage.Should().NotBeEmpty();
});
}

public async Task ReturnFiletypeResult_WhenOperationIsSuccessful()
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
namespace DocumentDomain.Spec.Operations.Scenario.Filetype;

using EncyclopediaGalactica.BusinessLogic.Contracts;
using EncyclopediaGalactica.DocumentDomain.Operations.Scenarios.Filetype;
using FluentAssertions;
using FluentValidation.Results;

public class GetFiletypeByIdScenarioInputValidatorShould
{
private GetFiletypeByIdScenarioInputValidator validator = new();

[Fact]
public void ReturnInvalidState_WhenInputIsInvalid()
{
ValidationResult result = validator.Validate(new FiletypeInput { Id = 0 });
result.IsValid.Should().BeFalse();
result.Errors.Should().NotBeEmpty();
}

[Fact]
public void ReturnValidState_WhenInputIsValid()
{
ValidationResult result = validator.Validate(new FiletypeInput { Id = 1 });
result.IsValid.Should().BeTrue();
result.Errors.Should().BeEmpty();
}
}
Loading

0 comments on commit 1a7d5ea

Please sign in to comment.