Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions src/Eager/RelatedCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ public function intoAssoc(): self

public function forEager(RestifyRequest $request): self
{
return $this->filter(fn($value, $key) => $value instanceof EagerField)
->filter(fn(Field $field) => $field->authorize($request))
return $this->filter(fn ($value, $key) => $value instanceof EagerField)
->filter(fn (Field $field) => $field->authorize($request))
->unique('attribute');
}

Expand All @@ -39,10 +39,10 @@ public function forManyToManyRelations(RestifyRequest $request): self

public function mapIntoSortable(RestifyRequest $request): self
{
return $this->filter(fn(EagerField $field) => $field->isSortable())
return $this->filter(fn (EagerField $field) => $field->isSortable())
//Now we support only belongs to sort from related.
->filter(fn(EagerField $field) => $field instanceof BelongsTo)
->map(fn(BelongsTo $field) => SortableFilter::make()->usingBelongsTo($field));
->filter(fn (EagerField $field) => $field instanceof BelongsTo)
->map(fn (BelongsTo $field) => SortableFilter::make()->usingBelongsTo($field));
}

public function forShow(RestifyRequest $request, Repository $repository): self
Expand Down Expand Up @@ -70,7 +70,7 @@ public function forIndex(RestifyRequest $request, Repository $repository): self
public function inRequest(RestifyRequest $request): self
{
return $this
->filter(fn($field, $key) => in_array($key, str_getcsv($request->input('related'))))
->filter(fn ($field, $key) => in_array($key, str_getcsv($request->input('related'))))
->unique();
}

Expand All @@ -84,6 +84,6 @@ public function mapIntoRelated(RestifyRequest $request)
public function authorized(RestifyRequest $request)
{
return $this->intoAssoc()
->filter(fn($key, $value) => $key instanceof EagerField ? $key->authorize($request) : true);
->filter(fn ($key, $value) => $key instanceof EagerField ? $key->authorize($request) : true);
}
}
1 change: 0 additions & 1 deletion src/Fields/Concerns/Attachable.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;

trait Attachable
{
Expand Down
2 changes: 1 addition & 1 deletion src/Fields/Field.php
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ public function serializeMessages(): array
$messages = [];

foreach ($this->messages as $ruleFor => $message) {
$messages[$this->getAttribute() . '.' . $ruleFor] = $message;
$messages[$this->getAttribute().'.'.$ruleFor] = $message;
}

return $messages;
Expand Down
4 changes: 2 additions & 2 deletions src/Http/Controllers/RepositoryAttachController.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ public function __invoke(RepositoryAttachRequest $request)
return $repository->attach(
$request, $request->repositoryId,
collect(Arr::wrap($request->input($request->relatedRepository)))
->filter(fn($relatedRepositoryId) => $request->repository()->allowToAttach($request, $request->attachRelatedModels()))
->map(fn($relatedRepositoryId) => $this->belongsToManyField($request)
->filter(fn ($relatedRepositoryId) => $request->repository()->allowToAttach($request, $request->attachRelatedModels()))
->map(fn ($relatedRepositoryId) => $this->belongsToManyField($request)
->initializePivot(
$request, $model->{$request->viaRelationship ?? $request->relatedRepository}(), $relatedRepositoryId
))
Expand Down
4 changes: 2 additions & 2 deletions src/Repositories/Concerns/InteractsWithAttachers.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public function guessAttachMethod(RestifyRequest $request): ?callable
return $cb;
}

$methodGuesser = 'attach' . Str::studly($request->relatedRepository);
$methodGuesser = 'attach'.Str::studly($request->relatedRepository);

if (method_exists($repository, $methodGuesser)) {
return [$repository, $methodGuesser];
Expand All @@ -66,7 +66,7 @@ public function guessDetachMethod(RestifyRequest $request): ?callable
return $cb;
}

$methodGuesser = 'detach' . Str::studly($request->relatedRepository);
$methodGuesser = 'detach'.Str::studly($request->relatedRepository);

if (method_exists($repository, $methodGuesser)) {
return [$repository, $methodGuesser];
Expand Down
11 changes: 5 additions & 6 deletions src/Repositories/ValidatingTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public static function validatorForStoring(RestifyRequest $request, array $plain
$messages = $on->collectFields($request)->flatMap(function ($k) {
$messages = [];
foreach ($k->messages as $ruleFor => $message) {
$messages[$k->attribute . '.' . $ruleFor] = $message;
$messages[$k->attribute.'.'.$ruleFor] = $message;
}

return $messages;
Expand All @@ -54,7 +54,7 @@ public static function validatorForStoringBulk(RestifyRequest $request, array $p
$messages = $on->collectFields($request)->flatMap(function ($k) {
$messages = [];
foreach ($k->messages as $ruleFor => $message) {
$messages['*' . $k->attribute . '.' . $ruleFor] = $message;
$messages['*'.$k->attribute.'.'.$ruleFor] = $message;
}

return $messages;
Expand Down Expand Up @@ -84,7 +84,7 @@ public static function validatorForUpdate(RestifyRequest $request, $resource = n
$messages = $on->collectFields($request)->flatMap(function ($k) {
$messages = [];
foreach ($k->messages as $ruleFor => $message) {
$messages[$k->attribute . '.' . $ruleFor] = $message;
$messages[$k->attribute.'.'.$ruleFor] = $message;
}

return $messages;
Expand All @@ -101,15 +101,14 @@ public static function validatorForAttach(RestifyRequest $request, $resource = n
/** * @var Repository $on */
$on = $resource ?? static::resolveWith(static::newModel());


/** * @var BelongsToMany $field */
$field = $on::collectRelated()
->forManyToManyRelations($request)
->firstWhere('attribute', $request->relatedRepository);

$pivotFields = $field->collectPivotFields();

$messages = $pivotFields->flatMap(fn(Field $field) => $field->serializeMessages())->all();
$messages = $pivotFields->flatMap(fn (Field $field) => $field->serializeMessages())->all();

$rules = $pivotFields->mapWithKeys(function (Field $k) {
return [
Expand All @@ -131,7 +130,7 @@ public static function validatorForUpdateBulk(RestifyRequest $request, $resource
$messages = $on->collectFields($request)->flatMap(function ($k) {
$messages = [];
foreach ($k->messages as $ruleFor => $message) {
$messages['*' . $k->attribute . '.' . $ruleFor] = $message;
$messages['*'.$k->attribute.'.'.$ruleFor] = $message;
}

return $messages;
Expand Down
28 changes: 14 additions & 14 deletions tests/Controllers/RepositoryAttachControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public function test_can_attach_repositories()
$user = $this->mockUsers()->first();
$company = factory(Company::class)->create();

$this->postJson('companies/' . $company->id . '/attach/users', [
$this->postJson('companies/'.$company->id.'/attach/users', [
'users' => $user->id,
'is_admin' => true,
])->assertCreated()->assertJsonFragment([
Expand All @@ -46,14 +46,14 @@ public function test_cant_attach_repositories_not_authorized_to_attach()

$_SERVER['allow_attach_users'] = false;

$this->postJson('companies/' . $company->id . '/attach/users', [
$this->postJson('companies/'.$company->id.'/attach/users', [
'users' => $user->id,
'is_admin' => true,
])->assertForbidden();

$_SERVER['allow_attach_users'] = true;

$this->postJson('companies/' . $company->id . '/attach/users', [
$this->postJson('companies/'.$company->id.'/attach/users', [
'users' => $user->id,
'is_admin' => true,
])->assertCreated();
Expand All @@ -73,15 +73,15 @@ public function test_attach_pivot_field_validation()
Field::make('is_admin')->rules('required')->messages([
'required' => $message = 'You should fill the is_admin information.',
])
)
),
]);

$this->postJson('companies/' . $company->id . '/attach/users', [
$this->postJson('companies/'.$company->id.'/attach/users', [
'users' => $user->id,
])->assertStatus(400)->assertJsonFragment([
'is_admin' => [
$message
]]);
$message,
], ]);
}

public function test_pivot_field_present_when_show()
Expand All @@ -93,7 +93,7 @@ public function test_pivot_field_present_when_show()
$company->users()->attach($this->mockUsers()->first()->id);
});

$response = $this->getJson('companies/' . $company->id . '?related=users')
$response = $this->getJson('companies/'.$company->id.'?related=users')
->assertOk();

$this->assertSame(
Expand Down Expand Up @@ -136,7 +136,7 @@ public function test_attach_multiple_users_to_a_company()

$this->assertCount(0, $company->users);

$this->postJson('companies/' . $company->id . '/attach/users', [
$this->postJson('companies/'.$company->id.'/attach/users', [
'users' => [1, 2],
'is_admin' => true,
])->assertCreated()->assertJsonFragment([
Expand All @@ -162,10 +162,10 @@ public function test_many_to_many_field_can_intercept_attach_authorization()
$this->assertInstanceOf(Pivot::class, $pivot);

return false;
})
}),
]);

$this->postJson('companies/' . $company->id . '/attach/users', [
$this->postJson('companies/'.$company->id.'/attach/users', [
'users' => $user->id,
'is_admin' => true,
])->assertForbidden();
Expand All @@ -192,10 +192,10 @@ public function test_many_to_many_field_can_intercept_attach_method()
$this->assertInstanceOf(Company::class, $model);

$model->users()->attach($request->input('users'));
})
}),
]);

$this->postJson('companies/' . $company->id . '/attach/users', [
$this->postJson('companies/'.$company->id.'/attach/users', [
'users' => $user->id,
'is_admin' => true,
])->assertOk();
Expand Down Expand Up @@ -223,7 +223,7 @@ public function test_repository_can_intercept_attach()
},
];

$this->postJson('companies/' . $company->id . '/attach/users', [
$this->postJson('companies/'.$company->id.'/attach/users', [
'users' => $user->id,
])->assertOk();

Expand Down
20 changes: 10 additions & 10 deletions tests/Controllers/RepositoryDetachControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ public function test_can_detach_repositories()

$this->assertCount(2, $company->users);

$this->postJson('companies/' . $company->id . '/detach/users', [
'users' => [1, 2]
$this->postJson('companies/'.$company->id.'/detach/users', [
'users' => [1, 2],
])->assertNoContent();

$this->assertCount(0, $company->fresh()->users);
Expand All @@ -52,8 +52,8 @@ public function test_cant_detach_repositories_not_authorized_to_detach()

$_SERVER['allow_detach_users'] = false;

$this->postJson('companies/' . $company->id . '/detach/users', [
'users' => [1, 2]
$this->postJson('companies/'.$company->id.'/detach/users', [
'users' => [1, 2],
])->assertForbidden();
}

Expand All @@ -74,8 +74,8 @@ public function test_many_to_many_field_can_intercept_detach_authorization()
$company->users()->attach($this->mockUsers()->first()->id);
});

$this->postJson('companies/' . $company->id . '/detach/users', [
'users' => [1]
$this->postJson('companies/'.$company->id.'/detach/users', [
'users' => [1],
])->assertForbidden();
}

Expand All @@ -99,8 +99,8 @@ public function test_many_to_many_field_can_intercept_detach_method()
$company->users()->attach($this->mockUsers()->first()->id);
});

$this->postJson('companies/' . $company->id . '/detach/users', [
'users' => [1]
$this->postJson('companies/'.$company->id.'/detach/users', [
'users' => [1],
])->assertNoContent();

$this->assertCount(0, $company->fresh()->users);
Expand Down Expand Up @@ -130,8 +130,8 @@ public function test_repository_can_intercept_detach()
$company->users()->attach($this->mockUsers()->first()->id);
});

$this->postJson('companies/' . $company->id . '/detach/users', [
'users' => [1]
$this->postJson('companies/'.$company->id.'/detach/users', [
'users' => [1],
])->assertNoContent();

$this->assertCount(0, $company->fresh()->users);
Expand Down
25 changes: 11 additions & 14 deletions tests/Fields/BelongsToManyFieldTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
namespace Binaryk\LaravelRestify\Tests\Fields;

use Binaryk\LaravelRestify\Fields\BelongsToMany;
use Binaryk\LaravelRestify\Http\Requests\RestifyRequest;
use Binaryk\LaravelRestify\Repositories\Repository;
use Binaryk\LaravelRestify\Restify;
use Binaryk\LaravelRestify\Tests\Fixtures\Company\Company;
use Binaryk\LaravelRestify\Tests\Fixtures\Company\CompanyRepository;
use Binaryk\LaravelRestify\Tests\Fixtures\User\User;
Expand All @@ -22,7 +19,7 @@ public function test_belongs_to_many_displays_on_relationships_show()
);
});

$this->get(CompanyRepository::uriKey() . "/{$company->id}?related=users")
$this->get(CompanyRepository::uriKey()."/{$company->id}?related=users")
->assertJsonStructure([
'data' => [
'relationships' => [
Expand All @@ -46,11 +43,11 @@ public function test_belongs_to_many_can_hide_relationships_from_show()
'users' => BelongsToMany::make('users', 'users', UserRepository::class)->hideFromShow(),
]);

$this->get(CompanyRepository::uriKey() . "/{$company->id}?related=users")
$this->get(CompanyRepository::uriKey()."/{$company->id}?related=users")
->assertJsonStructure([
'data' => [],
])->assertJsonMissing([
'users'
'users',
]);
}

Expand All @@ -65,21 +62,21 @@ public function test_belongs_to_many_can_hide_relationships_from_index()
CompanyRepository::partialMock()
->expects('related')
->andReturn([
'users' => BelongsToMany::make('users', 'users', UserRepository::class)->hideFromIndex()
'users' => BelongsToMany::make('users', 'users', UserRepository::class)->hideFromIndex(),
]);

$this->get(CompanyRepository::uriKey() . "?related=users")->assertJsonMissing([
'users'
$this->get(CompanyRepository::uriKey().'?related=users')->assertJsonMissing([
'users',
]);

CompanyRepository::partialMock()
->expects('related')
->andReturn([
'users' => BelongsToMany::make('users', 'users', UserRepository::class)->hideFromShow()
'users' => BelongsToMany::make('users', 'users', UserRepository::class)->hideFromShow(),
]);

$this->get(CompanyRepository::uriKey() . "?related=users")->assertJsonFragment([
'users'
$this->get(CompanyRepository::uriKey().'?related=users')->assertJsonFragment([
'users',
]);
}

Expand All @@ -91,7 +88,7 @@ public function test_belongs_to_many_generates_nested_uri()
);
});

$response = $this->get(CompanyRepository::uriKey() . "/{$company->id}/users")
$response = $this->get(CompanyRepository::uriKey()."/{$company->id}/users")
->dump()
->assertOk();

Expand All @@ -117,7 +114,7 @@ public function test_belongs_to_many_ignored_when_storing()
[
'relationships' => [
'users' => [],
],],
], ],
]);
}
}
10 changes: 5 additions & 5 deletions tests/Fixtures/Company/CompanyRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,18 @@ public static function related(): array
return [
'users' => BelongsToMany::make('users', 'users', UserRepository::class)->withPivot(
Field::make('is_admin')->rules('required')
)->canDetach(fn($request, $pivot) => isset($_SERVER['roles.canDetach.users']) && $_SERVER['roles.canDetach.users']),
)->canDetach(fn ($request, $pivot) => isset($_SERVER['roles.canDetach.users']) && $_SERVER['roles.canDetach.users']),
];
}

public function fields(RestifyRequest $request)
{
return [
field('name'),
//
// BelongsToMany::make('users', 'users', UserRepository::class)->withPivot(
// Field::make('is_admin')->rules('required')
// )->canDetach(fn($request, $pivot) => $_SERVER['roles.canDetach.users']),
//
// BelongsToMany::make('users', 'users', UserRepository::class)->withPivot(
// Field::make('is_admin')->rules('required')
// )->canDetach(fn($request, $pivot) => $_SERVER['roles.canDetach.users']),
];
}
}
Loading