Skip to content

Commit 80bde10

Browse files
committed
Working on tests & demo-app
1 parent 497c290 commit 80bde10

File tree

12 files changed

+506
-0
lines changed

12 files changed

+506
-0
lines changed

tests/bootstrap.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
namespace Presentation\Framework\Demo;
4+
5+
6+
require __DIR__ . '/../vendor/autoload.php';
7+
8+
define('FIXTURES_DIR', __DIR__ . '/fixtures');
9+
10+
use Dotenv;
11+
use PDO;
12+
13+
ini_set('display_errors',1);
14+
ini_set('display_startup_errors',1);
15+
error_reporting(-1);
16+
17+
Dotenv::load(__DIR__);
18+
Dotenv::required([
19+
'DB_DSN',
20+
'DB_NAME',
21+
'DB_USER',
22+
'DB_PASSWORD'
23+
]);
24+
25+
function is_sqlite()
26+
{
27+
return strpos(getenv('DB_DSN'), 'sqlite:') !== false;
28+
}
29+
30+
function db_connection() {
31+
static $db;
32+
if ($db === null) {
33+
$dsn = getenv('DB_DSN');
34+
35+
$selectDb = !is_sqlite();
36+
if ($selectDb) {
37+
$dbName = getenv('DB_NAME');
38+
$dsn.=";dbname=$dbName";
39+
}
40+
$db = new PDO(
41+
$dsn,
42+
getenv('DB_USER'),
43+
getenv('DB_PASSWORD'),
44+
[
45+
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
46+
PDO::ATTR_EMULATE_PREPARES => 1
47+
]
48+
);
49+
}
50+
return $db;
51+
}
52+
chdir(__DIR__);

tests/fixtures/db.sql

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
DROP DATABASE IF EXISTS pf_laravel_demo;
2+
CREATE DATABASE IF NOT EXISTS pf_laravel_demo;
3+
USE pf_laravel_demo;
4+
5+
DROP TABLE IF EXISTS users;
6+
CREATE TABLE IF NOT EXISTS users (
7+
id int(10) NOT NULL,
8+
name varchar(255) NOT NULL,
9+
role varchar(31) NOT NULL,
10+
birthday date NOT NULL,
11+
PRIMARY KEY (id)
12+
);
13+
14+
DELETE FROM users;
15+
16+
INSERT INTO users VALUES (1, 'John', 'Admin', '1970-01-16');
17+
INSERT INTO users VALUES (2, 'Max', 'Manager', '1980-11-20');
18+
INSERT INTO users VALUES (3, 'Anna', 'Manager', '1987-03-30');
19+
INSERT INTO users VALUES (4, 'Lisa', 'User', '1989-04-21');
20+
INSERT INTO users VALUES (5, 'Eric', 'User', '1990-10-23');
21+
22+
INSERT INTO users VALUES (6, 'David', 'User', '1990-10-23');
23+
INSERT INTO users VALUES (7, 'Bruce', 'User', '1977-09-14');
24+
INSERT INTO users VALUES (8, 'Julia', 'User', '1994-03-05');
25+
INSERT INTO users VALUES (9, 'Ben', 'User', '1991-11-13');
26+
INSERT INTO users VALUES (10, 'Frank', 'Manager', '1964-10-29');
27+
INSERT INTO users VALUES (11, 'Phil', 'User', '1972-08-17');
28+
INSERT INTO users VALUES (12, 'Nikita', 'User', '1973-04-17');
29+
INSERT INTO users VALUES (13, 'Steven', 'User', '1983-03-21');
30+
INSERT INTO users VALUES (14, 'Ross', 'User', '1982-07-14');
31+
INSERT INTO users VALUES (15, 'Sammy', 'User', '1982-07-24');
32+
33+
INSERT INTO users VALUES (16, 'Victor', 'User', '1979-01-23');
34+
INSERT INTO users VALUES (17, 'Martin', 'Manager', '2001-01-04');
35+
INSERT INTO users VALUES (18, 'Florin', 'User', '2002-06-06');
36+
INSERT INTO users VALUES (19, 'Diego', 'User', '1987-05-11');
37+
INSERT INTO users VALUES (20, 'Robert', 'Admin', '1984-02-01');
38+
INSERT INTO users VALUES (21, 'Peter', 'User', '1994-05-12');
39+
INSERT INTO users VALUES (22, 'Sebastian', 'User', '1991-11-16');
40+
INSERT INTO users VALUES (23, 'Rafael', 'User', '1993-05-04');

tests/laravel_bootstrap.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
require __DIR__ . '/bootstrap.php';
3+
4+
use Illuminate\Database\Capsule\Manager as Capsule;
5+
$capsule = new Capsule;
6+
$capsule->addConnection([
7+
'driver' => 'sqlite',
8+
'database' => __DIR__ . '/db.sqlite',
9+
'prefix' => '',
10+
]);
11+
$capsule->setAsGlobal();
12+
$capsule->bootEloquent();
13+
// set timezone for timestamps etc
14+
date_default_timezone_set('UTC');
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<?php
2+
namespace Presentation\Laravel\Test\Acceptance;
3+
4+
use Exception;
5+
use GuzzleHttp\Client;
6+
use PHPUnit_Framework_TestCase;
7+
8+
abstract class AbstractTest extends PHPUnit_Framework_TestCase
9+
{
10+
/**
11+
* @var Client
12+
*/
13+
protected $client;
14+
protected $baseUri = 'http://localhost:8000';
15+
protected $connectionChecked = false;
16+
protected $process;
17+
public function setUp()
18+
{
19+
$this->client = new Client([
20+
'base_uri' => $this->baseUri,
21+
]);
22+
23+
24+
$this->checkConnection();
25+
}
26+
27+
protected function startServer()
28+
{
29+
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
30+
echo "\r\n===[ Starting WEB-SERVER... ]===\r\n";
31+
$this->process = popen("start php -S localhost:8000 tests/webapp/index.php", "r");
32+
} else {
33+
echo "\r\n===[ Can't start WEB-SERVER, disabled for unix ]===\r\n";
34+
$this->process = false;
35+
}
36+
}
37+
38+
public function tearDown()
39+
{
40+
if ($this->process) {
41+
pclose($this->process);
42+
}
43+
}
44+
45+
protected function checkConnection()
46+
{
47+
if ($this->connectionChecked) {
48+
return;
49+
}
50+
$this->connectionChecked = true;
51+
try {
52+
if ($this->client->get('/')->getStatusCode() !== 200) {
53+
throw new Exception();
54+
}
55+
} catch(Exception $e) {
56+
if ($this->process === null) {
57+
$this->startServer();
58+
if ($this->process !== null) {
59+
$this->checkConnection();
60+
return;
61+
}
62+
}
63+
$this->markTestSkipped("Can't find working server at $this->baseUri");
64+
}
65+
}
66+
67+
protected function get($uri, $options = [])
68+
{
69+
return $this->client->get($uri, $options)->getBody()->getContents();
70+
}
71+
72+
protected function assertPageContains($expected, $uri, $options = [])
73+
{
74+
self::assertContains($expected, $this->get($uri, $options));
75+
}
76+
77+
protected function assertPageWorks($uri, $options = [])
78+
{
79+
self::assertTrue($this->client->get($uri, $options)->getStatusCode() == 200);
80+
}
81+
82+
protected function assertPagesWorks(array $uris)
83+
{
84+
foreach($uris as $uri) {
85+
$this->assertPageWorks($uri);
86+
}
87+
}
88+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
namespace Presentation\Laravel\Test\Acceptance;
3+
4+
use PHPUnit_Framework_TestCase;
5+
use Presentation\Laravel\Demo\Controller;
6+
7+
class ServerRunTest extends AbstractTest
8+
{
9+
public function testPages()
10+
{
11+
$this->assertPagesWorks(get_class_methods(Controller::class));
12+
}
13+
14+
public function testIndex()
15+
{
16+
$this->assertPageContains('Laravel Integration', '/');
17+
}
18+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace Presentation\Laravel\Test\Data;
4+
5+
use Presentation\Framework\Data\OperationsCollection;
6+
use Presentation\Framework\Test\Data\AbstractProcessingServiceTest;
7+
use Presentation\Laravel\Data\EloquentProcessingService;
8+
use Presentation\Laravel\Data\EloquentProcessorResolver;
9+
use Presentation\Laravel\Demo\Model\User;
10+
11+
require __DIR__ .'/../../../vendor/presentation/framework/tests/phpunit/Data/AbstractProcessingServiceTest.php';
12+
13+
class DbTableProcessingServiceTest extends AbstractProcessingServiceTest
14+
{
15+
public function setUp()
16+
{
17+
$this->data = (new User())->newQuery();
18+
$this->operations = new OperationsCollection();
19+
$this->service = new EloquentProcessingService(
20+
new EloquentProcessorResolver(),
21+
$this->operations,
22+
$this->data
23+
);
24+
$this->totalCount = (new User())->newQuery()->get()->count();
25+
}
26+
}

tests/webapp/AbstractController.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
namespace Presentation\Laravel\Demo;
3+
4+
use Presentation\Framework\Base\ComponentInterface;
5+
use ReflectionClass;
6+
use ReflectionMethod;
7+
8+
abstract class AbstractController
9+
{
10+
/**
11+
* @return \ReflectionMethod[]
12+
*/
13+
protected function getActions()
14+
{
15+
$class = new ReflectionClass($this);
16+
return $class->getMethods(ReflectionMethod::IS_PUBLIC);
17+
18+
}
19+
20+
protected function render($tpl, array $data = [])
21+
{
22+
extract($data);
23+
ob_start();
24+
$resourcesDir = __DIR__ . '/resources';
25+
include "$resourcesDir/views/$tpl.php";
26+
return ob_get_clean();
27+
}
28+
29+
30+
protected function renderMenu()
31+
{
32+
return $this->render('menu/menu');
33+
}
34+
35+
protected function page($content, $title = '')
36+
{
37+
if ($content instanceof ComponentInterface) {
38+
$content = $content->render();
39+
}
40+
return $this->render('layout', compact('content', 'title'));
41+
}
42+
}

0 commit comments

Comments
 (0)