Skip to content

Commit

Permalink
Added integration tests (#36)
Browse files Browse the repository at this point in the history
  • Loading branch information
Olaren15 committed May 29, 2024
1 parent 32b34c2 commit 24e800f
Show file tree
Hide file tree
Showing 28 changed files with 2,757 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: Build
run: dotnet build --no-restore --configuration Release --nologo
- name: Run tests
run: dotnet test --no-build --configuration Release --nologo
run: dotnet test --filter FullyQualifiedName\!~EasyTranslate.Integration.Tests --no-build --configuration Release --nologo
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4
with:
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/check-format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,7 @@ jobs:
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.x.x
- name: Restore dependencies
run: dotnet restore
- name: Run dotnet format
run: dotnet format --verify-no-changes
run: dotnet format --no-restore --verify-no-changes
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<TargetFramework>net8.0-windows</TargetFramework>
<NeutralLanguage>en</NeutralLanguage>
<LangVersion>12</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ ActionLite japanese
english.Name.RawString,
french.Name.RawString,
german.Name.RawString,
german.Name.RawString
japanese.Name.RawString
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
<PackageReference Include="Snapshooter.Xunit" Version="0.14.1"/>
<PackageReference Include="xunit" Version="2.5.3"/>
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3"/>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\EasyTranslate.Infrastructure\EasyTranslate.Infrastructure.csproj"/>
<ProjectReference Include="..\EasyTranslate.UseCase\EasyTranslate.UseCase.csproj"/>
</ItemGroup>

<ItemGroup>
<Reference Include="Lumina">
<HintPath>$(DalamudLibPath)\Lumina.dll</HintPath>
<Private>true</Private>
</Reference>
<Reference Include="Lumina.Excel">
<HintPath>$(DalamudLibPath)\Lumina.Excel.dll</HintPath>
<Private>true</Private>
</Reference>
</ItemGroup>
</Project>
7 changes: 7 additions & 0 deletions EasyTranslate.Integration.Tests/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# EasyTranslate Integration Tests

These tests require FFXIV to be installed in order to run.
They assume that the GAME_DATA_PATH environment variable is set to the game/sqpack folder of the game files.
Ex: `C:\Program Files (x86)\SquareEnix\FINAL FANTASY XIV- A Realm Reborn\game\sqpack`

**WARNING**: Since these tests rely on the game's data, they have the potential to fail after any game update!
235 changes: 235 additions & 0 deletions EasyTranslate.Integration.Tests/SearchContentByNameTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using EasyTranslate.Domain.Entities;
using EasyTranslate.UseCase;
using Microsoft.Extensions.DependencyInjection;
using Snapshooter.Xunit;
using Xunit;

namespace EasyTranslate.Integration.Tests;

// Assertions are done with snapshots
[SuppressMessage("Blocker Code Smell", "S2699:Tests should include assertions")]
public class SearchContentByNameTest
{
private readonly SearchContentByNameUseCase _searchContentByNameUseCase;

public SearchContentByNameTest()
{
IServiceProvider serviceProvider = ServiceProviderBuilder.Build();
_searchContentByNameUseCase = serviceProvider.GetService<SearchContentByNameUseCase>()!;
}

[Fact]
public async Task Item_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"Popoto",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Action_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"cure",
Language.English
);

Snapshot.Match(results.ToList());
}


[Fact]
public async Task Achievement_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"For the hoard",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task BNpcname_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"bhoot",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Companion_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"lesser panda",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task ContentFinderCondition_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"sastasha",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task CraftAction_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"Groundwork",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Emote_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"pet",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task ENpcResident_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"G'raha Tia",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Fate_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"Drink Me",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Leve_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"Practical Command",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Mount_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"Demi-Ozma",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Orchestrion_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"pa-paya",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task PlaceName_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"Limsa Lominsa",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Quest_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"For Want Of a Memory",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Status_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"Vulnerability Up",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Title_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"Goddess of Magic",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Trait_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"Maim and Mend",
Language.English
);

Snapshot.Match(results.ToList());
}

[Fact]
public async Task Weather_SearchContentByName_ReturnsMatchingResults()
{
IEnumerable<Content> results = await _searchContentByNameUseCase.Execute(
"Fair Skies",
Language.English
);

Snapshot.Match(results.ToList());
}
}
40 changes: 40 additions & 0 deletions EasyTranslate.Integration.Tests/ServiceProviderBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using System;
using EasyTranslate.Infrastructure.Configuration;
using EasyTranslate.UseCase.Configuration;
using Lumina;
using Lumina.Excel;
using Microsoft.Extensions.DependencyInjection;

namespace EasyTranslate.Integration.Tests;

public static class ServiceProviderBuilder
{
private static ServiceProvider? s_serviceProvider;
private static readonly object s_lock = new();

public static IServiceProvider Build()
{
if (s_serviceProvider is not null)
{
return s_serviceProvider;
}

lock (s_lock)
{
string? gameDataPath = Environment.GetEnvironmentVariable("GAME_DATA_PATH");
if (gameDataPath is null)
{
throw new InvalidOperationException(
"Please set the GAME_DATA_PATH environment variable as described in the README.md file");
}

s_serviceProvider = new ServiceCollection()
.AddUseCaseServices()
.AddInfrastructureServices()
.AddSingleton<ExcelModule>(_ => new GameData(gameDataPath).Excel)
.BuildServiceProvider();
}

return s_serviceProvider;
}
}
Loading

0 comments on commit 24e800f

Please sign in to comment.