PersonTest.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace Faker\Test\Provider\fi_FI;
  3. use Faker\Generator;
  4. use Faker\Provider\DateTime;
  5. use Faker\Provider\fi_FI\Person;
  6. use PHPUnit\Framework\TestCase;
  7. class PersonTest extends TestCase
  8. {
  9. /** @var Generator */
  10. protected $faker;
  11. public function setUp()
  12. {
  13. $faker = new Generator();
  14. $faker->addProvider(new DateTime($faker));
  15. $faker->addProvider(new Person($faker));
  16. $this->faker = $faker;
  17. }
  18. public function provideSeedAndExpectedReturn()
  19. {
  20. return array(
  21. array(1, '1800-01-01', '010100+5207'),
  22. array(2, '1930-08-08', '080830-508R'),
  23. array(3, '1999-12-31', '311299-409D'),
  24. array(4, '2000-01-01', '010100A039P'),
  25. array(5, '2015-06-17', '170615A690X')
  26. );
  27. }
  28. /**
  29. * @dataProvider provideSeedAndExpectedReturn
  30. */
  31. public function testPersonalIdentityNumberUsesBirthDateIfProvided($seed, $birthdate, $expected)
  32. {
  33. $faker = $this->faker;
  34. $faker->seed($seed);
  35. $pin = $faker->personalIdentityNumber(\DateTime::createFromFormat('Y-m-d', $birthdate));
  36. $this->assertEquals($expected, $pin);
  37. }
  38. public function testPersonalIdentityNumberGeneratesCompliantNumbers()
  39. {
  40. if (strtotime('1800-01-01 00:00:00')) {
  41. $min="1900";
  42. $max="2099";
  43. for ($i = 0; $i < 10; $i++) {
  44. $birthdate = $this->faker->dateTimeBetween('1800-01-01 00:00:00', '1899-12-31 23:59:59');
  45. $pin = $this->faker->personalIdentityNumber($birthdate, NULL, true);
  46. $this->assertRegExp('/^[0-9]{6}\+[0-9]{3}[0-9ABCDEFHJKLMNPRSTUVWXY]$/', $pin);
  47. }
  48. } else { // timestamp limit for 32-bit computer
  49. $min="1902";
  50. $max="2037";
  51. }
  52. for ($i = 0; $i < 10; $i++) {
  53. $birthdate = $this->faker->dateTimeBetween("$min-01-01 00:00:00", '1999-12-31 23:59:59');
  54. $pin = $this->faker->personalIdentityNumber($birthdate);
  55. $this->assertRegExp('/^[0-9]{6}-[0-9]{3}[0-9ABCDEFHJKLMNPRSTUVWXY]$/', $pin);
  56. }
  57. for ($i = 0; $i < 10; $i++) {
  58. $birthdate = $this->faker->dateTimeBetween('2000-01-01 00:00:00', "$max-12-31 23:59:59");
  59. $pin = $this->faker->personalIdentityNumber($birthdate);
  60. $this->assertRegExp('/^[0-9]{6}A[0-9]{3}[0-9ABCDEFHJKLMNPRSTUVWXY]$/', $pin);
  61. }
  62. }
  63. public function testPersonalIdentityNumberGeneratesOddValuesForMales()
  64. {
  65. $pin = $this->faker->personalIdentityNumber(null, 'male');
  66. $this->assertEquals(1, $pin{9} % 2);
  67. }
  68. public function testPersonalIdentityNumberGeneratesEvenValuesForFemales()
  69. {
  70. $pin = $this->faker->personalIdentityNumber(null, 'female');
  71. $this->assertEquals(0, $pin{9} % 2);
  72. }
  73. }