diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index eef7cae..759d9ee 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -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: diff --git a/.github/workflows/check-format.yml b/.github/workflows/check-format.yml index 9b6e415..0fc61cb 100644 --- a/.github/workflows/check-format.yml +++ b/.github/workflows/check-format.yml @@ -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 diff --git a/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj b/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj index 9e7ece7..16dcb19 100644 --- a/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj +++ b/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj @@ -15,6 +15,7 @@ net8.0-windows en 12 + enable diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs index cbfe432..00d359f 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs @@ -23,7 +23,7 @@ ActionLite japanese english.Name.RawString, french.Name.RawString, german.Name.RawString, - german.Name.RawString + japanese.Name.RawString ); } } diff --git a/EasyTranslate.Integration.Tests/EasyTranslate.Integration.Tests.csproj b/EasyTranslate.Integration.Tests/EasyTranslate.Integration.Tests.csproj new file mode 100644 index 0000000..8bd6ec3 --- /dev/null +++ b/EasyTranslate.Integration.Tests/EasyTranslate.Integration.Tests.csproj @@ -0,0 +1,33 @@ + + + + net8.0 + enable + + false + + + + + + + + + + + + + + + + + + $(DalamudLibPath)\Lumina.dll + true + + + $(DalamudLibPath)\Lumina.Excel.dll + true + + + diff --git a/EasyTranslate.Integration.Tests/README.md b/EasyTranslate.Integration.Tests/README.md new file mode 100644 index 0000000..36cbf06 --- /dev/null +++ b/EasyTranslate.Integration.Tests/README.md @@ -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! diff --git a/EasyTranslate.Integration.Tests/SearchContentByNameTest.cs b/EasyTranslate.Integration.Tests/SearchContentByNameTest.cs new file mode 100644 index 0000000..a5f5265 --- /dev/null +++ b/EasyTranslate.Integration.Tests/SearchContentByNameTest.cs @@ -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()!; + } + + [Fact] + public async Task Item_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "Popoto", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Action_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "cure", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + + [Fact] + public async Task Achievement_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "For the hoard", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task BNpcname_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "bhoot", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Companion_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "lesser panda", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task ContentFinderCondition_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "sastasha", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task CraftAction_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "Groundwork", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Emote_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "pet", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task ENpcResident_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "G'raha Tia", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Fate_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "Drink Me", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Leve_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "Practical Command", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Mount_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "Demi-Ozma", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Orchestrion_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "pa-paya", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task PlaceName_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "Limsa Lominsa", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Quest_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "For Want Of a Memory", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Status_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "Vulnerability Up", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Title_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "Goddess of Magic", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Trait_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "Maim and Mend", + Language.English + ); + + Snapshot.Match(results.ToList()); + } + + [Fact] + public async Task Weather_SearchContentByName_ReturnsMatchingResults() + { + IEnumerable results = await _searchContentByNameUseCase.Execute( + "Fair Skies", + Language.English + ); + + Snapshot.Match(results.ToList()); + } +} diff --git a/EasyTranslate.Integration.Tests/ServiceProviderBuilder.cs b/EasyTranslate.Integration.Tests/ServiceProviderBuilder.cs new file mode 100644 index 0000000..0140e21 --- /dev/null +++ b/EasyTranslate.Integration.Tests/ServiceProviderBuilder.cs @@ -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(_ => new GameData(gameDataPath).Excel) + .BuildServiceProvider(); + } + + return s_serviceProvider; + } +} diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Achievement_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Achievement_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..4e8081d --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Achievement_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,50 @@ +[ + { + "Type": "Achievement", + "IconId": 60035, + "EnglishName": "For the Hoard I", + "FrenchName": "Exhumation profonde I", + "GermanName": "Mein Schatz I", + "JapaneseName": "埋もれた財宝:ランク1" + }, + { + "Type": "Achievement", + "IconId": 60035, + "EnglishName": "For the Hoard V", + "FrenchName": "Exhumation profonde V", + "GermanName": "Mein Schatz V", + "JapaneseName": "埋もれた財宝:ランク5" + }, + { + "Type": "Achievement", + "IconId": 60035, + "EnglishName": "For the Hoard II", + "FrenchName": "Exhumation profonde II", + "GermanName": "Mein Schatz II", + "JapaneseName": "埋もれた財宝:ランク2" + }, + { + "Type": "Achievement", + "IconId": 60035, + "EnglishName": "For the Hoard IV", + "FrenchName": "Exhumation profonde IV", + "GermanName": "Mein Schatz IV", + "JapaneseName": "埋もれた財宝:ランク4" + }, + { + "Type": "Achievement", + "IconId": 60035, + "EnglishName": "For the Hoard VI", + "FrenchName": "Exhumation profonde VI", + "GermanName": "Mein Schatz VI", + "JapaneseName": "埋もれた財宝:ランク6" + }, + { + "Type": "Achievement", + "IconId": 60035, + "EnglishName": "For the Hoard III", + "FrenchName": "Exhumation profonde III", + "GermanName": "Mein Schatz III", + "JapaneseName": "埋もれた財宝:ランク3" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Action_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Action_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..8ca75be --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Action_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,522 @@ +[ + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Cure", + "FrenchName": "Soin", + "GermanName": "Vita", + "JapaneseName": "ケアル" + }, + { + "Type": "Action", + "IconId": 784, + "EnglishName": "Cure", + "FrenchName": "Soin", + "GermanName": "Vita", + "JapaneseName": "ケアル" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Cure V", + "FrenchName": "Téra Soin", + "GermanName": "Vigra", + "JapaneseName": "ケアルダ" + }, + { + "Type": "Action", + "IconId": 64629, + "EnglishName": "Cure L", + "FrenchName": "Évocation Logos : Soin", + "GermanName": "Logos-Vita", + "JapaneseName": "ロゴス・ケアル" + }, + { + "Type": "Item", + "IconId": 27953, + "EnglishName": "Cure L", + "FrenchName": "Évocation Logos: Soin", + "GermanName": "Logos-Splitter des Vita", + "JapaneseName": "ロゴス・ケアル" + }, + { + "Type": "Action", + "IconId": 406, + "EnglishName": "Cure II", + "FrenchName": "Extra Soin", + "GermanName": "Vitra", + "JapaneseName": "ケアルラ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Cure IV", + "FrenchName": "Giga Soin", + "GermanName": "Vitaka", + "JapaneseName": "ケアルジャ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Cure II", + "FrenchName": "Extra Soin", + "GermanName": "Vitra", + "JapaneseName": "ケアルラ" + }, + { + "Type": "Action", + "IconId": 3216, + "EnglishName": "Vercure", + "FrenchName": "VerSoin", + "GermanName": "Erzvita", + "JapaneseName": "ヴァルケアル" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Vercure", + "FrenchName": "VerSoin", + "GermanName": "Erzvita", + "JapaneseName": "ヴァルケアル" + }, + { + "Type": "Action", + "IconId": 784, + "EnglishName": "Cure II", + "FrenchName": "Extra Soin", + "GermanName": "Vitra", + "JapaneseName": "ケアルラ" + }, + { + "Type": "Action", + "IconId": 784, + "EnglishName": "Vercure", + "FrenchName": "VerSoin", + "GermanName": "Erzvita", + "JapaneseName": "ヴァルケアル" + }, + { + "Type": "Action", + "IconId": 64868, + "EnglishName": "Vercure", + "FrenchName": "VerSoin", + "GermanName": "Erzvita", + "JapaneseName": "ヴァルケアル" + }, + { + "Type": "Action", + "IconId": 64816, + "EnglishName": "Cure II", + "FrenchName": "Extra Soin", + "GermanName": "Vitra", + "JapaneseName": "ケアルラ" + }, + { + "Type": "Action", + "IconId": 9274, + "EnglishName": "Cure II", + "FrenchName": "Extra Soin", + "GermanName": "Vitra", + "JapaneseName": "ケアルラ" + }, + { + "Type": "Action", + "IconId": 407, + "EnglishName": "Cure III", + "FrenchName": "Méga Soin", + "GermanName": "Vitaga", + "JapaneseName": "ケアルガ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Pom Cure", + "FrenchName": "Pompon soignant", + "GermanName": "Vitakupo", + "JapaneseName": "ポンポンケアル" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Cure III", + "FrenchName": "Méga Soin", + "GermanName": "Vitaga", + "JapaneseName": "ケアルガ" + }, + { + "Type": "Action", + "IconId": 3308, + "EnglishName": "Pom Cure", + "FrenchName": "Pompon soignant", + "GermanName": "Vitakupo", + "JapaneseName": "ポンポンケアル" + }, + { + "Type": "Action", + "IconId": 9606, + "EnglishName": "Cure III", + "FrenchName": "Méga Soin", + "GermanName": "Vitaga", + "JapaneseName": "ケアルガ" + }, + { + "Type": "Item", + "IconId": 29288, + "EnglishName": "Curefish", + "FrenchName": "Guérisandre", + "GermanName": "Heilerfisch", + "JapaneseName": "エスナカブリ" + }, + { + "Type": "LeveQuest", + "IconId": 71241, + "EnglishName": "The Cure", + "FrenchName": "Apprivoisement: mandragores curatives", + "GermanName": "Sprossen gegen alles", + "JapaneseName": "懐柔任務:輸出用のマンドラゴラ" + }, + { + "Type": "Status", + "IconId": 10410, + "EnglishName": "Freecure", + "FrenchName": "Extra Soin amélioré", + "GermanName": "Vitra +", + "JapaneseName": "ケアルラ効果アップ" + }, + { + "Type": "Status", + "IconId": 10411, + "EnglishName": "Overcure", + "FrenchName": "Méga Soin amélioré", + "GermanName": "Vitaga +", + "JapaneseName": "ケアルガ効果アップ" + }, + { + "Type": "Trait", + "IconId": 5330, + "EnglishName": "Freecure", + "FrenchName": "Soin amélioré", + "GermanName": "Verbessertes Vita", + "JapaneseName": "ケアル効果アップ" + }, + { + "Type": "Action", + "IconId": 64630, + "EnglishName": "Cure L II", + "FrenchName": "Évocation Logos : Extra Soin", + "GermanName": "Logos-Vitra", + "JapaneseName": "ロゴス・ケアルラ" + }, + { + "Type": "Action", + "IconId": 64682, + "EnglishName": "Lost Cure", + "FrenchName": "Soin oublié", + "GermanName": "Verschollene Vita", + "JapaneseName": "ロスト・ケアル" + }, + { + "Type": "Item", + "IconId": 27953, + "EnglishName": "Cure L II", + "FrenchName": "Évocation Logos: Extra Soin", + "GermanName": "Logos-Splitter des Vitra", + "JapaneseName": "ロゴス・ケアルラ" + }, + { + "Type": "Item", + "IconId": 64682, + "EnglishName": "Lost Cure", + "FrenchName": "Soin oublié", + "GermanName": "Frontsplitter des verschollenen Vita", + "JapaneseName": "ロスト・ケアル" + }, + { + "Type": "Action", + "IconId": 935, + "EnglishName": "Choco Cure", + "FrenchName": "Choco-soin", + "GermanName": "Chocobo-Vita", + "JapaneseName": "チョコケアル" + }, + { + "Type": "Action", + "IconId": 64632, + "EnglishName": "Cure L III", + "FrenchName": "Évocation Logos : Méga Soin", + "GermanName": "Logos-Vitaga", + "JapaneseName": "ロゴス・ケアルガ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Vercure III", + "FrenchName": "VerMéga Soin", + "GermanName": "Erzvitaga", + "JapaneseName": "ヴァルケアルガ" + }, + { + "Type": "Action", + "IconId": 64683, + "EnglishName": "Lost Cure II", + "FrenchName": "Extra Soin oublié", + "GermanName": "Verschollene Vitra", + "JapaneseName": "ロスト・ケアルラ" + }, + { + "Type": "Action", + "IconId": 64685, + "EnglishName": "Lost Cure IV", + "FrenchName": "Giga Soin oublié", + "GermanName": "Verschollene Vitaka", + "JapaneseName": "ロスト・ケアルジャ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "True Cure II", + "FrenchName": "Extra Soin véritable", + "GermanName": "Vollkommenes Vitra", + "JapaneseName": "トゥルー・ケアルラ" + }, + { + "Type": "Action", + "IconId": 64756, + "EnglishName": "Variant Cure", + "FrenchName": "Soin embranché", + "GermanName": "Unstetes Vita", + "JapaneseName": "ヴァリアント・ケアル" + }, + { + "Type": "Item", + "IconId": 64683, + "EnglishName": "Lost Cure II", + "FrenchName": "Extra Soin oublié", + "GermanName": "Frontsplitter des verschollenen Vitra", + "JapaneseName": "ロスト・ケアルラ" + }, + { + "Type": "Item", + "IconId": 64685, + "EnglishName": "Lost Cure IV", + "FrenchName": "Giga Soin oublié", + "GermanName": "Frontsplitter des verschollenen Vitaka", + "JapaneseName": "ロスト・ケアルジャ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Obscure Woods", + "FrenchName": "Forêt obscure", + "GermanName": "Finsterer Wald", + "JapaneseName": "暗黒森林" + }, + { + "Type": "Action", + "IconId": 64684, + "EnglishName": "Lost Cure III", + "FrenchName": "Méga Soin oublié", + "GermanName": "Verschollene Vitaga", + "JapaneseName": "ロスト・ケアルガ" + }, + { + "Type": "Item", + "IconId": 64684, + "EnglishName": "Lost Cure III", + "FrenchName": "Méga Soin oublié", + "GermanName": "Frontsplitter des verschollenen Vitaga", + "JapaneseName": "ロスト・ケアルガ" + }, + { + "Type": "LeveQuest", + "IconId": 71241, + "EnglishName": "The Only Cure", + "FrenchName": "Prélèvement: des tisanes pour les petits Ronsos", + "GermanName": "Fiebersenkende Kräuter", + "JapaneseName": "調査採集:ロンゾ族の熱病対策" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Ronkan Cure II", + "FrenchName": "Extra Soin ronka", + "GermanName": "Ronka-Vitra", + "JapaneseName": "ロンカ・ケアルラ" + }, + { + "Type": "Action", + "IconId": 64816, + "EnglishName": "Ronkan Cure II", + "FrenchName": "Extra Soin ronka", + "GermanName": "Ronka-Vitra", + "JapaneseName": "ロンカ・ケアルラ" + }, + { + "Type": "Action", + "IconId": 64753, + "EnglishName": "Lost Full Cure", + "FrenchName": "Maxi Soin oublié", + "GermanName": "Verschollene Erneuerung", + "JapaneseName": "ロスト・フルケア" + }, + { + "Type": "Item", + "IconId": 64753, + "EnglishName": "Lost Full Cure", + "FrenchName": "Maxi Soin oublié", + "GermanName": "Frontsplitter des verschollenen Erneuerung", + "JapaneseName": "ロスト・フルケア" + }, + { + "Type": "Status", + "IconId": 14985, + "EnglishName": "Cure III Ready", + "FrenchName": "Méga Soin préparé", + "GermanName": "Vitaga bereit", + "JapaneseName": "ケアルガ実行可" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Ronkan Cure III", + "FrenchName": "Méga Soin ronka", + "GermanName": "Ronka-Vitaga", + "JapaneseName": "ロンカ・ケアルガ" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "Namazu procurer", + "FrenchName": "Namazu préposé aux offrandes", + "GermanName": "Namazuo-Opfergabenbeauftragt[a]", + "JapaneseName": "供物調達係のナマズオ" + }, + { + "Type": "Quest", + "IconId": 71221, + "EnglishName": "A Pound of Cure", + "FrenchName": "Remède contre les bagarres", + "GermanName": "Aufruhr an der Feldscheune", + "JapaneseName": "拳の語らい" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Absolute Cure II", + "FrenchName": "Extra Soin absolu", + "GermanName": "Absolutes Vitra", + "JapaneseName": "アブソリュートケアルラ" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "dwarven procurer", + "FrenchName": "Nain responsable du ravitaillement", + "GermanName": "Nachschub-Zwerg", + "JapaneseName": "補充担当のドワーフ" + }, + { + "Type": "Item", + "IconId": 20036, + "EnglishName": "Obscure Logogram", + "FrenchName": "Éclat Logos de maître scelleur non identifié", + "GermanName": "Unprospektierter Logos-Splitter des Siegels", + "JapaneseName": "未鑑定ロゴスシャード:封印" + }, + { + "Type": "Status", + "IconId": 16739, + "EnglishName": "Variant Cure Set", + "FrenchName": "Soin embranché", + "GermanName": "Flüchtige Macht: Unstetes Vita", + "JapaneseName": "ヴァリアント・ケアル設定" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Sanctified Cure II", + "FrenchName": "Extra Soin sanctifié", + "GermanName": "Gesegnetes Vitra", + "JapaneseName": "サンクティファイド・ケアルラ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Sanctified Cure II", + "FrenchName": "Soin sanctifié", + "GermanName": "Gesegnetes Vitra", + "JapaneseName": "サンクティファイド・ケアル" + }, + { + "Type": "LeveQuest", + "IconId": 71241, + "EnglishName": "Cure for What Ails", + "FrenchName": "Grosse commande: jus de légume requinquant", + "GermanName": "Ein Schluck am Morgen vertreibt die Sorgen", + "JapaneseName": "大口依頼:朝食の一杯" + }, + { + "Type": "Item", + "IconId": 30664, + "EnglishName": "Obscure Hyposkhesphyra", + "FrenchName": "Hyposkhesphyra obscure", + "GermanName": "Düster-Hyposkhesphyra", + "JapaneseName": "オブスキュア・イポスセスフィラ" + }, + { + "Type": "Action", + "IconId": 64816, + "EnglishName": "Cure II of the Seventh Dawn", + "FrenchName": "Extra Soin des Héritiers", + "GermanName": "Vitra der Morgenröte", + "JapaneseName": "サイオンズ・ケアルラ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Cure II of the Seventh Dawn", + "FrenchName": "Extra Soin des Héritiers", + "GermanName": "Vitra der Morgenröte", + "JapaneseName": "サイオンズ・ケアルラ" + }, + { + "Type": "Instance", + "IconId": 61806, + "EnglishName": "the Borderland Ruins (Secure)", + "FrenchName": "les Ruines frontalières (annexion)", + "GermanName": "Äußere Ruinen (Sicherung)", + "JapaneseName": "外縁遺跡群 (制圧戦)" + }, + { + "Type": "Fate", + "IconId": 60724, + "EnglishName": "Omicron Recall: Secure Connection", + "FrenchName": "Mémoire vive: pare-feu", + "GermanName": "Aus dem Speicher von BNpcName: Gefahrenabwehr", + "JapaneseName": "BNpcNameのメモリーより:BNpcName防衛" + }, + { + "Type": "Item", + "IconId": 26154, + "EnglishName": "Chocobo Training Manual - Choco Cure I", + "FrenchName": "Manuel de dressage: Choco-soin I", + "GermanName": "Dressurbuch - Chocobo-Vita I", + "JapaneseName": "チョコボ教本:チョコケアル" + }, + { + "Type": "Item", + "IconId": 26154, + "EnglishName": "Chocobo Training Manual - Choco Cure II", + "FrenchName": "Manuel de dressage: Choco-soin II", + "GermanName": "Dressurbuch - Chocobo-Vita II", + "JapaneseName": "チョコボ教本:チョコケアルII" + }, + { + "Type": "Item", + "IconId": 26154, + "EnglishName": "Chocobo Training Manual - Choco Cure III", + "FrenchName": "Manuel de dressage: Choco-soin III", + "GermanName": "Dressurbuch - Chocobo-Vita III", + "JapaneseName": "チョコボ教本:チョコケアルIII" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.BNpcname_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.BNpcname_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..9c19b0a --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.BNpcname_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,138 @@ +[ + { + "Type": "Npc", + "IconId": null, + "EnglishName": "bhoot", + "FrenchName": "bhut", + "GermanName": "Bhut", + "JapaneseName": "ブフート" + }, + { + "Type": "Fate", + "IconId": 60721, + "EnglishName": "Das Bhoot", + "FrenchName": "Le don du repos éternel", + "GermanName": "Und was sich reimt, ist Bhut", + "JapaneseName": "エクソシスト" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "polis bhoot", + "FrenchName": "bhut de l'Aquapole", + "GermanName": "Aquapolis-Bhut", + "JapaneseName": "アクアポリス・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "gelid bhoot", + "FrenchName": "bhut glacial", + "GermanName": "eisig[a] Bhut", + "JapaneseName": "ジェリド・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "guard bhoot", + "FrenchName": "bhut gardien", + "GermanName": "Wächter-Bhut", + "JapaneseName": "ガード・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "Pyros bhoot", + "FrenchName": "bhut Pyros", + "GermanName": "Pyros-Bhut", + "JapaneseName": "ピューロス・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "Mhachi bhoot", + "FrenchName": "bhut mhachois", + "GermanName": "Mhach-Bhut", + "JapaneseName": "マハ・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "broken bhoot", + "FrenchName": "bhut écorché", + "GermanName": "Klippen-Bhut", + "JapaneseName": "ブロークン・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "impure bhoot", + "FrenchName": "bhut impur", + "GermanName": "unrein[a] Bhut", + "JapaneseName": "インピュア・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "Zadnor bhoot", + "FrenchName": "bhut de Zadnor", + "GermanName": "Zadnor-Bhut", + "JapaneseName": "ザトゥノル・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "Orthos bhoot", + "FrenchName": "bhut Orthos", + "GermanName": "Orthos-Bhut", + "JapaneseName": "オルト・ブフート" + }, + { + "Type": "Quest", + "IconId": 71221, + "EnglishName": " Bhoot Camps", + "FrenchName": " Les anges de l'insalubrité", + "GermanName": " Geisterstunde", + "JapaneseName": " 浮遊する布" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "horrific bhoot", + "FrenchName": "bhut horrifique", + "GermanName": "schrecklich[a] Bhut", + "JapaneseName": "ホリフィック・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "duskfall bhoot", + "FrenchName": "bhut nocturne", + "GermanName": "Dämmer-Bhut", + "JapaneseName": "ナイト・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "nightmare bhoot", + "FrenchName": "bhut du cauchemar", + "GermanName": "Albtraum-Bhut", + "JapaneseName": "ナイトメア・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "deep palace bhoot", + "FrenchName": "bhut des profondeurs", + "GermanName": "Katakomben-Bhut", + "JapaneseName": "ディープパレス・ブフート" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "somnambulant bhoot", + "FrenchName": "bhut somnambule", + "GermanName": "Schlafwandler-Bhut", + "JapaneseName": "ソムナムブラント・ブフート" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Companion_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Companion_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..f22323b --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Companion_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,26 @@ +[ + { + "Type": "Npc", + "IconId": null, + "EnglishName": "lesser panda", + "FrenchName": "petit panda roux", + "GermanName": "Rotpanda-Stofftier", + "JapaneseName": "レッサーパンダ" + }, + { + "Type": "Minion", + "IconId": 0, + "EnglishName": "lesser panda", + "FrenchName": "petit panda roux", + "GermanName": "Rotpanda-Stofftier", + "JapaneseName": "レッサーパンダ" + }, + { + "Type": "Item", + "IconId": 59534, + "EnglishName": "Lesser Panda", + "FrenchName": "Petit panda roux", + "GermanName": "Rotpanda-Stofftier", + "JapaneseName": "レッサーパンダ" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ContentFinderCondition_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ContentFinderCondition_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..305cbd0 --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ContentFinderCondition_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,82 @@ +[ + { + "Type": "Instance", + "IconId": 61801, + "EnglishName": "Sastasha", + "FrenchName": "Sastasha", + "GermanName": "Sastasha", + "JapaneseName": "天然要害 サスタシャ浸食洞" + }, + { + "Type": "Place", + "IconId": null, + "EnglishName": "Sastasha", + "FrenchName": "Sastasha", + "GermanName": "Sastasha-Höhle", + "JapaneseName": "サスタシャ浸食洞" + }, + { + "Type": "Place", + "IconId": null, + "EnglishName": "Sastasha", + "FrenchName": "Sastasha", + "GermanName": "Sastasha", + "JapaneseName": "天然要害 サスタシャ浸食洞" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "Sastasha pugil", + "FrenchName": "pugil de Sastasha", + "GermanName": "Sastasha-Pugil", + "JapaneseName": "サスタシャ・プギル" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "Sastasha orobon", + "FrenchName": "orobon de Sastasha", + "GermanName": "Sastasha-Orobon", + "JapaneseName": "サスタシャ・オロボン" + }, + { + "Type": "Instance", + "IconId": 61801, + "EnglishName": "Sastasha (Hard)", + "FrenchName": "Sastasha (brutal)", + "GermanName": "Sastasha (schwer)", + "JapaneseName": "逆襲要害 サスタシャ浸食洞 (Hard)" + }, + { + "Type": "Place", + "IconId": null, + "EnglishName": "Sastasha (Hard)", + "FrenchName": "Sastasha (brutal)", + "GermanName": "Sastasha-Höhle (schwer)", + "JapaneseName": "サスタシャ浸食洞 (Hard)" + }, + { + "Type": "Place", + "IconId": null, + "EnglishName": "Sastasha Seagrot", + "FrenchName": "Grotte marine de Sastasha", + "GermanName": "Sastasha-Höhle", + "JapaneseName": "浸食洞" + }, + { + "Type": "Achievement", + "IconId": 1001, + "EnglishName": "Mapping the Realm: Sastasha", + "FrenchName": "Cartographe du continent : Sastasha", + "GermanName": "Kartograph: Sastasha", + "JapaneseName": "サスタシャ浸食洞を踏破せし者" + }, + { + "Type": "Achievement", + "IconId": 1001, + "EnglishName": "Remapping the Realm: Sastasha", + "FrenchName": "Cartographe du continent : Sastasha (brutal)", + "GermanName": "Kartograph: Sastasha-Höhle (schwer)", + "JapaneseName": "サスタシャ浸食洞を再び踏破せし者" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.CraftAction_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.CraftAction_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..c13ead7 --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.CraftAction_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,130 @@ +[ + { + "Type": "Action", + "IconId": 1518, + "EnglishName": "Groundwork", + "FrenchName": "Travail préparatoire", + "GermanName": "Vorarbeit", + "JapaneseName": "下地作業" + }, + { + "Type": "Action", + "IconId": 1568, + "EnglishName": "Groundwork", + "FrenchName": "Travail préparatoire", + "GermanName": "Vorarbeit", + "JapaneseName": "下地作業" + }, + { + "Type": "Action", + "IconId": 1618, + "EnglishName": "Groundwork", + "FrenchName": "Travail préparatoire", + "GermanName": "Vorarbeit", + "JapaneseName": "下地作業" + }, + { + "Type": "Action", + "IconId": 1667, + "EnglishName": "Groundwork", + "FrenchName": "Travail préparatoire", + "GermanName": "Vorarbeit", + "JapaneseName": "下地作業" + }, + { + "Type": "Action", + "IconId": 1718, + "EnglishName": "Groundwork", + "FrenchName": "Travail préparatoire", + "GermanName": "Vorarbeit", + "JapaneseName": "下地作業" + }, + { + "Type": "Action", + "IconId": 1767, + "EnglishName": "Groundwork", + "FrenchName": "Travail préparatoire", + "GermanName": "Vorarbeit", + "JapaneseName": "下地作業" + }, + { + "Type": "Action", + "IconId": 1818, + "EnglishName": "Groundwork", + "FrenchName": "Travail préparatoire", + "GermanName": "Vorarbeit", + "JapaneseName": "下地作業" + }, + { + "Type": "Action", + "IconId": 1867, + "EnglishName": "Groundwork", + "FrenchName": "Travail préparatoire", + "GermanName": "Vorarbeit", + "JapaneseName": "下地作業" + }, + { + "Type": "Trait", + "IconId": 6990, + "EnglishName": "Groundwork Mastery", + "FrenchName": "Maîtrise de Travail préparatoire", + "GermanName": "Meister der Vorarbeit", + "JapaneseName": "下地作業マスタリー" + }, + { + "Type": "Trait", + "IconId": 6991, + "EnglishName": "Groundwork Mastery", + "FrenchName": "Maîtrise de Travail préparatoire", + "GermanName": "Meister der Vorarbeit", + "JapaneseName": "下地作業マスタリー" + }, + { + "Type": "Trait", + "IconId": 6992, + "EnglishName": "Groundwork Mastery", + "FrenchName": "Maîtrise de Travail préparatoire", + "GermanName": "Meister der Vorarbeit", + "JapaneseName": "下地作業マスタリー" + }, + { + "Type": "Trait", + "IconId": 6993, + "EnglishName": "Groundwork Mastery", + "FrenchName": "Maîtrise de Travail préparatoire", + "GermanName": "Meister der Vorarbeit", + "JapaneseName": "下地作業マスタリー" + }, + { + "Type": "Trait", + "IconId": 6994, + "EnglishName": "Groundwork Mastery", + "FrenchName": "Maîtrise de Travail préparatoire", + "GermanName": "Meister der Vorarbeit", + "JapaneseName": "下地作業マスタリー" + }, + { + "Type": "Trait", + "IconId": 6995, + "EnglishName": "Groundwork Mastery", + "FrenchName": "Maîtrise de Travail préparatoire", + "GermanName": "Meister der Vorarbeit", + "JapaneseName": "下地作業マスタリー" + }, + { + "Type": "Trait", + "IconId": 6996, + "EnglishName": "Groundwork Mastery", + "FrenchName": "Maîtrise de Travail préparatoire", + "GermanName": "Meister der Vorarbeit", + "JapaneseName": "下地作業マスタリー" + }, + { + "Type": "Trait", + "IconId": 6997, + "EnglishName": "Groundwork Mastery", + "FrenchName": "Maîtrise de Travail préparatoire", + "GermanName": "Meister der Vorarbeit", + "JapaneseName": "下地作業マスタリー" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ENpcResident_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ENpcResident_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..c452793 --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ENpcResident_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,66 @@ +[ + { + "Type": "Npc", + "IconId": null, + "EnglishName": "G'raha Tia", + "FrenchName": "G'raha Tia", + "GermanName": "G'raha Tia", + "JapaneseName": "グ・ラハ・ティア" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "G'raha Tia", + "FrenchName": "voix de G'raha Tia", + "GermanName": "G'raha Tia", + "JapaneseName": "グ・ラハ・ティアの声" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "G'raha Tia", + "FrenchName": "", + "GermanName": "", + "JapaneseName": "" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "G'raha Tia", + "FrenchName": "G'raha Tia", + "GermanName": "", + "JapaneseName": "" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "wind-up G'raha Tia", + "FrenchName": "G'raha Tia miniature", + "GermanName": "G'raha Tia-Puppe", + "JapaneseName": "マメット・グ・ラハ" + }, + { + "Type": "Minion", + "IconId": 0, + "EnglishName": "wind-up G'raha Tia", + "FrenchName": "G'raha Tia miniature", + "GermanName": "G'raha Tia-Puppe", + "JapaneseName": "マメット・グ・ラハ" + }, + { + "Type": "Item", + "IconId": 59706, + "EnglishName": "Wind-up G'raha Tia", + "FrenchName": "G'raha Tia miniature", + "GermanName": "G'raha Tia-Puppe", + "JapaneseName": "マメット・グ・ラハ" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "G'raha Tia's avatar", + "FrenchName": "avatar de G'raha Tia", + "GermanName": "G'raha Tia[p] an deiner Seite", + "JapaneseName": "グ・ラハ・ティアの幻体" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Emote_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Emote_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..c19b6f4 --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Emote_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,802 @@ +[ + { + "Type": "Action", + "IconId": 64199, + "EnglishName": "Pet", + "FrenchName": "Caresser", + "GermanName": "Streicheln", + "JapaneseName": "撫でる" + }, + { + "Type": "Emote", + "IconId": 64067, + "EnglishName": "Pet", + "FrenchName": "Caresser", + "GermanName": "Streicheln", + "JapaneseName": "なでる" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petal", + "FrenchName": "Pétale", + "GermanName": "Blütenbad", + "JapaneseName": "ペタルシャワー" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Puppet", + "FrenchName": "憑依", + "GermanName": "Obsession", + "JapaneseName": "憑依" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Puppet", + "FrenchName": "Possession", + "GermanName": "Obsession", + "JapaneseName": "憑依" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petrai", + "FrenchName": "Pétra", + "GermanName": "Petrai", + "JapaneseName": "ペトゥライ" + }, + { + "Type": "Item", + "IconId": 24053, + "EnglishName": "Crumpet", + "FrenchName": "Crumpet", + "GermanName": "Crumpet", + "JapaneseName": "クランペット" + }, + { + "Type": "Place", + "IconId": null, + "EnglishName": "Parapet", + "FrenchName": "Parapet", + "GermanName": "Brustwehr", + "JapaneseName": "長城胸壁" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "okyupete", + "FrenchName": "ocypète", + "GermanName": "Okypete", + "JapaneseName": "オキュペテ" + }, + { + "Type": "Item", + "IconId": 21275, + "EnglishName": "Petalite", + "FrenchName": "Pétalite", + "GermanName": "Petalit", + "JapaneseName": "ペタライト" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "Puppet 2P", + "FrenchName": "clone", + "GermanName": "2P: Spaltung", + "JapaneseName": "2P:分裂体" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "petalodus", + "FrenchName": "petalodus", + "GermanName": "Petalodus", + "JapaneseName": "ペタロドゥス" + }, + { + "Type": "Item", + "IconId": 22615, + "EnglishName": "Saltpeter", + "FrenchName": "Salpêtre", + "GermanName": "Salpeter", + "JapaneseName": "硝石" + }, + { + "Type": "Item", + "IconId": 51037, + "EnglishName": "Carpeting", + "FrenchName": "Carré de carpette", + "GermanName": "Teppichboden", + "JapaneseName": "カーペット" + }, + { + "Type": "Item", + "IconId": 28443, + "EnglishName": "Petalfish", + "FrenchName": "Rose-pétale", + "GermanName": "Blütenblatt", + "JapaneseName": "ペタルフィッシュ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Snipethoom", + "FrenchName": "Tir précis", + "GermanName": "Fangschuss", + "JapaneseName": "狙撃" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petal Shot", + "FrenchName": "Tir de pétales", + "GermanName": "Blütenschuss", + "JapaneseName": "ペタルショット" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petro Eyes", + "FrenchName": "Pétriyeux", + "GermanName": "Petri-Augen", + "JapaneseName": "ペトロアイズ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petriburst", + "FrenchName": "Salve pétrifiante", + "GermanName": "Steinstoß", + "JapaneseName": "ペトリバースト" + }, + { + "Type": "Fate", + "IconId": 60722, + "EnglishName": "Pet, Smart", + "FrenchName": "Défi: couchée, sale bête !", + "GermanName": "Blinde Wut", + "JapaneseName": "忠義の妖王「ムチャリンダ」" + }, + { + "Type": "Item", + "IconId": 52029, + "EnglishName": "Red Carpet", + "FrenchName": "Tapis rouge", + "GermanName": "Roter Teppich", + "JapaneseName": "レッドカーペット" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petribreath", + "FrenchName": "Pétrihaleine", + "GermanName": "Petri-Atem", + "JapaneseName": "ペトロブレス" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Carpet Bomb", + "FrenchName": "Tapis de bombes", + "GermanName": "Flächenbombardement", + "JapaneseName": "絨毯爆撃" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "limpet bomb", + "FrenchName": "bombo collant", + "GermanName": "Haft-Bomber", + "JapaneseName": "リムペットボム" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "petrosphere", + "FrenchName": "pétrosphère", + "GermanName": "Petrosphäre[p] II", + "JapaneseName": "ペトロスフィアI" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "the Puppets", + "FrenchName": "sous-agglomérat de pantins", + "GermanName": "abgespalten[a] Klumpen", + "JapaneseName": "分裂シタ人形タチ" + }, + { + "Type": "Item", + "IconId": 29729, + "EnglishName": "Peteinosaur", + "FrenchName": "Peteinosaurus", + "GermanName": "Peteinosaurus", + "JapaneseName": "ペティノサウルス" + }, + { + "Type": "Item", + "IconId": 29419, + "EnglishName": "Petal Shell", + "FrenchName": "Fleur-de-prunier", + "GermanName": "Pflaumenblüte", + "JapaneseName": "梅花貝" + }, + { + "Type": "LeveQuest", + "IconId": 71241, + "EnglishName": "Puppet Show", + "FrenchName": "Récupération: écailles pour pantin", + "GermanName": "Nachwuchsförderung", + "JapaneseName": "獲得任務:標的用の竜鱗" + }, + { + "Type": "Place", + "IconId": null, + "EnglishName": "The Parapet", + "FrenchName": "Château dimensionnel - toit", + "GermanName": "Dach", + "JapaneseName": "次元城:屋上" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petrifaction", + "FrenchName": "Pétrification", + "GermanName": "Versteinerung", + "JapaneseName": "ペトリファクション" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petriblaster", + "FrenchName": "Pétri électrochoc", + "GermanName": "Petri-Schlag", + "JapaneseName": "ペトリブラスター" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petal Shower", + "FrenchName": "Pluie de pétales", + "GermanName": "Blütenbad", + "JapaneseName": "ペタルシャワー" + }, + { + "Type": "Action", + "IconId": 64751, + "EnglishName": "Lost Impetus", + "FrenchName": "Impulsion oubliée", + "GermanName": "Verschollener Impuls", + "JapaneseName": "ロスト・インペタス" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "carpet stain", + "FrenchName": "tache du tapis", + "GermanName": "Teppichschleimer", + "JapaneseName": "カーペット・ステイン" + }, + { + "Type": "Item", + "IconId": 29610, + "EnglishName": "Magic Carpet", + "FrenchName": "Tapis volant", + "GermanName": "Dünengleiter", + "JapaneseName": "ホーリーカーペット" + }, + { + "Type": "Item", + "IconId": 21477, + "EnglishName": "Raw Petalite", + "FrenchName": "Pétalite brute", + "GermanName": "Roh-Petalit", + "JapaneseName": "ペタライト原石" + }, + { + "Type": "Item", + "IconId": 64751, + "EnglishName": "Lost Impetus", + "FrenchName": "Impulsion oubliée", + "GermanName": "Frontsplitter des verschollenen Impuls", + "JapaneseName": "ロスト・インペタス" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Perpetual Ray", + "FrenchName": "Rayon perpétuel", + "GermanName": "Perpetueller Strahl", + "JapaneseName": "パーペチュアルレイ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Sixth Trumpet", + "FrenchName": "Sonnerie de clairon", + "GermanName": "Himmlischer Ruf", + "JapaneseName": "進軍ラッパ" + }, + { + "Type": "Action", + "IconId": 3319, + "EnglishName": "Perpetual Ray", + "FrenchName": "Rayon perpétuel", + "GermanName": "Perpetueller Strahl", + "JapaneseName": "パーペチュアルレイ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Carpet Beater", + "FrenchName": "Tapette à tapis", + "GermanName": "Teppichklopfer", + "JapaneseName": "カーペットビーター" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Pliant Petals", + "FrenchName": "Cercle de floraison", + "GermanName": "Erwachte Blüte", + "JapaneseName": "咲き誇る大輪" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "Petyr Winsome", + "FrenchName": "Petyr Winsome", + "GermanName": "Petyr Winsome", + "JapaneseName": "ピーター・ウィンソム" + }, + { + "Type": "Item", + "IconId": 22402, + "EnglishName": "Petrified Log", + "FrenchName": "Rondin pétrifié", + "GermanName": "Silifizierter Stamm", + "JapaneseName": "珪化木" + }, + { + "Type": "Item", + "IconId": 21267, + "EnglishName": "Petrified Orb", + "FrenchName": "Bille de bois pétrifié", + "GermanName": "Versteinerte Sphäre", + "JapaneseName": "珪化木丸玉" + }, + { + "Type": "Item", + "IconId": 26296, + "EnglishName": "Puppet's Coin", + "FrenchName": "Pièce rouillée des Pantins", + "GermanName": "Puppen-Münze", + "JapaneseName": "人形の古銭" + }, + { + "Type": "Item", + "IconId": 51052, + "EnglishName": "Greige Carpet", + "FrenchName": "Moquette écru", + "GermanName": "Graubeiger Teppich", + "JapaneseName": "グレージュカーペット" + }, + { + "Type": "Status", + "IconId": 15001, + "EnglishName": "Petrification", + "FrenchName": "Pétrification", + "GermanName": "Stein", + "JapaneseName": "石化" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petrifying Eye", + "FrenchName": "Œil pétrifiant", + "GermanName": "Steinauge", + "JapaneseName": "ペトリアイ" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petrattraction", + "FrenchName": "Attraction pétrifiante", + "GermanName": "Petrifikation", + "JapaneseName": "ペトリアトラクト" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petrified Peat", + "FrenchName": "Roulage de boue", + "GermanName": "Matschkuchen", + "JapaneseName": "泥団子作り" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "void trumpeter", + "FrenchName": "trompettiste du néant", + "GermanName": "Nichtstrompeter", + "JapaneseName": "ヴォイド・トランペッター" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "chimera poppet", + "FrenchName": "chimère en peluche", + "GermanName": "Chimären-Puppe", + "JapaneseName": "パペットキメラ" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "petite student", + "FrenchName": "étudiante lalafelle", + "GermanName": "klein[a] Student", + "JapaneseName": "小柄な魔法大学生" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "playful poppet", + "FrenchName": "garçon guilleret", + "GermanName": "fröhlich[a] Junge", + "JapaneseName": "星芒祭を楽しむ少年" + }, + { + "Type": "Mount", + "IconId": 4144, + "EnglishName": "Eurekan petrel", + "FrenchName": "hirondelle d'Eurêka", + "GermanName": "Eureka-Schwalbe", + "JapaneseName": "エウレカスワロー" + }, + { + "Type": "Quest", + "IconId": 71221, + "EnglishName": "Petalouda Hunt", + "FrenchName": "Chasse aux papillons", + "GermanName": "Ätherisch gekleidet", + "JapaneseName": "ペタルダは翻る" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Level 5 Petrify", + "FrenchName": "Pétrification niveau 5", + "GermanName": "Petrifikation Stufe 5", + "JapaneseName": "レベル5石化" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Level X Petrify", + "FrenchName": "Pétrification niveau X", + "GermanName": "Petrifikation Stufe X", + "JapaneseName": "レベルX石化" + }, + { + "Type": "Action", + "IconId": 3282, + "EnglishName": "Level 5 Petrify", + "FrenchName": "Pétrification niveau 5", + "GermanName": "Petrifikation Stufe 5", + "JapaneseName": "レベル5石化" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Magitek Impetus", + "FrenchName": "Impulsion magitek", + "GermanName": "Magitek-Impuls", + "JapaneseName": "魔導インペタス" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Drifting Petals", + "FrenchName": "Pétales faillissants", + "GermanName": "Blütenblätterregen", + "JapaneseName": "落花流水の術" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "kyane petalouda", + "FrenchName": "cyanopétalouda", + "GermanName": "Kyane-Petalouda", + "JapaneseName": "キアネ・ペタルダ" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "magicked puppet", + "FrenchName": "soldat-mage des Thorne", + "GermanName": "magisch[a] Marionette", + "JapaneseName": "ソーン・マジックソルジャー" + }, + { + "Type": "Item", + "IconId": 52022, + "EnglishName": "Magicked Carpet", + "FrenchName": "Tapis magique", + "GermanName": "Fliegender Teppich", + "JapaneseName": "マジックカーペット" + }, + { + "Type": "Mount", + "IconId": 4147, + "EnglishName": "magicked carpet", + "FrenchName": "tapis magique", + "GermanName": "Fliegender Teppich", + "JapaneseName": "マジックカーペット" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petrifying Voice", + "FrenchName": "Voix pétrifiante", + "GermanName": "Steinruf ", + "JapaneseName": "産石の声" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "O Petals, Unfurl", + "FrenchName": "Prière d'éclosion", + "GermanName": "O Blüten, erwachet!", + "JapaneseName": "祈願:咲き誇れ" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "nightmare puppet", + "FrenchName": "poupée cauchemardesque", + "GermanName": "Albtraum-Puppe", + "JapaneseName": "ナイトメア・パペット" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "ktiseos okyupete", + "FrenchName": "ktiséos okyupète", + "GermanName": "Ktiseos-Okypete", + "JapaneseName": "キティセオス・オキュペテ" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "petit pteranodon", + "FrenchName": "ptiranodon", + "GermanName": "Pteranoknirps", + "JapaneseName": "プチラノドン" + }, + { + "Type": "Minion", + "IconId": 0, + "EnglishName": "petit pteranodon", + "FrenchName": "ptiranodon", + "GermanName": "Pteranoknirps", + "JapaneseName": "プチラノドン" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "petrified pauper", + "FrenchName": "mendiant terrifié", + "GermanName": "ängstlich[a] Bettler", + "JapaneseName": "怯えた貧民" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "impetuous moogle", + "FrenchName": "Mog impatient", + "GermanName": "Träum-Mogry", + "JapaneseName": "まだまだモーグリ" + }, + { + "Type": "Fate", + "IconId": 63914, + "EnglishName": "All Pets Are Off", + "FrenchName": "Belles plantes", + "GermanName": "Ungeheuerlich!", + "JapaneseName": "華麗なる珍獣使い" + }, + { + "Type": "Item", + "IconId": 41134, + "EnglishName": "Wizard's Petasos", + "FrenchName": "Pétase du sorcier", + "GermanName": "Zauberer-Petasos", + "JapaneseName": "ウィザードペタソス" + }, + { + "Type": "Item", + "IconId": 22615, + "EnglishName": "Coarse Saltpeter", + "FrenchName": "Salpêtre grossier", + "GermanName": "Rohsalpeter-Klumpen", + "JapaneseName": "粗硝石" + }, + { + "Type": "Item", + "IconId": 59788, + "EnglishName": "Petit Pteranodon", + "FrenchName": "Ptiranodon", + "GermanName": "Pteranoknirps", + "JapaneseName": "プチラノドン" + }, + { + "Type": "Item", + "IconId": 22418, + "EnglishName": "Wattle Petribark", + "FrenchName": "Écorce d'acacia durcie", + "GermanName": "Hartakazienrinde", + "JapaneseName": "ハードワットル樹皮" + }, + { + "Type": "Item", + "IconId": 22210, + "EnglishName": "Petalouda Scales", + "FrenchName": "Écailles alaires de pétalouda", + "GermanName": "Flügelstaub einer Petalouda", + "JapaneseName": "ペタルダの鱗粉" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Petrifying Shriek", + "FrenchName": "Cri pétrifiant", + "GermanName": "Steinschrei", + "JapaneseName": "産石の叫声" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "kokkine petalouda", + "FrenchName": "érythropétalouda", + "GermanName": "Kokkine-Petalouda", + "JapaneseName": "コーキネ・ペタルダ" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "impetuous warrior", + "FrenchName": "homme musculeux", + "GermanName": "muskulös[a] Mann", + "JapaneseName": "筋骨逞しい男" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "precocious poppet", + "FrenchName": "jeune demoiselle", + "GermanName": "modisch[a] Mädchen", + "JapaneseName": "おしゃまな少女" + }, + { + "Type": "Item", + "IconId": 52030, + "EnglishName": "Carpet of Flowers", + "FrenchName": "Tapis à fleurs", + "GermanName": "Blumenteppich", + "JapaneseName": "フラワーラグ" + }, + { + "Type": "LeveQuest", + "IconId": 71241, + "EnglishName": "Liquid Competence", + "FrenchName": "Fabrication: potions alchimiques améliorant la concentration", + "GermanName": "Konzentration im Glas", + "JapaneseName": "製作依頼:作業に集中する錬金薬" + }, + { + "Type": "Status", + "IconId": 16603, + "EnglishName": "Poppet Resistance", + "FrenchName": "Immunité aux poupées", + "GermanName": "Puppen-Resistenz", + "JapaneseName": "ドール無効" + }, + { + "Type": "Status", + "IconId": 15024, + "EnglishName": "Poppet Resistance", + "FrenchName": "Immunité aux poupées", + "GermanName": "Puppen-Resistenz", + "JapaneseName": "ドール無効" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Rheognosis Petrine", + "FrenchName": "Leonosis petros", + "GermanName": "Rheognose Petros", + "JapaneseName": "レーオノシス・ペトゥロス" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "potent petrosphere", + "FrenchName": "super pétrosphère", + "GermanName": "Petrosphäre[p] I", + "JapaneseName": "ペトロスフィアII" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "ianthine petalouda", + "FrenchName": "iodopétalouda", + "GermanName": "Ianthine-Petalouda", + "JapaneseName": "イアンティネ・ペタルダ" + }, + { + "Type": "Item", + "IconId": 41179, + "EnglishName": "Sorcerer's Petasos", + "FrenchName": "Pétase de l'ensorceleur", + "GermanName": "Hexenmeister-Petasos", + "JapaneseName": "ソーサラーペタソス" + }, + { + "Type": "Item", + "IconId": 26038, + "EnglishName": "Fae Gwiber Trumpet", + "FrenchName": "Cor dragon pixie", + "GermanName": "Pixie-Gwiber-Pfeife", + "JapaneseName": "ピクシーグイベルの魔笛" + }, + { + "Type": "Item", + "IconId": 22613, + "EnglishName": "Splendid Saltpeter", + "FrenchName": "Soufre forestier", + "GermanName": "Dschungelschwefel", + "JapaneseName": "発掘隊向けの硫黄" + }, + { + "Type": "Item", + "IconId": 41848, + "EnglishName": "Spaekona's Petasos", + "FrenchName": "Pétase de spaekona", + "GermanName": "Spaekona-Petasos", + "JapaneseName": "スピコナペタソス" + }, + { + "Type": "Action", + "IconId": 405, + "EnglishName": "Prehistoric Trumpet", + "FrenchName": "Trompette préhistorique", + "GermanName": "Prähistorisches Tröten", + "JapaneseName": "先史の咆哮" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "Mark II limpet bomb", + "FrenchName": "bombo collant évolué", + "GermanName": "brandneu[a] Haft-Bomber", + "JapaneseName": "新式リムペットボム" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "flame petty officer", + "FrenchName": "sous-officier des Immortels", + "GermanName": "Unteroffizier[p] der Legion", + "JapaneseName": "不滅隊の下士官" + }, + { + "Type": "Npc", + "IconId": null, + "EnglishName": "storm petty officer", + "FrenchName": "sous-officier du Maelstrom", + "GermanName": "Unteroffizier[p] des Mahlstroms", + "JapaneseName": "黒渦団の下士官" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Fate_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Fate_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..35145a8 --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Fate_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,10 @@ +[ + { + "Type": "Fate", + "IconId": 60852, + "EnglishName": "Drink Me", + "FrenchName": "Rien que de l'eau", + "GermanName": "Planschende Glückshasen", + "JapaneseName": "水遊びのしあわせうさぎ" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Item_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Item_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..0ff4171 --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Item_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,250 @@ +[ + { + "Type": "Item", + "IconId": 25204, + "EnglishName": "Popoto", + "FrenchName": "Popoto", + "GermanName": "Toffel", + "JapaneseName": "ポポト" + }, + { + "Type": "Item", + "IconId": 27455, + "EnglishName": "Popoto Set", + "FrenchName": "Tubercule de popoto", + "GermanName": "Toffel-Knollen", + "JapaneseName": "ポポトの種芋" + }, + { + "Type": "Emote", + "IconId": 64371, + "EnglishName": "Popoto Step", + "FrenchName": "Popping popoto", + "GermanName": "Toffel-Tanz", + "JapaneseName": "ポポトステップ" + }, + { + "Type": "Item", + "IconId": 25204, + "EnglishName": "Wild Popoto", + "FrenchName": "Popoto sauvage", + "GermanName": "Wilde Toffel", + "JapaneseName": "ワイルドポポト" + }, + { + "Type": "Item", + "IconId": 24022, + "EnglishName": "Popoto Soba", + "FrenchName": "Nouilles de sarrasin montagnardes", + "GermanName": "Toffel-Soba", + "JapaneseName": "とろろ蕎麦" + }, + { + "Type": "Item", + "IconId": 24164, + "EnglishName": "Popoto Salad", + "FrenchName": "Salade de popotos", + "GermanName": "Toffelsalat", + "JapaneseName": "ポポトサラダ" + }, + { + "Type": "Item", + "IconId": 25221, + "EnglishName": "Giant Popoto", + "FrenchName": "Popoto géante", + "GermanName": "Riesentoffel", + "JapaneseName": "ジャイアントポポト" + }, + { + "Type": "Item", + "IconId": 25204, + "EnglishName": "Russet Popoto", + "FrenchName": "Popoto brune", + "GermanName": "Ockertoffel", + "JapaneseName": "ラセットポポト" + }, + { + "Type": "Item", + "IconId": 25204, + "EnglishName": "Island Popoto", + "FrenchName": "Popoto exotique", + "GermanName": "Paradiestoffel", + "JapaneseName": "アイルポポト" + }, + { + "Type": "Item", + "IconId": 25221, + "EnglishName": "Dalamud Popoto", + "FrenchName": "Popoto de Dalamud", + "GermanName": "Dalamud-Toffel", + "JapaneseName": "ダラガブポポト" + }, + { + "Type": "Item", + "IconId": 24457, + "EnglishName": "Mashed Popotoes", + "FrenchName": "Purée de popotos", + "GermanName": "Toffelbrei", + "JapaneseName": "マッシュポポト" + }, + { + "Type": "Item", + "IconId": 24072, + "EnglishName": "Popoto Pancakes", + "FrenchName": "Crique", + "GermanName": "Toffelpuffer", + "JapaneseName": "ポポトパンケーキ" + }, + { + "Type": "Item", + "IconId": 25221, + "EnglishName": "Walker's Popoto", + "FrenchName": "Belle de Noscea", + "GermanName": "Roter Admiral", + "JapaneseName": "メークインポポト" + }, + { + "Type": "Item", + "IconId": 25227, + "EnglishName": "Mountain Popoto", + "FrenchName": "Popoto des montagnes", + "GermanName": "Bergtoffel", + "JapaneseName": "マウンテンポポト" + }, + { + "Type": "Item", + "IconId": 24163, + "EnglishName": "Peppered Popotoes", + "FrenchName": "Popotos au poivre", + "GermanName": "Pfeffertoffel", + "JapaneseName": "ペッパーポポト" + }, + { + "Type": "Item", + "IconId": 23704, + "EnglishName": "Island Popoto Set", + "FrenchName": "Tubercules de popoto exotique", + "GermanName": "Paradiestoffel-Knollen", + "JapaneseName": "アイルポポトの種芋" + }, + { + "Type": "Item", + "IconId": 27456, + "EnglishName": "Dalamud Popoto Set", + "FrenchName": "Tubercule de popoto de Dalamud", + "GermanName": "Dalamud-Toffelknollen", + "JapaneseName": "ダラガブポポトの種芋" + }, + { + "Type": "Item", + "IconId": 24112, + "EnglishName": "Popotoes au Gratin", + "FrenchName": "Gratin de popotos brunes", + "GermanName": "Ockertoffel-Gratin", + "JapaneseName": "ラセットポポトグラタン" + }, + { + "Type": "Item", + "IconId": 24114, + "EnglishName": "Chilled Popoto Soup", + "FrenchName": "Soupe de popotos glacée", + "GermanName": "Kalte Toffelsuppe", + "JapaneseName": "冷製ポポトスープ" + }, + { + "Type": "Item", + "IconId": 25236, + "EnglishName": "Island Sweet Popoto", + "FrenchName": "Popoto douce exotique", + "GermanName": "Paradiessüßtoffel", + "JapaneseName": "アイルスイートポポト" + }, + { + "Type": "Item", + "IconId": 24164, + "EnglishName": "Twilight Popoto Salad", + "FrenchName": "Salade de popotos aux pommes", + "GermanName": "Toffelsalat mit Apfel", + "JapaneseName": "アップルポポトサラダ" + }, + { + "Type": "Item", + "IconId": 24072, + "EnglishName": "Giant Popoto Pancakes", + "FrenchName": "Crique géante", + "GermanName": "Riesentoffelpuffer", + "JapaneseName": "ジャイアントポポトパンケーキ" + }, + { + "Type": "Item", + "IconId": 24096, + "EnglishName": "Isleworks Sweet Popoto", + "FrenchName": "Popoto doux manufacturé", + "GermanName": "Atelier-Süßtoffel", + "JapaneseName": "開拓工房のスイートポポト" + }, + { + "Type": "Item", + "IconId": 24164, + "EnglishName": "Isleworks Popoto Salad", + "FrenchName": "Salade de popotos manufacturée", + "GermanName": "Atelier-Toffelsalat", + "JapaneseName": "開拓工房のポポトサラダ" + }, + { + "Type": "Item", + "IconId": 23741, + "EnglishName": "Island Sweet Popoto Set", + "FrenchName": "Tubercules de popoto douce exotique", + "GermanName": "Paradiessüßtoffel-Knollen", + "JapaneseName": "アイルスイートポポトの種芋" + }, + { + "Type": "Fate", + "IconId": 60721, + "EnglishName": "All Vine and No Popotoes", + "FrenchName": "Occlusion d'otyughs", + "GermanName": "Grenzschutz", + "JapaneseName": "オチュー狩り" + }, + { + "Type": "Quest", + "IconId": 71221, + "EnglishName": "You Say Popoto, I Say...", + "FrenchName": "Le bonheur est dans la forêt", + "GermanName": "Die dolle Knolle", + "JapaneseName": "求めるは野生種の恩恵" + }, + { + "Type": "Item", + "IconId": 24225, + "EnglishName": "Isleworks Sweet Popoto Pie", + "FrenchName": "Tarte à la popoto douce exotique", + "GermanName": "Atelier-Süßtoffeltörtchen", + "JapaneseName": "アイル・スイートポポトタルト" + }, + { + "Type": "Item", + "IconId": 24112, + "EnglishName": "Rarefied Popotoes au Gratin", + "FrenchName": "Gratin de popotos brunes collectionnable", + "GermanName": "Ockertoffel-Gratin (Sammlerstück)", + "JapaneseName": "収集用のラセットポポトグラタン" + }, + { + "Type": "Item", + "IconId": 24072, + "EnglishName": "Rarefied Giant Popoto Pancakes", + "FrenchName": "Crique géante collectionnable", + "GermanName": "Riesentoffelpuffer (Sammlerstück)", + "JapaneseName": "収集用のジャイアントポポトパンケーキ" + }, + { + "Type": "Item", + "IconId": 26435, + "EnglishName": "Ballroom Etiquette - The Popoto Step", + "FrenchName": "L'Étiquette éorzéenne: Popping popoto", + "GermanName": "Ballsaal-Etikette: Toffel-Tanz", + "JapaneseName": "演技教本:ポポトステップ" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Leve_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Leve_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..01c6edd --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Leve_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,10 @@ +[ + { + "Type": "LeveQuest", + "IconId": 71241, + "EnglishName": "Practical Command", + "FrenchName": "Fabrication: potions alchimiques augmentant le talent artistique", + "GermanName": "Mit der Kunst noch nicht am Ende", + "JapaneseName": "製作依頼:品質を高める錬金薬" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Mount_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Mount_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..e4fe60a --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Mount_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,18 @@ +[ + { + "Type": "Item", + "IconId": 26060, + "EnglishName": "Demi-Ozma", + "FrenchName": "Demi-Ozma", + "GermanName": "Demi-Yadis-Figur", + "JapaneseName": "デミオズマ" + }, + { + "Type": "Mount", + "IconId": 4146, + "EnglishName": "Demi-Ozma", + "FrenchName": "demi-Ozma", + "GermanName": "Demi-Yadis", + "JapaneseName": "デミオズマ" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Orchestrion_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Orchestrion_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..e4cd410 --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Orchestrion_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,34 @@ +[ + { + "Type": "Orchestrion", + "IconId": 76406, + "EnglishName": "Pa-Paya", + "FrenchName": "Pa-Paya", + "GermanName": "Pa-Paya", + "JapaneseName": "Pa-Paya" + }, + { + "Type": "Orchestrion", + "IconId": 76406, + "EnglishName": "Pa-Paya Demastered", + "FrenchName": "Pa-Paya Demastered", + "GermanName": "Pa-Paya Demastered", + "JapaneseName": "Pa-Paya Demastered" + }, + { + "Type": "Item", + "IconId": 25945, + "EnglishName": "Pa-Paya Orchestrion Roll", + "FrenchName": "Rouleau “Pa-Paya”", + "GermanName": "Notenrolle von „Pa-Paya“", + "JapaneseName": "オーケストリオン譜:Pa-Paya" + }, + { + "Type": "Item", + "IconId": 25945, + "EnglishName": "Pa-Paya Demastered Orchestrion Roll", + "FrenchName": "Rouleau “Pa-Paya Demastered”", + "GermanName": "Notenrolle von „Pa-Paya Demastered“", + "JapaneseName": "オーケストリオン譜:Pa-Paya Demastered" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.PlaceName_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.PlaceName_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..1ca9fff --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.PlaceName_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,106 @@ +[ + { + "Type": "Place", + "IconId": null, + "EnglishName": "Limsa Lominsa", + "FrenchName": "Limsa Lominsa", + "GermanName": "Limsa Lominsa", + "JapaneseName": "リムサ・ロミンサ" + }, + { + "Type": "Place", + "IconId": null, + "EnglishName": "Limsa Lominsa", + "FrenchName": "Limsa Lominsa", + "GermanName": "Limsa Lominsa", + "JapaneseName": "リムサ・ロミンサ市街" + }, + { + "Type": "Achievement", + "IconId": 62951, + "EnglishName": "Leaving Limsa Lominsa", + "FrenchName": "Le périple limséen", + "GermanName": "Das Meer ruft", + "JapaneseName": "リムサ・ロミンサからの旅立ち" + }, + { + "Type": "Place", + "IconId": null, + "EnglishName": "Central Limsa Lominsa", + "FrenchName": "Centre de Limsa Lominsa", + "GermanName": "Limsa Lominsa - Zentrum", + "JapaneseName": "中央管区" + }, + { + "Type": "Quest", + "IconId": 71221, + "EnglishName": "Coming to Limsa Lominsa", + "FrenchName": "Bienvenue à Limsa Lominsa", + "GermanName": "Willkommen in Limsa Lominsa", + "JapaneseName": "海の都リムサ・ロミンサへ" + }, + { + "Type": "Place", + "IconId": null, + "EnglishName": "Limsa Lominsa Upper Decks", + "FrenchName": "Limsa Lominsa - Le Tillac", + "GermanName": "Obere Decks", + "JapaneseName": "リムサ・ロミンサ:上甲板層" + }, + { + "Type": "Place", + "IconId": null, + "EnglishName": "Limsa Lominsa Lower Decks", + "FrenchName": "Limsa Lominsa - L'Entrepont", + "GermanName": "Untere Decks", + "JapaneseName": "リムサ・ロミンサ:下甲板層" + }, + { + "Type": "Place", + "IconId": null, + "EnglishName": "Limsa Lominsa Aetheryte Plaza", + "FrenchName": "Place de l'Éthérite", + "GermanName": "Ätherytenplatz", + "JapaneseName": "エーテライト・プラザ" + }, + { + "Type": "Quest", + "IconId": 71221, + "EnglishName": "Streets of Moonfire (Limsa Lominsa)", + "FrenchName": "Les Feux de la Mort ressuscités (Limsa Lominsa)", + "GermanName": "Feurige Abenteurer gesucht (Limsa Lominsa)", + "JapaneseName": "紅蓮祭と海都の冒険者" + }, + { + "Type": "Quest", + "IconId": 71221, + "EnglishName": "All the Little Ladies (Limsa Lominsa)", + "FrenchName": "Pour le plaisir des dames (Limsa Lominsa)", + "GermanName": "Feste wollen gefeiert werden (Limsa Lominsa)", + "JapaneseName": "プリンセスデーの海都" + }, + { + "Type": "Quest", + "IconId": 71221, + "EnglishName": "Egg-hunting We Will Go (Limsa Lominsa)", + "FrenchName": "Ouverture de la chasse aux Prœufs (Limsa Lominsa)", + "GermanName": "Die Wundereiersuche (Limsa)", + "JapaneseName": "エッグハント到来(海都)" + }, + { + "Type": "Orchestrion", + "IconId": 76406, + "EnglishName": "Navigator's Glory - The Theme of Limsa Lominsa", + "FrenchName": "Navigator's Glory - The Theme of Limsa Lominsa", + "GermanName": "Navigator's Glory - The Theme of Limsa Lominsa", + "JapaneseName": "潮風の集う街" + }, + { + "Type": "Item", + "IconId": 25945, + "EnglishName": "Navigator's Glory - The Theme of Limsa Lominsa Orchestrion Roll", + "FrenchName": "Rouleau “Navigator's Glory - The Theme of Limsa Lominsa”", + "GermanName": "Notenrolle von „Navigator's Glory - The Theme of Limsa Lominsa“", + "JapaneseName": "オーケストリオン譜:潮風の集う街" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Quest_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Quest_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..7dac8d4 --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Quest_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,10 @@ +[ + { + "Type": "Quest", + "IconId": 71221, + "EnglishName": " For Want of a Memory", + "FrenchName": " Une arme à mémoire d'éléphant", + "GermanName": " Erinnerungen an vergangene Tage", + "JapaneseName": " 「レジスタンス・ウェポン」への記憶定着" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Status_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Status_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..8f4ec74 --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Status_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,66 @@ +[ + { + "Type": "Status", + "IconId": 15020, + "EnglishName": "Vulnerability Up", + "FrenchName": "Vulnérabilité augmentée", + "GermanName": "Erhöhte Verwundbarkeit", + "JapaneseName": "被ダメージ上昇" + }, + { + "Type": "Status", + "IconId": 17101, + "EnglishName": "Vulnerability Up", + "FrenchName": "Vulnérabilité augmentée", + "GermanName": "Erhöhte Verwundbarkeit", + "JapaneseName": "被ダメージ上昇" + }, + { + "Type": "Status", + "IconId": 15057, + "EnglishName": "Magic Vulnerability Up", + "FrenchName": "Vulnérabilité magique augmentée", + "GermanName": "Erhöhte Magie-Verwundbarkeit", + "JapaneseName": "被魔法ダメージ増加" + }, + { + "Type": "Status", + "IconId": 18021, + "EnglishName": "Magic Vulnerability Up", + "FrenchName": "Vulnérabilité magique augmentée", + "GermanName": "Erhöhte Magie-Verwundbarkeit", + "JapaneseName": "被魔法ダメージ増加" + }, + { + "Type": "Status", + "IconId": 15057, + "EnglishName": "Magic Vulnerability Up", + "FrenchName": "Vulnérabilité magique augmentée", + "GermanName": "Erhöhte Magie-Verwundbarkeit", + "JapaneseName": "被魔法ダメージ上昇" + }, + { + "Type": "Status", + "IconId": 15053, + "EnglishName": "Physical Vulnerability Up", + "FrenchName": "Vulnérabilité physique augmentée", + "GermanName": "Erhöhte physische Verwundbarkeit", + "JapaneseName": "被物理ダメージ増加" + }, + { + "Type": "Status", + "IconId": 18001, + "EnglishName": "Physical Vulnerability Up", + "FrenchName": "Vulnérabilité physique augmentée", + "GermanName": "Erhöhte physische Verwundbarkeit", + "JapaneseName": "被物理ダメージ増加" + }, + { + "Type": "Status", + "IconId": 15659, + "EnglishName": "Marked for Vulnerability Up", + "FrenchName": "Cible: Vulnérabilité physique augmentée", + "GermanName": "Erhöhte physische Verwundbarkeit", + "JapaneseName": "指定:被物理ダメージ増加" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Title_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Title_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..0fe8f4b --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Title_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,10 @@ +[ + { + "Type": "Title", + "IconId": null, + "EnglishName": "God of Magic / Goddess of Magic", + "FrenchName": "Dieu de la magie / Déesse de la magie", + "GermanName": "Gott der Magie / Göttin der Magie", + "JapaneseName": "God of Magic" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Trait_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Trait_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..53329ac --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Trait_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,90 @@ +[ + { + "Type": "Trait", + "IconId": 5185, + "EnglishName": "Maim and Mend", + "FrenchName": "Efficacité des actions augmentée", + "GermanName": "Verbesserte Kommandos", + "JapaneseName": "アクションダメージ・回復量アップ" + }, + { + "Type": "Trait", + "IconId": 5185, + "EnglishName": "Maim and Mend", + "FrenchName": "Efficacité éthérée augmentée", + "GermanName": "Verbesserte Kommandos", + "JapaneseName": "アクションダメージ・回復量アップ" + }, + { + "Type": "Trait", + "IconId": 6102, + "EnglishName": "Maim and Mend", + "FrenchName": "Efficacité des actions augmentée", + "GermanName": "Verbesserte Kommandos", + "JapaneseName": "アクションダメージ・回復量アップ" + }, + { + "Type": "Trait", + "IconId": 5185, + "EnglishName": "Maim and Mend", + "FrenchName": "Efficacité des actions augmentée", + "GermanName": "Hauen und Heilen", + "JapaneseName": "アクションダメージ・回復量アップ" + }, + { + "Type": "Trait", + "IconId": 5189, + "EnglishName": "Maim and Mend V", + "FrenchName": "Efficacité des actions augmentée V", + "GermanName": "Verbesserte Kommandos V", + "JapaneseName": "アクションダメージ・回復量アップV" + }, + { + "Type": "Trait", + "IconId": 5186, + "EnglishName": "Maim and Mend II", + "FrenchName": "Efficacité des actions augmentée II", + "GermanName": "Verbesserte Kommandos II", + "JapaneseName": "アクションダメージ・回復量アップII" + }, + { + "Type": "Trait", + "IconId": 5186, + "EnglishName": "Maim and Mend II", + "FrenchName": "Efficacité éthérée augmentée II", + "GermanName": "Verbesserte Kommandos II", + "JapaneseName": "アクションダメージ・回復量アップII" + }, + { + "Type": "Trait", + "IconId": 6103, + "EnglishName": "Maim and Mend II", + "FrenchName": "Efficacité des actions augmentée II", + "GermanName": "Verbesserte Kommandos II", + "JapaneseName": "アクションダメージ・回復量アップII" + }, + { + "Type": "Trait", + "IconId": 5186, + "EnglishName": "Maim and Mend II", + "FrenchName": "Efficacité des actions augmentée II", + "GermanName": "Hauen und Heilen II", + "JapaneseName": "アクションダメージ・回復量アップII" + }, + { + "Type": "Trait", + "IconId": 5188, + "EnglishName": "Maim and Mend IV", + "FrenchName": "Efficacité des actions augmentée IV", + "GermanName": "Verbesserte Kommandos IV", + "JapaneseName": "アクションダメージ・回復量アップIV" + }, + { + "Type": "Trait", + "IconId": 5187, + "EnglishName": "Maim and Mend III", + "FrenchName": "Efficacité des actions augmentée III", + "GermanName": "Verbesserte Kommandos III", + "JapaneseName": "アクションダメージ・回復量アップIII" + } +] diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Weather_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Weather_SearchContentByName_ReturnsMatchingResults.snap new file mode 100644 index 0000000..720ff8b --- /dev/null +++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Weather_SearchContentByName_ReturnsMatchingResults.snap @@ -0,0 +1,10 @@ +[ + { + "Type": "Weather", + "IconId": 60202, + "EnglishName": "Fair Skies", + "FrenchName": "Clair", + "GermanName": "Heiter", + "JapaneseName": "晴れ" + } +] diff --git a/EasyTranslate.sln b/EasyTranslate.sln index 5e4f320..e78e5ce 100644 --- a/EasyTranslate.sln +++ b/EasyTranslate.sln @@ -19,6 +19,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyTranslate.Domain.Tests" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyTranslate.Infrastructure.Tests", "EasyTranslate.Infrastructure.Tests\EasyTranslate.Infrastructure.Tests.csproj", "{C8BDAB83-0DA6-4DA0-9938-3F27D19A55D6}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyTranslate.Integration.Tests", "EasyTranslate.Integration.Tests\EasyTranslate.Integration.Tests.csproj", "{0D330F6B-E1A6-4C77-AFA8-E4F34443EB7C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -61,6 +63,10 @@ Global {C8BDAB83-0DA6-4DA0-9938-3F27D19A55D6}.Debug|x64.Build.0 = Debug|Any CPU {C8BDAB83-0DA6-4DA0-9938-3F27D19A55D6}.Release|x64.ActiveCfg = Release|Any CPU {C8BDAB83-0DA6-4DA0-9938-3F27D19A55D6}.Release|x64.Build.0 = Release|Any CPU + {0D330F6B-E1A6-4C77-AFA8-E4F34443EB7C}.Debug|x64.ActiveCfg = Debug|Any CPU + {0D330F6B-E1A6-4C77-AFA8-E4F34443EB7C}.Debug|x64.Build.0 = Debug|Any CPU + {0D330F6B-E1A6-4C77-AFA8-E4F34443EB7C}.Release|x64.ActiveCfg = Release|Any CPU + {0D330F6B-E1A6-4C77-AFA8-E4F34443EB7C}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE