89 - Assigning Codes When Claiming Tickets

This commit is contained in:
Adam Wathan
2017-03-31 16:51:58 -04:00
parent 1a5ffa8701
commit 0d560ce6db
4 changed files with 49 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
use App\TicketCodeGenerator;
class TicketCode extends Facade
{
protected static function getFacadeAccessor()
{
return TicketCodeGenerator::class;
}
protected static function getMockableClass()
{
return static::getFacadeAccessor();
}
}

View File

@@ -3,6 +3,7 @@
namespace App;
use Carbon\Carbon;
use App\Facades\TicketCode;
use Illuminate\Database\Eloquent\Model;
class Ticket extends Model
@@ -24,6 +25,12 @@ class Ticket extends Model
$this->update(['reserved_at' => null]);
}
public function claimFor($order)
{
$this->code = TicketCode::generate();
$order->tickets()->save($this);
}
public function concert()
{
return $this->belongsTo(Concert::class);

View File

@@ -0,0 +1,8 @@
<?php
namespace App;
interface TicketCodeGenerator
{
public function generate();
}

View File

@@ -1,8 +1,10 @@
<?php
use App\Order;
use App\Ticket;
use App\Concert;
use Carbon\Carbon;
use App\Facades\TicketCode;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
@@ -32,4 +34,17 @@ class TicketTest extends TestCase
$this->assertNull($ticket->fresh()->reserved_at);
}
/** @test */
function a_ticket_can_be_claimed_for_an_order()
{
$order = factory(Order::class)->create();
$ticket = factory(Ticket::class)->create(['code' => null]);
TicketCode::shouldReceive('generate')->andReturn('TICKETCODE1');
$ticket->claimFor($order);
$this->assertContains($ticket->id, $order->tickets->pluck('id'));
$this->assertEquals('TICKETCODE1', $ticket->code);
}
}