Passed
Push — master ( 529dea...6e1056 )
by Caen
03:45 queued 12s
created

test_find_model_from_file_path()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 0
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Hyde\Framework\Testing\Feature;
4
5
use Hyde\Framework\Hyde;
6
use Hyde\Framework\Models\Pages\BladePage;
7
use Hyde\Framework\Models\Pages\DocumentationPage;
8
use Hyde\Framework\Models\Pages\MarkdownPage;
9
use Hyde\Framework\Models\Pages\MarkdownPost;
10
use Hyde\Framework\Models\Parsers\DocumentationPageParser;
11
use Hyde\Framework\Models\Parsers\MarkdownPageParser;
12
use Hyde\Framework\Models\Parsers\MarkdownPostParser;
13
use Hyde\Framework\Services\DiscoveryService;
14
use Hyde\Testing\TestCase;
15
16
class DiscoveryServiceTest extends TestCase
17
{
18
    public function createContentSourceTestFiles()
19
    {
20
        Hyde::touch((DiscoveryService::getFilePathForModelClassFiles(MarkdownPost::class).'/test.md'));
0 ignored issues
show
Bug introduced by
The method touch() does not exist on Hyde\Framework\Hyde. Since you implemented __callStatic, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

20
        Hyde::/** @scrutinizer ignore-call */ 
21
              touch((DiscoveryService::getFilePathForModelClassFiles(MarkdownPost::class).'/test.md'));
Loading history...
21
        Hyde::touch((DiscoveryService::getFilePathForModelClassFiles(MarkdownPage::class).'/test.md'));
22
        Hyde::touch((DiscoveryService::getFilePathForModelClassFiles(DocumentationPage::class).'/test.md'));
23
        Hyde::touch((DiscoveryService::getFilePathForModelClassFiles(BladePage::class).'/test.blade.php'));
24
    }
25
26
    public function deleteContentSourceTestFiles()
27
    {
28
        unlink(Hyde::path(DiscoveryService::getFilePathForModelClassFiles(MarkdownPost::class).'/test.md'));
29
        unlink(Hyde::path(DiscoveryService::getFilePathForModelClassFiles(MarkdownPage::class).'/test.md'));
30
        unlink(Hyde::path(DiscoveryService::getFilePathForModelClassFiles(DocumentationPage::class).'/test.md'));
31
        unlink(Hyde::path(DiscoveryService::getFilePathForModelClassFiles(BladePage::class).'/test.blade.php'));
32
    }
33
34
    public function test_get_parser_class_for_model()
35
    {
36
        $this->assertEquals(MarkdownPageParser::class, DiscoveryService::getParserClassForModel(MarkdownPage::class));
37
        $this->assertEquals(MarkdownPostParser::class, DiscoveryService::getParserClassForModel(MarkdownPost::class));
38
        $this->assertEquals(DocumentationPageParser::class, DiscoveryService::getParserClassForModel(DocumentationPage::class));
39
        $this->assertEquals(BladePage::class, DiscoveryService::getParserClassForModel(BladePage::class));
40
    }
41
42
    public function test_get_parser_instance_for_model()
43
    {
44
        $this->createContentSourceTestFiles();
45
46
        $this->assertInstanceOf(MarkdownPageParser::class, DiscoveryService::getParserInstanceForModel(MarkdownPage::class, 'test'));
47
        $this->assertInstanceOf(MarkdownPostParser::class, DiscoveryService::getParserInstanceForModel(MarkdownPost::class, 'test'));
48
        $this->assertInstanceOf(DocumentationPageParser::class, DiscoveryService::getParserInstanceForModel(DocumentationPage::class, 'test'));
49
        $this->assertInstanceOf(BladePage::class, DiscoveryService::getParserInstanceForModel(BladePage::class, 'test'));
50
51
        $this->deleteContentSourceTestFiles();
52
    }
53
54
    public function test_get_file_extension_for_model_files()
55
    {
56
        $this->assertEquals('.md', DiscoveryService::getFileExtensionForModelFiles(MarkdownPage::class));
57
        $this->assertEquals('.md', DiscoveryService::getFileExtensionForModelFiles(MarkdownPost::class));
58
        $this->assertEquals('.md', DiscoveryService::getFileExtensionForModelFiles(DocumentationPage::class));
59
        $this->assertEquals('.blade.php', DiscoveryService::getFileExtensionForModelFiles(BladePage::class));
60
    }
61
62
    public function test_get_file_path_for_model_class_files()
63
    {
64
        $this->assertEquals('_posts', DiscoveryService::getFilePathForModelClassFiles(MarkdownPost::class));
65
        $this->assertEquals('_pages', DiscoveryService::getFilePathForModelClassFiles(MarkdownPage::class));
66
        $this->assertEquals('_docs', DiscoveryService::getFilePathForModelClassFiles(DocumentationPage::class));
67
        $this->assertEquals('_pages', DiscoveryService::getFilePathForModelClassFiles(BladePage::class));
68
    }
69
70
    public function test_create_clickable_filepath_creates_link_for_existing_file()
71
    {
72
        $filename = 'be2329d7-3596-48f4-b5b8-deff352246a9';
73
        touch($filename);
74
        $output = DiscoveryService::createClickableFilepath($filename);
75
        $this->assertStringContainsString('file://', $output);
76
        $this->assertStringContainsString($filename, $output);
77
        unlink($filename);
78
    }
79
80
    public function test_create_clickable_filepath_falls_back_to_returning_input_if_file_does_not_exist()
81
    {
82
        $filename = 'be2329d7-3596-48f4-b5b8-deff352246a9';
83
        $output = DiscoveryService::createClickableFilepath($filename);
84
        $this->assertSame($filename, $output);
85
    }
86
}
87