Fixed bulk provider imports, issue described in #869
Some checks are pending
Build assets artifact / Build assets artifact (push) Waiting to run
Docker Image Build / docker (push) Waiting to run
Docker Image Build (FrankenPHP) / docker (push) Waiting to run
Static analysis / Static analysis (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, sqlite) (push) Waiting to run

This makes PR #1110 obsolete
This commit is contained in:
Jan Böhmer 2025-12-03 22:22:21 +01:00
parent 1925a71f30
commit 36e1fcfbed
2 changed files with 28 additions and 2 deletions

View file

@ -22,24 +22,41 @@ declare(strict_types=1);
namespace App\Services\InfoProviderSystem\DTOs; namespace App\Services\InfoProviderSystem\DTOs;
use App\Services\InfoProviderSystem\Providers\InfoProviderInterface;
/** /**
* Represents a mapping between a part field and the info providers that should search in that field. * Represents a mapping between a part field and the info providers that should search in that field.
*/ */
readonly class BulkSearchFieldMappingDTO readonly class BulkSearchFieldMappingDTO
{ {
/** @var string[] $providers Array of provider keys to search with (e.g., ['digikey', 'farnell']) */
public array $providers;
/** /**
* @param string $field The field to search in (e.g., 'mpn', 'name', or supplier-specific fields like 'digikey_spn') * @param string $field The field to search in (e.g., 'mpn', 'name', or supplier-specific fields like 'digikey_spn')
* @param string[] $providers Array of provider keys to search with (e.g., ['digikey', 'farnell']) * @param string[]|InfoProviderInterface[] $providers Array of provider keys to search with (e.g., ['digikey', 'farnell'])
* @param int $priority Priority for this field mapping (1-10, lower numbers = higher priority) * @param int $priority Priority for this field mapping (1-10, lower numbers = higher priority)
*/ */
public function __construct( public function __construct(
public string $field, public string $field,
public array $providers, array $providers = [],
public int $priority = 1 public int $priority = 1
) { ) {
if ($priority < 1 || $priority > 10) { if ($priority < 1 || $priority > 10) {
throw new \InvalidArgumentException('Priority must be between 1 and 10'); throw new \InvalidArgumentException('Priority must be between 1 and 10');
} }
//Ensure that providers are provided as keys
foreach ($providers as &$provider) {
if ($provider instanceof InfoProviderInterface) {
$provider = $provider->getProviderKey();
}
if (!is_string($provider)) {
throw new \InvalidArgumentException('Providers must be provided as strings or InfoProviderInterface instances');
}
}
unset($provider);
$this->providers = $providers;
} }
/** /**

View file

@ -26,6 +26,15 @@ use PHPUnit\Framework\TestCase;
class BulkSearchFieldMappingDTOTest extends TestCase class BulkSearchFieldMappingDTOTest extends TestCase
{ {
public function testProviderInstanceNormalization(): void
{
$mockProvider = $this->createMock(\App\Services\InfoProviderSystem\Providers\InfoProviderInterface::class);
$mockProvider->method('getProviderKey')->willReturn('mock_provider');
$fieldMapping = new BulkSearchFieldMappingDTO(field: 'mpn', providers: ['provider1', $mockProvider], priority: 5);
$this->assertSame(['provider1', 'mock_provider'], $fieldMapping->providers);
}
public function testIsSupplierPartNumberField(): void public function testIsSupplierPartNumberField(): void
{ {
$fieldMapping = new BulkSearchFieldMappingDTO(field: 'reichelt_spn', providers: ['provider1'], priority: 1); $fieldMapping = new BulkSearchFieldMappingDTO(field: 'reichelt_spn', providers: ['provider1'], priority: 1);