<?php

namespace Tests\Unit;

use Tests\TestCase;
use App\Utilities\PageLink;
use Illuminate\Support\Str;

use App\Models\Page;
use App\Models\ContentElement;
use App\Models\TextBlock;

class PageLinkTest extends TestCase
{
    public function test_a_header_can_be_converted_to_a_slug()
    {
        $text = 'Foobar *&^*&%&^%& baz-biz';
        $this->assertEquals('foobar-baz-biz', PageLink::convertAnchorText($text));
    }

    public function test_a_header_link_is_converted()
    {
        $page = Page::factory()->create();
        $this->createContentElement(TextBlock::factory(), $page);
        $content_element = ContentElement::all()->last();
        $text_block = $content_element->content;
        $this->assertInstanceOf(ContentElement::class, $content_element);
        $this->assertInstanceOf(TextBlock::class, $text_block);
        $this->assertNotNull($text_block->header);

        $text = '<a href="'.$page->id.'#c-'.$content_element->uuid.'">'.$this->getEditingValue($page, 'name').'</a>';
        $text_block->body = $text;
        $text_block->save();
        $page->publish();
        $text_block->refresh();
        $page->refresh();

        $this->assertInstanceOf(ContentElement::class, $page->content->firstWhere('uuid', $content_element->uuid));

        $expected_text = '<a href="/'.$this->getEditingValue($page, 'full_slug').'#'.PageLink::convertAnchorText($text_block->header).'">'.$this->getEditingValue($page, 'name').'</a>';

        // only applies when there is no editing or preview
        $this->assertEquals($expected_text, $text_block->body);
    }
}
