using JobTrackerApi.Models; using Xunit; namespace JobTrackerApi.Tests; // The catalog used to be built solely from CultureInfo.GetCultures, so which languages it // recognised depended on the host's ICU data: 806 cultures on a normal machine, exactly 1 // under globalization-invariant mode. CV imports silently lost their Languages section on a // container with trimmed or absent ICU data, and every existing test still passed locally. // // These pin the explicitly seeded catalog, so deleting the seed list fails here rather than // in production on a machine nobody tested. public sealed class HumanLanguageCatalogTests { [Theory] [InlineData("English")] [InlineData("Norwegian")] [InlineData("French")] [InlineData("Spanish")] [InlineData("German")] [InlineData("Arabic")] [InlineData("Chinese")] [InlineData("Polish")] public void Common_languages_resolve_without_relying_on_host_culture_data(string language) { Assert.Equal(language, HumanLanguageCatalog.NormalizeLanguageName(language)); } [Theory] [InlineData("norsk")] [InlineData("bokmål")] [InlineData("nynorsk")] public void Norwegian_aliases_resolve_to_the_canonical_name(string alias) { Assert.Equal("Norwegian", HumanLanguageCatalog.NormalizeLanguageName(alias)); } [Theory] [InlineData("C#")] [InlineData("Leadership")] [InlineData("Public speaking")] [InlineData("Go")] // a programming language, not a human one [InlineData("Java")] // Javanese is a language; Java is not [InlineData("Swift")] [InlineData("Rust")] public void Technical_skills_are_not_treated_as_human_languages(string skill) { Assert.Null(HumanLanguageCatalog.NormalizeLanguageName(skill)); } [Fact] public void A_language_embedded_in_a_phrase_is_extracted_with_its_level() { Assert.Equal("Norwegian", HumanLanguageCatalog.NormalizeLanguageName("Native Norwegian speaker")); Assert.Equal("Native", HumanLanguageCatalog.ExtractLevel("Native Norwegian speaker")); } }