notificationtest in progress
This commit is contained in:
parent
371b75193a
commit
ccb3598da0
@ -30,7 +30,7 @@ class NewActivityNotification extends Notification
|
||||
*/
|
||||
public function via(object $notifiable): array
|
||||
{
|
||||
return [WebPushChannel::class];
|
||||
return ['database', WebPushChannel::class];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -46,15 +46,6 @@ class NewActivityNotification extends Notification
|
||||
->action('View', 'view')
|
||||
->data(['url' => $this->activity['url']]);
|
||||
|
||||
switch (get_class($this->activity)) {
|
||||
case Message::class:
|
||||
/** @var Chat $chat */
|
||||
$chat = $this->activity->chat;
|
||||
|
||||
$result->data(['url' => $chat->subjectUrl]);
|
||||
break;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
@ -66,7 +57,8 @@ class NewActivityNotification extends Notification
|
||||
public function toArray(object $notifiable): array
|
||||
{
|
||||
return [
|
||||
//
|
||||
'content' => $this->activity['content'],
|
||||
'url' => $this->activity['url'],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('notifications', function (Blueprint $table) {
|
||||
$table->uuid('id')->primary();
|
||||
$table->string('type');
|
||||
$table->morphs('notifiable');
|
||||
$table->text('data');
|
||||
$table->timestamp('read_at')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('notifications');
|
||||
}
|
||||
};
|
||||
15
phpunit.dusk.xml
Normal file
15
phpunit.dusk.xml
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit backupGlobals="false"
|
||||
beStrictAboutTestsThatDoNotTestAnything="false"
|
||||
colors="true"
|
||||
processIsolation="false"
|
||||
stopOnError="false"
|
||||
stopOnFailure="false"
|
||||
cacheDirectory=".phpunit.cache"
|
||||
backupStaticProperties="false">
|
||||
<testsuites>
|
||||
<testsuite name="Browser Test Suite">
|
||||
<directory suffix="Test.php">./tests/Browser</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
</phpunit>
|
||||
@ -23,7 +23,7 @@
|
||||
<env name="BCRYPT_ROUNDS" value="4"/>
|
||||
<env name="BROADCAST_CONNECTION" value="null"/>
|
||||
<env name="CACHE_STORE" value="array"/>
|
||||
<env name="DB_CONNECTION" value="sqlite"/>
|
||||
<env name="DB_CONNECTION" value="sqlite" />
|
||||
<env name="DB_DATABASE" value=":memory:"/>
|
||||
<env name="DB_URL" value=""/>
|
||||
<env name="MAIL_MAILER" value="array"/>
|
||||
|
||||
@ -104,6 +104,7 @@ function submit() {
|
||||
id="amount"
|
||||
type="number"
|
||||
class="c-add-mutation-form__input"
|
||||
data-test="amount-input"
|
||||
/>
|
||||
<div
|
||||
v-if="form.errors.amount"
|
||||
@ -122,6 +123,7 @@ function submit() {
|
||||
id="description"
|
||||
rows="4"
|
||||
class="c-add-mutation-form__textarea"
|
||||
data-test="description-input"
|
||||
></textarea>
|
||||
<div
|
||||
v-if="form.errors.description"
|
||||
@ -171,6 +173,7 @@ function submit() {
|
||||
type="submit"
|
||||
:disabled="form.processing"
|
||||
class="c-add-mutation-form__submit-btn"
|
||||
data-test="add-mutation-button"
|
||||
>
|
||||
Add Mutation
|
||||
</button>
|
||||
|
||||
78
tests/Browser/NotificationTest.php
Normal file
78
tests/Browser/NotificationTest.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Browser;
|
||||
|
||||
use App\Models\Dynamic;
|
||||
use App\Models\Ledger;
|
||||
use App\Models\Mutation;
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
||||
use Laravel\Dusk\Browser;
|
||||
use Tests\DuskTestCase;
|
||||
|
||||
class NotificationTest extends DuskTestCase
|
||||
{
|
||||
use DatabaseMigrations;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
$this->artisan('migrate:fresh', ['--seed' => true]);
|
||||
}
|
||||
|
||||
/**
|
||||
* A basic browser test example.
|
||||
*/
|
||||
public function test_it_shows_notifications_on_mutation_activity(): void
|
||||
{
|
||||
$owner = User::factory()->create();
|
||||
$participant = User::factory()->create();
|
||||
$dynamic = Dynamic::factory()->create();
|
||||
$dynamic->chat()->create();
|
||||
$dynamic->participants()->attach($owner->id, ['role' => 'owner']);
|
||||
$dynamic->participants()->attach($participant->id, ['role' => 'participant']);
|
||||
$ledger = Ledger::factory()->create(['dynamic_id' => $dynamic->id]);
|
||||
|
||||
$this->browse(function (Browser $ownerBrowser, Browser $participantBrowser) use ($owner, $participant, $dynamic, $ledger) {
|
||||
$ownerBrowser->loginAs($owner)
|
||||
->visit(route('dynamics.ledgers.show', [$dynamic, $ledger]))
|
||||
->waitForText($ledger->name)
|
||||
->assertSee($ledger->name)
|
||||
->script([
|
||||
"window.notifications = [];",
|
||||
"window.Notification = function(title, options) { window.notifications.push({title, options}); };",
|
||||
]);
|
||||
|
||||
$participantBrowser->loginAs($participant)
|
||||
->visit(route('dynamics.ledgers.show', [$dynamic, $ledger]))
|
||||
->waitForText('Add Mutation')
|
||||
->type('[data-test="description-input"]', 'A new task suggestion')
|
||||
->type('[data-test="amount-input"]', 10)
|
||||
->press('[data-test="add-mutation-button"]')
|
||||
->waitForText('A new task suggestion');
|
||||
|
||||
$ownerBrowser->pause(1000);
|
||||
$lastNotification = $ownerBrowser->script("return window.notifications.pop();")[0] ?? null;
|
||||
$this->assertNotNull($lastNotification, "Owner did not receive the 'new suggestion' notification.");
|
||||
$this->assertEquals('New Activity', $lastNotification['title']);
|
||||
$this->assertStringContainsString('suggested a new entry', $lastNotification['options']['body']);
|
||||
|
||||
$mutation = Mutation::where('description', 'A new task suggestion')->first();
|
||||
$ownerBrowser->press("#mutation-{$mutation->id}-approve")
|
||||
->waitForText('APPROVED');
|
||||
|
||||
$participantBrowser->script([
|
||||
"window.notifications = [];",
|
||||
"window.Notification = function(title, options) { window.notifications.push({title, options}); };",
|
||||
]);
|
||||
|
||||
$ownerBrowser->pause(1000);
|
||||
|
||||
$participantBrowser->pause(1000);
|
||||
$lastNotification = $participantBrowser->script("return window.notifications.pop();")[0] ?? null;
|
||||
$this->assertNotNull($lastNotification, "Participant did not receive the 'approved' notification.");
|
||||
$this->assertEquals('New Activity', $lastNotification['title']);
|
||||
$this->assertStringContainsString('APPROVED the suggestion', $lastNotification['options']['body']);
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -31,7 +31,7 @@ abstract class DuskTestCase extends BaseTestCase
|
||||
$options = (new ChromeOptions)->addArguments((new Collection([
|
||||
$this->shouldStartMaximized() ? '--start-maximized' : '--window-size=1920,1080',
|
||||
'--disable-gpu',
|
||||
'--headless=new',
|
||||
// '--headless=new',
|
||||
'--no-sandbox',
|
||||
'--disable-dev-shm-usage',
|
||||
]))->unless(static::runningInSail(), function (Collection $arguments) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user