Path: blob/1.0-develop/tests/Assertions/AssertsActivityLogged.php
7458 views
<?php12namespace Pterodactyl\Tests\Assertions;34use PHPUnit\Framework\Assert;5use Illuminate\Support\Facades\Event;6use Pterodactyl\Events\ActivityLogged;7use Illuminate\Database\Eloquent\Model;8use Pterodactyl\Models\ActivityLogSubject;910trait AssertsActivityLogged11{12/**13* @param Model|array $subjects14*/15public function assertActivityFor(string $event, ?Model $actor, ...$subjects): void16{17$this->assertActivityLogged($event);18$this->assertActivityActor($event, $actor);19$this->assertActivitySubjects($event, ...$subjects);20}2122/**23* Asserts that the given activity log event was stored in the database.24*/25public function assertActivityLogged(string $event): void26{27Event::assertDispatched(ActivityLogged::class, fn ($e) => $e->is($event));28}2930/**31* Asserts that a given activity log event was stored with the subjects being32* any of the values provided.33*/34public function assertActivitySubjects(string $event, Model|array $subjects): void35{36if (is_array($subjects)) {37\Webmozart\Assert\Assert::lessThanEq(count(func_get_args()), 2, 'Invalid call to ' . __METHOD__ . ': cannot provide additional arguments if providing an array.');38} else {39$subjects = array_slice(func_get_args(), 1);40}4142Event::assertDispatched(ActivityLogged::class, function (ActivityLogged $e) use ($event, $subjects) {43Assert::assertEquals($event, $e->model->event);44Assert::assertNotEmpty($e->model->subjects);4546foreach ($subjects as $subject) {47$match = $e->model->subjects->first(function (ActivityLogSubject $model) use ($subject) {48return $model->subject_type === $subject->getMorphClass()49&& $model->subject_id = $subject->getKey();50});5152Assert::assertNotNull(53$match,54sprintf('Failed asserting that event "%s" includes a %s[%d] subject', $event, get_class($subject), $subject->getKey())55);56}5758return true;59});60}6162/**63* Asserts that the provided event was logged into the activity logs with the provided64* actor model associated with it.65*/66public function assertActivityActor(string $event, ?Model $actor = null): void67{68Event::assertDispatched(ActivityLogged::class, function (ActivityLogged $e) use ($event, $actor) {69Assert::assertEquals($event, $e->model->event);7071if (is_null($actor)) {72Assert::assertNull($e->actor());73} else {74Assert::assertNotNull($e->actor());75Assert::assertTrue($e->actor()->is($actor));76}7778return true;79});80}81}828384