From ed87106e4d535e08e9bfc51df2751b416f9990fd Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 13 Mar 2017 18:39:22 -0400 Subject: [PATCH] 81 - Ensuring Uniqueness --- app/RandomOrderConfirmationNumberGenerator.php | 4 +++- .../RandomOrderConfirmationNumberGeneratorTest.php | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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)); + } }