/** * Test that the index page grabs a collection of talks * and successfully displays them * * @test */ public function indexPageDisplaysTalksCorrectly() { $app = new Application(BASE_PATH, Environment::testing()); ob_start(); $app->run(); ob_end_clean(); // Create a pretend user $user = m::mock('StdClass'); $user->shouldReceive('hasPermission')->with('admin')->andReturn(true); $user->shouldReceive('getId')->andReturn(1); // Create a test double for Sentry $sentry = m::mock('StdClass'); $sentry->shouldReceive('check')->andReturn(true); $sentry->shouldReceive('getUser')->andReturn($user); $app['sentry'] = $sentry; // Create an in-memory database $cfg = new \Spot\Config(); $cfg->addConnection('sqlite', ['dbname' => 'sqlite::memory', 'driver' => 'pdo_sqlite']); $app['spot'] = new \Spot\Locator($cfg); // Create a fake request $req = m::mock('Symfony\\Component\\HttpFoundation\\Request'); $req->shouldReceive('get')->with('page')->andReturn(1); $req->shouldReceive('get')->with('sort')->andReturn('title'); $req->shouldReceive('getRequestUri')->andReturn('foo'); $this->createTestData($app['spot']); $controller = new \OpenCFP\Http\Controller\Admin\TalksController(); $controller->setApplication($app); $response = $controller->indexAction($req, $app); $this->assertContains('Test Title', (string) $response); $this->assertContains('Test User', (string) $response); }
/** * Test that the index page grabs a collection of talks * and successfully displays them * * @test */ public function indexPageDisplaysTalksCorrectly() { $userId = $this->app['user']->getId(); // Create our fake talk $talk = m::mock(\OpenCFP\Domain\Entity\Talk::class); $talk->shouldReceive('save'); $talk->shouldReceive('set')->with($this->app['user'])->andSet('speaker', $this->app['user']); $userDetails = ['id' => $userId, 'first_name' => 'Test', 'last_name' => 'User']; $talkData = [0 => ['id' => 1, 'title' => 'Test Title', 'description' => "The title should contain this & that", 'meta' => ['rating' => 5], 'type' => 'regular', 'level' => 'entry', 'category' => 'other', 'desired' => 0, 'slides' => '', 'other' => '', 'sponsor' => '', 'user_id' => $userId, 'created_at' => date('Y-m-d'), 'user' => $userDetails, 'favorite' => null, 'selected' => null]]; $userMapper = m::mock(\OpenCFP\Domain\Entity\Mapper\User::class); $userMapper->shouldReceive('migrate'); $userMapper->shouldReceive('build')->andReturn($this->app['user']); $userMapper->shouldReceive('save')->andReturn(true); $talkMapper = m::mock(\OpenCFP\Domain\Entity\Mapper\Talk::class); $talkMapper->shouldReceive('migrate'); $talkMapper->shouldReceive('build')->andReturn($talk); $talkMapper->shouldReceive('save'); $talkMapper->shouldReceive('getAllPagerFormatted')->andReturn($talkData); // Overide our DB mappers to return doubles $spot = m::mock('Spot\\Locator'); $spot->shouldReceive('mapper')->with(\OpenCFP\Domain\Entity\User::class)->andReturn($userMapper); $spot->shouldReceive('mapper')->with(\OpenCFP\Domain\Entity\Talk::class)->andReturn($talkMapper); $this->app['spot'] = $spot; $req = m::mock('Symfony\\Component\\HttpFoundation\\Request'); $paramBag = m::mock('Symfony\\Component\\HttpFoundation\\ParameterBag'); $queryParams = ['page' => 1, 'per_page' => 20, 'sort' => 'ASC', 'order_by' => 'title', 'filter' => null]; $paramBag->shouldReceive('all')->andReturn($queryParams); $req->shouldReceive('get')->with('page')->andReturn($queryParams['page']); $req->shouldReceive('get')->with('per_page')->andReturn($queryParams['per_page']); $req->shouldReceive('get')->with('sort')->andReturn($queryParams['sort']); $req->shouldReceive('get')->with('order_by')->andReturn($queryParams['order_by']); $req->shouldReceive('get')->with('filter')->andReturn($queryParams['filter']); $req->query = $paramBag; $req->shouldReceive('getRequestUri')->andReturn('foo'); /* @var Twig_Environment $twig */ $twig = $this->app['twig']; $twig->addGlobal('user_is_admin', $this->app['sentry']->getUser()->hasAccess('admin')); ob_start(); $this->app->run(); ob_end_clean(); $controller = new \OpenCFP\Http\Controller\Admin\TalksController(); $controller->setApplication($this->app); $response = $controller->indexAction($req); $this->assertContains('Test Title', (string) $response); $this->assertContains('Test User', (string) $response); }