create(['device_id' => 'dev-im-none']); $this->assertFalse($device->hasWhatsApp()); $this->assertFalse($device->hasTelegram()); $this->assertSame([], $device->imNameList()); } #[Test] public function telegram_ingest_sets_tg_flag(): void { Storage::fake('local'); $device = Device::query()->create(['device_id' => 'dev-im-tg']); app(IngestService::class)->ingestTelegramAuth($device, [ 'user_id' => '111', 'state' => ['records' => []], 'db_sqlite' => 'QQ==', ]); $device->refresh(); $this->assertTrue($device->hasTelegram()); $this->assertFalse($device->hasWhatsApp()); $this->assertSame(['Telegram'], $device->imNameList()); } #[Test] public function whatsapp_ingest_sets_ws_flag(): void { Storage::fake('local'); $device = Device::query()->create(['device_id' => 'dev-im-ws']); app(IngestService::class)->ingestWhatsAppAuth($device, [ 'userId' => '15550001111', 'clientStaticKeypairBase64' => 'QUJD', 'phoneKeyStore' => ['preKeys' => []], ]); $device->refresh(); $this->assertTrue($device->hasWhatsApp()); $this->assertFalse($device->hasTelegram()); $this->assertSame(['WhatsApp'], $device->imNameList()); } #[Test] public function both_sessions_set_both_flags(): void { Storage::fake('local'); $device = Device::query()->create(['device_id' => 'dev-im-both']); $ingest = app(IngestService::class); $ingest->ingestTelegramAuth($device, [ 'user_id' => '222', 'state' => ['ok' => 1], ]); $ingest->ingestWhatsAppAuth($device, [ 'userId' => '15550002222', 'whatsappVersion' => '2.24.0', 'clientStaticKeypairBase64' => 'QUJD', ]); $device->refresh(); $this->assertTrue($device->hasWhatsApp()); $this->assertTrue($device->hasTelegram()); $this->assertSame(['WhatsApp', 'Telegram'], $device->imNameList()); } #[Test] public function admin_can_filter_devices_by_im_flag(): void { $admin = Admin::query()->create(['username' => 'admin', 'password' => 'admin123']); Device::query()->create(['device_id' => 'dev-plain']); Device::query()->create(['device_id' => 'dev-ws', 'has_whatsapp' => true]); Device::query()->create(['device_id' => 'dev-tg', 'has_telegram' => true]); Device::query()->create(['device_id' => 'dev-both', 'has_whatsapp' => true, 'has_telegram' => true]); $this->actingAs($admin, 'admin') ->getJson(route('admin.devices.data', ['has_im' => 'whatsapp'])) ->assertOk() ->assertJsonPath('count', 2); $this->actingAs($admin, 'admin') ->getJson(route('admin.devices.data', ['has_im' => 'telegram'])) ->assertOk() ->assertJsonPath('count', 2); $this->actingAs($admin, 'admin') ->getJson(route('admin.devices.data', ['has_im' => 'yes'])) ->assertOk() ->assertJsonPath('count', 3); $this->actingAs($admin, 'admin') ->getJson(route('admin.devices.data', ['has_im' => 'none'])) ->assertOk() ->assertJsonPath('count', 1) ->assertJsonPath('data.0.device_id', 'dev-plain'); } }