<?php
/**
 * tests function from include/items.php
 *
 * @package test.util
 */

use Zotlabs\Tests\Unit\UnitTestCase;

class ItemsTest extends UnitTestCase {
    /**
     * Data provider for item_forwardable function.
     *
     * @return array
     */
    public static function itemForwardableDataProvider()
    {
        return [
            // Test case: item is unpublished
            [
                [
                    'item_unpublished' => 1,
                    'item_delayed' => 0,
                    'item_blocked' => 0,
                    'item_hidden' => 0,
                    'item_restrict' => 0,
                    'verb' => 'Create',
                    'postopts' => '',
                    'author' => ['xchan_network' => '']
                ],
                false // Expected result
            ],
            // Test case: item is delayed
            [
                [
                    'item_unpublished' => 0,
                    'item_delayed' => 1,
                    'item_blocked' => 0,
                    'item_hidden' => 0,
                    'item_restrict' => 0,
                    'verb' => 'Create',
                    'postopts' => '',
                    'author' => ['xchan_network' => '']
                ],
                false
            ],
            // Test case: item is blocked
            [
                [
                    'item_unpublished' => 0,
                    'item_delayed' => 0,
                    'item_blocked' => 1,
                    'item_hidden' => 0,
                    'item_restrict' => 0,
                    'verb' => 'Create',
                    'postopts' => '',
                    'author' => ['xchan_network' => '']
                ],
                false
            ],
            // Test case: verb is 'Follow' (forbidden verb)
            [
                [
                    'item_unpublished' => 0,
                    'item_delayed' => 0,
                    'item_blocked' => 0,
                    'item_hidden' => 0,
                    'item_restrict' => 0,
                    'verb' => 'Follow',
                    'postopts' => '',
                    'author' => ['xchan_network' => '']
                ],
                false
            ],
            // Test case: postopts contains 'nodeliver'
            [
                [
                    'item_unpublished' => 0,
                    'item_delayed' => 0,
                    'item_blocked' => 0,
                    'item_hidden' => 0,
                    'item_restrict' => 0,
                    'verb' => 'Create',
                    'postopts' => 'nodeliver',
                    'author' => ['xchan_network' => '']
                ],
                false
            ],
            // Test case: actor's network is 'rss' (restricted network)
            [
                [
                    'item_unpublished' => 0,
                    'item_delayed' => 0,
                    'item_blocked' => 0,
                    'item_hidden' => 0,
                    'item_restrict' => 0,
                    'verb' => 'Create',
                    'postopts' => '',
                    'author' => ['xchan_network' => 'rss']
                ],
                false
            ],
            // Test case: no conditions met (should forward)
            [
                [
                    'item_unpublished' => 0,
                    'item_delayed' => 0,
                    'item_blocked' => 0,
                    'item_hidden' => 0,
                    'item_restrict' => 0,
                    'verb' => 'Create',
                    'postopts' => '',
                    'author' => ['xchan_network' => 'other']
                ],
                true
            ]
        ];
    }

    /**
     * Test item_forwardable with various data.
     *
     * @dataProvider itemForwardableDataProvider
     */
    public function testItemForwardable($item, $expected)
    {
        $this->assertSame($expected, item_forwardable($item));
    }

}