diff --git a/app/Http/Controllers/ConcertOrdersController.php b/app/Http/Controllers/ConcertOrdersController.php index 02d2832..b2910be 100644 --- a/app/Http/Controllers/ConcertOrdersController.php +++ b/app/Http/Controllers/ConcertOrdersController.php @@ -43,6 +43,7 @@ class ConcertOrdersController extends Controller return response()->json($order, 201); } catch (PaymentFailedException $e) { + $reservation->cancel(); return response()->json([], 422); } catch (NotEnoughTicketsException $e) { return response()->json([], 422); diff --git a/app/Ticket.php b/app/Ticket.php index e62d4e7..976cc5c 100644 --- a/app/Ticket.php +++ b/app/Ticket.php @@ -21,7 +21,7 @@ class Ticket extends Model public function release() { - $this->update(['order_id' => null]); + $this->update(['reserved_at' => null]); } public function concert() diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index a5f1746..b1d7ce0 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -60,3 +60,9 @@ $factory->define(App\Ticket::class, function (Faker\Generator $faker) { }, ]; }); + +$factory->state(App\Ticket::class, 'reserved', function ($faker) { + return [ + 'reserved_at' => Carbon::now(), + ]; +}); diff --git a/tests/unit/TicketTest.php b/tests/unit/TicketTest.php index 61350c7..3e6f2ca 100644 --- a/tests/unit/TicketTest.php +++ b/tests/unit/TicketTest.php @@ -2,6 +2,7 @@ use App\Ticket; use App\Concert; +use Carbon\Carbon; use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseTransactions; @@ -24,14 +25,11 @@ class TicketTest extends TestCase /** @test */ function a_ticket_can_be_released() { - $concert = factory(Concert::class)->create(); - $concert->addTickets(1); - $order = $concert->orderTickets('jane@example.com', 1); - $ticket = $order->tickets()->first(); - $this->assertEquals($order->id, $ticket->order_id); + $ticket = factory(Ticket::class)->states('reserved')->create(); + $this->assertNotNull($ticket->reserved_at); $ticket->release(); - $this->assertNull($ticket->fresh()->order_id); + $this->assertNull($ticket->fresh()->reserved_at); } }