# sync-basalam/1.10.20/tests/Services/ProductSkuRetryTest.php

ووسلام – همگام سازی ووکامرس و باسلام, version 1.10.20. 99 lines.

- Page: https://pluginprobe.com/plugins/sync-basalam/1.10.20/code/tests/Services/ProductSkuRetryTest.php
- Raw: https://pluginprobe.com/plugins/sync-basalam/1.10.20/raw/tests/Services/ProductSkuRetryTest.php
- Modified: 2026-09-17T11:16:38+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/sync-basalam/1.10.20/code/tests/Services/ProductSkuRetryTest.php#L10-L20`.

```php
<?php

namespace SyncBasalam\Tests\Services;

use PHPUnit\Framework\TestCase;
use SyncBasalam\Services\Products\ProductSkuRetry;

class ProductSkuRetryTest extends TestCase
{
    public function testRemovesProductAndVariationSkusWithoutChangingOtherFields(): void
    {
        $payload = [
            'name'     => 'محصول تست',
            'sku'      => 'PRODUCT-1',
            'variants' => [
                ['id' => 1, 'sku' => 'VARIANT-1', 'stock' => 2],
                ['id' => 2, 'sku' => 'VARIANT-2', 'stock' => 3],
            ],
        ];

        $withoutSkus = ProductSkuRetry::withoutSkus($payload);

        self::assertSame('PRODUCT-1', $payload['sku']);
        self::assertSame('VARIANT-1', $payload['variants'][0]['sku']);
        self::assertArrayNotHasKey('sku', $withoutSkus);
        self::assertArrayNotHasKey('sku', $withoutSkus['variants'][0]);
        self::assertArrayNotHasKey('sku', $withoutSkus['variants'][1]);
        self::assertSame($payload['variants'][0]['stock'], $withoutSkus['variants'][0]['stock']);
        self::assertSame($payload['variants'][1]['stock'], $withoutSkus['variants'][1]['stock']);
    }

    public function testDetectsDuplicateSkuFromFieldsOnly(): void
    {
        $error = [
            'status_code' => 422,
            'body'        => json_encode([
                'messages' => [
                    ['fields' => ['sku'], 'message' => 'مقدار نامعتبر است'],
                ],
            ]),
        ];

        self::assertTrue(ProductSkuRetry::isDuplicateSkuError($error));
    }

    public function testDetectsDuplicateSkuFromMessageWhenFieldIsMissing(): void
    {
        $error = [
            'status_code' => 422,
            'body'        => [
                'messages' => [
                    ['fields' => [], 'message' => 'شناسه sku محصولات باید یکتا باشد'],
                ],
            ],
        ];

        self::assertTrue(ProductSkuRetry::isDuplicateSkuError($error));
    }

    public function testDetectsDuplicateSkuInPerItemBatchResults(): void
    {
        self::assertTrue(ProductSkuRetry::isDuplicateSkuError([
            'id'            => 91,
            'has_error'     => true,
            'error_message' => 'شناسه sku محصولات باید یکتا باشد.',
        ]));

        self::assertTrue(ProductSkuRetry::isDuplicateSkuError([
            'id'     => 92,
            'status' => 'failed',
            'error'  => [
                'code'    => 'SKU_DUPLICATE',
                'message' => 'SKU already exists',
            ],
        ]));
    }

    public function testDoesNotDetectUnrelatedOrSuccessfulResponses(): void
    {
        self::assertFalse(ProductSkuRetry::isDuplicateSkuError([
            'status_code' => 422,
            'body'        => [
                'messages' => [
                    ['fields' => ['name'], 'message' => 'نام کالا تکراری است'],
                ],
            ],
        ]));

        self::assertFalse(ProductSkuRetry::isDuplicateSkuError([
            'status_code' => 200,
            'body'        => [
                'messages' => [
                    ['fields' => ['sku'], 'message' => 'SKU already exists'],
                ],
            ],
        ]));
    }
}

```
