package org.talend.dataquality.datamasking.functions; import static org.junit.Assert.assertEquals; import java.util.Locale; import java.util.Random; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.google.i18n.phonenumbers.Phonenumber; /** * Created by jteuladedenantes on 22/09/16. */ public class GenerateUniquePhoneNumberJapanTest { private String output; private AbstractGenerateUniquePhoneNumber gnj = new GenerateUniquePhoneNumberJapan(); private GeneratePhoneNumberJapan gpn = new GeneratePhoneNumberJapan(); private static PhoneNumberUtil GOOGLE_PHONE_UTIL = PhoneNumberUtil.getInstance(); @Before public void setUp() throws Exception { gnj.setRandom(new Random(56)); gnj.setKeepFormat(true); } @Test public void testValidWithFormat() { output = gnj.generateMaskedRow("49-92 8 7895"); assertEquals("49-01 0 9355", output); } @Test public void testValidWithoutFormat() { gnj.setKeepFormat(false); output = gnj.generateMaskedRow("49-92 8 7895"); assertEquals("490109355", output); } @Test public void testInvalid() { // without a number output = gnj.generateMaskedRow("35686"); assertEquals("42445", output); gnj.setKeepInvalidPattern(true); // with a letter output = gnj.generateMaskedRow("35686"); assertEquals("35686", output); } @Test public void testValidAfterMasking() { gnj.setKeepFormat(false); String input; String output; for (int i = 0; i < 100; i++) { gpn.setRandom(new Random()); input = gpn.doGenerateMaskedField(null); if (isValidPhoneNumber(input)) { for (int j = 0; j < 1000; j++) { long rgenseed = System.nanoTime(); gnj.setRandom(new Random(rgenseed)); output = gnj.generateMaskedRow(input); Assert.assertTrue("Don't worry, report this line to Data Quality team: with a seed = " + rgenseed + ", " + input + " is valid, but after the masking " + output + " is not valid", isValidPhoneNumber(output)); } } } } /** * * whether a phone number is valid for a certain region. * * @param data the data that we want to validate * @return a boolean that indicates whether the number is of a valid pattern */ public static boolean isValidPhoneNumber(Object data) { Phonenumber.PhoneNumber phonenumber = null; try { phonenumber = GOOGLE_PHONE_UTIL.parse(data.toString(), Locale.JAPAN.getCountry()); } catch (Exception e) { return false; } return GOOGLE_PHONE_UTIL.isValidNumberForRegion(phonenumber, Locale.JAPAN.getCountry()); } }