pp-planer/tests/Feature/LabelImportControllerTest.php
Thorsten Bus 6ce5b6e018 feat(controllers): add macro/label import + global assignment + service override controllers and routes
- MacroImportController + LabelImportController: POST endpoints accepting uploaded .bin files,
  delegating to MacrosImportService / LabelsImportService and returning import stats / warnings as JSON.
  Generic German 422 error if parser rejects the file.
- MacroAssignmentController: index renders Settings Inertia page with assignments / macros / labels /
  collections / last-import metadata. store/update/destroy/reorder for global MacroAssignment rows.
- ServiceMacroOverrideController: store snapshots all matching global MacroAssignments into
  service-specific rows when a service opts to override; destroy removes both override and
  service-specific assignments. storeAssignment / updateAssignment / destroyAssignment manage the
  per-service rows directly.
- routes/web.php: 12 new named routes inside the auth middleware group; reorder route placed before
  {macroAssignment} parameter route to avoid capture conflict.
- Tests: 19 new Pest tests across 4 feature files (54 assertions). Full suite 376 passed.
2026-05-03 23:17:04 +02:00

34 lines
1 KiB
PHP

<?php
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Http\UploadedFile;
uses(RefreshDatabase::class);
test('label import requires authentication', function () {
$response = $this->post(route('settings.labels.import'), []);
$response->assertRedirect(route('login'));
});
test('label import returns json on valid file', function () {
$user = User::factory()->create();
$response = $this->actingAs($user)
->post(route('settings.labels.import'), [
'file' => new UploadedFile(base_path('tests/fixtures/labels-sample.bin'), 'labels.bin', null, null, true),
]);
$response->assertStatus(200)
->assertJsonStructure(['new', 'updated', 'total']);
});
test('label import returns 422 on invalid file', function () {
$user = User::factory()->create();
$response = $this->actingAs($user)
->post(route('settings.labels.import'), [
'file' => UploadedFile::fake()->create('notalabels.bin', 1),
]);
$response->assertStatus(422);
});