ver. 0.318: shopPRO export produktów + nowe API endpoints

- NEW: IntegrationsRepository::shopproExportProduct() — eksport produktu do
  zdalnej instancji shopPRO (pola główne, tłumaczenia, custom fields, zdjęcia)
- NEW: sendImageToShopproApi() — wysyłka zdjęć przez API shopPRO (base64 POST)
- REFACTOR: shopproImportProduct() — wydzielono shopproDb() i
  missingShopproSetting(); dodano security_information, producer_id,
  custom fields, alt zdjęcia
- NEW: AttributeRepository::ensureAttributeForApi() i
  ensureAttributeValueForApi() — idempotent find-or-create dla słowników
- NEW: API POST dictionaries/ensure_attribute — utwórz lub znajdź atrybut
- NEW: API POST dictionaries/ensure_attribute_value — utwórz lub znajdź wartość
- NEW: API POST products/upload_image — przyjmuje base64, zapisuje plik i DB
- NEW: IntegrationsController::shoppro_product_export() — akcja admina
- NEW: przycisk "Eksportuj do shopPRO" w liście produktów
- NEW: pole API key w ustawieniach integracji shopPRO

Tests: 765 tests, 2153 assertions — all green

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-24 11:43:17 +01:00
parent 9a351c16ee
commit 702e3a94be
16 changed files with 656 additions and 14 deletions

View File

@@ -186,4 +186,52 @@ class DictionariesApiControllerTest extends TestCase
$this->assertSame(405, http_response_code());
}
public function testEnsureAttributeRejectsGetMethod(): void
{
$_SERVER['REQUEST_METHOD'] = 'GET';
ob_start();
$this->controller->ensure_attribute();
ob_get_clean();
$this->assertSame(405, http_response_code());
}
public function testEnsureAttributeReturns400WhenNoBody(): void
{
$_SERVER['REQUEST_METHOD'] = 'POST';
ob_start();
$this->controller->ensure_attribute();
$output = ob_get_clean();
$this->assertSame(400, http_response_code());
$json = json_decode($output, true);
$this->assertSame('BAD_REQUEST', $json['code']);
}
public function testEnsureAttributeValueRejectsGetMethod(): void
{
$_SERVER['REQUEST_METHOD'] = 'GET';
ob_start();
$this->controller->ensure_attribute_value();
ob_get_clean();
$this->assertSame(405, http_response_code());
}
public function testEnsureAttributeValueReturns400WhenNoBody(): void
{
$_SERVER['REQUEST_METHOD'] = 'POST';
ob_start();
$this->controller->ensure_attribute_value();
$output = ob_get_clean();
$this->assertSame(400, http_response_code());
$json = json_decode($output, true);
$this->assertSame('BAD_REQUEST', $json['code']);
}
}