sohexaxok's avatar

Write test for resource

Hi,

I have a resource for my API endpoint with a resource collection, but I want to test some logic for this resource collection. How can I write a test for this? This is my resource class

class CardCollection extends ResourceCollection
{
    public $resource;

    public function __construct(Collection $cardCollection)
    {
        parent::__construct($cardCollection);

        $this->resource = $cardCollection;
    }

    public function toArray($request): array
    {
        return $this->collection->sortByDesc('created_at')->transform(function (Card $card) use ($request) {
            return (new CardResource($card))->toArray($request);
        })->sortBy('status')->toArray();
    }
}
0 likes
1 reply
bobbybouwmann's avatar
Level 88

Very good question! Well, you can easily just new up the collection and write a test for it. I would do something like this

class CardCollectionTest extends \PHPUnit\Framework\TestCase
{
    public function testCardCollection(): void
    {       
        $card1 = new Card();
        $card1->number = '123456';
        $card1->status = 'inactive';

        $card2 = new Card();
        $card2->number = '654321';
        $card2->status = 'active';

        $cardCollection = new CardCollection(new Collection([$card1, $card2]));

        $this->assertEquals(
            [
                [
                    'number' => '654321',
                    'status' => 'active',
                ],
                [
                    'number' => '123456',
                    'status' => 'inactive',
                ],
            ],
            $cardCollection->toArray(new Request())
        );
    }
}

Well you get the idea ;)

3 likes

Please or to participate in this conversation.