1
0
mirror of https://github.com/flarum/core.git synced 2025-08-04 23:47:32 +02:00

feat: Create loadWhere relations extender (#3116)

This commit is contained in:
Sami Mazouz
2021-11-01 10:45:02 +01:00
committed by GitHub
parent 21c7d90ee7
commit 62b92ba02e
8 changed files with 219 additions and 13 deletions

View File

@@ -803,6 +803,126 @@ class ApiControllerTest extends TestCase
$this->assertTrue($users->pluck('firstLevelRelation')->filter->relationLoaded('secondLevelRelation')->isEmpty());
}
/**
* @test
*/
public function custom_callable_first_level_relation_is_loaded_if_added()
{
$users = null;
$this->extend(
(new Extend\Model(User::class))
->hasOne('firstLevelRelation', Post::class, 'user_id'),
(new Extend\ApiController(ListUsersController::class))
->loadWhere('firstLevelRelation', function ($query, $request) {})
->prepareDataForSerialization(function ($controller, $data) use (&$users) {
$users = $data;
return [];
})
);
$this->send(
$this->request('GET', '/api/users', [
'authenticatedAs' => 1,
])
);
$this->assertFalse($users->filter->relationLoaded('firstLevelRelation')->isEmpty());
}
/**
* @test
*/
public function custom_callable_second_level_relation_is_loaded_if_added()
{
$users = null;
$this->extend(
(new Extend\Model(User::class))
->hasOne('firstLevelRelation', Post::class, 'user_id'),
(new Extend\Model(Post::class))
->belongsTo('secondLevelRelation', Discussion::class),
(new Extend\ApiController(ListUsersController::class))
->load('firstLevelRelation')
->loadWhere('firstLevelRelation.secondLevelRelation', function ($query, $request) {})
->prepareDataForSerialization(function ($controller, $data) use (&$users) {
$users = $data;
return [];
})
);
$this->send(
$this->request('GET', '/api/users', [
'authenticatedAs' => 1,
])
);
$this->assertFalse($users->pluck('firstLevelRelation')->filter->relationLoaded('secondLevelRelation')->isEmpty());
}
/**
* @test
*/
public function custom_callable_second_level_relation_is_not_loaded_when_first_level_is_not()
{
$users = null;
$this->extend(
(new Extend\Model(User::class))
->hasOne('firstLevelRelation', Post::class, 'user_id'),
(new Extend\Model(Post::class))
->belongsTo('secondLevelRelation', Discussion::class),
(new Extend\ApiController(ListUsersController::class))
->loadWhere('firstLevelRelation.secondLevelRelation', function ($query, $request) {})
->prepareDataForSerialization(function ($controller, $data) use (&$users) {
$users = $data;
return [];
})
);
$this->send(
$this->request('GET', '/api/users', [
'authenticatedAs' => 1,
])
);
$this->assertTrue($users->pluck('firstLevelRelation')->filter->relationLoaded('secondLevelRelation')->isEmpty());
}
/**
* @test
*/
public function custom_callable_second_level_relation_is_loaded_when_first_level_is()
{
$users = null;
$this->extend(
(new Extend\Model(User::class))
->hasOne('firstLevelRelation', Post::class, 'user_id'),
(new Extend\Model(Post::class))
->belongsTo('secondLevelRelation', Discussion::class),
(new Extend\ApiController(ListUsersController::class))
->loadWhere('firstLevelRelation', function ($query, $request) {})
->loadWhere('firstLevelRelation.secondLevelRelation', function ($query, $request) {})
->prepareDataForSerialization(function ($controller, $data) use (&$users) {
$users = $data;
return [];
})
);
$this->send(
$this->request('GET', '/api/users', [
'authenticatedAs' => 1,
])
);
$this->assertTrue($users->pluck('firstLevelRelation')->filter->relationLoaded('secondLevelRelation')->isNotEmpty());
}
}
class CustomDiscussionSerializer extends DiscussionSerializer