admin()->create(); $manager = User::factory()->manager()->create(['name' => 'Менеджер экспорта']); $playground = CommonCatalogItem::factory()->create([ 'article' => '0007', 'calculator_name' => 'Игровой комплекс', ]); $swing = CommonCatalogItem::factory()->create([ 'article' => '0011', 'calculator_name' => 'Качели', ]); $order = ProductionOrder::factory()->create([ 'order_number' => '0000123', 'order_year' => 2026, 'customer_name' => 'ООО Заказчик', 'object_address' => 'г. Москва, ул. Строителей, 1', 'invoice_number' => '0000456', 'invoice_date' => '2026-08-30', 'contract_number' => '0000789', 'contract_date' => '2026-08-31', 'payment_date' => '2026-09-01', 'supply_working_days' => 10, 'contract_shipment_date' => '2026-09-15', 'application_shipment_date' => '2026-09-20', 'status' => ProductionOrderStatus::InStock, 'execution_type' => ProductionOrderExecutionType::DeliveryAndInstallation, 'manager_id' => $manager->id, 'note' => 'Примечание к заказу', ]); ProductionOrderItem::factory()->count(2)->create([ 'production_order_id' => $order->id, 'common_catalog_item_id' => $playground->id, ]); ProductionOrderItem::factory()->create([ 'production_order_id' => $order->id, 'common_catalog_item_id' => $swing->id, ]); $excluded = ProductionOrder::factory()->create(['manager_id' => $manager->id]); $file = app(ExportProductionOrdersService::class)->handle([$order->id], $user->id); Storage::disk('local')->assertExists($file->path); $this->assertTrue($file->is_generated); $this->assertSame($user->id, $file->user_id); $this->assertStringContainsString('/schedules/orders/files/', $file->link); $spreadsheet = IOFactory::load(Storage::disk('local')->path($file->path)); $sheet = $spreadsheet->getSheetByName(ExportProductionOrdersService::ORDERS_SHEET); $this->assertNotNull($sheet); $this->assertSame( ExportProductionOrdersService::HEADERS, $sheet->rangeToArray('A1:R1')[0], ); $this->assertSame($order->id, $sheet->getCell('A2')->getValue()); $this->assertSame('0000123', $sheet->getCell('B2')->getValue()); $this->assertSame('0000456', $sheet->getCell('F2')->getValue()); $this->assertSame('0000789', $sheet->getCell('H2')->getValue()); $this->assertSame('01.09.2026', $sheet->getCell('J2')->getValue()); $this->assertSame(ProductionOrderStatus::InStock->label(), $sheet->getCell('N2')->getValue()); $this->assertSame( ProductionOrderExecutionType::DeliveryAndInstallation->label(), $sheet->getCell('O2')->getValue(), ); $this->assertSame('Менеджер экспорта', $sheet->getCell('P2')->getValue()); $this->assertStringContainsString('0007 — Игровой комплекс — 2 шт.', $sheet->getCell('Q2')->getValue()); $this->assertStringContainsString('0011 — Качели — 1 шт.', $sheet->getCell('Q2')->getValue()); $this->assertSame('Примечание к заказу', $sheet->getCell('R2')->getValue()); $this->assertNull($sheet->getCell('A3')->getValue()); $this->assertNotSame($excluded->id, $sheet->getCell('A2')->getValue()); $itemsSheet = $spreadsheet->getSheetByName(ExportProductionOrdersService::ITEMS_SHEET); $this->assertNotNull($itemsSheet); $this->assertSame( ExportProductionOrdersService::ITEM_HEADERS, $itemsSheet->rangeToArray('A1:H1')[0], ); $this->assertSame(2, $itemsSheet->getCell('A2')->getValue()); $this->assertSame($playground->id, $itemsSheet->getCell('C2')->getValue()); $this->assertSame('0007', $itemsSheet->getCell('D2')->getValue()); $this->assertSame('Игровой комплекс', $itemsSheet->getCell('E2')->getValue()); $this->assertSame(2, $itemsSheet->getCell('A3')->getValue()); $this->assertSame(2, $itemsSheet->getCell('A4')->getValue()); } public function test_export_can_create_an_empty_workbook(): void { Storage::fake('local'); $user = User::factory()->admin()->create(); $file = app(ExportProductionOrdersService::class)->handle([], $user->id); Storage::disk('local')->assertExists($file->path); $spreadsheet = IOFactory::load(Storage::disk('local')->path($file->path)); $sheet = $spreadsheet->getSheetByName(ExportProductionOrdersService::ORDERS_SHEET); $this->assertNotNull($sheet); $this->assertSame(ExportProductionOrdersService::HEADERS, $sheet->rangeToArray('A1:R1')[0]); $this->assertNull($sheet->getCell('A2')->getValue()); $itemsSheet = $spreadsheet->getSheetByName(ExportProductionOrdersService::ITEMS_SHEET); $this->assertNotNull($itemsSheet); $this->assertSame(ExportProductionOrdersService::ITEM_HEADERS, $itemsSheet->rangeToArray('A1:H1')[0]); } }