From c36865a84a6685b9b21ba3d600f259f033ef3656 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 4 Jul 2017 11:22:41 -0400 Subject: [PATCH] 121 - Custom Factory Classes --- database/ConcertFactory.php | 13 +++++++++++++ database/seeds/DatabaseSeeder.php | 12 +++++++----- tests/Feature/PurchaseTicketsTest.php | 12 +++++------- tests/Unit/ConcertTest.php | 18 ++++-------------- 4 files changed, 29 insertions(+), 26 deletions(-) create mode 100644 database/ConcertFactory.php diff --git a/database/ConcertFactory.php b/database/ConcertFactory.php new file mode 100644 index 0000000..747aa28 --- /dev/null +++ b/database/ConcertFactory.php @@ -0,0 +1,13 @@ +create($overrides); + $concert->publish(); + return $concert; + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 9e9d275..28a2333 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -18,10 +18,11 @@ class DatabaseSeeder extends Seeder 'password' => bcrypt('secret'), ]); - factory(App\Concert::class)->states('published')->create([ + \ConcertFactory::createPublished([ 'user_id' => $user->id, 'title' => "The Red Chord", 'subtitle' => "with Animosity and Lethargy", + 'additional_information' => "This concert is 19+.", 'venue' => "The Mosh Pit", 'venue_address' => "123 Example Lane", 'city' => "Laraville", @@ -29,13 +30,14 @@ class DatabaseSeeder extends Seeder 'zip' => "17916", 'date' => Carbon::parse('2017-09-13 8:00pm'), 'ticket_price' => 3250, - 'additional_information' => "This concert is 19+.", - ])->addTickets(10); + 'ticket_quantity' => 10, + ]); factory(App\Concert::class)->create([ 'user_id' => $user->id, 'title' => "Slayer", 'subtitle' => "with Forbidden and Testament", + 'additional_information' => null, 'venue' => "The Rock Pile", 'venue_address' => "55 Sample Blvd", 'city' => "Laraville", @@ -43,7 +45,7 @@ class DatabaseSeeder extends Seeder 'zip' => "19276", 'date' => Carbon::parse('2017-10-05 7:00pm'), 'ticket_price' => 5500, - 'additional_information' => null, - ])->addTickets(10); + 'ticket_quantity' => 10, + ]); } } diff --git a/tests/Feature/PurchaseTicketsTest.php b/tests/Feature/PurchaseTicketsTest.php index 1aa58ec..0d8c3cd 100644 --- a/tests/Feature/PurchaseTicketsTest.php +++ b/tests/Feature/PurchaseTicketsTest.php @@ -60,7 +60,7 @@ class PurchaseTicketsTest extends TestCase OrderConfirmationNumber::shouldReceive('generate')->andReturn('ORDERCONFIRMATION1234'); TicketCode::shouldReceive('generateFor')->andReturn('TICKETCODE1', 'TICKETCODE2', 'TICKETCODE3'); - $concert = factory(Concert::class)->states('published')->create(['ticket_price' => 3250])->addTickets(3); + $concert = \ConcertFactory::createPublished(['ticket_price' => 3250, 'ticket_quantity' => 3]); $this->orderTickets($concert, [ 'email' => 'john@example.com', @@ -96,7 +96,7 @@ class PurchaseTicketsTest extends TestCase /** @test */ function cannot_purchase_tickets_to_an_unpublished_concert() { - $concert = factory(Concert::class)->states('unpublished')->create()->addTickets(3); + $concert = factory(Concert::class)->states('unpublished')->create(['ticket_quantity' => 3]); $this->orderTickets($concert, [ 'email' => 'john@example.com', @@ -112,7 +112,7 @@ class PurchaseTicketsTest extends TestCase /** @test */ function an_order_is_not_created_if_payment_fails() { - $concert = factory(Concert::class)->states('published')->create(['ticket_price' => 3250])->addTickets(3); + $concert = \ConcertFactory::createPublished(['ticket_price' => 3250, 'ticket_quantity' => 3]); $this->orderTickets($concert, [ 'email' => 'john@example.com', @@ -128,7 +128,7 @@ class PurchaseTicketsTest extends TestCase /** @test */ function cannot_purchase_more_tickets_than_remain() { - $concert = factory(Concert::class)->states('published')->create()->addTickets(50); + $concert = \ConcertFactory::createPublished(['ticket_price' => 3250, 'ticket_quantity' => 50]); $this->orderTickets($concert, [ 'email' => 'john@example.com', @@ -147,9 +147,7 @@ class PurchaseTicketsTest extends TestCase { $this->disableExceptionHandling(); - $concert = factory(Concert::class)->states('published')->create([ - 'ticket_price' => 1200 - ])->addTickets(3); + $concert = \ConcertFactory::createPublished(['ticket_price' => 1200, 'ticket_quantity' => 3]); $this->paymentGateway->beforeFirstCharge(function ($paymentGateway) use ($concert) { $this->orderTickets($concert, [ diff --git a/tests/Unit/ConcertTest.php b/tests/Unit/ConcertTest.php index 69f3eeb..c19d422 100644 --- a/tests/Unit/ConcertTest.php +++ b/tests/Unit/ConcertTest.php @@ -74,16 +74,6 @@ class ConcertTest extends TestCase $this->assertEquals(5, $concert->ticketsRemaining()); } - /** @test */ - function can_add_tickets() - { - $concert = factory(Concert::class)->create(); - - $concert->addTickets(50); - - $this->assertEquals(50, $concert->ticketsRemaining()); - } - /** @test */ function tickets_remaining_does_not_include_tickets_associated_with_an_order() { @@ -97,7 +87,7 @@ class ConcertTest extends TestCase /** @test */ function trying_to_reserve_more_tickets_than_remain_throws_an_exception() { - $concert = factory(Concert::class)->create()->addTickets(10); + $concert = \ConcertFactory::createPublished(['ticket_quantity' => 10]); try { $reservation = $concert->reserveTickets(11, 'john@example.com'); @@ -112,7 +102,7 @@ class ConcertTest extends TestCase /** @test */ function can_reserve_available_tickets() { - $concert = factory(Concert::class)->create()->addTickets(3); + $concert = \ConcertFactory::createPublished(['ticket_quantity' => 3]); $this->assertEquals(3, $concert->ticketsRemaining()); $reservation = $concert->reserveTickets(2, 'john@example.com'); @@ -125,7 +115,7 @@ class ConcertTest extends TestCase /** @test */ function cannot_reserve_tickets_that_have_already_been_purchased() { - $concert = factory(Concert::class)->create()->addTickets(3); + $concert = \ConcertFactory::createPublished(['ticket_quantity' => 3]); $order = factory(Order::class)->create(); $order->tickets()->saveMany($concert->tickets->take(2)); @@ -142,7 +132,7 @@ class ConcertTest extends TestCase /** @test */ function cannot_reserve_tickets_that_have_already_been_reserved() { - $concert = factory(Concert::class)->create()->addTickets(3); + $concert = \ConcertFactory::createPublished(['ticket_quantity' => 3]); $concert->reserveTickets(2, 'jane@example.com'); try {