2021-07-27 08:17:56 +02:00
using System.Threading.Tasks ;
using BTCPayServer.Services ;
using BTCPayServer.Tests.Logging ;
using Xunit ;
using Xunit.Abstractions ;
namespace BTCPayServer.Tests
{
2021-11-23 05:57:45 +01:00
[Collection(nameof(NonParallelizableCollectionDefinition))]
2021-11-22 09:16:08 +01:00
public class LanguageServiceTests : UnitTestBase
2021-07-27 08:17:56 +02:00
{
public const int TestTimeout = TestUtils . TestTimeout ;
2021-11-22 09:16:08 +01:00
public LanguageServiceTests ( ITestOutputHelper helper ) : base ( helper )
2021-07-27 08:17:56 +02:00
{
}
[Fact(Timeout = TestTimeout)]
[Trait("Integration", "Integration")]
public async Task CanAutoDetectLanguage ( )
{
2022-01-14 09:50:29 +01:00
using var tester = CreateServerTester ( ) ;
await tester . StartAsync ( ) ;
var languageService = tester . PayTester . GetService < LanguageService > ( ) ;
2021-12-31 08:59:02 +01:00
2022-01-14 09:50:29 +01:00
// Most common format. First option does not have a quality score. Others do in descending order.
// Result should be nl-NL (because the default weight is 1 for nl)
var lang1 = languageService . FindLanguageInAcceptLanguageHeader ( "nl,fr;q=0.7,en;q=0.5" ) ;
Assert . NotNull ( lang1 ) ;
Assert . Equal ( "nl-NL" , lang1 ? . Code ) ;
2021-07-27 08:17:56 +02:00
2022-01-14 09:50:29 +01:00
// Most common format. First option does not have a quality score. Others do in descending order. This time the first option includes a country.
// Result should be nl-NL (because the default weight is 1 for nl-BE and it does not exist in BTCPay Server, but nl-NL does and applies too for language "nl")
var lang2 = languageService . FindLanguageInAcceptLanguageHeader ( "nl-BE,fr;q=0.7,en;q=0.5" ) ;
Assert . NotNull ( lang2 ) ;
Assert . Equal ( "nl-NL" , lang2 ? . Code ) ;
2021-07-27 08:17:56 +02:00
2022-01-14 09:50:29 +01:00
// Unusual format, but still valid. All values have a quality score and not ordered.
// Result should be fr-FR (because 0.7 is the highest quality score)
var lang3 = languageService . FindLanguageInAcceptLanguageHeader ( "nl;q=0.1,fr;q=0.7,en;q=0.5" ) ;
Assert . NotNull ( lang3 ) ;
Assert . Equal ( "fr-FR" , lang3 ? . Code ) ;
2021-07-27 08:17:56 +02:00
2022-01-14 09:50:29 +01:00
// Unusual format, but still valid. Some language is given that we don't have and a wildcard for everything else.
// Result should be NULL, because "xx" does not exist and * is a wildcard and has no meaning.
var lang4 = languageService . FindLanguageInAcceptLanguageHeader ( "xx,*;q=0.5" ) ;
Assert . Null ( lang4 ) ;
2021-07-27 08:17:56 +02:00
}
}
}