Commit: c0748e2d1b882b60704d99f7a654b21506bd8c4c
Author: gwoo | Date: 2010-01-24 09:50:10 -0800
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();
}
}