diff --git a/app/RandomOrderConfirmationNumberGenerator.php b/app/RandomOrderConfirmationNumberGenerator.php index 5410632..a9e2719 100644 --- a/app/RandomOrderConfirmationNumberGenerator.php +++ b/app/RandomOrderConfirmationNumberGenerator.php @@ -6,6 +6,8 @@ class RandomOrderConfirmationNumberGenerator implements OrderConfirmationNumberG { public function generate() { - return str_repeat('A', 24); + $pool = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; + + return substr(str_shuffle(str_repeat($pool, 24)), 0, 24); } } diff --git a/tests/unit/RandomOrderConfirmationNumberGeneratorTest.php b/tests/unit/RandomOrderConfirmationNumberGeneratorTest.php index ac0d79e..3e9065a 100644 --- a/tests/unit/RandomOrderConfirmationNumberGeneratorTest.php +++ b/tests/unit/RandomOrderConfirmationNumberGeneratorTest.php @@ -47,4 +47,16 @@ class RandomOrderConfirmationNumberGeneratorTest extends TestCase $this->assertFalse(strpos($confirmationNumber, '0')); $this->assertFalse(strpos($confirmationNumber, 'O')); } + + /** @test */ + function confirmation_numbers_must_be_unique() + { + $generator = new RandomOrderConfirmationNumberGenerator; + + $confirmationNumbers = array_map(function ($i) use ($generator) { + return $generator->generate(); + }, range(1, 100)); + + $this->assertCount(100, array_unique($confirmationNumbers)); + } }