90 lines
2.0 KiB
PHP
90 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace tauthz\tests;
|
|
|
|
use Closure;
|
|
use think\App;
|
|
use PHPUnit\Framework\TestCase as BaseTestCase;
|
|
use tauthz\TauthzService;
|
|
use tauthz\model\Rule;
|
|
|
|
class TestCase extends BaseTestCase
|
|
{
|
|
|
|
protected $app;
|
|
|
|
protected $migrate = true;
|
|
|
|
public function createApplication()
|
|
{
|
|
|
|
// 应用初始化
|
|
$app = new App(__DIR__ . '/../vendor/topthink/think/');
|
|
|
|
$app->register(TauthzService::class);
|
|
|
|
$app->initialize();
|
|
|
|
$app->console->call("tauthz:publish");
|
|
|
|
return $app;
|
|
}
|
|
|
|
/**
|
|
* 初始数据
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function initTable()
|
|
{
|
|
Rule::where("1 = 1")->delete(true);
|
|
Rule::create(['ptype' => 'p', 'v0' => 'alice', 'v1' => 'data1', 'v2' => 'read']);
|
|
Rule::create(['ptype' => 'p', 'v0' => 'bob', 'v1' => 'data2', 'v2' => 'write']);
|
|
Rule::create(['ptype' => 'p', 'v0' => 'data2_admin', 'v1' => 'data2', 'v2' => 'read']);
|
|
Rule::create(['ptype' => 'p', 'v0' => 'data2_admin', 'v1' => 'data2', 'v2' => 'write']);
|
|
Rule::create(['ptype' => 'g', 'v0' => 'alice', 'v1' => 'data2_admin']);
|
|
}
|
|
|
|
/**
|
|
* Refresh the application instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function refreshApplication()
|
|
{
|
|
$this->app = $this->createApplication();
|
|
}
|
|
|
|
protected function testing(Closure $closure)
|
|
{
|
|
$this->_setUp();
|
|
|
|
$closure();
|
|
|
|
$this->_tearDown();
|
|
}
|
|
|
|
/**
|
|
* This method is called before each test.
|
|
*/
|
|
protected function _setUp()
|
|
{
|
|
if (!$this->app) {
|
|
$this->refreshApplication();
|
|
}
|
|
|
|
$this->app->console->call("migrate:run");
|
|
|
|
$this->initTable();
|
|
}
|
|
|
|
/**
|
|
* This method is called after each test.
|
|
*/
|
|
protected function _tearDown()
|
|
{
|
|
if ($this->migrate) {
|
|
$this->app->console->call("migrate:rollback");
|
|
}
|
|
}
|
|
} |