ImportMafsServiceTest.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. namespace Tests\Unit\Services;
  3. use App\Helpers\DateHelper;
  4. use App\Models\Import;
  5. use App\Models\ProductSKU;
  6. use App\Services\ImportMafsService;
  7. use Illuminate\Foundation\Testing\RefreshDatabase;
  8. use Illuminate\Support\Facades\Storage;
  9. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  10. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  11. use Tests\TestCase;
  12. class ImportMafsServiceTest extends TestCase
  13. {
  14. use RefreshDatabase;
  15. protected $seed = true;
  16. public function test_handle_imports_editable_maf_columns_and_excel_dates(): void
  17. {
  18. Storage::fake('upload');
  19. $year = 2026;
  20. $sku = ProductSKU::factory()->create([
  21. 'year' => $year,
  22. 'rfid' => 'old-rfid',
  23. 'factory_number' => 'old-factory',
  24. 'manufacture_date' => null,
  25. 'statement_number' => null,
  26. 'statement_date' => null,
  27. 'upd_number' => null,
  28. 'comment' => null,
  29. ]);
  30. $filename = $this->createImportFile([
  31. $sku->id,
  32. $year,
  33. 'ЦАО',
  34. 'Тверской',
  35. 'ул. Тестовая, 1',
  36. 'МАФ-ORDER-1',
  37. 'требуется',
  38. 'rfid-new',
  39. 'factory-new',
  40. DateHelper::ISODateToExcelDate('2025-01-15'),
  41. 'statement-new',
  42. DateHelper::ISODateToExcelDate('2025-02-20'),
  43. 'upd-new',
  44. 'NOM-1',
  45. 'ART-1',
  46. 'Название',
  47. 'Тип ТЗ',
  48. 'Тип',
  49. 'Производитель',
  50. 'comment-new',
  51. ]);
  52. $import = Import::factory()->mafs()->create([
  53. 'year' => $year,
  54. 'filename' => $filename,
  55. 'result' => '',
  56. ]);
  57. $this->assertTrue((new ImportMafsService($import, $year))->handle());
  58. $sku->refresh();
  59. $this->assertSame('rfid-new', $sku->rfid);
  60. $this->assertSame('factory-new', $sku->factory_number);
  61. $this->assertSame('2025-01-15', $sku->manufacture_date);
  62. $this->assertSame('statement-new', $sku->statement_number);
  63. $this->assertSame('2025-02-20', $sku->statement_date);
  64. $this->assertSame('upd-new', $sku->upd_number);
  65. $this->assertSame('comment-new', $sku->comment);
  66. $this->assertSame('DONE', $import->fresh()->status);
  67. }
  68. public function test_handle_imports_maf_string_dates(): void
  69. {
  70. Storage::fake('upload');
  71. $year = 2026;
  72. $sku = ProductSKU::factory()->create([
  73. 'year' => $year,
  74. 'manufacture_date' => null,
  75. 'statement_date' => null,
  76. ]);
  77. $filename = $this->createImportFile([
  78. $sku->id,
  79. $year,
  80. '',
  81. '',
  82. '',
  83. '',
  84. '',
  85. '',
  86. '',
  87. '15.01.2025',
  88. '',
  89. '2025-02-20',
  90. '',
  91. '',
  92. '',
  93. '',
  94. '',
  95. '',
  96. '',
  97. '',
  98. ]);
  99. $import = Import::factory()->mafs()->create([
  100. 'year' => $year,
  101. 'filename' => $filename,
  102. 'result' => '',
  103. ]);
  104. $this->assertTrue((new ImportMafsService($import, $year))->handle());
  105. $sku->refresh();
  106. $this->assertSame('2025-01-15', $sku->manufacture_date);
  107. $this->assertSame('2025-02-20', $sku->statement_date);
  108. }
  109. private function createImportFile(array $row): string
  110. {
  111. $spreadsheet = new Spreadsheet();
  112. $sheet = $spreadsheet->getActiveSheet();
  113. $headers = array_keys(ImportMafsService::HEADERS);
  114. foreach ($headers as $index => $header) {
  115. $sheet->setCellValue([$index + 1, 1], $header);
  116. }
  117. foreach ($row as $index => $value) {
  118. $sheet->setCellValue([$index + 1, 2], $value);
  119. }
  120. $filename = 'imports/mafs.xlsx';
  121. Storage::disk('upload')->makeDirectory('imports');
  122. (new Xlsx($spreadsheet))->save(Storage::disk('upload')->path($filename));
  123. return $filename;
  124. }
  125. }