Advertisement
Guest User

Untitled

a guest
Nov 18th, 2021
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.74 KB | None | 0 0
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace Atk4\Login\Tests;
  6.  
  7. use Atk4\Data\Model;
  8. use Atk4\Data\Schema\TestCase as BaseTestCase;
  9. use Atk4\Login\Model\AccessRule;
  10. use Atk4\Login\Model\Role;
  11. use Atk4\Login\Model\User;
  12.  
  13. abstract class GenericTestCase extends BaseTestCase
  14. {
  15. protected function setUp(): void
  16. {
  17. parent::setUp();
  18. }
  19.  
  20. protected function setupDefaultDb(): void
  21. {
  22. $this->setDb([
  23. self::getTableByStandardModelClass(User::class) => [
  24. 1 => ['id' => 1, 'name' => 'Standard User', 'email' => 'user', 'password' => '$2y$10$BwEhcP8f15yOexf077VTHOnySn/mit49ZhpfeBkORQhrsmHr4U6Qy', 'role_id' => 1], // user/user
  25. 2 => ['id' => 2, 'name' => 'Administrator', 'email' => 'admin', 'password' => '$2y$10$p34ciRcg9GZyxukkLIaEnenGBao79fTFa4tFSrl7FvqrxnmEGlD4O', 'role_id' => 2], // admin/admin
  26. ],
  27. self::getTableByStandardModelClass(Role::class) => [
  28. 1 => ['id' => 1, 'name' => 'User Role'],
  29. 2 => ['id' => 2, 'name' => 'Admin Role'],
  30. ],
  31. self::getTableByStandardModelClass(AccessRule::class) => [
  32. 1 => ['id' => 1, 'role_id' => 1, 'model' => User::class, 'all_visible' => 1, 'visible_fields' => null, 'all_editable' => 0, 'editable_fields' => null, 'all_actions' => 1, 'actions' => null, 'conditions' => null],
  33. 2 => ['id' => 2, 'role_id' => 2, 'model' => User::class, 'all_visible' => 1, 'visible_fields' => null, 'all_editable' => 1, 'editable_fields' => null, 'all_actions' => 1, 'actions' => null, 'conditions' => null],
  34. 3 => ['id' => 3, 'role_id' => 2, 'model' => Role::class, 'all_visible' => 1, 'visible_fields' => null, 'all_editable' => 1, 'editable_fields' => null, 'all_actions' => 1, 'actions' => null, 'conditions' => null],
  35. ],
  36. ]);
  37. }
  38.  
  39. private static function getTableByStandardModelClass(string $modelClass): string
  40. {
  41. return [
  42. User::class => 'unit_user',
  43. Role::class => 'unit_role',
  44. AccessRule::class => 'unit_access_rule',
  45. ][$modelClass];
  46. }
  47.  
  48. public static function replaceTableAndModelsInRefs(Model $model): void
  49. {
  50. $model->table = self::getTableByStandardModelClass(get_parent_class($model)); // @phpstan-ignore-line https://github.com/phpstan/phpstan/issues/4302
  51. foreach ($model->getRefs() as $k => $r) {
  52. if ($r->model instanceof \Closure) {
  53. if ($model instanceof User && $k === 'AccessRules') { // safe Closure, reference is build using ->ref()
  54. continue;
  55. }
  56. }
  57.  
  58. $r->model[0] = self::getClassByStandardModelClass($r->model[0]);
  59. }
  60. }
  61.  
  62. private static function getClassByStandardModelClass(string $modelClass): string
  63. {
  64. return get_class([
  65. User::class => function () {
  66. return new class() extends User {
  67. public $table = '';
  68.  
  69. protected function init(): void
  70. {
  71. parent::init();
  72.  
  73. GenericTestCase::replaceTableAndModelsInRefs($this);
  74. }
  75. };
  76. },
  77. Role::class => function () {
  78. return new class() extends Role {
  79. public $table = '';
  80.  
  81. protected function init(): void
  82. {
  83. parent::init();
  84.  
  85. GenericTestCase::replaceTableAndModelsInRefs($this);
  86. }
  87. };
  88. },
  89. AccessRule::class => function () {
  90. return new class() extends AccessRule {
  91. public $table = '';
  92.  
  93. protected function init(): void
  94. {
  95. parent::init();
  96.  
  97. GenericTestCase::replaceTableAndModelsInRefs($this);
  98. }
  99. };
  100. },
  101. ][$modelClass]());
  102. }
  103.  
  104. private function createModelByStandardModelClass(string $modelClass): Model
  105. {
  106. $class = self::getClassByStandardModelClass($modelClass);
  107.  
  108. return new $class($this->db);
  109. }
  110.  
  111. protected function createUserModel(): User
  112. {
  113. return $this->createModelByStandardModelClass(User::class); // @phpstan-ignore-line
  114. }
  115.  
  116. protected function createRoleModel(): Role
  117. {
  118. return $this->createModelByStandardModelClass(Role::class); // @phpstan-ignore-line
  119. }
  120.  
  121. protected function createAccessRuleModel(): AccessRule
  122. {
  123. return $this->createModelByStandardModelClass(AccessRule::class); // @phpstan-ignore-line
  124. }
  125. }
  126.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement