diff --git a/src/World.Net.UnitTests/Countries/SaintBarthelemyTest.cs b/src/World.Net.UnitTests/Countries/SaintBarthelemyTest.cs
new file mode 100644
index 0000000..01b4224
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SaintBarthelemyTest.cs
@@ -0,0 +1,42 @@
+namespace World.Net.UnitTests.Countries;
+
+public sealed class SaintBarthelemyTest : AssertCountryTestBase
+{
+ private const string COUNTRY_NAME = "Saint-Barthélemy";
+ private const string NATIVE_NAME = "Saint-Barthélemy";
+ private const string CAPITAL = "Gustavia";
+ private const string OFFICIAL_NAME = "Collectivity of Saint-Barthélemy";
+ private const string ISO2_CODE = "BL";
+ private const string ISO3_CODE = "BLM";
+ private const int NUMERIC_CODE = 652;
+ private readonly string[] CALLING_CODE = ["+590"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.SaintBarthelemy;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Saint-Barthélemy", "BL-BL", "Territory")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSaintBarthelemy()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+}
diff --git a/src/World.Net.UnitTests/Countries/SaintHelenaTest.cs b/src/World.Net.UnitTests/Countries/SaintHelenaTest.cs
new file mode 100644
index 0000000..24c7465
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SaintHelenaTest.cs
@@ -0,0 +1,44 @@
+namespace World.Net.UnitTests.Countries;
+
+public sealed class SaintHelenaTest : AssertCountryTestBase
+{
+ private const string SAINTHELENA_COUNTRY_NAME = "Saint Helena";
+ private const string SAINTHELENA_NATIVE_NAME = "Saint Helena";
+ private const string SAINTHELENA_CAPITAL = "Jamestown";
+ private const string SAINTHELENA_OFFICIAL_NAME = "Saint Helena, Ascension and Tristan da Cunha";
+ private const string SAINTHELENA_ISO2_CODE = "SH";
+ private const string SAINTHELENA_ISO3_CODE = "SHN";
+ private const int SAINTHELENA_NUMERIC_CODE = 654;
+ private readonly string[] SAINTHELENA_CALLING_CODE = ["+290"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.SaintHelena;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Saint Helena", "SH-HL", "District"),
+ new("Ascension", "SH-AC", "District"),
+ new("Tristan da Cunha", "SH-TR", "District")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSaintHelena()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ SAINTHELENA_COUNTRY_NAME,
+ SAINTHELENA_OFFICIAL_NAME,
+ SAINTHELENA_NATIVE_NAME,
+ SAINTHELENA_CAPITAL,
+ SAINTHELENA_NUMERIC_CODE,
+ SAINTHELENA_ISO2_CODE,
+ SAINTHELENA_ISO3_CODE,
+ SAINTHELENA_CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+}
diff --git a/src/World.Net.UnitTests/Countries/SaintKittsAndNevisTest.cs b/src/World.Net.UnitTests/Countries/SaintKittsAndNevisTest.cs
new file mode 100644
index 0000000..e8ddc1b
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SaintKittsAndNevisTest.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace World.Net.UnitTests.Countries
+{
+ public sealed class SaintKittsAndNevisTest : AssertCountryTestBase
+ {
+ private const string COUNTRY_NAME = "Saint Kitts and Nevis";
+ private const string NATIVE_NAME = "Saint Kitts and Nevis";
+ private const string CAPITAL = "Basseterre";
+ private const string OFFICIAL_NAME = "Federation of Saint Kitts and Nevis";
+ private const string ISO2_CODE = "KN";
+ private const string ISO3_CODE = "KNA";
+ private const int NUMERIC_CODE = 659;
+ private readonly string[] CALLING_CODE = ["+1-869"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.SaintKittsAndNevis;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Saint Kitts", "KN-K", "Island"),
+ new("Nevis", "KN-N", "Island")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSaintKittsAndNevis()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+ }
+
+}
diff --git a/src/World.Net.UnitTests/Countries/SaintLuciaTest.cs b/src/World.Net.UnitTests/Countries/SaintLuciaTest.cs
new file mode 100644
index 0000000..202aa13
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SaintLuciaTest.cs
@@ -0,0 +1,52 @@
+namespace World.Net.UnitTests.Countries;
+
+public sealed class SaintLuciaTest : AssertCountryTestBase
+{
+ private const string COUNTRY_NAME = "Saint Lucia";
+ private const string NATIVE_NAME = "Saint Lucia";
+ private const string CAPITAL = "Castries";
+ private const string OFFICIAL_NAME = "Saint Lucia";
+ private const string ISO2_CODE = "LC";
+ private const string ISO3_CODE = "LCA";
+ private const int NUMERIC_CODE = 662;
+ private readonly string[] CALLING_CODE = ["+1-758"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.SaintLucia;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Anse la Raye", "LC-01", "District"),
+ new("Canaries", "LC-02", "District"),
+ new("Castries", "LC-03", "District"),
+ new("Choiseul", "LC-04", "District"),
+ new("Dennery", "LC-05", "District"),
+ new("Gros Islet", "LC-06", "District"),
+ new("Laborie", "LC-07", "District"),
+ new("Micoud", "LC-08", "District"),
+ new("Praslin", "LC-09", "District"),
+ new("Soufriere", "LC-10", "District"),
+ new("Vieux Fort", "LC-11", "District")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSaintLucia()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+}
diff --git a/src/World.Net.UnitTests/Countries/SaintMartinTest.cs b/src/World.Net.UnitTests/Countries/SaintMartinTest.cs
new file mode 100644
index 0000000..3d10d7a
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SaintMartinTest.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace World.Net.UnitTests.Countries
+{
+ public sealed class SaintMartinTest : AssertCountryTestBase
+ {
+ private const string COUNTRY_NAME = "Saint-Martin";
+ private const string NATIVE_NAME = "Saint-Martin";
+ private const string CAPITAL = "Marigot";
+ private const string OFFICIAL_NAME = "Collectivity of Saint-Martin";
+ private const string ISO2_CODE = "MF";
+ private const string ISO3_CODE = "MAF";
+ private const int NUMERIC_CODE = 663;
+ private readonly string[] CALLING_CODE = ["+590"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.SaintMartinFrenchPart;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Saint-Martin", "MF-MF", "Territory")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSaintMartin()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+ }
+
+}
diff --git a/src/World.Net.UnitTests/Countries/SaintPierreAndMiquelonTest.cs b/src/World.Net.UnitTests/Countries/SaintPierreAndMiquelonTest.cs
new file mode 100644
index 0000000..e80d08d
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SaintPierreAndMiquelonTest.cs
@@ -0,0 +1,43 @@
+namespace World.Net.UnitTests.Countries;
+
+public sealed class SaintPierreAndMiquelonTest : AssertCountryTestBase
+{
+ private const string COUNTRY_NAME = "Saint Pierre and Miquelon";
+ private const string NATIVE_NAME = "Saint Pierre and Miquelon";
+ private const string CAPITAL = "Saint-Pierre";
+ private const string OFFICIAL_NAME = "Saint Pierre and Miquelon";
+ private const string ISO2_CODE = "PM";
+ private const string ISO3_CODE = "SPM";
+ private const int NUMERIC_CODE = 666;
+ private readonly string[] CALLING_CODE = ["+508"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.SaintPierreAndMiquelon;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Saint-Pierre", "PM-SP", "Commune"),
+ new("Miquelon-Langlade", "PM-MQ", "Commune")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSaintPierreAndMiquelon()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+}
diff --git a/src/World.Net.UnitTests/Countries/SaintVincentAndTheGrenadinesTest.cs b/src/World.Net.UnitTests/Countries/SaintVincentAndTheGrenadinesTest.cs
new file mode 100644
index 0000000..c4c7400
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SaintVincentAndTheGrenadinesTest.cs
@@ -0,0 +1,48 @@
+
+namespace World.Net.UnitTests.Countries;
+
+public sealed class SaintVincentAndTheGrenadinesTest : AssertCountryTestBase
+{
+ private const string COUNTRY_NAME = "Saint Vincent and the Grenadines";
+ private const string NATIVE_NAME = "Saint Vincent and the Grenadines";
+ private const string CAPITAL = "Kingstown";
+ private const string OFFICIAL_NAME = "Saint Vincent and the Grenadines";
+ private const string ISO2_CODE = "VC";
+ private const string ISO3_CODE = "VCT";
+ private const int NUMERIC_CODE = 670;
+ private readonly string[] CALLING_CODE = ["+1-784"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.SaintVincentAndTheGrenadines;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Charlotte", "VC-C", "Parish"),
+ new("Saint Andrew", "VC-A", "Parish"),
+ new("Saint David", "VC-D", "Parish"),
+ new("Saint George", "VC-G", "Parish"),
+ new("Saint Patrick", "VC-P", "Parish"),
+ new("Grenadines", "VC-VG", "Parish")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSaintVincentAndTheGrenadines()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+}
diff --git a/src/World.Net.UnitTests/Countries/SamoaTest.cs b/src/World.Net.UnitTests/Countries/SamoaTest.cs
new file mode 100644
index 0000000..fa460fb
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SamoaTest.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace World.Net.UnitTests.Countries
+{
+ public sealed class SamoaTest : AssertCountryTestBase
+ {
+ private const string COUNTRY_NAME = "Samoa";
+ private const string NATIVE_NAME = "Sāmoa";
+ private const string CAPITAL = "Apia";
+ private const string OFFICIAL_NAME = "Independent State of Samoa";
+ private const string ISO2_CODE = "WS";
+ private const string ISO3_CODE = "WSM";
+ private const int NUMERIC_CODE = 882;
+ private readonly string[] CALLING_CODE = ["+685"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.Samoa;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("A'ana", "WS-AA", "District"),
+ new("Aiga-i-le-Tai", "WS-AL", "District"),
+ new("Atua", "WS-AT", "District"),
+ new("Fa'asaleleaga", "WS-FS", "District"),
+ new("Gaga'emauga", "WS-GE", "District"),
+ new("Gaga'ifomauga", "WS-GF", "District"),
+ new("Palauli", "WS-PA", "District"),
+ new("Satupa'itea", "WS-SA", "District"),
+ new("Tuamasaga", "WS-TU", "District"),
+ new("Va'a-o-Fonoti", "WS-VF", "District"),
+ new("Vaisigano", "WS-VS", "District")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSamoa()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+ }
+
+}
diff --git a/src/World.Net.UnitTests/Countries/SanMarinoTest.cs b/src/World.Net.UnitTests/Countries/SanMarinoTest.cs
new file mode 100644
index 0000000..82ec59e
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SanMarinoTest.cs
@@ -0,0 +1,50 @@
+namespace World.Net.UnitTests.Countries;
+
+public sealed class SanMarinoTest : AssertCountryTestBase
+{
+ private const string COUNTRY_NAME = "San Marino";
+ private const string NATIVE_NAME = "San Marino";
+ private const string CAPITAL = "San Marino";
+ private const string OFFICIAL_NAME = "Most Serene Republic of San Marino";
+ private const string ISO2_CODE = "SM";
+ private const string ISO3_CODE = "SMR";
+ private const int NUMERIC_CODE = 674;
+ private readonly string[] CALLING_CODE = ["+378"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.SanMarino;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Acquaviva", "SM-AC", "Municipality"),
+ new("Borgo Maggiore", "SM-BM", "Municipality"),
+ new("Chiesanuova", "SM-CH", "Municipality"),
+ new("Domagnano", "SM-DO", "Municipality"),
+ new("Faetano", "SM-FA", "Municipality"),
+ new("Fiorentino", "SM-FI", "Municipality"),
+ new("Montegiardino", "SM-MG", "Municipality"),
+ new("San Marino", "SM-SM", "Municipality"),
+ new("Serravalle", "SM-SE", "Municipality")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSanMarino()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+}
diff --git a/src/World.Net.UnitTests/Countries/SaoTomeAndPrincipeTest.cs b/src/World.Net.UnitTests/Countries/SaoTomeAndPrincipeTest.cs
new file mode 100644
index 0000000..207c6d0
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SaoTomeAndPrincipeTest.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace World.Net.UnitTests.Countries
+{
+ public sealed class SaoTomeAndPrincipeTest : AssertCountryTestBase
+ {
+ private const string COUNTRY_NAME = "São Tomé and Príncipe";
+ private const string NATIVE_NAME = "São Tomé e Príncipe";
+ private const string CAPITAL = "São Tomé";
+ private const string OFFICIAL_NAME = "Democratic Republic of São Tomé and Príncipe";
+ private const string ISO2_CODE = "ST";
+ private const string ISO3_CODE = "STP";
+ private const int NUMERIC_CODE = 678;
+ private readonly string[] CALLING_CODE = ["+239"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.SaoTomeAndPrincipe;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("São Tomé", "ST-ST", "Province"),
+ new("Príncipe", "ST-PN", "Province")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSaoTomeAndPrincipe()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+ }
+
+}
diff --git a/src/World.Net.UnitTests/Countries/SaudiArabiaTest.cs b/src/World.Net.UnitTests/Countries/SaudiArabiaTest.cs
new file mode 100644
index 0000000..4ede702
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SaudiArabiaTest.cs
@@ -0,0 +1,54 @@
+namespace World.Net.UnitTests.Countries;
+
+public sealed class SaudiArabiaTest : AssertCountryTestBase
+{
+ private const string COUNTRY_NAME = "Saudi Arabia";
+ private const string NATIVE_NAME = "المملكة العربية السعودية";
+ private const string CAPITAL = "Riyadh";
+ private const string OFFICIAL_NAME = "Kingdom of Saudi Arabia";
+ private const string ISO2_CODE = "SA";
+ private const string ISO3_CODE = "SAU";
+ private const int NUMERIC_CODE = 682;
+ private readonly string[] CALLING_CODE = ["+966"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.SaudiArabia;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Riyadh", "SA-01", "Region"),
+ new("Makkah", "SA-02", "Region"),
+ new("Al Madinah", "SA-03", "Region"),
+ new("Eastern Province", "SA-04", "Region"),
+ new("Asir", "SA-05", "Region"),
+ new("Tabuk", "SA-07", "Region"),
+ new("Hail", "SA-06", "Region"),
+ new("Northern Borders", "SA-08", "Region"),
+ new("Jazan", "SA-09", "Region"),
+ new("Najran", "SA-10", "Region"),
+ new("Al Bahah", "SA-11", "Region"),
+ new("Al Jawf", "SA-12", "Region"),
+ new("Qassim", "SA-14", "Region")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSaudiArabia()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+}
diff --git a/src/World.Net.UnitTests/Countries/SenegalTest.cs b/src/World.Net.UnitTests/Countries/SenegalTest.cs
new file mode 100644
index 0000000..5b818e4
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SenegalTest.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace World.Net.UnitTests.Countries
+{
+ public sealed class SenegalTest : AssertCountryTestBase
+ {
+ private const string COUNTRY_NAME = "Senegal";
+ private const string NATIVE_NAME = "Sénégal";
+ private const string CAPITAL = "Dakar";
+ private const string OFFICIAL_NAME = "Republic of Senegal";
+ private const string ISO2_CODE = "SN";
+ private const string ISO3_CODE = "SEN";
+ private const int NUMERIC_CODE = 686;
+ private readonly string[] CALLING_CODE = ["+221"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.Senegal;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Dakar", "SN-DK", "Region"),
+ new("Diourbel", "SN-DB", "Region"),
+ new("Fatick", "SN-FK", "Region"),
+ new("Kaffrine", "SN-KA", "Region"),
+ new("Kaolack", "SN-KL", "Region"),
+ new("Kédougou", "SN-KE", "Region"),
+ new("Kolda", "SN-KD", "Region"),
+ new("Louga", "SN-LG", "Region"),
+ new("Matam", "SN-MT", "Region"),
+ new("Saint-Louis", "SN-SL", "Region"),
+ new("Sédhiou", "SN-SE", "Region"),
+ new("Tambacounda", "SN-TC", "Region"),
+ new("Thiès", "SN-TH", "Region"),
+ new("Ziguinchor", "SN-ZG", "Region")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSenegal()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+ }
+
+}
diff --git a/src/World.Net.UnitTests/Countries/SerbiaTest.cs b/src/World.Net.UnitTests/Countries/SerbiaTest.cs
new file mode 100644
index 0000000..d71ca43
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SerbiaTest.cs
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace World.Net.UnitTests.Countries
+{
+ public sealed class SerbiaTest : AssertCountryTestBase
+ {
+ private const string COUNTRY_NAME = "Serbia";
+ private const string NATIVE_NAME = "Srbija";
+ private const string CAPITAL = "Belgrade";
+ private const string OFFICIAL_NAME = "Republic of Serbia";
+ private const string ISO2_CODE = "RS";
+ private const string ISO3_CODE = "SRB";
+ private const int NUMERIC_CODE = 688;
+ private readonly string[] CALLING_CODE = ["+381"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.Serbia;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Belgrade", "RS-00", "District"),
+ new("Bor", "RS-14", "District"),
+ new("Braničevo", "RS-11", "District"),
+ new("Central Banat", "RS-02", "District"),
+ new("Jablanica", "RS-23", "District"),
+ new("Kolubara", "RS-09", "District"),
+ new("Mačva", "RS-08", "District"),
+ new("Moravica", "RS-17", "District"),
+ new("Nišava", "RS-20", "District"),
+ new("North Bačka", "RS-01", "District"),
+ new("North Banat", "RS-03", "District"),
+ new("Pčinja", "RS-24", "District"),
+ new("Pirot", "RS-22", "District"),
+ new("Pomoravlje", "RS-13", "District"),
+ new("Rasina", "RS-19", "District"),
+ new("Raška", "RS-18", "District"),
+ new("South Bačka", "RS-06", "District"),
+ new("South Banat", "RS-04", "District"),
+ new("Srem", "RS-07", "District"),
+ new("Šumadija", "RS-12", "District"),
+ new("Toplica", "RS-21", "District"),
+ new("West Bačka", "RS-05", "District"),
+ new("Zaječar", "RS-15", "District"),
+ new("Zlatibor", "RS-16", "District")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSerbia()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+ }
+
+}
diff --git a/src/World.Net.UnitTests/Countries/SeychellesTest.cs b/src/World.Net.UnitTests/Countries/SeychellesTest.cs
new file mode 100644
index 0000000..88ed2c1
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SeychellesTest.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace World.Net.UnitTests.Countries
+{
+ public sealed class SeychellesTest : AssertCountryTestBase
+ {
+ private const string COUNTRY_NAME = "Seychelles";
+ private const string NATIVE_NAME = "Sesel";
+ private const string CAPITAL = "Victoria";
+ private const string OFFICIAL_NAME = "Republic of Seychelles";
+ private const string ISO2_CODE = "SC";
+ private const string ISO3_CODE = "SYC";
+ private const int NUMERIC_CODE = 690;
+ private readonly string[] CALLING_CODE = ["+248"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.Seychelles;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Anse aux Pins", "SC-01", "District"),
+ new("Anse Boileau", "SC-02", "District"),
+ new("Anse Etoile", "SC-03", "District"),
+ new("Anse Royale", "SC-05", "District"),
+ new("Au Cap", "SC-04", "District"),
+ new("Baie Lazare", "SC-06", "District"),
+ new("Baie Sainte Anne", "SC-07", "District"),
+ new("Beau Vallon", "SC-08", "District"),
+ new("Bel Air", "SC-09", "District"),
+ new("Bel Ombre", "SC-10", "District"),
+ new("Cascade", "SC-11", "District"),
+ new("Glacis", "SC-12", "District"),
+ new("Grand'Anse Mahé", "SC-13", "District"),
+ new("Grand'Anse Praslin", "SC-14", "District"),
+ new("La Digue", "SC-15", "District"),
+ new("La Rivière Anglaise", "SC-16", "District"),
+ new("Les Mamelles", "SC-24", "District"),
+ new("Mont Buxton", "SC-17", "District"),
+ new("Mont Fleuri", "SC-18", "District"),
+ new("Plaisance", "SC-19", "District"),
+ new("Pointe La Rue", "SC-20", "District"),
+ new("Port Glaud", "SC-21", "District"),
+ new("Roche Caiman", "SC-25", "District"),
+ new("Saint Louis", "SC-22", "District"),
+ new("Takamaka", "SC-23", "District")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSeychelles()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+ }
+
+}
diff --git a/src/World.Net.UnitTests/Countries/SierraLeoneTest.cs b/src/World.Net.UnitTests/Countries/SierraLeoneTest.cs
new file mode 100644
index 0000000..5ad8a07
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SierraLeoneTest.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace World.Net.UnitTests.Countries
+{
+ public sealed class SierraLeoneTest : AssertCountryTestBase
+ {
+ private const string COUNTRY_NAME = "Sierra Leone";
+ private const string NATIVE_NAME = "Sierra Leone";
+ private const string CAPITAL = "Freetown";
+ private const string OFFICIAL_NAME = "Republic of Sierra Leone";
+ private const string ISO2_CODE = "SL";
+ private const string ISO3_CODE = "SLE";
+ private const int NUMERIC_CODE = 694;
+ private readonly string[] CALLING_CODE = ["+232"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.SierraLeone;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES =
+ [
+ new("Eastern Province", "SL-E", "Province"),
+ new("Northern Province", "SL-N", "Province"),
+ new("North Western Province", "SL-NW", "Province"),
+ new("Southern Province", "SL-S", "Province"),
+ new("Western Area", "SL-W", "Province")
+ ];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSierraLeone()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+ }
+
+}
diff --git a/src/World.Net.UnitTests/Countries/SingaporeTest.cs b/src/World.Net.UnitTests/Countries/SingaporeTest.cs
new file mode 100644
index 0000000..3dd8731
--- /dev/null
+++ b/src/World.Net.UnitTests/Countries/SingaporeTest.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace World.Net.UnitTests.Countries
+{
+ public sealed class SingaporeTest : AssertCountryTestBase
+ {
+ private const string COUNTRY_NAME = "Singapore";
+ private const string NATIVE_NAME = "Singapore";
+ private const string CAPITAL = "Singapore";
+ private const string OFFICIAL_NAME = "Republic of Singapore";
+ private const string ISO2_CODE = "SG";
+ private const string ISO3_CODE = "SGP";
+ private const int NUMERIC_CODE = 702;
+ private readonly string[] CALLING_CODE = ["+65"];
+ private const CountryIdentifier EXPECTEDID = CountryIdentifier.Singapore;
+
+ private static readonly (string Name, string IsoCode, string Type)[] EXPECTED_STATES = [];
+
+ [Fact]
+ public void GetCountry_ReturnsCorrectInformation_ForSingapore()
+ {
+ // Arrange
+ // Act
+ var country = CountryProvider.GetCountry(EXPECTEDID);
+
+ // Assert
+ AssertCorrectInformation(
+ country,
+ EXPECTEDID,
+ COUNTRY_NAME,
+ OFFICIAL_NAME,
+ NATIVE_NAME,
+ CAPITAL,
+ NUMERIC_CODE,
+ ISO2_CODE,
+ ISO3_CODE,
+ CALLING_CODE,
+ EXPECTED_STATES
+ );
+ }
+ }
+
+}
diff --git a/src/World.Net/Countries/SaintBarthelemy.cs b/src/World.Net/Countries/SaintBarthelemy.cs
new file mode 100644
index 0000000..5d955ad
--- /dev/null
+++ b/src/World.Net/Countries/SaintBarthelemy.cs
@@ -0,0 +1,38 @@
+namespace World.Net.Countries;
+
+internal sealed class SaintBarthelemy : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.SaintBarthelemy;
+
+ //
+ public string Name { get; } = "Saint-Barthélemy";
+
+ //
+ public string OfficialName { get; } = "Collectivity of Saint-Barthélemy";
+
+ //
+ public string NativeName => "Saint-Barthélemy";
+
+ //
+ public string Capital { get; } = "Gustavia";
+
+ //
+ public int NumericCode { get; } = 652;
+
+ //
+ public string ISO2Code { get; } = "BL";
+
+ //
+ public string ISO3Code { get; } = "BLM";
+
+ //
+ public string[] CallingCode { get; } = ["+590"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Saint-Barthélemy", "BL-BL", "Territory")
+ ];
+}
+
diff --git a/src/World.Net/Countries/SaintHelena.cs b/src/World.Net/Countries/SaintHelena.cs
new file mode 100644
index 0000000..2bce939
--- /dev/null
+++ b/src/World.Net/Countries/SaintHelena.cs
@@ -0,0 +1,39 @@
+namespace World.Net.Countries;
+
+internal sealed class SaintHelena : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.SaintHelena;
+
+ //
+ public string Name { get; } = "Saint Helena";
+
+ //
+ public string OfficialName { get; } = "Saint Helena, Ascension and Tristan da Cunha";
+
+ //
+ public string NativeName => "Saint Helena";
+
+ //
+ public string Capital { get; } = "Jamestown";
+
+ //
+ public int NumericCode { get; } = 654;
+
+ //
+ public string ISO2Code { get; } = "SH";
+
+ //
+ public string ISO3Code { get; } = "SHN";
+
+ //
+ public string[] CallingCode { get; } = ["+290"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Saint Helena", "SH-HL", "District"),
+ new("Ascension", "SH-AC", "District"),
+ new("Tristan da Cunha", "SH-TR", "District")
+ ];
+}
diff --git a/src/World.Net/Countries/SaintKittsAndNevis.cs b/src/World.Net/Countries/SaintKittsAndNevis.cs
new file mode 100644
index 0000000..31375ac
--- /dev/null
+++ b/src/World.Net/Countries/SaintKittsAndNevis.cs
@@ -0,0 +1,39 @@
+namespace World.Net.Countries;
+
+internal sealed class SaintKittsAndNevis : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.SaintKittsAndNevis;
+
+ //
+ public string Name { get; } = "Saint Kitts and Nevis";
+
+ //
+ public string OfficialName { get; } = "Federation of Saint Kitts and Nevis";
+
+ //
+ public string NativeName => "Saint Kitts and Nevis";
+
+ //
+ public string Capital { get; } = "Basseterre";
+
+ //
+ public int NumericCode { get; } = 659;
+
+ //
+ public string ISO2Code { get; } = "KN";
+
+ //
+ public string ISO3Code { get; } = "KNA";
+
+ //
+ public string[] CallingCode { get; } = ["+1-869"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Saint Kitts", "KN-K", "Island"),
+ new("Nevis", "KN-N", "Island")
+ ];
+}
+
diff --git a/src/World.Net/Countries/SaintLucia.cs b/src/World.Net/Countries/SaintLucia.cs
new file mode 100644
index 0000000..ac9ae51
--- /dev/null
+++ b/src/World.Net/Countries/SaintLucia.cs
@@ -0,0 +1,48 @@
+namespace World.Net.Countries;
+
+internal sealed class SaintLucia : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.SaintLucia;
+
+ //
+ public string Name { get; } = "Saint Lucia";
+
+ //
+ public string OfficialName { get; } = "Saint Lucia";
+
+ //
+ public string NativeName => "Saint Lucia";
+
+ //
+ public string Capital { get; } = "Castries";
+
+ //
+ public int NumericCode { get; } = 662;
+
+ //
+ public string ISO2Code { get; } = "LC";
+
+ //
+ public string ISO3Code { get; } = "LCA";
+
+ //
+ public string[] CallingCode { get; } = ["+1-758"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Anse la Raye", "LC-01", "District"),
+ new("Canaries", "LC-02", "District"),
+ new("Castries", "LC-03", "District"),
+ new("Choiseul", "LC-04", "District"),
+ new("Dennery", "LC-05", "District"),
+ new("Gros Islet", "LC-06", "District"),
+ new("Laborie", "LC-07", "District"),
+ new("Micoud", "LC-08", "District"),
+ new("Praslin", "LC-09", "District"),
+ new("Soufriere", "LC-10", "District"),
+ new("Vieux Fort", "LC-11", "District")
+ ];
+}
+
diff --git a/src/World.Net/Countries/SaintMartin.cs b/src/World.Net/Countries/SaintMartin.cs
new file mode 100644
index 0000000..b9d33ac
--- /dev/null
+++ b/src/World.Net/Countries/SaintMartin.cs
@@ -0,0 +1,38 @@
+namespace World.Net.Countries;
+
+internal sealed class SaintMartin : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.SaintMartinFrenchPart;
+
+ //
+ public string Name { get; } = "Saint-Martin";
+
+ //
+ public string OfficialName { get; } = "Collectivity of Saint-Martin";
+
+ //
+ public string NativeName => "Saint-Martin";
+
+ //
+ public string Capital { get; } = "Marigot";
+
+ //
+ public int NumericCode { get; } = 663;
+
+ //
+ public string ISO2Code { get; } = "MF";
+
+ //
+ public string ISO3Code { get; } = "MAF";
+
+ //
+ public string[] CallingCode { get; } = ["+590"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Saint-Martin", "MF-MF", "Territory")
+ ];
+}
+
diff --git a/src/World.Net/Countries/SaintPierreAndMiquelon.cs b/src/World.Net/Countries/SaintPierreAndMiquelon.cs
new file mode 100644
index 0000000..6585152
--- /dev/null
+++ b/src/World.Net/Countries/SaintPierreAndMiquelon.cs
@@ -0,0 +1,39 @@
+namespace World.Net.Countries;
+
+internal sealed class SaintPierreAndMiquelon : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.SaintPierreAndMiquelon;
+
+ //
+ public string Name { get; } = "Saint Pierre and Miquelon";
+
+ //
+ public string OfficialName { get; } = "Saint Pierre and Miquelon";
+
+ //
+ public string NativeName => "Saint Pierre and Miquelon";
+
+ //
+ public string Capital { get; } = "Saint-Pierre";
+
+ //
+ public int NumericCode { get; } = 666;
+
+ //
+ public string ISO2Code { get; } = "PM";
+
+ //
+ public string ISO3Code { get; } = "SPM";
+
+ //
+ public string[] CallingCode { get; } = ["+508"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Saint-Pierre", "PM-SP", "Commune"),
+ new("Miquelon-Langlade", "PM-MQ", "Commune")
+ ];
+}
+
diff --git a/src/World.Net/Countries/SaintVincentAndTheGrenadines.cs b/src/World.Net/Countries/SaintVincentAndTheGrenadines.cs
new file mode 100644
index 0000000..cd425bf
--- /dev/null
+++ b/src/World.Net/Countries/SaintVincentAndTheGrenadines.cs
@@ -0,0 +1,42 @@
+namespace World.Net.Countries;
+
+internal sealed class SaintVincentAndTheGrenadines : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.SaintVincentAndTheGrenadines;
+
+ //
+ public string Name { get; } = "Saint Vincent and the Grenadines";
+
+ //
+ public string OfficialName { get; } = "Saint Vincent and the Grenadines";
+
+ //
+ public string NativeName => "Saint Vincent and the Grenadines";
+
+ //
+ public string Capital { get; } = "Kingstown";
+
+ //
+ public int NumericCode { get; } = 670;
+
+ //
+ public string ISO2Code { get; } = "VC";
+
+ //
+ public string ISO3Code { get; } = "VCT";
+
+ //
+ public string[] CallingCode { get; } = ["+1-784"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Charlotte", "VC-C", "Parish"),
+ new("Saint Andrew", "VC-A", "Parish"),
+ new("Saint David", "VC-D", "Parish"),
+ new("Saint George", "VC-G", "Parish"),
+ new("Saint Patrick", "VC-P", "Parish"),
+ new("Grenadines", "VC-VG", "Parish")
+ ];
+}
diff --git a/src/World.Net/Countries/Samoa.cs b/src/World.Net/Countries/Samoa.cs
new file mode 100644
index 0000000..884263e
--- /dev/null
+++ b/src/World.Net/Countries/Samoa.cs
@@ -0,0 +1,47 @@
+namespace World.Net.Countries;
+
+internal sealed class Samoa : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.Samoa;
+
+ //
+ public string Name { get; } = "Samoa";
+
+ //
+ public string OfficialName { get; } = "Independent State of Samoa";
+
+ //
+ public string NativeName => "Sāmoa";
+
+ //
+ public string Capital { get; } = "Apia";
+
+ //
+ public int NumericCode { get; } = 882;
+
+ //
+ public string ISO2Code { get; } = "WS";
+
+ //
+ public string ISO3Code { get; } = "WSM";
+
+ //
+ public string[] CallingCode { get; } = ["+685"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("A'ana", "WS-AA", "District"),
+ new("Aiga-i-le-Tai", "WS-AL", "District"),
+ new("Atua", "WS-AT", "District"),
+ new("Fa'asaleleaga", "WS-FS", "District"),
+ new("Gaga'emauga", "WS-GE", "District"),
+ new("Gaga'ifomauga", "WS-GF", "District"),
+ new("Palauli", "WS-PA", "District"),
+ new("Satupa'itea", "WS-SA", "District"),
+ new("Tuamasaga", "WS-TU", "District"),
+ new("Va'a-o-Fonoti", "WS-VF", "District"),
+ new("Vaisigano", "WS-VS", "District")
+ ];
+}
diff --git a/src/World.Net/Countries/SanMarino.cs b/src/World.Net/Countries/SanMarino.cs
new file mode 100644
index 0000000..1b29d2b
--- /dev/null
+++ b/src/World.Net/Countries/SanMarino.cs
@@ -0,0 +1,45 @@
+namespace World.Net.Countries;
+
+internal sealed class SanMarino : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.SanMarino;
+
+ //
+ public string Name { get; } = "San Marino";
+
+ //
+ public string OfficialName { get; } = "Most Serene Republic of San Marino";
+
+ //
+ public string NativeName => "San Marino";
+
+ //
+ public string Capital { get; } = "San Marino";
+
+ //
+ public int NumericCode { get; } = 674;
+
+ //
+ public string ISO2Code { get; } = "SM";
+
+ //
+ public string ISO3Code { get; } = "SMR";
+
+ //
+ public string[] CallingCode { get; } = ["+378"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Acquaviva", "SM-AC", "Municipality"),
+ new("Borgo Maggiore", "SM-BM", "Municipality"),
+ new("Chiesanuova", "SM-CH", "Municipality"),
+ new("Domagnano", "SM-DO", "Municipality"),
+ new("Faetano", "SM-FA", "Municipality"),
+ new("Fiorentino", "SM-FI", "Municipality"),
+ new("Montegiardino", "SM-MG", "Municipality"),
+ new("San Marino", "SM-SM", "Municipality"),
+ new("Serravalle", "SM-SE", "Municipality")
+ ];
+}
diff --git a/src/World.Net/Countries/SaoTomeAndPrincipe.cs b/src/World.Net/Countries/SaoTomeAndPrincipe.cs
new file mode 100644
index 0000000..5379245
--- /dev/null
+++ b/src/World.Net/Countries/SaoTomeAndPrincipe.cs
@@ -0,0 +1,39 @@
+namespace World.Net.Countries;
+
+internal sealed class SaoTomeAndPrincipe : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.SaoTomeAndPrincipe;
+
+ //
+ public string Name { get; } = "São Tomé and Príncipe";
+
+ //
+ public string OfficialName { get; } = "Democratic Republic of São Tomé and Príncipe";
+
+ //
+ public string NativeName => "São Tomé e Príncipe";
+
+ //
+ public string Capital { get; } = "São Tomé";
+
+ //
+ public int NumericCode { get; } = 678;
+
+ //
+ public string ISO2Code { get; } = "ST";
+
+ //
+ public string ISO3Code { get; } = "STP";
+
+ //
+ public string[] CallingCode { get; } = ["+239"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("São Tomé", "ST-ST", "Province"),
+ new("Príncipe", "ST-PN", "Province")
+ ];
+}
+
diff --git a/src/World.Net/Countries/SaudiArabia.cs b/src/World.Net/Countries/SaudiArabia.cs
new file mode 100644
index 0000000..662b7ce
--- /dev/null
+++ b/src/World.Net/Countries/SaudiArabia.cs
@@ -0,0 +1,49 @@
+namespace World.Net.Countries;
+
+internal sealed class SaudiArabia : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.SaudiArabia;
+
+ //
+ public string Name { get; } = "Saudi Arabia";
+
+ //
+ public string OfficialName { get; } = "Kingdom of Saudi Arabia";
+
+ //
+ public string NativeName => "المملكة العربية السعودية";
+
+ //
+ public string Capital { get; } = "Riyadh";
+
+ //
+ public int NumericCode { get; } = 682;
+
+ //
+ public string ISO2Code { get; } = "SA";
+
+ //
+ public string ISO3Code { get; } = "SAU";
+
+ //
+ public string[] CallingCode { get; } = ["+966"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Riyadh", "SA-01", "Region"),
+ new("Makkah", "SA-02", "Region"),
+ new("Al Madinah", "SA-03", "Region"),
+ new("Eastern Province", "SA-04", "Region"),
+ new("Asir", "SA-05", "Region"),
+ new("Tabuk", "SA-07", "Region"),
+ new("Hail", "SA-06", "Region"),
+ new("Northern Borders", "SA-08", "Region"),
+ new("Jazan", "SA-09", "Region"),
+ new("Najran", "SA-10", "Region"),
+ new("Al Bahah", "SA-11", "Region"),
+ new("Al Jawf", "SA-12", "Region"),
+ new("Qassim", "SA-14", "Region")
+ ];
+}
diff --git a/src/World.Net/Countries/Senegal.cs b/src/World.Net/Countries/Senegal.cs
new file mode 100644
index 0000000..02299b7
--- /dev/null
+++ b/src/World.Net/Countries/Senegal.cs
@@ -0,0 +1,50 @@
+namespace World.Net.Countries;
+
+internal sealed class Senegal : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.Senegal;
+
+ //
+ public string Name { get; } = "Senegal";
+
+ //
+ public string OfficialName { get; } = "Republic of Senegal";
+
+ //
+ public string NativeName => "Sénégal";
+
+ //
+ public string Capital { get; } = "Dakar";
+
+ //
+ public int NumericCode { get; } = 686;
+
+ //
+ public string ISO2Code { get; } = "SN";
+
+ //
+ public string ISO3Code { get; } = "SEN";
+
+ //
+ public string[] CallingCode { get; } = ["+221"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Dakar", "SN-DK", "Region"),
+ new("Diourbel", "SN-DB", "Region"),
+ new("Fatick", "SN-FK", "Region"),
+ new("Kaffrine", "SN-KA", "Region"),
+ new("Kaolack", "SN-KL", "Region"),
+ new("Kédougou", "SN-KE", "Region"),
+ new("Kolda", "SN-KD", "Region"),
+ new("Louga", "SN-LG", "Region"),
+ new("Matam", "SN-MT", "Region"),
+ new("Saint-Louis", "SN-SL", "Region"),
+ new("Sédhiou", "SN-SE", "Region"),
+ new("Tambacounda", "SN-TC", "Region"),
+ new("Thiès", "SN-TH", "Region"),
+ new("Ziguinchor", "SN-ZG", "Region")
+ ];
+}
diff --git a/src/World.Net/Countries/Serbia.cs b/src/World.Net/Countries/Serbia.cs
new file mode 100644
index 0000000..88442ae
--- /dev/null
+++ b/src/World.Net/Countries/Serbia.cs
@@ -0,0 +1,61 @@
+namespace World.Net.Countries;
+
+internal sealed class Serbia : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.Serbia;
+
+ //
+ public string Name { get; } = "Serbia";
+
+ //
+ public string OfficialName { get; } = "Republic of Serbia";
+
+ //
+ public string NativeName => "Srbija";
+
+ //
+ public string Capital { get; } = "Belgrade";
+
+ //
+ public int NumericCode { get; } = 688;
+
+ //
+ public string ISO2Code { get; } = "RS";
+
+ //
+ public string ISO3Code { get; } = "SRB";
+
+ //
+ public string[] CallingCode { get; } = ["+381"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Belgrade", "RS-00", "District"),
+ new("Bor", "RS-14", "District"),
+ new("Braničevo", "RS-11", "District"),
+ new("Central Banat", "RS-02", "District"),
+ new("Jablanica", "RS-23", "District"),
+ new("Kolubara", "RS-09", "District"),
+ new("Mačva", "RS-08", "District"),
+ new("Moravica", "RS-17", "District"),
+ new("Nišava", "RS-20", "District"),
+ new("North Bačka", "RS-01", "District"),
+ new("North Banat", "RS-03", "District"),
+ new("Pčinja", "RS-24", "District"),
+ new("Pirot", "RS-22", "District"),
+ new("Pomoravlje", "RS-13", "District"),
+ new("Rasina", "RS-19", "District"),
+ new("Raška", "RS-18", "District"),
+ new("South Bačka", "RS-06", "District"),
+ new("South Banat", "RS-04", "District"),
+ new("Srem", "RS-07", "District"),
+ new("Šumadija", "RS-12", "District"),
+ new("Toplica", "RS-21", "District"),
+ new("West Bačka", "RS-05", "District"),
+ new("Zaječar", "RS-15", "District"),
+ new("Zlatibor", "RS-16", "District")
+ ];
+}
+
diff --git a/src/World.Net/Countries/Seychelles.cs b/src/World.Net/Countries/Seychelles.cs
new file mode 100644
index 0000000..71c0398
--- /dev/null
+++ b/src/World.Net/Countries/Seychelles.cs
@@ -0,0 +1,62 @@
+namespace World.Net.Countries;
+
+internal sealed class Seychelles : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.Seychelles;
+
+ //
+ public string Name { get; } = "Seychelles";
+
+ //
+ public string OfficialName { get; } = "Republic of Seychelles";
+
+ //
+ public string NativeName => "Sesel";
+
+ //
+ public string Capital { get; } = "Victoria";
+
+ //
+ public int NumericCode { get; } = 690;
+
+ //
+ public string ISO2Code { get; } = "SC";
+
+ //
+ public string ISO3Code { get; } = "SYC";
+
+ //
+ public string[] CallingCode { get; } = ["+248"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Anse aux Pins", "SC-01", "District"),
+ new("Anse Boileau", "SC-02", "District"),
+ new("Anse Etoile", "SC-03", "District"),
+ new("Anse Royale", "SC-05", "District"),
+ new("Au Cap", "SC-04", "District"),
+ new("Baie Lazare", "SC-06", "District"),
+ new("Baie Sainte Anne", "SC-07", "District"),
+ new("Beau Vallon", "SC-08", "District"),
+ new("Bel Air", "SC-09", "District"),
+ new("Bel Ombre", "SC-10", "District"),
+ new("Cascade", "SC-11", "District"),
+ new("Glacis", "SC-12", "District"),
+ new("Grand'Anse Mahé", "SC-13", "District"),
+ new("Grand'Anse Praslin", "SC-14", "District"),
+ new("La Digue", "SC-15", "District"),
+ new("La Rivière Anglaise", "SC-16", "District"),
+ new("Les Mamelles", "SC-24", "District"),
+ new("Mont Buxton", "SC-17", "District"),
+ new("Mont Fleuri", "SC-18", "District"),
+ new("Plaisance", "SC-19", "District"),
+ new("Pointe La Rue", "SC-20", "District"),
+ new("Port Glaud", "SC-21", "District"),
+ new("Roche Caiman", "SC-25", "District"),
+ new("Saint Louis", "SC-22", "District"),
+ new("Takamaka", "SC-23", "District")
+ ];
+}
+
diff --git a/src/World.Net/Countries/SierraLeone.cs b/src/World.Net/Countries/SierraLeone.cs
new file mode 100644
index 0000000..de48df2
--- /dev/null
+++ b/src/World.Net/Countries/SierraLeone.cs
@@ -0,0 +1,41 @@
+namespace World.Net.Countries;
+
+internal sealed class SierraLeone : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.SierraLeone;
+
+ //
+ public string Name { get; } = "Sierra Leone";
+
+ //
+ public string OfficialName { get; } = "Republic of Sierra Leone";
+
+ //
+ public string NativeName => "Sierra Leone";
+
+ //
+ public string Capital { get; } = "Freetown";
+
+ //
+ public int NumericCode { get; } = 694;
+
+ //
+ public string ISO2Code { get; } = "SL";
+
+ //
+ public string ISO3Code { get; } = "SLE";
+
+ //
+ public string[] CallingCode { get; } = ["+232"];
+
+ //
+ public IEnumerable States =>
+ [
+ new("Eastern Province", "SL-E", "Province"),
+ new("Northern Province", "SL-N", "Province"),
+ new("North Western Province", "SL-NW", "Province"),
+ new("Southern Province", "SL-S", "Province"),
+ new("Western Area", "SL-W", "Province")
+ ];
+}
diff --git a/src/World.Net/Countries/Singapore.cs b/src/World.Net/Countries/Singapore.cs
new file mode 100644
index 0000000..011f285
--- /dev/null
+++ b/src/World.Net/Countries/Singapore.cs
@@ -0,0 +1,35 @@
+namespace World.Net.Countries;
+
+internal sealed class Singapore : ICountry
+{
+ //
+ public CountryIdentifier Id => CountryIdentifier.Singapore;
+
+ //
+ public string Name { get; } = "Singapore";
+
+ //
+ public string OfficialName { get; } = "Republic of Singapore";
+
+ //
+ public string NativeName => "Singapore";
+
+ //
+ public string Capital { get; } = "Singapore";
+
+ //
+ public int NumericCode { get; } = 702;
+
+ //
+ public string ISO2Code { get; } = "SG";
+
+ //
+ public string ISO3Code { get; } = "SGP";
+
+ //
+ public string[] CallingCode { get; } = ["+65"];
+
+ //
+ public IEnumerable States => [];
+}
+
diff --git a/src/World.Net/Helpers/CountryInitializer.cs b/src/World.Net/Helpers/CountryInitializer.cs
index e1b6bf1..8211a11 100644
--- a/src/World.Net/Helpers/CountryInitializer.cs
+++ b/src/World.Net/Helpers/CountryInitializer.cs
@@ -160,6 +160,22 @@ public static Dictionary Initialize()
{ CountryIdentifier.Romania, new Romania() },
{ CountryIdentifier.Russia, new Russia() },
{ CountryIdentifier.Rwanda, new Rwanda() },
+ { CountryIdentifier.SaintHelena, new SaintHelena() },
+ { CountryIdentifier.SaintKittsAndNevis, new SaintKittsAndNevis() },
+ { CountryIdentifier.SaintLucia, new SaintLucia() },
+ { CountryIdentifier.SaintPierreAndMiquelon, new SaintPierreAndMiquelon() },
+ { CountryIdentifier.SaintVincentAndTheGrenadines, new SaintVincentAndTheGrenadines() },
+ { CountryIdentifier.SaintBarthelemy, new SaintBarthelemy() },
+ { CountryIdentifier.SaintMartinFrenchPart, new SaintMartin() },
+ { CountryIdentifier.Samoa, new Samoa() },
+ { CountryIdentifier.SanMarino, new SanMarino() },
+ { CountryIdentifier.SaoTomeAndPrincipe, new SaoTomeAndPrincipe() },
+ { CountryIdentifier.SaudiArabia, new SaudiArabia() },
+ { CountryIdentifier.Senegal, new Senegal() },
+ { CountryIdentifier.Serbia, new Serbia() },
+ { CountryIdentifier.Seychelles, new Seychelles() },
+ { CountryIdentifier.SierraLeone, new SierraLeone() },
+ { CountryIdentifier.Singapore, new Singapore() },
// Future countries can be added here in the same format.
};