Files
ticketbeast/tests/unit/ConcertTest.php
2016-11-13 19:18:52 -05:00

88 lines
2.5 KiB
PHP

<?php
use App\Concert;
use Carbon\Carbon;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ConcertTest extends TestCase
{
use DatabaseMigrations;
/** @test */
function can_get_formatted_date()
{
$concert = factory(Concert::class)->make([
'date' => Carbon::parse('2016-12-01 8:00pm'),
]);
$this->assertEquals('December 1, 2016', $concert->formatted_date);
}
/** @test */
function can_get_formatted_start_time()
{
$concert = factory(Concert::class)->make([
'date' => Carbon::parse('2016-12-01 17:00:00'),
]);
$this->assertEquals('5:00pm', $concert->formatted_start_time);
}
/** @test */
function can_get_ticket_price_in_dollars()
{
$concert = factory(Concert::class)->make([
'ticket_price' => 6750,
]);
$this->assertEquals('67.50', $concert->ticket_price_in_dollars);
}
/** @test */
function concerts_with_a_published_at_date_are_published()
{
$publishedConcertA = factory(Concert::class)->create(['published_at' => Carbon::parse('-1 week')]);
$publishedConcertB = factory(Concert::class)->create(['published_at' => Carbon::parse('-1 week')]);
$unpublishedConcert = factory(Concert::class)->create(['published_at' => null]);
$publishedConcerts = Concert::published()->get();
$this->assertTrue($publishedConcerts->contains($publishedConcertA));
$this->assertTrue($publishedConcerts->contains($publishedConcertB));
$this->assertFalse($publishedConcerts->contains($unpublishedConcert));
}
/** @test */
function can_order_concert_tickets()
{
$concert = factory(Concert::class)->create();
$order = $concert->orderTickets('jane@example.com', 3);
$this->assertEquals('jane@example.com', $order->email);
$this->assertEquals(3, $order->tickets()->count());
}
/** @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()
{
$concert = factory(Concert::class)->create();
$concert->addTickets(50);
$concert->orderTickets('jane@example.com', 30);
$this->assertEquals(20, $concert->ticketsRemaining());
}
}