aboutsummaryrefslogtreecommitdiffhomepage
path: root/main/app/tests/TestCase.php
diff options
context:
space:
mode:
Diffstat (limited to 'main/app/tests/TestCase.php')
-rwxr-xr-xmain/app/tests/TestCase.php236
1 files changed, 236 insertions, 0 deletions
diff --git a/main/app/tests/TestCase.php b/main/app/tests/TestCase.php
new file mode 100755
index 0000000..1115abe
--- /dev/null
+++ b/main/app/tests/TestCase.php
@@ -0,0 +1,236 @@
+<?php
+/**
+ * UserFrosting (http://www.userfrosting.com)
+ *
+ * @link https://github.com/userfrosting/UserFrosting
+ * @license https://github.com/userfrosting/UserFrosting/blob/master/licenses/UserFrosting.md (MIT License)
+ */
+namespace UserFrosting\Tests;
+
+use Slim\App;
+use PHPUnit\Framework\TestCase as BaseTestCase;
+use UserFrosting\System\UserFrosting;
+
+/**
+ * Class to handle Test
+ *
+ * @author Louis Charette
+ */
+class TestCase extends BaseTestCase
+{
+ /**
+ * The Slim application instance.
+ *
+ * @var \Slim\App
+ */
+ protected $app;
+
+ /**
+ * The global container object, which holds all your services.
+ *
+ * @var \Interop\Container\ContainerInterface
+ */
+ protected $ci;
+
+ /**
+ * The callbacks that should be run after the application is created.
+ *
+ * @var array
+ */
+ protected $afterApplicationCreatedCallbacks = [];
+
+ /**
+ * The callbacks that should be run before the application is destroyed.
+ *
+ * @var array
+ */
+ protected $beforeApplicationDestroyedCallbacks = [];
+
+ /**
+ * Indicates if we have made it through the base setUp function.
+ *
+ * @var bool
+ */
+ protected $setUpHasRun = false;
+
+ /**
+ * Setup the test environment.
+ *
+ * @return void
+ */
+ protected function setUp()
+ {
+ if (!$this->app) {
+ $this->refreshApplication();
+ }
+
+ $this->setUpTraits();
+
+ foreach ($this->afterApplicationCreatedCallbacks as $callback) {
+ call_user_func($callback);
+ }
+
+ $this->setUpHasRun = true;
+ }
+
+ /**
+ * Boot the testing helper traits.
+ *
+ * @return void
+ */
+ protected function setUpTraits()
+ {
+ $uses = array_flip(class_uses_recursive(static::class));
+
+ /*if (isset($uses[DatabaseMigrations::class])) {
+ $this->runDatabaseMigrations();
+ }*/
+
+ if (isset($uses[DatabaseTransactions::class])) {
+ $this->beginDatabaseTransaction();
+ }
+ }
+
+ /**
+ * Refresh the application instance.
+ *
+ * @return void
+ */
+ protected function refreshApplication()
+ {
+ // Force setting UF_MODE. This is needed at the moment because Bakery
+ // uses passthru to invoke PHPUnit. This means that the value of UF_MODE
+ // has already been set when Bakery was set up, and PHPUnit < 6.3 has
+ // no way to override environment vars that have already been set.
+ putenv('UF_MODE=testing');
+
+ // Setup the sprinkles
+ $uf = new UserFrosting();
+
+ // Set argument as false, we are using the CLI
+ $uf->setupSprinkles(false);
+
+ // Get the container
+ $this->ci = $uf->getContainer();
+
+ // Next, we'll instantiate the application. Note that the application is required for the SprinkleManager to set up routes.
+ $this->app = new App($this->ci);
+ }
+
+ /**
+ * Clean up the testing environment before the next test.
+ *
+ * @return void
+ */
+ protected function tearDown()
+ {
+ if ($this->app) {
+ foreach ($this->beforeApplicationDestroyedCallbacks as $callback) {
+ call_user_func($callback);
+ }
+
+ $this->app = null;
+ $this->ci = null;
+ }
+
+ $this->setUpHasRun = false;
+
+ $this->afterApplicationCreatedCallbacks = [];
+ $this->beforeApplicationDestroyedCallbacks = [];
+ }
+
+ /**
+ * Register a callback to be run after the application is created.
+ *
+ * @param callable $callback
+ * @return void
+ */
+ public function afterApplicationCreated(callable $callback)
+ {
+ $this->afterApplicationCreatedCallbacks[] = $callback;
+
+ if ($this->setUpHasRun) {
+ call_user_func($callback);
+ }
+ }
+
+ /**
+ * Asserts that collections are equivalent.
+ *
+ * @param array $expected
+ * @param array $actual
+ * @param string $message
+ * @throws PHPUnit_Framework_AssertionFailedError
+ */
+ public static function assertCollectionsSame($expected, $actual, $key = 'id', $message = '')
+ {
+ // Check that they have the same number of items
+ static::assertEquals(count($expected), count($actual));
+
+ // Sort by primary key
+ $expected = collect($expected)->sortBy($key);
+ $actual = collect($actual)->sortBy($key);
+
+ // Check that the keys match
+ $expectedKeys = $expected->keys()->all();
+ $actualKeys = $actual->keys()->all();
+ static::assertEquals(sort($expectedKeys), sort($actualKeys));
+
+ // Check that the array representations of each collection item match
+ $expected = $expected->values();
+ $actual = $actual->values();
+ for ($i = 0; $i < count($expected); $i++) {
+ static::assertEquals(
+ static::castToComparable($expected[$i]),
+ static::castToComparable($actual[$i])
+ );
+ }
+ }
+
+ /**
+ * Register a callback to be run before the application is destroyed.
+ *
+ * @param callable $callback
+ * @return void
+ */
+ protected function beforeApplicationDestroyed(callable $callback)
+ {
+ $this->beforeApplicationDestroyedCallbacks[] = $callback;
+ }
+
+ /**
+ * Helpers
+ */
+
+ /**
+ * Cast an item to an array if it has a toArray() method.
+ *
+ * @param $item Collection|mixed[]|mixed
+ * @return mixed|mixed[]
+ */
+ protected static function castToComparable($item)
+ {
+ return (is_object($item) && method_exists($item, 'toArray')) ? $item->toArray() : $item;
+ }
+
+ /**
+ * Remove all relations on a collection of models.
+ */
+ protected static function ignoreRelations($models)
+ {
+ foreach ($models as $model) {
+ $model->setRelations([]);
+ }
+ }
+
+ protected function cloneObjectArray($original)
+ {
+ $cloned = [];
+
+ foreach ($original as $k => $v) {
+ $cloned[$k] = clone $v;
+ }
+
+ return $cloned;
+ }
+} \ No newline at end of file