fakeTransferBillingApi(); $user = User::create([ 'public_id' => (string) Str::uuid(), 'name' => 'Test User', 'email' => 'transfer+'.uniqid().'@example.com', ]); $response = $this->actingAs($user)->post(route('transfer.transfers.store'), [ 'title' => 'Project assets', 'message' => 'Here are the files.', 'files' => [ UploadedFile::fake()->create('brief.pdf', 100, 'application/pdf'), UploadedFile::fake()->create('photo.jpg', 50, 'image/jpeg'), ], ]); $response->assertRedirect(); $this->assertDatabaseCount('transfers', 1); $this->assertDatabaseCount('transfer_files', 2); $this->assertDatabaseHas('qr_codes', ['type' => 'transfer', 'label' => 'Project assets']); $transfer = Transfer::first(); $this->assertNotNull($transfer->qr_code_id); $this->assertNotNull($transfer->paid_until); $this->assertTrue($transfer->paid_until->isFuture()); } public function test_authenticated_user_can_create_transfer_from_chunked_upload_ids(): void { Storage::fake('qr'); $this->fakeTransferBillingApi(); $user = User::create([ 'public_id' => (string) Str::uuid(), 'name' => 'Test User', 'email' => 'transfer+'.uniqid().'@example.com', ]); $init = $this->actingAs($user)->postJson(route('transfer.transfers.upload.init'), [ 'filename' => 'brief.pdf', 'filesize' => 12, ])->assertOk()->json(); $uploadId = (string) ($init['upload_id'] ?? ''); $this->assertNotSame('', $uploadId); $chunk = UploadedFile::fake()->createWithContent('chunk_0', str_repeat('a', 12)); $this->actingAs($user)->post(route('transfer.transfers.upload.chunk'), [ 'upload_id' => $uploadId, 'chunk_index' => 0, 'chunk_size' => 12, 'chunk' => $chunk, ])->assertOk(); $this->actingAs($user)->postJson(route('transfer.transfers.upload.finalize'), [ 'upload_id' => $uploadId, 'total_chunks' => 1, ])->assertOk(); $this->actingAs($user)->post(route('transfer.transfers.store'), [ 'title' => 'Chunked assets', 'upload_ids' => [$uploadId], ])->assertRedirect(); $this->assertDatabaseCount('transfers', 1); $this->assertDatabaseCount('transfer_files', 1); $this->assertDatabaseHas('transfer_files', ['original_name' => 'brief.pdf']); } public function test_dashboard_requires_auth(): void { $this->get(route('transfer.dashboard'))->assertRedirect(); } }