<?php

namespace NoccyLabs\Mercureact\Broker;

use PHPUnit\Framework\Attributes\CoversClass;

#[CoversClass(Message::class)]
class MessageTest extends \PHPUnit\Framework\TestCase
{

    public function testCreatingMessageFromData()
    {
        $message = Message::fromData([
            'id' => '1a',
            'topic' => '2b',
            'data' => '3c',
            'type' => '4d',
            'retry' => 42,
            'private' => true,
        ]);

        $this->assertEquals("1a", $message->id);
        $this->assertEquals(["2b"], $message->topic);
        $this->assertEquals("3c", $message->data);
        $this->assertEquals("4d", $message->type);
        $this->assertEquals(42, $message->retry);
        $this->assertEquals(true, $message->private);

        $message = Message::fromData([
            'id' => '1a',
            'topic' => ['2b'],
            'data' => '3c',
            'type' => '4d',
            'retry' => 42,
            'private' => true,
        ]);

        $this->assertEquals("1a", $message->id);
        $this->assertEquals(["2b"], $message->topic);
        $this->assertEquals("3c", $message->data);
        $this->assertEquals("4d", $message->type);
        $this->assertEquals(42, $message->retry);
        $this->assertEquals(true, $message->private);

    }

    public function testCreatingSseFromMessage()
    {
        $message = Message::fromData([
            'id' => '1a',
            'topic' => '2b',
            'data' => '3c',
            'type' => '4d',
            'retry' => 42,
            'private' => true,
        ]);
        $sse = $message->toString();

        $this->assertEquals(<<<EXPECT
        event: 4d
        retry: 42
        id: 1a
        data: 3c

        
        EXPECT, $sse);
        
    }

}