Commit: c0748e2d1b882b60704d99f7a654b21506bd8c4c

Author: gwoo | Date: 2010-01-24 09:50:10 -0800
adding responses and plugin creation to ServerController
diff --git a/controllers/ServerController.php b/controllers/ServerController.php index 56ec778..62cf5e5 100644 --- a/controllers/ServerController.php +++ b/controllers/ServerController.php @@ -11,6 +11,7 @@ namespace li3_lab\controllers; use \Phar; use li3_lab\models\Repo; use li3_lab\models\Formula; +use li3_lab\models\Plugin; /** * Server Controller @@ -24,6 +25,7 @@ class ServerController extends \lithium\action\Controller { * @return void */ public function receive() { + $errors = false; if (!empty($this->request->data['phar'])) { $file = Repo::create($this->request->data['phar']); @@ -39,13 +41,28 @@ class ServerController extends \lithium\action\Controller { 'tmp_name' => "{$saved}/config/{$name}.json" )); if ($formula->save()) { - return json_decode($formula->contents(), true); + $folder = Repo::create(array('name' => $name)); + $folder->delete(); + $plugin = Plugin::create(json_decode($formula->contents(), true)); + if ($plugin->save()) { + return $this->render( + array('json' => $plugin->data(), 'status' => 201) + ); + } + $errors = $plugin->errors(); + } + if (!$errors) { + $errors = $formula->errors(); } - return false; } } + if (!$errors) { + $errors = $file->errors(); + } + $file->delete(); + return $this->render(array('json' => $errors, 'status' => 406)); } - return false; + return 'missing phar.gz'; } } diff --git a/tests/cases/controllers/ServerControllerTest.php b/tests/cases/controllers/ServerControllerTest.php index 1c95004..f252591 100644 --- a/tests/cases/controllers/ServerControllerTest.php +++ b/tests/cases/controllers/ServerControllerTest.php @@ -2,10 +2,13 @@ namespace li3_lab\tests\cases\controllers; -use \li3_lab\models\Repo; use \lithium\data\Connections; use \li3_lab\controllers\ServerController; use \lithium\action\Request; +use \lithium\action\Response; +use \li3_lab\models\Repo; +use \li3_lab\models\Formula; +use \li3_lab\models\Plugin; class ServerControllerTest extends \lithium\test\Unit { @@ -13,32 +16,49 @@ class ServerControllerTest extends \lithium\test\Unit { public function setUp() { Connections::add('test_resources', 'Media', array('path' => '/resources/tmp/tests')); - $this->request = new Request(); + $this->_fixturesPath = dirname(dirname(__DIR__)); $this->_cleanUp(); + + $this->request = new Request(); + $this->server = new ServerController(array('request' => $this->request)); + $this->server->response = new Response(); + + Repo::meta('connection', 'test_resources'); + Repo::invokeMethod('_connection')->describe(Repo::meta('source')); + Formula::meta('connection', 'test_resources'); + Formula::invokeMethod('_connection')->describe(Formula::meta('source')); + Plugin::meta('source', 'test_li3_lab'); + Plugin::invokeMethod('_connection')->describe(Plugin::meta('source')); } - public function tearDown() {} + public function tearDown() { + Repo::meta('connection', 'resources'); + Repo::invokeMethod('_connection')->describe(Repo::meta('source')); + Formula::meta('connection', 'resources'); + Formula::invokeMethod('_connection')->describe(Formula::meta('source')); + Plugin::meta('source', 'li3_lab'); + Plugin::invokeMethod('_connection')->describe(Plugin::meta('source')); + } public function testReceive() { $this->request->data['phar'] = array( 'name' => 'li3_example.phar', 'type' => 'application/phar', 'tmp_name' => $this->_fixturesPath . '/fixtures/plugins/li3_example.phar', ); - $server = new ServerController(array('request' => $this->request)); - Repo::meta('connection', 'test_resources'); - Repo::invokeMethod('_connection')->describe(Repo::meta('source')); - $result = $server->receive(); - $expected = 'li3_example'; - $this->assertEqual($expected, $result['name']); + $this->server->receive(); + $result = json_decode($this->server->response->body()); + $expected = 'li3_example'; + $this->assertEqual($expected, $result->name); $file = LITHIUM_APP_PATH . '/resources/tmp/tests/repos/li3_example.phar'; $result = file_exists($file); $this->assertTrue($result); $this->_cleanUp(); + Plugin::create()->delete(); } }