From f21bb48f1289725364062f65bbc4a2ef814122e1 Mon Sep 17 00:00:00 2001 From: Eduard Rindt Date: Mon, 6 Nov 2017 17:20:03 +0100 Subject: [PATCH 1/5] Refactor address implementations --- .../person/locale/AbstractAddress.java | 51 +++++++++++++++++ .../person/locale/ContinentalAddress.java | 29 ++++++++++ .../producer/person/locale/de/DeAddress.java | 53 ++---------------- .../producer/person/locale/en/EnAddress.java | 46 ++------------- .../producer/person/locale/es/EsAddress.java | 54 +++--------------- .../producer/person/locale/pl/PlAddress.java | 56 ++----------------- .../producer/person/locale/sv/SvAddress.java | 56 ++----------------- .../producer/person/locale/zh/ZhAddress.java | 46 ++------------- 8 files changed, 113 insertions(+), 278 deletions(-) create mode 100644 src/main/java/io/codearte/jfairy/producer/person/locale/AbstractAddress.java create mode 100644 src/main/java/io/codearte/jfairy/producer/person/locale/ContinentalAddress.java diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/AbstractAddress.java b/src/main/java/io/codearte/jfairy/producer/person/locale/AbstractAddress.java new file mode 100644 index 00000000..8f837530 --- /dev/null +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/AbstractAddress.java @@ -0,0 +1,51 @@ +package io.codearte.jfairy.producer.person.locale; + +import io.codearte.jfairy.producer.person.Address; + +/** + * A base of all addresses. It carries all needed fields, but leaves most of formatting to subclasses. + */ +public abstract class AbstractAddress implements Address { + protected final String street; + protected final String streetNumber; + protected final String apartmentNumber; + protected final String postalCode; + protected final String city; + + public AbstractAddress(String street, String streetNumber, String apartmentNumber, String postalCode, String city) { + this.street = street; + this.streetNumber = streetNumber; + this.postalCode = postalCode; + this.city = city; + this.apartmentNumber = apartmentNumber; + } + + public String getStreet() { + return street; + } + + public String getStreetNumber() { + return streetNumber; + } + + public String getApartmentNumber() { + return apartmentNumber; + } + + public String getPostalCode() { + return postalCode; + } + + public String getCity() { + return city; + } + + public abstract String getAddressLine1(); + + public abstract String getAddressLine2(); + + @Override + public String toString() { + return getAddressLine1() + System.lineSeparator() + getAddressLine2(); + } +} diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/ContinentalAddress.java b/src/main/java/io/codearte/jfairy/producer/person/locale/ContinentalAddress.java new file mode 100644 index 00000000..0b3e45a1 --- /dev/null +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/ContinentalAddress.java @@ -0,0 +1,29 @@ +package io.codearte.jfairy.producer.person.locale; + +import static org.apache.commons.lang3.StringUtils.isNotBlank; + +/** + * An address format typical for European countries but the UK and ex-Soviet union. + */ +public abstract class ContinentalAddress extends AbstractAddress { + public ContinentalAddress(String street, String streetNumber, String apartmentNumber, String postalCode, String city) { + super(street, streetNumber, apartmentNumber, postalCode, city); + } + + protected abstract String getApartmentMark(); + + protected String getStreetNumberSeparator() { + return " "; + } + + @Override + public String getAddressLine1() { + return street + getStreetNumberSeparator() + streetNumber + + (isNotBlank(apartmentNumber) ? getApartmentMark() + apartmentNumber : ""); + } + + @Override + public String getAddressLine2() { + return postalCode + " " + city; + } +} diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/de/DeAddress.java b/src/main/java/io/codearte/jfairy/producer/person/locale/de/DeAddress.java index 58fb8612..a08c396a 100644 --- a/src/main/java/io/codearte/jfairy/producer/person/locale/de/DeAddress.java +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/de/DeAddress.java @@ -1,6 +1,7 @@ package io.codearte.jfairy.producer.person.locale.de; import io.codearte.jfairy.producer.person.Address; +import io.codearte.jfairy.producer.person.locale.ContinentalAddress; import static org.apache.commons.lang3.StringUtils.isNotBlank; import static org.apache.commons.lang3.SystemUtils.LINE_SEPARATOR; @@ -8,58 +9,14 @@ /** * @author Roland Weisleder */ -public class DeAddress implements Address { - - private final String streetNumber; - - private final String street; - - private final String apartmentNumber; - - private final String city; - - private final String postalCode; +public class DeAddress extends ContinentalAddress { public DeAddress(String streetNumber, String street, String apartmentNumber, String city, String postalCode) { - this.streetNumber = streetNumber; - this.street = street; - this.apartmentNumber = apartmentNumber; - this.city = city; - this.postalCode = postalCode; - } - - public String getStreetNumber() { - return streetNumber; - } - - public String getStreet() { - return street; - } - - public String getApartmentNumber() { - return apartmentNumber; - } - - public String getCity() { - return city; - } - - public String getPostalCode() { - return postalCode; - } - - public String getAddressLine1() { - return street + " " + streetNumber - + (isNotBlank(apartmentNumber) ? ", " + apartmentNumber : ""); - } - - public String getAddressLine2() { - return postalCode + " " + city; + super(street, streetNumber, apartmentNumber, postalCode, city); } @Override - public String toString() { - return getAddressLine1() + LINE_SEPARATOR + getAddressLine2(); + protected String getApartmentMark() { + return ", "; } - } diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/en/EnAddress.java b/src/main/java/io/codearte/jfairy/producer/person/locale/en/EnAddress.java index 83ab24a2..87605086 100644 --- a/src/main/java/io/codearte/jfairy/producer/person/locale/en/EnAddress.java +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/en/EnAddress.java @@ -1,61 +1,25 @@ package io.codearte.jfairy.producer.person.locale.en; import io.codearte.jfairy.producer.person.Address; +import io.codearte.jfairy.producer.person.locale.AbstractAddress; import static org.apache.commons.lang3.StringUtils.isNotBlank; import static org.apache.commons.lang3.SystemUtils.LINE_SEPARATOR; -public class EnAddress implements Address { - - private final String streetNumber; - - private final String street; - - private final String apartmentNumber; - - private final String city; - - private final String postalCode; +public class EnAddress extends AbstractAddress { public EnAddress(String streetNumber, String street, String apartmentNumber, String city, String postalCode) { - this.streetNumber = streetNumber; - this.street = street; - this.apartmentNumber = apartmentNumber; - this.city = city; - this.postalCode = postalCode; - } - - public String getStreetNumber() { - return streetNumber; - } - - public String getStreet() { - return street; - } - - public String getApartmentNumber() { - return apartmentNumber; - } - - public String getCity() { - return city; - } - - public String getPostalCode() { - return postalCode; + super(street, streetNumber, apartmentNumber, postalCode, city); } + @Override public String getAddressLine1() { return streetNumber + " " + street + (isNotBlank(apartmentNumber) ? " APT " + apartmentNumber : ""); } + @Override public String getAddressLine2() { return city + " " + postalCode; } - - @Override - public String toString() { - return getAddressLine1() + LINE_SEPARATOR + getAddressLine2(); - } } diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/es/EsAddress.java b/src/main/java/io/codearte/jfairy/producer/person/locale/es/EsAddress.java index d910d4ec..53d4087f 100644 --- a/src/main/java/io/codearte/jfairy/producer/person/locale/es/EsAddress.java +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/es/EsAddress.java @@ -2,63 +2,25 @@ package io.codearte.jfairy.producer.person.locale.es; import io.codearte.jfairy.producer.person.Address; +import io.codearte.jfairy.producer.person.locale.ContinentalAddress; import static org.apache.commons.lang3.StringUtils.isNotBlank; import static org.apache.commons.lang3.SystemUtils.LINE_SEPARATOR; -public class EsAddress implements Address { - - private final String street; - - private final String streetNumber; - - private final String apartmentNumber; - - private final String postalCode; - - private final String city; - +public class EsAddress extends ContinentalAddress { public EsAddress(String street, String streetNumber, String apartmentNumber, String postalCode, String city) { - this.street = street; - this.streetNumber = streetNumber; - this.apartmentNumber = apartmentNumber; - this.postalCode = postalCode; - this.city = city; - } - - public String getStreet() { - return street; - } - - public String getStreetNumber() { - return streetNumber; + super(street, streetNumber, apartmentNumber, postalCode, city); } - public String getApartmentNumber() { - return apartmentNumber; - } - - public String getPostalCode() { - return postalCode; - } - - public String getCity() { - return city; - } - - public String getAddressLine1() { - return street + ", " + streetNumber - + (isNotBlank(apartmentNumber) ? " " + apartmentNumber : ""); - } - - public String getAddressLine2() { - return postalCode + " " + city; + @Override + protected String getStreetNumberSeparator() { + return ", "; } @Override - public String toString() { - return getAddressLine1() + LINE_SEPARATOR + getAddressLine2(); + public String getApartmentMark() { + return " "; } } diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/pl/PlAddress.java b/src/main/java/io/codearte/jfairy/producer/person/locale/pl/PlAddress.java index 25f09efd..e1a2bfd3 100644 --- a/src/main/java/io/codearte/jfairy/producer/person/locale/pl/PlAddress.java +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/pl/PlAddress.java @@ -1,62 +1,16 @@ package io.codearte.jfairy.producer.person.locale.pl; -import io.codearte.jfairy.producer.person.Address; +import io.codearte.jfairy.producer.person.locale.ContinentalAddress; -import static org.apache.commons.lang3.StringUtils.isNotBlank; -import static org.apache.commons.lang3.SystemUtils.LINE_SEPARATOR; - -public class PlAddress implements Address { - - private final String street; - - private final String streetNumber; - - private final String apartmentNumber; - - private final String postalCode; - - private final String city; +public class PlAddress extends ContinentalAddress { public PlAddress(String street, String streetNumber, String apartmentNumber, String postalCode, String city) { - this.street = street; - this.streetNumber = streetNumber; - this.apartmentNumber = apartmentNumber; - this.postalCode = postalCode; - this.city = city; - } - - public String getStreet() { - return street; - } - - public String getStreetNumber() { - return streetNumber; - } - - public String getApartmentNumber() { - return apartmentNumber; - } - - public String getPostalCode() { - return postalCode; - } - - public String getCity() { - return city; - } - - public String getAddressLine1() { - return street + " " + streetNumber - + (isNotBlank(apartmentNumber) ? ", " + apartmentNumber : ""); - } - - public String getAddressLine2() { - return postalCode + " " + city; + super(street, streetNumber, apartmentNumber, postalCode, city); } @Override - public String toString() { - return getAddressLine1() + LINE_SEPARATOR + getAddressLine2(); + protected String getApartmentMark() { + return ", "; } } diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/sv/SvAddress.java b/src/main/java/io/codearte/jfairy/producer/person/locale/sv/SvAddress.java index 2cc800ba..b2f09166 100644 --- a/src/main/java/io/codearte/jfairy/producer/person/locale/sv/SvAddress.java +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/sv/SvAddress.java @@ -1,62 +1,16 @@ package io.codearte.jfairy.producer.person.locale.sv; -import io.codearte.jfairy.producer.person.Address; +import io.codearte.jfairy.producer.person.locale.ContinentalAddress; -import static org.apache.commons.lang3.StringUtils.isNotBlank; -import static org.apache.commons.lang3.SystemUtils.LINE_SEPARATOR; - -public class SvAddress implements Address { - - private final String street; - - private final String streetNumber; - - private final String apartmentNumber; - - private final String postalCode; - - private final String city; +public class SvAddress extends ContinentalAddress { public SvAddress(String street, String streetNumber, String apartmentNumber, String postalCode, String city) { - this.street = street; - this.streetNumber = streetNumber; - this.apartmentNumber = apartmentNumber; - this.postalCode = postalCode; - this.city = city; - } - - public String getStreet() { - return street; - } - - public String getStreetNumber() { - return streetNumber; - } - - public String getApartmentNumber() { - return apartmentNumber; - } - - public String getPostalCode() { - return postalCode; - } - - public String getCity() { - return city; - } - - public String getAddressLine1() { - return street + " " + streetNumber - + (isNotBlank(apartmentNumber) ? " Lgh " + apartmentNumber : ""); - } - - public String getAddressLine2() { - return postalCode + " " + city; + super(street, streetNumber, apartmentNumber, postalCode, city); } @Override - public String toString() { - return getAddressLine1() + LINE_SEPARATOR + getAddressLine2(); + public String getApartmentMark() { + return " Lgh "; } } diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/zh/ZhAddress.java b/src/main/java/io/codearte/jfairy/producer/person/locale/zh/ZhAddress.java index f03e7d9a..f67a6754 100644 --- a/src/main/java/io/codearte/jfairy/producer/person/locale/zh/ZhAddress.java +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/zh/ZhAddress.java @@ -1,6 +1,7 @@ package io.codearte.jfairy.producer.person.locale.zh; import io.codearte.jfairy.producer.person.Address; +import io.codearte.jfairy.producer.person.locale.AbstractAddress; import static org.apache.commons.lang3.StringUtils.isNotBlank; import static org.apache.commons.lang3.SystemUtils.LINE_SEPARATOR; @@ -11,51 +12,18 @@ * @author lhfcws * @since 2017/3/2 */ -public class ZhAddress implements Address { +public class ZhAddress extends AbstractAddress { private static final String CITY = "市"; private static final String NUMBER = "号"; private static final String ROOM = "房"; private static final String POSTCODE = "邮编"; - private final String streetNumber; - - private final String street; - - private final String apartmentNumber; - - private final String city; - - private final String postalCode; - public ZhAddress(String streetNumber, String street, String apartmentNumber, String city, String postalCode) { - this.streetNumber = streetNumber; - this.street = street; - this.apartmentNumber = apartmentNumber; - this.city = city; - this.postalCode = postalCode; - } - - public String getStreetNumber() { - return streetNumber; - } - - public String getStreet() { - return street; - } - - public String getApartmentNumber() { - return apartmentNumber; - } - - public String getCity() { - return city; - } - - public String getPostalCode() { - return postalCode; + super(street, streetNumber, apartmentNumber, postalCode, city); } + @Override public String getAddressLine1() { String line = city + CITY + street + streetNumber + NUMBER; if (apartmentNumber.length() > 0) @@ -64,12 +32,8 @@ public String getAddressLine1() { return line; } + @Override public String getAddressLine2() { return POSTCODE + " " + postalCode; } - - @Override - public String toString() { - return getAddressLine1() + LINE_SEPARATOR + getAddressLine2(); - } } From 67e72a90f0523d6daea2007336c91302d028f0fe Mon Sep 17 00:00:00 2001 From: Eduard Rindt Date: Wed, 8 Nov 2017 12:27:07 +0100 Subject: [PATCH 2/5] Introduce GE/KA locale support. --- .../java/io/codearte/jfairy/Bootstrap.java | 6 +- .../io/codearte/jfairy/GeFairyModule.java | 31 ++++++++++ .../ge/GeVATIdentificationNumberProvider.java | 20 +++++++ .../producer/person/locale/ge/GeAddress.java | 21 +++++++ .../person/locale/ge/GeAddressProvider.java | 19 ++++++ .../GeNationalIdentityCardNumberProvider.java | 56 ++++++++++++++++++ .../locale/ge/GePassportNumberProvider.java | 36 +++++++++++ .../jfairy/producer/util/LanguageCode.java | 1 + src/main/resources/jfairy_ka.yml | 27 +++++++++ .../io/codearte/jfairy/FairyGeSpec.groovy | 39 ++++++++++++ .../person/locale/ge/GeAddressSpec.groovy | 59 +++++++++++++++++++ ...ionalIdentityCardNumberProviderSpec.groovy | 33 +++++++++++ .../ge/GePassportNumberProviderSpec.groovy | 25 ++++++++ 13 files changed, 369 insertions(+), 4 deletions(-) create mode 100644 src/main/java/io/codearte/jfairy/GeFairyModule.java create mode 100644 src/main/java/io/codearte/jfairy/producer/company/locale/ge/GeVATIdentificationNumberProvider.java create mode 100644 src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddress.java create mode 100644 src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddressProvider.java create mode 100644 src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProvider.java create mode 100644 src/main/java/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProvider.java create mode 100644 src/main/resources/jfairy_ka.yml create mode 100644 src/test/groovy/io/codearte/jfairy/FairyGeSpec.groovy create mode 100644 src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeAddressSpec.groovy create mode 100644 src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProviderSpec.groovy create mode 100644 src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProviderSpec.groovy diff --git a/src/main/java/io/codearte/jfairy/Bootstrap.java b/src/main/java/io/codearte/jfairy/Bootstrap.java index 21b28991..4efacebd 100644 --- a/src/main/java/io/codearte/jfairy/Bootstrap.java +++ b/src/main/java/io/codearte/jfairy/Bootstrap.java @@ -1,6 +1,5 @@ package io.codearte.jfairy; -import com.google.common.base.Optional; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Provider; @@ -9,15 +8,12 @@ import io.codearte.jfairy.data.MapBasedDataMaster; import io.codearte.jfairy.producer.RandomGenerator; import io.codearte.jfairy.producer.util.LanguageCode; -import org.apache.commons.math3.random.JDKRandomGenerator; -import org.apache.commons.math3.random.RandomDataGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.Locale; -import java.util.Random; /** *

Using a {@link #builder()}, you can configure the following fields:

@@ -147,6 +143,8 @@ private static FairyModule getFairyModuleForLocale(DataMaster dataMaster, Locale return new ZhFairyModule(dataMaster, randomGenerator); case DE: return new DeFairyModule(dataMaster, randomGenerator); + case KA: + return new GeFairyModule(dataMaster, randomGenerator); default: LOG.info("No data for your language - using EN"); return new EnFairyModule(dataMaster, randomGenerator); diff --git a/src/main/java/io/codearte/jfairy/GeFairyModule.java b/src/main/java/io/codearte/jfairy/GeFairyModule.java new file mode 100644 index 00000000..0df80ba3 --- /dev/null +++ b/src/main/java/io/codearte/jfairy/GeFairyModule.java @@ -0,0 +1,31 @@ +package io.codearte.jfairy; + +import io.codearte.jfairy.data.DataMaster; +import io.codearte.jfairy.producer.RandomGenerator; +import io.codearte.jfairy.producer.VATIdentificationNumberProvider; +import io.codearte.jfairy.producer.company.locale.ge.GeVATIdentificationNumberProvider; +import io.codearte.jfairy.producer.person.AddressProvider; +import io.codearte.jfairy.producer.person.NationalIdentificationNumberFactory; +import io.codearte.jfairy.producer.person.NationalIdentityCardNumberProvider; +import io.codearte.jfairy.producer.person.PassportNumberProvider; +import io.codearte.jfairy.producer.person.locale.NoNationalIdentificationNumberFactory; +import io.codearte.jfairy.producer.person.locale.ge.GeAddressProvider; +import io.codearte.jfairy.producer.person.locale.ge.GeNationalIdentityCardNumberProvider; +import io.codearte.jfairy.producer.person.locale.ge.GePassportNumberProvider; + +public class GeFairyModule extends FairyModule { + + public GeFairyModule(DataMaster dataMaster, RandomGenerator randomGenerator) { + super(dataMaster, randomGenerator); + } + + @Override + protected void configure() { + super.configure(); + bind(NationalIdentificationNumberFactory.class).to(NoNationalIdentificationNumberFactory.class); + bind(NationalIdentityCardNumberProvider.class).to(GeNationalIdentityCardNumberProvider.class); + bind(VATIdentificationNumberProvider.class).to(GeVATIdentificationNumberProvider.class); + bind(AddressProvider.class).to(GeAddressProvider.class); + bind(PassportNumberProvider.class).to(GePassportNumberProvider.class); + } +} diff --git a/src/main/java/io/codearte/jfairy/producer/company/locale/ge/GeVATIdentificationNumberProvider.java b/src/main/java/io/codearte/jfairy/producer/company/locale/ge/GeVATIdentificationNumberProvider.java new file mode 100644 index 00000000..b4673e9a --- /dev/null +++ b/src/main/java/io/codearte/jfairy/producer/company/locale/ge/GeVATIdentificationNumberProvider.java @@ -0,0 +1,20 @@ +package io.codearte.jfairy.producer.company.locale.ge; + +import com.google.inject.Inject; +import io.codearte.jfairy.producer.BaseProducer; +import io.codearte.jfairy.producer.VATIdentificationNumberProvider; + +public class GeVATIdentificationNumberProvider implements VATIdentificationNumberProvider { + + private final BaseProducer baseProducer; + + @Inject + public GeVATIdentificationNumberProvider(BaseProducer baseProducer) { + this.baseProducer = baseProducer; + } + + @Override + public String get() { + return baseProducer.randomElement("2", "4") + baseProducer.numerify("########"); + } +} diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddress.java b/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddress.java new file mode 100644 index 00000000..bce23102 --- /dev/null +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddress.java @@ -0,0 +1,21 @@ +package io.codearte.jfairy.producer.person.locale.ge; + +import io.codearte.jfairy.producer.person.locale.AbstractAddress; + +import static org.apache.commons.lang3.StringUtils.isNotBlank; + +public class GeAddress extends AbstractAddress { + public GeAddress(String street, String streetNumber, String apartmentNumber, String postalCode, String city) { + super(street, streetNumber, apartmentNumber, postalCode, city); + } + + @Override + public String getAddressLine1() { + return postalCode + ", " + city; + } + + @Override + public String getAddressLine2() { + return street + " №" + streetNumber + (isNotBlank(apartmentNumber) ? ", ბინა " + apartmentNumber : ""); + } +} diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddressProvider.java b/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddressProvider.java new file mode 100644 index 00000000..84e971ff --- /dev/null +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddressProvider.java @@ -0,0 +1,19 @@ +package io.codearte.jfairy.producer.person.locale.ge; + +import com.google.inject.Inject; +import io.codearte.jfairy.data.DataMaster; +import io.codearte.jfairy.producer.BaseProducer; +import io.codearte.jfairy.producer.person.AbstractAddressProvider; + +public class GeAddressProvider extends AbstractAddressProvider { + + @Inject + public GeAddressProvider(DataMaster dataMaster, BaseProducer baseProducer) { + super(dataMaster, baseProducer); + } + + @Override + public GeAddress get() { + return new GeAddress(getStreet(), getStreetNumber(), getApartmentNumber(), getPostalCode(), getCity()); + } +} diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProvider.java b/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProvider.java new file mode 100644 index 00000000..64e331d6 --- /dev/null +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProvider.java @@ -0,0 +1,56 @@ +package io.codearte.jfairy.producer.person.locale.ge; + +import io.codearte.jfairy.producer.BaseProducer; +import io.codearte.jfairy.producer.person.NationalIdentityCardNumberProvider; + +import javax.inject.Inject; +import java.util.function.Supplier; + +public class GeNationalIdentityCardNumberProvider implements NationalIdentityCardNumberProvider { + + private static class OldCardNumberProvider implements NationalIdentityCardNumberProvider { + private static char[] GEORGIAN_CHAR = "აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ".toCharArray(); + + private final BaseProducer baseProducer; + + public OldCardNumberProvider(BaseProducer baseProducer) { + this.baseProducer = baseProducer; + } + + @Override + public String get() { + char geChar = GEORGIAN_CHAR[baseProducer.randomInt(GEORGIAN_CHAR.length - 1 )]; + return "N" + geChar + baseProducer.numerify("#######"); + } + } + + private static class NewCardNumberProvider implements NationalIdentityCardNumberProvider { + private final static String NEW_CARD_MASK = "##??#####"; + + private final BaseProducer baseProducer; + + public NewCardNumberProvider(BaseProducer baseProducer) { + this.baseProducer = baseProducer; + } + + @Override + public String get() { + return baseProducer.bothify(NEW_CARD_MASK).toUpperCase(); + } + } + + private final Supplier formatPicker; + + @Inject + public GeNationalIdentityCardNumberProvider(BaseProducer baseProducer) { + NationalIdentityCardNumberProvider oldCardNumberProvider = new OldCardNumberProvider(baseProducer); + NationalIdentityCardNumberProvider newCardNumberProvider = new NewCardNumberProvider(baseProducer); + formatPicker = () -> baseProducer.randomElement(oldCardNumberProvider, newCardNumberProvider); + } + + @Override + public String get() { + NationalIdentityCardNumberProvider numberProvider = formatPicker.get(); + return numberProvider.get(); + } +} diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProvider.java b/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProvider.java new file mode 100644 index 00000000..4ea8e702 --- /dev/null +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProvider.java @@ -0,0 +1,36 @@ +package io.codearte.jfairy.producer.person.locale.ge; + +import io.codearte.jfairy.producer.BaseProducer; +import io.codearte.jfairy.producer.person.PassportNumberProvider; + +import javax.inject.Inject; + +public class GePassportNumberProvider implements PassportNumberProvider { + + private final BaseProducer baseProducer; + + @Inject + public GePassportNumberProvider(BaseProducer baseProducer) { + this.baseProducer = baseProducer; + } + + // District codes are not reachable at the moment. + private String getDistrictCode() { + return baseProducer.numerify("##"); + } + + // A system of Ministry of Inferior Office codes is not known at the moment. + private String getStateOfficeCode(String district) { + return baseProducer.numerify("###"); + } + + private String getNationalPersonalIdentificationNumber() { + return baseProducer.numerify("######"); + } + + @Override + public String get() { + String districtCode = getDistrictCode(); + return districtCode + getStateOfficeCode(districtCode) + getNationalPersonalIdentificationNumber(); + } +} diff --git a/src/main/java/io/codearte/jfairy/producer/util/LanguageCode.java b/src/main/java/io/codearte/jfairy/producer/util/LanguageCode.java index ed1e8558..8f946ef8 100644 --- a/src/main/java/io/codearte/jfairy/producer/util/LanguageCode.java +++ b/src/main/java/io/codearte/jfairy/producer/util/LanguageCode.java @@ -9,6 +9,7 @@ public enum LanguageCode { EN, ES, FR, + KA, IT, DE, SV, diff --git a/src/main/resources/jfairy_ka.yml b/src/main/resources/jfairy_ka.yml new file mode 100644 index 00000000..5858359a --- /dev/null +++ b/src/main/resources/jfairy_ka.yml @@ -0,0 +1,27 @@ +data: + alphabet: აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ + domains: [ge, com.ge, org.ge, net.ge] + firstNames: { + male: [აბელ, აბრაამ, აბრამ, ადამ, აქაქი, ალექსანდრე, ამბროსი, ამირან, ანდრია, ანდრო, ანრი, ანზორ, არჩილ, ავქსენტი, ავთანდილ, ავთო, ბაადურ, ბადრი, ბაგრატ, ბესარიონ, ბესო, ბიძინა, ბორის, დანიელ, დავით, დავითი, ედუარდ, ერეკლე, გაიოზ, გენადი, გიორგი, გივი, გოჩა, გოგა, გრიგოლ, გურგენ, იაკობ, ილია, იმედა, იოანე, იონა, იოსებ, ირაკლი, ისიდორე, იური, ივანე, კობა, კონსტანტინე, კორნელი, ლადო, ლევან, ლუკა, მალხაზ, მალხაზი, მამუქა, მათე, მელითონ, მერაბ, მიხეილ, მიშო, მურთაზ, ნიკა, ნიკოლოზ, ნიკუშა, ოქროპირ, ოთარ, პავლე, პეტრე, ფრიდონ, ფრიდონი, რამაზ, რამაზი, რევაზ, რევაზი, რეზიკო, როსტომ, საბა, სანდრო, სიმონ, სიმონი, სოსო, სპარტაკ, სტეფანე, თამაზ, თამაზი, თედორე, თეიმურაზ, თეიმურაზი, თემო, თემურ, თემური, თენგიზ, ტერენტი, თომა, თორნიკე, ვახტანგ, ვალერი, ვალერიან, ვანო, ვასილ, ვასო, ვაჟა, ვეფხია, ვლადიმერ, ზაალ, ზაქარია, ზურაბ, ზვიად, ზვიადი], + female: [ანა, ანი, ბედისა, დარეჯან, დარეჯანი, ეკა, ეკატერინე, ელენე, ელისაბედ, ელისო, ენძელა, ეთერი, ევა, გულისა, გულნაზ, ირინა, ირინე, ირმა, იზოლდა, ქეთევან, ქეთი, ქეთო, ხათუნა, ლალი, ლეილა, ლია, მადონა, მაია, მაყვალა, მანანა, მარიამ, მარიამი, მარინა, მარინე, მართა, მედეა, მერი, მზია, ნანა, ნანული, ნატალია, ნათელა, ნათია, ნესტან, ნესტანი, ნინო, რუსიკო, რუსუდან, რუსუდანი, სალომე, სოფიო, თამარ, თამარი, ტატიანა, თეკლა, თინათინ, თინათინი, ცისანა, ცისია, ციური, ვარდო] + } + lastNames: { + male: [აბაკელია, აბაზასძე, აბრამიძე, აბულეთისძე, აგიაშვილი, ახალაია, ალასანია, ალექსიძე, ამირეჯიბი, ამირხანაშვილი, ანდრონიკაშვილი, აფაქიძე, არახამია, არზიანი, ასლანიშვილი, ავალიშვილი, ბაბადიშვილი, ბაგრატიონი დავითაშვილი, ბახია, ბაქრაძე, ბალანჩივაძე, ბანძელაძე, ბარნაბიშვილი, ბესტავაშვილი, ბოჭორიშვილი, ბოლქვაძე, ბურჭულაძე, ბუკია, ბასილია, ჩაჩხიანი, ჩარკვიანი, ჩერქეზიშვილი, ჩიჩუა, ჭკადუა, ჩხეტიძე, ჩახუნაშვილი, ჩხეიძე, დადეშქელიანი, დარსალია, დავითულიანი, დიასამიძე, დონაური, ჯუღაშვილი, გურიის ერისთავი, ესაძე, გაბაშვილი, გახარია, გარსევანიშვილი, გამსახურდია, გელაძე, გიორგაძე, ღლონტი, გოგოლაძე, გრუზინსკი, გურამიშვილი, გურული, გვაზავა, ღურწკაია, იოსელიანი, იაშვილი, ილურიძე, ივანიშვილი, ჯალაღონია, ჯანაშია, ჯაფარიძე, ჯავახიშვილი, ჯელაძე, ჯინჯიხაშვილი, ჯორჯაძე, ჯუღაშვილი, ყალიჩავა, კასრაძე, კერესელიძე, ხარაიშვილი, ხომერიკი, ხუჯაძე, კიკნაძე, ქობალია, კოტრიკაძე, კვერნაძე, ხერხეულიძე, ხიმშიაშვილი, ხინჩეგაშვილი, კობახია, ქობულაშვილი, კოდოშვილი, კურტანიძე, ლიჩელი, ლიპარტელიანი, ლორთქიფანიძე, მონავარდისაშვილი, მაჭავარიანი, მაღალაშვილი, მამალაძე, მჭედლიშვილი, მელიქიშვილი, მელუა, მესხი, მილდიანი, მუსელიანი, მჟავანაძე, ნაკაშიძე, ნემსაძე, ნიჟარაძე, ოჩიაური, ორბელიანი, ოქროპირიძე, ფანქველაშვილი, პატარაია, პატარკაციშვილი, ფავლენიშვილი, ფხეიძე, რაზმაძე, რეხვიაშვილი, რუსიეშვილი, სააკაძე, საბაური, სარალიძე, საკანდელიძე, შენგელია, შეთეკაური, შველიძე, სიდამონ-ერისთავი, სოლოღაშვილი, შუშანია, სვანაძე, თარხნიშვილი, წერეთელი, ციციშვილი, წულუკიძე, ტუღუში, ტუსიშვილი, ცენტერაძე, უნდილაძე, ვაჩნაძე, ვარდანიძე, ვირსალაძე, ზალკალიანი, ზაქარაშვილი, ზაქარიაძე, ზუმაძე, ზურაბიანი, ზოიძე, ზვიადაძე], + female: [აბაშიძე, აფხაზი, აბულაძე, აბუსელიძე, ახალკაცი, ახვლედიანი, ალავიძე, ამილახვარი, ამირანაშვილი, ანჩაბაძე, ანჯაფარიძე, არაბიძე, არველაძე, ასათიანი, ავალიანი, ათანაშვილი, ბაგრატიონი, ბაგრატიონი მუხრანელი, ბახსოლიანი, ბალახაძე, ბალავაძე, ბარათაშვილი, ბერიძე, ბინიაშვილი, ბოკუჩავა, ბოტკოველი, ბობოხიძე, ბუხრაშვილი, ჭაბუკიანი, ჭანტურია, ჭავჭავაძე, ჭიაურელი, ჩიქოვანი, ჭყონია, ჩოლოყაშვილი, ჩხაიძე, დადიანი, დარჩიძე, დავითაია, დგებუაძე, დოლიძე, დონღვანი, არაგვის ერისთავი, რაჭის ერისთავი, გოგოლაური, გაგუა, განძიელი-გეგელია, გამყრელიძე, გედევანიშვილი, გელოვანი, გიორგობიანი, გლოველი, გოცირიძე, გუგუნავა, გურგენიძე, გურიელი, გვასალია, გოგოლიძე, იარაჯული, იოსავა, იმედაშვილი, ჯამბაკურ-ორბელიანი, ჯანანაშვილი, ჯანდიერი, ჯაყელი, ჯავრიშვილი, ჯიბუტი, ჯიშკარიანი, ჯუანშერიანი, კახაბერიძე, კაპანაძე, ყაზბეგი, ქაშიბაძე, ხარძიანი, ხუციშვილი, ხურცილავა, ყიფიანი, ქორიძე, კვარაცხელია, კვეკვეცია, ხიდირბეგიშვილი, ხინჩაგაშვილი, ხინჩიგაშვილი, კობახიძე, ქოჩაკიძე, კუბლაშვილი, ლაზარაშვილი, ლეონიძე, ლობჟანიძე, ლალიაშვილი, მაჩაბელი, მაჭუტაძე, მაისურაძე, მანველიშვილი, მდივანი, მელქაძე, მენთეშაშვილი, მიქელაძე, მხეიძე, მუხრანელი, ნაკანი, ნანავა, ნიკოლაძე, ნოღაიდელი, ონიანი, ოკინაშვილი, ორჯონიკიძე, ფალავანდიშვილი, პატარავა, პერტახია, ფირცხალაიშვილი, რაფავა, რევაზიშვილი, როყვა, რუხაძე, სააკაშვილი, სანიკიძე, შაბურიძე, შალიკაშვილი, შერვაშიძე, შევარდნაძე, სიჭინავა, სიხარულიძე, სუხიშვილი, სვანიძე, თაბაგარი, თავდგირიძე, ცინცაძე, ცქიტიშვილი, თორელი, თუმანიშვილი, თავხელიძე, უჯმაჯურიძე, ურუშაძე, ვახვახიშვილი, ვეზირიშვილი, ზამბახიძე, ზამთარაძე, ზაქარეიშვილი, ზიბზიბაძე, ზურაბაშვილი, ჟორჟოლიანი, ზოტიკიშვილი] + } + personalEmails: [gmail.com, yahoo.com] + companyNames: [ბადაგონი, კაუკასუს ონლაინი, ქუთაისის ავტომექანიკური, მაგთიკომი, რუსთავის მეტალურგიული, თელასი, ვისოლის ნავთობი, ჯეოსელი] + companySuffixes: [კომპანია, კონსულტაცია, იმეილი, ქარხანა, შეზღუდულია] + companyEmails: [info, contact, office] + + text: კაცს ქალი რყვნის, არცერთი მამამკაცი, და მათ შორს არც მაიორიც, არასდროს არ იტყვის უარს,თუკი ქალი დაუძახებს და თუკი ქალს ეს საქმე სხვებზე უკეთესად გამოსდის. ანას ქმრის მკლავებს მზისა და მიწის სურნელი დიოდა,და როდესაც ანას ამ მკლავებში ეძინა,მშობლები ახსენდებოდა,რომლების არასდროს ენახა, შიშნარევ ნეტარებსას განიცდიდა ხოლმე ამ დროს და ასე ნელ-ნელა ცრემლდანთხეული ქალდებოდა ერთადერთი პატრონის მხურვალე მკლავებში. ყველა ბავშვმა იცის,რომ სადაც დედა იქ მამაც უნდა იყოს, ეს მისი თანდაყოლილი ცოდნაა და ამავე დროს საფუძველიც ყველაფრისა, რაც მერე უნდა დახოს და შეისწავლოს. უიარაღო კაცს სალამსაც კი ამადლიან, როცა იარაღის მქონეს და მომხმარებელს მიწამდე უკრავენ თავს. + + telephone_number_formats: ['###-###-###'] + + postal_code: ['####'] + + city: [თბილისი, ბათუმი, ქუთაისი, რუსთავი, გორი, ზუგდიდი, ფოთი, ხაშური, სამტრედია, სენაკი, ზესტაფონი, მარნეული, თელავი, ახალციხე, ქობულეთი, ოზურგეთი, კასპი, ჭიათურა, წყალტუბო, საგარეჯო, გარდაბანი, ბორჯომი] + + street: [გორკის ქუჩა, ჩეხოვის ქუჩა, რუსთაველის გამზირი, თვენსიქსი მაისის მოედანი, ფერდინანდ თავაძის ქუჩა, ჭავჭავაძის გამზირი, კოსტავას, აგლაძის ქუჩა, თამარ მეფის ქუჩა, დავით აღმაშენებლის გამზირი, ვაჟა–ფშაველას გამზირი, გრიბოედოვის ქუჩა, კაკუცა ჩოლოყაშვილის გამზირი, ნინოშვილის ქუჩა, პოლიტკოვსკაიას ქუჩა, სულხან ცინცაძის ქუჩა, ქეთევან წამებულის გამზირი, მეფე სოლომონ II-ის ქუჩა] + + country: ['Georgia'] #'USA', 'Russia', 'Greece', 'Turkey' diff --git a/src/test/groovy/io/codearte/jfairy/FairyGeSpec.groovy b/src/test/groovy/io/codearte/jfairy/FairyGeSpec.groovy new file mode 100644 index 00000000..ae67b316 --- /dev/null +++ b/src/test/groovy/io/codearte/jfairy/FairyGeSpec.groovy @@ -0,0 +1,39 @@ +package io.codearte.jfairy + +import io.codearte.jfairy.producer.person.Person +import spock.lang.Specification + +class FairyGeSpec extends Specification { + + private final int SEED = 2 + private Locale geLocale = new Locale.Builder().setLanguage("ka").setRegion("ge").setScript("Geor").build(); + private Fairy fairy = Fairy.builder().withRandomSeed(SEED).withLocale(geLocale).build() + + def "Should create Georgian name"() { + when: + Person person = fairy.person(); + then: + person.fullName == 'ბაადურ აბრამიძე' // Baadur Abramidze + } + + def "Should create Georgian street"() { + when: + Person person = fairy.person(); + then: + person.address.street == 'აგლაძის ქუჩა' // Agladze Street + } + + def "Should create Georgian city"() { + when: + Person person = fairy.person(); + then: + person.address.city == 'საგარეჯო' // Sagarejo + } + + def "Should create Georgian ID card"() { + when: + Person person = fairy.person(); + then: + person.nationalIdentityCardNumber == '47YR57825' + } +} diff --git a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeAddressSpec.groovy b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeAddressSpec.groovy new file mode 100644 index 00000000..00a33c43 --- /dev/null +++ b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeAddressSpec.groovy @@ -0,0 +1,59 @@ +package io.codearte.jfairy.producer.person.locale.ge + +import io.codearte.jfairy.Fairy +import io.codearte.jfairy.producer.person.Address +import spock.lang.Specification + +class GeAddressSpec extends Specification { + private final String NEW_LN = System.lineSeparator(); + private final int SEED = 8 + + private Fairy fairy; + private Address address + + def setup() { + Locale geLocale = new Locale.Builder().setLanguage("ka").build(); + fairy = Fairy.builder().withRandomSeed(SEED).withLocale(geLocale).build() + address = fairy.person().address + } + + def "should generate random street"() { + expect: + address.street == "გორკის ქუჩა" // Gorki Street + } + + def "should generate random streetNumber"() { + expect: + address.streetNumber == "184" + } + + def "should generate random apartmentNumber"() { + expect: + address.apartmentNumber == "329" + } + + def "should generate random postalCode"() { + expect: + address.postalCode == "1260" + } + + def "should generate random city"() { + expect: + address.city == "რუსთავი" // Rustavi + } + + def "should return addressLine1 in GE locale format"() { + expect: + address.addressLine1 == "1260, რუსთავი" // ZIP, city + } + + def "should return addressLine2 in GE locale format"() { + expect: + address.addressLine2 == "გორკის ქუჩა №184, ბინა 329" // street & number & appartment + } + + def "should return address in GE locale format"() { + expect: + address.toString() == "1260, რუსთავი${NEW_LN}გორკის ქუჩა №184, ბინა 329" + } +} diff --git a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProviderSpec.groovy b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProviderSpec.groovy new file mode 100644 index 00000000..10ab3f20 --- /dev/null +++ b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProviderSpec.groovy @@ -0,0 +1,33 @@ +package io.codearte.jfairy.producer.person.locale.ge + +import io.codearte.jfairy.producer.BaseProducer +import io.codearte.jfairy.producer.RandomGenerator +import spock.lang.Specification + +class GeNationalIdentityCardNumberProviderSpec extends Specification { + private GeNationalIdentityCardNumberProvider generator + + def setup() { + BaseProducer baseProducer = new BaseProducer(new RandomGenerator()) + generator = new GeNationalIdentityCardNumberProvider(baseProducer) + } + + private boolean isOldIdCardNumber(String id) { + id.matches("N[ა-ჰ]\\d{7}") + } + + private boolean isNewIdCardNumber(String id) { + id.matches("\\d{2}\\p{Upper}{2}\\d{5}") + } + + def isIdCardNumber(String id) { + isNewIdCardNumber(id) || isOldIdCardNumber(id) + } + + def "Should always generate proper nationalIdentityCardNumber"() { + expect: + isIdCardNumber(generator.get()) + where: + i << (1..100) + } +} diff --git a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProviderSpec.groovy b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProviderSpec.groovy new file mode 100644 index 00000000..08366a16 --- /dev/null +++ b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProviderSpec.groovy @@ -0,0 +1,25 @@ +package io.codearte.jfairy.producer.person.locale.ge + +import io.codearte.jfairy.producer.BaseProducer +import io.codearte.jfairy.producer.RandomGenerator +import spock.lang.Specification + +class GePassportNumberProviderSpec extends Specification { + private GePassportNumberProvider generator + + def setup() { + BaseProducer baseProducer = new BaseProducer(new RandomGenerator()) + generator = new GePassportNumberProvider(baseProducer) + } + + def isValidPassportNumber(String id) { + id.matches("\\d{11}") + } + + def "Should always generate proper passport number"() { + expect: + isValidPassportNumber(generator.get()) + where: + i << (1..100) + } +} From 7a36a3fe5a72fd3b070228d8132cd06c121e3275 Mon Sep 17 00:00:00 2001 From: Eduard Rindt Date: Fri, 10 Nov 2017 14:10:46 +0100 Subject: [PATCH 3/5] Fix locale-ge in line with the code review #1 --- .../producer/person/locale/ge/GeAddressSpec.groovy | 9 +++++---- .../ge/GeNationalIdentityCardNumberProviderSpec.groovy | 6 +++--- .../person/locale/ge/GePassportNumberProviderSpec.groovy | 6 +++--- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeAddressSpec.groovy b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeAddressSpec.groovy index 00a33c43..d103e333 100644 --- a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeAddressSpec.groovy +++ b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeAddressSpec.groovy @@ -4,15 +4,16 @@ import io.codearte.jfairy.Fairy import io.codearte.jfairy.producer.person.Address import spock.lang.Specification +import static java.lang.System.lineSeparator + class GeAddressSpec extends Specification { - private final String NEW_LN = System.lineSeparator(); private final int SEED = 8 - private Fairy fairy; + private Fairy fairy private Address address def setup() { - Locale geLocale = new Locale.Builder().setLanguage("ka").build(); + Locale geLocale = new Locale.Builder().setLanguage("ka").build() fairy = Fairy.builder().withRandomSeed(SEED).withLocale(geLocale).build() address = fairy.person().address } @@ -54,6 +55,6 @@ class GeAddressSpec extends Specification { def "should return address in GE locale format"() { expect: - address.toString() == "1260, რუსთავი${NEW_LN}გორკის ქუჩა №184, ბინა 329" + address.toString() == "1260, რუსთავი${lineSeparator()}გორკის ქუჩა №184, ბინა 329" } } diff --git a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProviderSpec.groovy b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProviderSpec.groovy index 10ab3f20..6c24fb7f 100644 --- a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProviderSpec.groovy +++ b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProviderSpec.groovy @@ -5,11 +5,11 @@ import io.codearte.jfairy.producer.RandomGenerator import spock.lang.Specification class GeNationalIdentityCardNumberProviderSpec extends Specification { - private GeNationalIdentityCardNumberProvider generator + private GeNationalIdentityCardNumberProvider provider def setup() { BaseProducer baseProducer = new BaseProducer(new RandomGenerator()) - generator = new GeNationalIdentityCardNumberProvider(baseProducer) + provider = new GeNationalIdentityCardNumberProvider(baseProducer) } private boolean isOldIdCardNumber(String id) { @@ -26,7 +26,7 @@ class GeNationalIdentityCardNumberProviderSpec extends Specification { def "Should always generate proper nationalIdentityCardNumber"() { expect: - isIdCardNumber(generator.get()) + isIdCardNumber(provider.get()) where: i << (1..100) } diff --git a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProviderSpec.groovy b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProviderSpec.groovy index 08366a16..afa6dcf6 100644 --- a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProviderSpec.groovy +++ b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProviderSpec.groovy @@ -5,11 +5,11 @@ import io.codearte.jfairy.producer.RandomGenerator import spock.lang.Specification class GePassportNumberProviderSpec extends Specification { - private GePassportNumberProvider generator + private GePassportNumberProvider provider def setup() { BaseProducer baseProducer = new BaseProducer(new RandomGenerator()) - generator = new GePassportNumberProvider(baseProducer) + provider = new GePassportNumberProvider(baseProducer) } def isValidPassportNumber(String id) { @@ -18,7 +18,7 @@ class GePassportNumberProviderSpec extends Specification { def "Should always generate proper passport number"() { expect: - isValidPassportNumber(generator.get()) + isValidPassportNumber(provider.get()) where: i << (1..100) } From ff93656fe2d37d0e6eeaaa492cd75e877deda78c Mon Sep 17 00:00:00 2001 From: Eduard Rindt Date: Mon, 13 Nov 2017 14:18:19 +0100 Subject: [PATCH 4/5] Change package names and class prefixes from GE to KA. --- .../java/io/codearte/jfairy/Bootstrap.java | 2 +- ...{GeFairyModule.java => KaFairyModule.java} | 20 +++++++++---------- .../KaVATIdentificationNumberProvider.java} | 6 +++--- .../{ge/GeAddress.java => ka/KaAddress.java} | 6 +++--- .../KaAddressProvider.java} | 10 +++++----- ...KaNationalIdentityCardNumberProvider.java} | 6 +++--- .../KaPassportNumberProvider.java} | 6 +++--- ...{FairyGeSpec.groovy => FairyKaSpec.groovy} | 2 +- .../KaAddressSpec.groovy} | 4 ++-- ...onalIdentityCardNumberProviderSpec.groovy} | 8 ++++---- .../KaPassportNumberProviderSpec.groovy} | 8 ++++---- 11 files changed, 39 insertions(+), 39 deletions(-) rename src/main/java/io/codearte/jfairy/{GeFairyModule.java => KaFairyModule.java} (59%) rename src/main/java/io/codearte/jfairy/producer/company/locale/{ge/GeVATIdentificationNumberProvider.java => ka/KaVATIdentificationNumberProvider.java} (68%) rename src/main/java/io/codearte/jfairy/producer/person/locale/{ge/GeAddress.java => ka/KaAddress.java} (75%) rename src/main/java/io/codearte/jfairy/producer/person/locale/{ge/GeAddressProvider.java => ka/KaAddressProvider.java} (53%) rename src/main/java/io/codearte/jfairy/producer/person/locale/{ge/GeNationalIdentityCardNumberProvider.java => ka/KaNationalIdentityCardNumberProvider.java} (90%) rename src/main/java/io/codearte/jfairy/producer/person/locale/{ge/GePassportNumberProvider.java => ka/KaPassportNumberProvider.java} (82%) rename src/test/groovy/io/codearte/jfairy/{FairyGeSpec.groovy => FairyKaSpec.groovy} (95%) rename src/test/groovy/io/codearte/jfairy/producer/person/locale/{ge/GeAddressSpec.groovy => ka/KaAddressSpec.groovy} (93%) rename src/test/groovy/io/codearte/jfairy/producer/person/locale/{ge/GeNationalIdentityCardNumberProviderSpec.groovy => ka/KaNationalIdentityCardNumberProviderSpec.groovy} (73%) rename src/test/groovy/io/codearte/jfairy/producer/person/locale/{ge/GePassportNumberProviderSpec.groovy => ka/KaPassportNumberProviderSpec.groovy} (66%) diff --git a/src/main/java/io/codearte/jfairy/Bootstrap.java b/src/main/java/io/codearte/jfairy/Bootstrap.java index 4efacebd..2284cb69 100644 --- a/src/main/java/io/codearte/jfairy/Bootstrap.java +++ b/src/main/java/io/codearte/jfairy/Bootstrap.java @@ -144,7 +144,7 @@ private static FairyModule getFairyModuleForLocale(DataMaster dataMaster, Locale case DE: return new DeFairyModule(dataMaster, randomGenerator); case KA: - return new GeFairyModule(dataMaster, randomGenerator); + return new KaFairyModule(dataMaster, randomGenerator); default: LOG.info("No data for your language - using EN"); return new EnFairyModule(dataMaster, randomGenerator); diff --git a/src/main/java/io/codearte/jfairy/GeFairyModule.java b/src/main/java/io/codearte/jfairy/KaFairyModule.java similarity index 59% rename from src/main/java/io/codearte/jfairy/GeFairyModule.java rename to src/main/java/io/codearte/jfairy/KaFairyModule.java index 0df80ba3..3dc99082 100644 --- a/src/main/java/io/codearte/jfairy/GeFairyModule.java +++ b/src/main/java/io/codearte/jfairy/KaFairyModule.java @@ -3,19 +3,19 @@ import io.codearte.jfairy.data.DataMaster; import io.codearte.jfairy.producer.RandomGenerator; import io.codearte.jfairy.producer.VATIdentificationNumberProvider; -import io.codearte.jfairy.producer.company.locale.ge.GeVATIdentificationNumberProvider; +import io.codearte.jfairy.producer.company.locale.ka.KaVATIdentificationNumberProvider; import io.codearte.jfairy.producer.person.AddressProvider; import io.codearte.jfairy.producer.person.NationalIdentificationNumberFactory; import io.codearte.jfairy.producer.person.NationalIdentityCardNumberProvider; import io.codearte.jfairy.producer.person.PassportNumberProvider; import io.codearte.jfairy.producer.person.locale.NoNationalIdentificationNumberFactory; -import io.codearte.jfairy.producer.person.locale.ge.GeAddressProvider; -import io.codearte.jfairy.producer.person.locale.ge.GeNationalIdentityCardNumberProvider; -import io.codearte.jfairy.producer.person.locale.ge.GePassportNumberProvider; +import io.codearte.jfairy.producer.person.locale.ka.KaAddressProvider; +import io.codearte.jfairy.producer.person.locale.ka.KaNationalIdentityCardNumberProvider; +import io.codearte.jfairy.producer.person.locale.ka.KaPassportNumberProvider; -public class GeFairyModule extends FairyModule { +public class KaFairyModule extends FairyModule { - public GeFairyModule(DataMaster dataMaster, RandomGenerator randomGenerator) { + public KaFairyModule(DataMaster dataMaster, RandomGenerator randomGenerator) { super(dataMaster, randomGenerator); } @@ -23,9 +23,9 @@ public GeFairyModule(DataMaster dataMaster, RandomGenerator randomGenerator) { protected void configure() { super.configure(); bind(NationalIdentificationNumberFactory.class).to(NoNationalIdentificationNumberFactory.class); - bind(NationalIdentityCardNumberProvider.class).to(GeNationalIdentityCardNumberProvider.class); - bind(VATIdentificationNumberProvider.class).to(GeVATIdentificationNumberProvider.class); - bind(AddressProvider.class).to(GeAddressProvider.class); - bind(PassportNumberProvider.class).to(GePassportNumberProvider.class); + bind(NationalIdentityCardNumberProvider.class).to(KaNationalIdentityCardNumberProvider.class); + bind(VATIdentificationNumberProvider.class).to(KaVATIdentificationNumberProvider.class); + bind(AddressProvider.class).to(KaAddressProvider.class); + bind(PassportNumberProvider.class).to(KaPassportNumberProvider.class); } } diff --git a/src/main/java/io/codearte/jfairy/producer/company/locale/ge/GeVATIdentificationNumberProvider.java b/src/main/java/io/codearte/jfairy/producer/company/locale/ka/KaVATIdentificationNumberProvider.java similarity index 68% rename from src/main/java/io/codearte/jfairy/producer/company/locale/ge/GeVATIdentificationNumberProvider.java rename to src/main/java/io/codearte/jfairy/producer/company/locale/ka/KaVATIdentificationNumberProvider.java index b4673e9a..d0da354e 100644 --- a/src/main/java/io/codearte/jfairy/producer/company/locale/ge/GeVATIdentificationNumberProvider.java +++ b/src/main/java/io/codearte/jfairy/producer/company/locale/ka/KaVATIdentificationNumberProvider.java @@ -1,15 +1,15 @@ -package io.codearte.jfairy.producer.company.locale.ge; +package io.codearte.jfairy.producer.company.locale.ka; import com.google.inject.Inject; import io.codearte.jfairy.producer.BaseProducer; import io.codearte.jfairy.producer.VATIdentificationNumberProvider; -public class GeVATIdentificationNumberProvider implements VATIdentificationNumberProvider { +public class KaVATIdentificationNumberProvider implements VATIdentificationNumberProvider { private final BaseProducer baseProducer; @Inject - public GeVATIdentificationNumberProvider(BaseProducer baseProducer) { + public KaVATIdentificationNumberProvider(BaseProducer baseProducer) { this.baseProducer = baseProducer; } diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddress.java b/src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaAddress.java similarity index 75% rename from src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddress.java rename to src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaAddress.java index bce23102..6b300958 100644 --- a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddress.java +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaAddress.java @@ -1,11 +1,11 @@ -package io.codearte.jfairy.producer.person.locale.ge; +package io.codearte.jfairy.producer.person.locale.ka; import io.codearte.jfairy.producer.person.locale.AbstractAddress; import static org.apache.commons.lang3.StringUtils.isNotBlank; -public class GeAddress extends AbstractAddress { - public GeAddress(String street, String streetNumber, String apartmentNumber, String postalCode, String city) { +public class KaAddress extends AbstractAddress { + public KaAddress(String street, String streetNumber, String apartmentNumber, String postalCode, String city) { super(street, streetNumber, apartmentNumber, postalCode, city); } diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddressProvider.java b/src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaAddressProvider.java similarity index 53% rename from src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddressProvider.java rename to src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaAddressProvider.java index 84e971ff..263a4d2f 100644 --- a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeAddressProvider.java +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaAddressProvider.java @@ -1,19 +1,19 @@ -package io.codearte.jfairy.producer.person.locale.ge; +package io.codearte.jfairy.producer.person.locale.ka; import com.google.inject.Inject; import io.codearte.jfairy.data.DataMaster; import io.codearte.jfairy.producer.BaseProducer; import io.codearte.jfairy.producer.person.AbstractAddressProvider; -public class GeAddressProvider extends AbstractAddressProvider { +public class KaAddressProvider extends AbstractAddressProvider { @Inject - public GeAddressProvider(DataMaster dataMaster, BaseProducer baseProducer) { + public KaAddressProvider(DataMaster dataMaster, BaseProducer baseProducer) { super(dataMaster, baseProducer); } @Override - public GeAddress get() { - return new GeAddress(getStreet(), getStreetNumber(), getApartmentNumber(), getPostalCode(), getCity()); + public KaAddress get() { + return new KaAddress(getStreet(), getStreetNumber(), getApartmentNumber(), getPostalCode(), getCity()); } } diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProvider.java b/src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaNationalIdentityCardNumberProvider.java similarity index 90% rename from src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProvider.java rename to src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaNationalIdentityCardNumberProvider.java index 64e331d6..c2cc4ec7 100644 --- a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProvider.java +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaNationalIdentityCardNumberProvider.java @@ -1,4 +1,4 @@ -package io.codearte.jfairy.producer.person.locale.ge; +package io.codearte.jfairy.producer.person.locale.ka; import io.codearte.jfairy.producer.BaseProducer; import io.codearte.jfairy.producer.person.NationalIdentityCardNumberProvider; @@ -6,7 +6,7 @@ import javax.inject.Inject; import java.util.function.Supplier; -public class GeNationalIdentityCardNumberProvider implements NationalIdentityCardNumberProvider { +public class KaNationalIdentityCardNumberProvider implements NationalIdentityCardNumberProvider { private static class OldCardNumberProvider implements NationalIdentityCardNumberProvider { private static char[] GEORGIAN_CHAR = "აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ".toCharArray(); @@ -42,7 +42,7 @@ public String get() { private final Supplier formatPicker; @Inject - public GeNationalIdentityCardNumberProvider(BaseProducer baseProducer) { + public KaNationalIdentityCardNumberProvider(BaseProducer baseProducer) { NationalIdentityCardNumberProvider oldCardNumberProvider = new OldCardNumberProvider(baseProducer); NationalIdentityCardNumberProvider newCardNumberProvider = new NewCardNumberProvider(baseProducer); formatPicker = () -> baseProducer.randomElement(oldCardNumberProvider, newCardNumberProvider); diff --git a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProvider.java b/src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaPassportNumberProvider.java similarity index 82% rename from src/main/java/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProvider.java rename to src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaPassportNumberProvider.java index 4ea8e702..60c4fd03 100644 --- a/src/main/java/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProvider.java +++ b/src/main/java/io/codearte/jfairy/producer/person/locale/ka/KaPassportNumberProvider.java @@ -1,16 +1,16 @@ -package io.codearte.jfairy.producer.person.locale.ge; +package io.codearte.jfairy.producer.person.locale.ka; import io.codearte.jfairy.producer.BaseProducer; import io.codearte.jfairy.producer.person.PassportNumberProvider; import javax.inject.Inject; -public class GePassportNumberProvider implements PassportNumberProvider { +public class KaPassportNumberProvider implements PassportNumberProvider { private final BaseProducer baseProducer; @Inject - public GePassportNumberProvider(BaseProducer baseProducer) { + public KaPassportNumberProvider(BaseProducer baseProducer) { this.baseProducer = baseProducer; } diff --git a/src/test/groovy/io/codearte/jfairy/FairyGeSpec.groovy b/src/test/groovy/io/codearte/jfairy/FairyKaSpec.groovy similarity index 95% rename from src/test/groovy/io/codearte/jfairy/FairyGeSpec.groovy rename to src/test/groovy/io/codearte/jfairy/FairyKaSpec.groovy index ae67b316..569cee57 100644 --- a/src/test/groovy/io/codearte/jfairy/FairyGeSpec.groovy +++ b/src/test/groovy/io/codearte/jfairy/FairyKaSpec.groovy @@ -3,7 +3,7 @@ package io.codearte.jfairy import io.codearte.jfairy.producer.person.Person import spock.lang.Specification -class FairyGeSpec extends Specification { +class FairyKaSpec extends Specification { private final int SEED = 2 private Locale geLocale = new Locale.Builder().setLanguage("ka").setRegion("ge").setScript("Geor").build(); diff --git a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeAddressSpec.groovy b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ka/KaAddressSpec.groovy similarity index 93% rename from src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeAddressSpec.groovy rename to src/test/groovy/io/codearte/jfairy/producer/person/locale/ka/KaAddressSpec.groovy index d103e333..ec1eeb6e 100644 --- a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeAddressSpec.groovy +++ b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ka/KaAddressSpec.groovy @@ -1,4 +1,4 @@ -package io.codearte.jfairy.producer.person.locale.ge +package io.codearte.jfairy.producer.person.locale.ka import io.codearte.jfairy.Fairy import io.codearte.jfairy.producer.person.Address @@ -6,7 +6,7 @@ import spock.lang.Specification import static java.lang.System.lineSeparator -class GeAddressSpec extends Specification { +class KaAddressSpec extends Specification { private final int SEED = 8 private Fairy fairy diff --git a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProviderSpec.groovy b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ka/KaNationalIdentityCardNumberProviderSpec.groovy similarity index 73% rename from src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProviderSpec.groovy rename to src/test/groovy/io/codearte/jfairy/producer/person/locale/ka/KaNationalIdentityCardNumberProviderSpec.groovy index 6c24fb7f..e685ffef 100644 --- a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GeNationalIdentityCardNumberProviderSpec.groovy +++ b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ka/KaNationalIdentityCardNumberProviderSpec.groovy @@ -1,15 +1,15 @@ -package io.codearte.jfairy.producer.person.locale.ge +package io.codearte.jfairy.producer.person.locale.ka import io.codearte.jfairy.producer.BaseProducer import io.codearte.jfairy.producer.RandomGenerator import spock.lang.Specification -class GeNationalIdentityCardNumberProviderSpec extends Specification { - private GeNationalIdentityCardNumberProvider provider +class KaNationalIdentityCardNumberProviderSpec extends Specification { + private KaNationalIdentityCardNumberProvider provider def setup() { BaseProducer baseProducer = new BaseProducer(new RandomGenerator()) - provider = new GeNationalIdentityCardNumberProvider(baseProducer) + provider = new KaNationalIdentityCardNumberProvider(baseProducer) } private boolean isOldIdCardNumber(String id) { diff --git a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProviderSpec.groovy b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ka/KaPassportNumberProviderSpec.groovy similarity index 66% rename from src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProviderSpec.groovy rename to src/test/groovy/io/codearte/jfairy/producer/person/locale/ka/KaPassportNumberProviderSpec.groovy index afa6dcf6..abf1457c 100644 --- a/src/test/groovy/io/codearte/jfairy/producer/person/locale/ge/GePassportNumberProviderSpec.groovy +++ b/src/test/groovy/io/codearte/jfairy/producer/person/locale/ka/KaPassportNumberProviderSpec.groovy @@ -1,15 +1,15 @@ -package io.codearte.jfairy.producer.person.locale.ge +package io.codearte.jfairy.producer.person.locale.ka import io.codearte.jfairy.producer.BaseProducer import io.codearte.jfairy.producer.RandomGenerator import spock.lang.Specification -class GePassportNumberProviderSpec extends Specification { - private GePassportNumberProvider provider +class KaPassportNumberProviderSpec extends Specification { + private KaPassportNumberProvider provider def setup() { BaseProducer baseProducer = new BaseProducer(new RandomGenerator()) - provider = new GePassportNumberProvider(baseProducer) + provider = new KaPassportNumberProvider(baseProducer) } def isValidPassportNumber(String id) { From 8e50a032c69c8c04b3386bb6b0d6e55eca29af90 Mon Sep 17 00:00:00 2001 From: Eduard Rindt Date: Tue, 14 Nov 2017 17:37:32 +0100 Subject: [PATCH 5/5] Fix and extend UTs --- .../io/codearte/jfairy/FairyKaSpec.groovy | 10 +++---- ...VATIdentificationNumberProviderSpec.groovy | 28 +++++++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 src/test/groovy/io/codearte/jfairy/producer/company/locale/ka/KaVATIdentificationNumberProviderSpec.groovy diff --git a/src/test/groovy/io/codearte/jfairy/FairyKaSpec.groovy b/src/test/groovy/io/codearte/jfairy/FairyKaSpec.groovy index 569cee57..cf08bcc0 100644 --- a/src/test/groovy/io/codearte/jfairy/FairyKaSpec.groovy +++ b/src/test/groovy/io/codearte/jfairy/FairyKaSpec.groovy @@ -6,33 +6,33 @@ import spock.lang.Specification class FairyKaSpec extends Specification { private final int SEED = 2 - private Locale geLocale = new Locale.Builder().setLanguage("ka").setRegion("ge").setScript("Geor").build(); + private Locale geLocale = new Locale.Builder().setLanguage("ka").setRegion("ge").setScript("Geor").build() private Fairy fairy = Fairy.builder().withRandomSeed(SEED).withLocale(geLocale).build() def "Should create Georgian name"() { when: - Person person = fairy.person(); + Person person = fairy.person() then: person.fullName == 'ბაადურ აბრამიძე' // Baadur Abramidze } def "Should create Georgian street"() { when: - Person person = fairy.person(); + Person person = fairy.person() then: person.address.street == 'აგლაძის ქუჩა' // Agladze Street } def "Should create Georgian city"() { when: - Person person = fairy.person(); + Person person = fairy.person() then: person.address.city == 'საგარეჯო' // Sagarejo } def "Should create Georgian ID card"() { when: - Person person = fairy.person(); + Person person = fairy.person() then: person.nationalIdentityCardNumber == '47YR57825' } diff --git a/src/test/groovy/io/codearte/jfairy/producer/company/locale/ka/KaVATIdentificationNumberProviderSpec.groovy b/src/test/groovy/io/codearte/jfairy/producer/company/locale/ka/KaVATIdentificationNumberProviderSpec.groovy new file mode 100644 index 00000000..b762883c --- /dev/null +++ b/src/test/groovy/io/codearte/jfairy/producer/company/locale/ka/KaVATIdentificationNumberProviderSpec.groovy @@ -0,0 +1,28 @@ +package io.codearte.jfairy.producer.company.locale.ka + +import io.codearte.jfairy.producer.BaseProducer +import io.codearte.jfairy.producer.RandomGenerator +import spock.lang.Specification + +class KaVATIdentificationNumberProviderSpec extends Specification { + + private KaVATIdentificationNumberProvider provider + + def setup() { + BaseProducer baseProducer = new BaseProducer(new RandomGenerator()) + provider = new KaVATIdentificationNumberProvider(baseProducer) + } + + private static final Set ALLOWED_PREFIXES = [ '2' ,'4' ].toSet() + + def isVatIdValid(String id) { + return id.length() == 9 && ALLOWED_PREFIXES.contains( id[ 0..0 ] ) + } + + def "Should always generate proper VAT id number"() { + expect: + isVatIdValid(provider.get()) + where: + i << (1..100) + } +}