diff --git a/src/main/java/net/datafaker/providers/base/Country.java b/src/main/java/net/datafaker/providers/base/Country.java index a3cd61077..466f2a0a5 100644 --- a/src/main/java/net/datafaker/providers/base/Country.java +++ b/src/main/java/net/datafaker/providers/base/Country.java @@ -27,12 +27,20 @@ public String capital() { return resolve("country.capital"); } + /** + * @see Money#currency() + * @return a random detailed ISO 4217 currency display name + */ public String currency() { - return resolve("country.currency"); + return faker.money().currency(); } + /** + * @see Money#currencyCode() + * @return an ISO 4217 currency code + */ public String currencyCode() { - return resolve("country.currency_code"); + return faker.money().currencyCode(); } public String name() { diff --git a/src/main/java/net/datafaker/providers/base/Currency.java b/src/main/java/net/datafaker/providers/base/Currency.java index 6fef0a4cc..941cf7a21 100644 --- a/src/main/java/net/datafaker/providers/base/Currency.java +++ b/src/main/java/net/datafaker/providers/base/Currency.java @@ -2,32 +2,31 @@ /** * @since 0.8.0 + * @deprecated since 2.2.0. For removal in 3.0.0 version. This faker is deprecated due to the existence + * of duplicate {@link Money} faker with similar methods. Use {@link Money} instead. */ +@Deprecated(since = "2.2.0", forRemoval = true) public class Currency extends AbstractProvider { public Currency(BaseProviders faker) { super(faker); } + /** + * @deprecated since 2.2.0. For removal in 3.0.0 version. Use {@link Money#currency} instead. + */ + @Deprecated(since = "2.2.0", forRemoval = true) public String name() { return resolve("currency.name"); } /** + * @deprecated since 2.2.0. For removal in 3.0.0 version. Use {@link Money#currencyCode()} instead. * @return an alphabetic currency code (ex. USD) */ + @Deprecated(since = "2.2.0", forRemoval = true) public String code() { return resolve("currency.code"); } - /** - *

Returns an active ISO 4217 three-digit numeric currency code as of 1 April 2022

- * - * @return an ISO 4217 currency numeric code - * @since 2.2.0 - */ - public String numericCode() { - return resolve("currency.numeric_code"); - } - } diff --git a/src/main/java/net/datafaker/providers/base/Money.java b/src/main/java/net/datafaker/providers/base/Money.java index 36af49990..be4bc5b2a 100644 --- a/src/main/java/net/datafaker/providers/base/Money.java +++ b/src/main/java/net/datafaker/providers/base/Money.java @@ -1,5 +1,8 @@ package net.datafaker.providers.base; +import java.util.Currency; +import java.util.List; + /** * Support for different kind of money currencies. * @@ -7,25 +10,56 @@ */ public class Money extends AbstractProvider { + private final List availableCurrencies; + public Money(BaseProviders faker) { super(faker); + this.availableCurrencies = List.copyOf(Currency.getAvailableCurrencies()); } /** * This method returns a currency value in a more descriptive manner like "United States dollar", etc. * + * @see Currency#getDisplayName() * @return detailed currency value. */ public String currency() { - return resolve("money.currency"); + return getRandomCurrency().getDisplayName(); } /** - * Method returns a randomly generated currency value like EUR, USD, etc. + * Returns a random ISO 4217 currency code (ex. EUR, USD) * - * @return currency code. + * @see Currency#getCurrencyCode() + * @return an ISO 4217 currency code */ public String currencyCode() { - return resolve("money.code"); + return getRandomCurrency().getCurrencyCode(); + } + + /** + * Returns the 3-digit ISO 4217 numeric code of a random currency. + * + * @see Currency#getNumericCodeAsString() + * @return an ISO 4217 currency numeric code + * @since 2.2.0 + */ + public String currencyNumericCode() { + return getRandomCurrency().getNumericCodeAsString(); } + + /** + * @see Currency#getSymbol() + * @return an ISO 4217 currency symbol + * @since 2.2.0 + */ + public String currencySymbol() { + return getRandomCurrency().getSymbol(); + } + + private Currency getRandomCurrency() { + int randomIndex = faker.random().nextInt(availableCurrencies.size()); + return availableCurrencies.get(randomIndex); + } + } diff --git a/src/main/java/net/datafaker/service/files/EnFile.java b/src/main/java/net/datafaker/service/files/EnFile.java index 90ae945c4..f0e0ad6f2 100644 --- a/src/main/java/net/datafaker/service/files/EnFile.java +++ b/src/main/java/net/datafaker/service/files/EnFile.java @@ -163,7 +163,6 @@ public String getPath() { "michael_scott.yml", "military.yml", "minecraft.yml", - "money.yml", "money_heist.yml", "most_interesting_man_in_the_world.yml", "mood.yml", diff --git a/src/main/resources/en/country.yml b/src/main/resources/en/country.yml index 8e313a457..7ae3644d2 100644 --- a/src/main/resources/en/country.yml +++ b/src/main/resources/en/country.yml @@ -822,344 +822,3 @@ en: - "Harare" - "North Nicosia" - "Diego Garcia" - currency: - - "Afghani" - - "Euro" - - "Lek" - - "Algerian Dinar" - - "US Dollar" - - "Kwanza" - - "East Caribbean Dollar" - - "No universal currency" - - "Argentine Peso" - - "Armenian Dram" - - "Aruban Florin" - - "Australian Dollar" - - "Azerbaijan Manat" - - "Bahamian Dollar" - - "Bahraini Dinar" - - "Taka" - - "Barbados Dollar" - - "Belarusian Ruble" - - "Belize Dollar" - - "CFA Franc BCEAO" - - "Bermudian Dollar" - - "Indian Rupee" - - "Ngultrum" - - "Boliviano" - - "Mvdol" - - "Convertible Mark" - - "Pula" - - "Norwegian Krone" - - "Brazilian Real" - - "Brunei Dollar" - - "Bulgarian Lev" - - "Burundi Franc" - - "Cabo Verde Escudo" - - "Riel" - - "CFA Franc BEAC" - - "Canadian Dollar" - - "Cayman Islands Dollar" - - "Chilean Peso" - - "Unidad de Fomento" - - "Yuan Renminbi" - - "Colombian Peso" - - "Unidad de Valor Real" - - "Comorian Franc " - - "Congolese Franc" - - "New Zealand Dollar" - - "Costa Rican Colon" - - "Kuna" - - "Cuban Peso" - - "Peso Convertible" - - "Netherlands Antillean Guilder" - - "Czech Koruna" - - "Danish Krone" - - "Djibouti Franc" - - "Dominican Peso" - - "Egyptian Pound" - - "El Salvador Colon" - - "Nakfa" - - "Ethiopian Birr" - - "Falkland Islands Pound" - - "Fiji Dollar" - - "CFP Franc" - - "Dalasi" - - "Lari" - - "Ghana Cedi" - - "Gibraltar Pound" - - "Quetzal" - - "Pound Sterling" - - "Guinean Franc" - - "Guyana Dollar" - - "Gourde" - - "Lempira" - - "Hong Kong Dollar" - - "Forint" - - "Iceland Krona" - - "Rupiah" - - "SDR (Special Drawing Right)" - - "Iranian Rial" - - "Iraqi Dinar" - - "New Israeli Sheqel" - - "Jamaican Dollar" - - "Yen" - - "Jordanian Dinar" - - "Tenge" - - "Kenyan Shilling" - - "North Korean Won" - - "Won" - - "Kuwaiti Dinar" - - "Som" - - "Lao Kip" - - "Lebanese Pound" - - "Loti" - - "Rand" - - "Liberian Dollar" - - "Libyan Dinar" - - "Swiss Franc" - - "Pataca" - - "Denar" - - "Malagasy Ariary" - - "Malawi Kwacha" - - "Malaysian Ringgit" - - "Rufiyaa" - - "Ouguiya" - - "Mauritius Rupee" - - "ADB Unit of Account" - - "Mexican Peso" - - "Mexican Unidad de Inversion (UDI)" - - "Moldovan Leu" - - "Tugrik" - - "Moroccan Dirham" - - "Mozambique Metical" - - "Kyat" - - "Namibia Dollar" - - "Nepalese Rupee" - - "Cordoba Oro" - - "Naira" - - "Rial Omani" - - "Pakistan Rupee" - - "Balboa" - - "Kina" - - "Guarani" - - "Sol" - - "Philippine Peso" - - "Zloty" - - "Qatari Rial" - - "Romanian Leu" - - "Russian Ruble" - - "Rwanda Franc" - - "Saint Helena Pound" - - "Tala" - - "Dobra" - - "Saudi Riyal" - - "Serbian Dinar" - - "Seychelles Rupee" - - "Leone" - - "Singapore Dollar" - - "Sucre" - - "Solomon Islands Dollar" - - "Somali Shilling" - - "South Sudanese Pound" - - "Sri Lanka Rupee" - - "Sudanese Pound" - - "Surinam Dollar" - - "Lilangeni" - - "Swedish Krona" - - "WIR Euro" - - "WIR Franc" - - "Syrian Pound" - - "New Taiwan Dollar" - - "Somoni" - - "Tanzanian Shilling" - - "Baht" - - "Pa’anga" - - "Trinidad and Tobago Dollar" - - "Tunisian Dinar" - - "Turkish Lira" - - "Turkmenistan New Manat" - - "Uganda Shilling" - - "Hryvnia" - - "UAE Dirham" - - "US Dollar (Next day)" - - "Peso Uruguayo" - - "Uruguay Peso en Unidades Indexadas (UI)" - - "Unidad Previsional" - - "Uzbekistan Sum" - - "Vatu" - - "Bolívar Soberano" - - "Dong" - - "Yemeni Rial" - - "Zambian Kwacha" - - "Zimbabwe Dollar" - currency_code: - - "AFN" - - "EUR" - - "ALL" - - "DZD" - - "USD" - - "AOA" - - "XCD" - - "ARS" - - "AMD" - - "AWG" - - "AUD" - - "AZN" - - "BSD" - - "BHD" - - "BDT" - - "BBD" - - "BYN" - - "BZD" - - "XOF" - - "BMD" - - "INR" - - "BTN" - - "BOB" - - "BOV" - - "BAM" - - "BWP" - - "NOK" - - "BRL" - - "BND" - - "BGN" - - "BIF" - - "CVE" - - "KHR" - - "XAF" - - "CAD" - - "KYD" - - "CLP" - - "CLF" - - "CNY" - - "COP" - - "COU" - - "KMF" - - "CDF" - - "NZD" - - "CRC" - - "HRK" - - "CUP" - - "CUC" - - "ANG" - - "CZK" - - "DKK" - - "DJF" - - "DOP" - - "EGP" - - "SVC" - - "ERN" - - "ETB" - - "FKP" - - "FJD" - - "XPF" - - "GMD" - - "GEL" - - "GHS" - - "GIP" - - "GTQ" - - "GBP" - - "GNF" - - "GYD" - - "HTG" - - "HNL" - - "HKD" - - "HUF" - - "ISK" - - "IDR" - - "XDR" - - "IRR" - - "IQD" - - "ILS" - - "JMD" - - "JPY" - - "JOD" - - "KZT" - - "KES" - - "KPW" - - "KRW" - - "KWD" - - "KGS" - - "LAK" - - "LBP" - - "LSL" - - "ZAR" - - "LRD" - - "LYD" - - "CHF" - - "MOP" - - "MKD" - - "MGA" - - "MWK" - - "MYR" - - "MVR" - - "MRU" - - "MUR" - - "XUA" - - "MXN" - - "MXV" - - "MDL" - - "MNT" - - "MAD" - - "MZN" - - "MMK" - - "NAD" - - "NPR" - - "NIO" - - "NGN" - - "OMR" - - "PKR" - - "PAB" - - "PGK" - - "PYG" - - "PEN" - - "PHP" - - "PLN" - - "QAR" - - "RON" - - "RUB" - - "RWF" - - "SHP" - - "WST" - - "STN" - - "SAR" - - "RSD" - - "SCR" - - "SLL" - - "SGD" - - "XSU" - - "SBD" - - "SOS" - - "SSP" - - "LKR" - - "SDG" - - "SRD" - - "SZL" - - "SEK" - - "CHE" - - "CHW" - - "SYP" - - "TWD" - - "TJS" - - "TZS" - - "THB" - - "TOP" - - "TTD" - - "TND" - - "TRY" - - "TMT" - - "UGX" - - "UAH" - - "AED" - - "USN" - - "UYU" - - "UYI" - - "UYW" - - "UZS" - - "VUV" - - "VES" - - "VND" - - "YER" - - "ZMW" - - "ZWL" diff --git a/src/main/resources/en/money.yml b/src/main/resources/en/money.yml deleted file mode 100644 index cfbae64ff..000000000 --- a/src/main/resources/en/money.yml +++ /dev/null @@ -1,342 +0,0 @@ -en: - faker: - money: - currency: - - "Abkhazian apsar" - - "Russian ruble" - - "Afghan afghani" - - "Euro" - - "Albanian lek" - - "Alderney pound" - - "Sterling banknotes are issued by the Bank of England and by some banks in Scotland and Northern Ireland (incl. Danske Bank). Laws on legal tender vary between various jurisdictions." - - "Guernsey pound" - - "Algerian dinar" - - "Angolan kwanza" - - "Eastern Caribbean dollar" - - "Argentine peso" - - "Armenian dram" - - "Artsakh dram" - - "Aruban florin" - - "Saint Helena pound" - - "Australian dollar" - - "Azerbaijani manat" - - "Bahamian dollar" - - "Bahraini dinar" - - "Bangladeshi taka" - - "Barbadian dollar" - - "Belarusian ruble" - - "Belize dollar" - - "West African CFA franc" - - "Bermudian dollar" - - "Bhutanese ngultrum" - - "Indian rupee" - - "Bolivian boliviano" - - "United States dollar" - - "Bosnia and Herzegovina convertible mark" - - "Botswana pula" - - "Brazilian real" - - "Brunei dollar" - - "Singapore dollar" - - "Bulgarian lev" - - "Burundian franc" - - "Cambodian riel" - - "Central African CFA franc" - - "Canadian dollar" - - "Cape Verdean escudo" - - "Cayman Islands dollar" - - "Bitcoin" - - "Chilean peso" - - "Renminbi/Chinese yuan" - - "Colombian peso" - - "Comorian franc" - - "Congolese franc" - - "Cook Islands dollar" - - "New Zealand dollar" - - "Costa Rican colón" - - "Croatian kuna" - - "Cuban peso" - - "Netherlands Antillean guilder" - - "Czech koruna" - - "Danish krone" - - "Djiboutian franc" - - "Dominican peso" - - "Egyptian pound" - - "Eritrean nakfa" - - "Swazi lilangeni" - - "South African rand" - - "Ethiopian birr" - - "Falkland Islands pound" - - "Faroese króna" - - "Fijian dollar" - - "CFP franc" - - "Gambian dalasi" - - "Georgian lari" - - "Ghanaian cedi" - - "Gibraltar pound" - - "Guatemalan quetzal" - - "Sterling" - - "Guinean franc" - - "Guyanese dollar" - - "Haitian gourde" - - "Honduran lempira" - - "Hong Kong dollar" - - "Hungarian forint" - - "Icelandic króna" - - "Indonesian rupiah" - - "Iranian rial" - - "Iraqi dinar" - - "Manx pound" - - "Israeli new shekel" - - "Jamaican dollar" - - "Japanese yen" - - "Jersey pound" - - "Jordanian dinar" - - "Kazakhstani tenge" - - "Kenyan shilling" - - "Kiribati dollar" - - "North Korean won" - - "South Korean won" - - "Kuwaiti dinar" - - "Kyrgyz som" - - "Lao kip" - - "Lebanese pound" - - "Lesotho loti" - - "Liberian dollar" - - "ibyan dinar" - - "Swiss franc" - - "Macanese pataca" - - "Malagasy ariary" - - "Malawian kwacha" - - "Malaysian ringgit" - - "Maldivian rufiyaa" - - "Mauritanian ouguiya" - - "Mauritian rupee" - - "Mexican peso" - - "Moldovan leu" - - "Mongolian tögrög" - - "Moroccan dirham" - - "Mozambican metical" - - "Burmese kyat" - - "Namibian dollar" - - "Nepalese rupee" - - "Nicaraguan córdoba" - - "Nigerian naira" - - "Niue dollar" - - "Macedonian denar" - - "Turkish lira" - - "Norwegian krone" - - "Omani rial" - - "Pakistani rupee" - - "Panamanian balboa" - - "Papua New Guinean kina" - - "Paraguayan guaraní" - - "Peruvian sol" - - "Philippine peso" - - "Pitcairn Islands dollar" - - "Polish złoty" - - "Qatari riyal" - - "Romanian leu" - - "Rwandan franc" - - "Sahrawi peseta" - - "Samoan tālā" - - "São Tomé and Príncipe dobra" - - "Saudi riyal" - - "Serbian dinar" - - "Seychellois rupee" - - "Sierra Leonean leone" - - "Solomon Islands dollar" - - "Somali shilling" - - "Somaliland shilling" - - "South Sudanese pound" - - "Sri Lankan rupee" - - "Sudanese pound" - - "Surinamese dollar" - - "Swedish krona" - - "Syrian pound" - - "New Taiwan dollar" - - "Tajikistani somoni" - - "Tanzanian shilling" - - "hai baht" - - "Tongan paʻanga" - - "Transnistrian ruble" - - "Trinidad and Tobago dollar" - - "Tunisian dinar" - - "Turkmenistan manat" - - "Tuvaluan dollar" - - "Ugandan shilling" - - "Ukrainian hryvnia" - - "United Arab Emirates dirham" - - "Uruguayan peso" - - "Uzbekistani soʻm" - - "Vanuatu vatu" - - "Venezuelan sovereign bolívar" - - "Venezuelan bolívar digital" - - "Vietnamese đồng" - - "Yemeni rial" - - "Zambian kwacha" - - "RTGS dollar" - code: - - "RUB" - - "AFN" - - "EUR" - - "ALL" - - "GBP" - - "DZD" - - "AOA" - - "ARS" - - "AMD" - - "AWG" - - "SHP" - - "AUD" - - "AZN" - - "BSD" - - "BHD" - - "BDT" - - "BBD" - - "BYN" - - "BZD" - - "XOF" - - "BMD" - - "BTN" - - "INR" - - "BOB" - - "USD" - - "BWP" - - "BRL" - - "BND" - - "SGD" - - "BGN" - - "BIF" - - "KHR" - - "XAF" - - "CAD" - - "CVE" - - "KYD" - - "CLP" - - "CNY" - - "COP" - - "KMF" - - "CDF" - - "CKD" - - "NZD" - - "CRC" - - "HRK" - - "CUP" - - "ANG" - - "CZK" - - "DKK" - - "DJF" - - "XCD" - - "DOP" - - "EGP" - - "ERN" - - "SZL" - - "ZAR" - - "ETB" - - "FKP" - - "FOK" - - "FJD" - - "XPF" - - "GMD" - - "GEL" - - "GHS" - - "GIP" - - "GTQ" - - "GGP" - - "GNF" - - "GYD" - - "HTG" - - "HNL" - - "HKD" - - "HUF" - - "ISK" - - "IDR" - - "IRR" - - "IQD" - - "ILS" - - "JMD" - - "JPY" - - "JEP" - - "JOD" - - "KZT" - - "KES" - - "KID" - - "KPW" - - "KRW" - - "KWD" - - "KGS" - - "LAK" - - "LBP" - - "LSL" - - "LRD" - - "LYD" - - "CHF" - - "MOP" - - "MGA" - - "MWK" - - "MYR" - - "MVR" - - "MRU" - - "MUR" - - "MXN" - - "MDL" - - "MNT" - - "MAD" - - "MZN" - - "MMK" - - "NAD" - - "NPR" - - "NIO" - - "NGN" - - "MKD" - - "TRY" - - "NOK" - - "OMR" - - "PKR" - - "PAB" - - "PGK" - - "PYG" - - "PEN" - - "PHP" - - "PND" - - "PLN" - - "QAR" - - "RON" - - "RWF" - - "WST" - - "STN" - - "SAR" - - "RSD" - - "SCR" - - "SLL" - - "SBD" - - "SOS" - - "SLS" - - "SSP" - - "LKR" - - "SDG" - - "SRD" - - "SEK" - - "SYP" - - "TWD" - - "TJS" - - "TZS" - - "THB" - - "TOP" - - "PRB" - - "TTD" - - "TND" - - "TMT" - - "TVD" - - "UGX" - - "UAH" - - "AED" - - "UYU" - - "UZS" - - "VUV" - - "VES" - - "VED" - - "VND" - - "YER" - - "ZMW" - - "ZWB" diff --git a/src/test/java/net/datafaker/providers/base/CountryTest.java b/src/test/java/net/datafaker/providers/base/CountryTest.java index 32159230c..7fe5f4dc8 100644 --- a/src/test/java/net/datafaker/providers/base/CountryTest.java +++ b/src/test/java/net/datafaker/providers/base/CountryTest.java @@ -1,6 +1,8 @@ package net.datafaker.providers.base; import org.junit.jupiter.api.RepeatedTest; +import org.junit.jupiter.api.Test; + import static org.assertj.core.api.Assertions.assertThat; import java.util.List; @@ -16,13 +18,21 @@ void testFlag() { assertThat(flag).matches("^https://flags.fmcdn\\.net/data/flags/w580/[a-zA-Z0-9_]+\\.png$"); } + @Test + void testCurrency() { + assertThat(faker.country().currency()).isNotEmpty(); + } + + @Test + void testCurrencyCode() { + assertThat(faker.country().currencyCode()).isNotEmpty(); + } + @Override protected Collection providerListTest() { return List.of(TestSpec.of(country::countryCode2, "country.code2", "[a-z]{2}"), TestSpec.of(country::countryCode3, "country.code3", "[a-z]{3}"), TestSpec.of(country::capital, "country.capital", "([\\p{L}0-9+,. '-])+"), - TestSpec.of(country::currency, "country.currency", "([A-Za-zÀ-ÿ'’()-]+ ?)+"), - TestSpec.of(country::currencyCode, "country.currency_code", "([\\w-’í]+ ?)+"), TestSpec.of(country::name, "country.name")); } } diff --git a/src/test/java/net/datafaker/providers/base/CurrencyTest.java b/src/test/java/net/datafaker/providers/base/CurrencyTest.java index 0b6ec908f..c03087206 100644 --- a/src/test/java/net/datafaker/providers/base/CurrencyTest.java +++ b/src/test/java/net/datafaker/providers/base/CurrencyTest.java @@ -9,7 +9,6 @@ class CurrencyTest extends BaseFakerTest { protected Collection providerListTest() { Currency currency = faker.currency(); return List.of(TestSpec.of(currency::name, "currency.name", "[\\w'.\\-() ]+"), - TestSpec.of(currency::code, "currency.code", "[A-Z]{3}"), - TestSpec.of(currency::numericCode, "currency.numeric_code", "\\d{3}")); + TestSpec.of(currency::code, "currency.code", "[A-Z]{3}")); } } diff --git a/src/test/java/net/datafaker/providers/base/MoneyTest.java b/src/test/java/net/datafaker/providers/base/MoneyTest.java index 826f4f7a8..b73c6beeb 100644 --- a/src/test/java/net/datafaker/providers/base/MoneyTest.java +++ b/src/test/java/net/datafaker/providers/base/MoneyTest.java @@ -1,14 +1,29 @@ package net.datafaker.providers.base; -import java.util.List; -import java.util.Collection; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; class MoneyTest extends BaseFakerTest { - @Override - protected Collection providerListTest() { - Money money = faker.money(); - return List.of(TestSpec.of(money::currency, "money.currency"), - TestSpec.of(money::currencyCode, "money.code")); + @Test + void testCurrency() { + assertThat(faker.money().currency()).isNotEmpty(); + } + + @Test + void testCurrencyCode() { + assertThat(faker.money().currencyCode()).isNotEmpty(); + } + + @Test + void testNumericCode() { + assertThat(faker.money().currencyNumericCode()).isNotEmpty(); + } + + @Test + void testCurrencySymbol() { + assertThat(faker.money().currencySymbol()).isNotEmpty(); } + }