Skip to content

Instantly share code, notes, and snippets.

@Raistlfiren
Created February 8, 2016 20:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Raistlfiren/43d81ed8be23b3bb4204 to your computer and use it in GitHub Desktop.
Save Raistlfiren/43d81ed8be23b3bb4204 to your computer and use it in GitHub Desktop.
<?php
namespace Wolfe\Tests;
use PHPUnit_Framework_TestCase;
use Slim\App;
use Slim\Http\Environment;
use Slim\Http\Headers;
use Slim\Http\Request;
use Slim\Http\RequestBody;
use Slim\Http\Response;
use Slim\Http\UploadedFile;
use Slim\Http\Uri;
use Wolfe\Loader\Kernel;
class AbstractFunctionalTest extends PHPUnit_Framework_TestCase
{
/** @var App $app */
protected $app;
/** @var Request $request */
protected $request;
/** @var Response $response */
protected $response;
public function setUp()
{
$app = new App();
$kernel = new Kernel($app, $app->getContainer());
$kernel->registerServices();
$kernel->registerRoutes();
$this->app = $app;
}
public function setupRequest($url, $method, $request, $files)
{
$env = Environment::mock([
'REQUEST_URI' => $url,
'REQUEST_METHOD' => $method,
]);
$uri = Uri::createFromEnvironment($env);
$headers = Headers::createFromEnvironment($env);
$cookies = [];
$serverParams = $env->all();
$body = new RequestBody();
$this->request = new Request($method, $uri, $headers, $cookies, $serverParams, $body, $files);
$this->response = new Response();
/*if (!is_null($files)) {
$this->request->withUploadedFiles($files);
}
if (!is_null($request)) {
$this->request->withQueryParams($request);
}*/
$app = $this->app;
return $app($this->request, $this->response);
}
public function get($url)
{
return $this->setupRequest($url, 'GET', null, null);
}
public function post($url, $request, $files)
{
return $this->setupRequest($url, 'POST', $request, $files);
}
}
<?php
namespace Wolfe\Tests\Handler;
use Psr\Http\Message\ResponseInterface;
use Slim\Http\UploadedFile;
use Wolfe\Tests\AbstractFunctionalTest;
class HomeHandlerTest extends AbstractFunctionalTest
{
public function testGetIndex()
{
/** @var ResponseInterface $response */
$response = $this->get('/');
$this->assertEquals(200, $response->getStatusCode());
}
/**
* @dataProvider testFileUploads
* @param $actual
* @param $expected
*/
public function testPostIndex($expected, $actual)
{
$files = ['csvFileToProcess' => $expected];
/** @var ResponseInterface $response */
$response = $this->post('/', null, $files);
$this->assertEquals(200, $response->getStatusCode());
}
public function testFileUploads()
{
return array(
array(
new UploadedFile(
__DIR__ . DIRECTORY_SEPARATOR . '../Resources/GenericExport.csv',
'GenericExport.csv',
'text/csv',
4256,
UPLOAD_ERR_OK,
true
),
[TRUE, FALSE]
)
);
}
}
//Code that does the work
//index.php
$this->app->post('/', function(ServerRequestInterface $request, ResponseInterface $response) {
$handler = new HomeHandler($request, $response);
return $handler->csvPostHandler();
});
<?php
namespace Wolfe\Converter\Handler;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Wolfe\Converter\Library\CSVFileChecker;
use Wolfe\Converter\Library\CSVHandler;
use DateTime;
class HomeHandler
{
/** @var ServerRequestInterface $_request */
private $_request;
/** @var ResponseInterface $_response */
private $_response;
/**
* @param ServerRequestInterface $request
* @param ResponseInterface $response
*/
public function __construct(ServerRequestInterface $request, ResponseInterface $response)
{
$this->_request = $request;
$this->_response = $response;
}
public function csvPostHandler()
{
$csvFileChecker = new CSVFileChecker($this->_request);
if ($csvFileChecker->isValid()) {
$file = $csvFileChecker->getFile();
$csvHandler = new CSVHandler($file);
$writer = $csvHandler->processCSV();
$date = new DateTime('now');
$csvFileName = 'CSVOutput' . $date->format('Y-m-d-H-i') . '.csv';
return $writer->output($csvFileName);
}
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment