Skip to content
Snippets Groups Projects
CreateMigrationTest.php 1.93 KiB
Newer Older
<?php

namespace Breyta\Test\Migrations;

use Breyta\FileHelper;
use Breyta\Migrations;
use Breyta\Test\TestCase;
use Mockery as m;

class CreateMigrationTest extends TestCase
{

    protected $path = '/tmp/breyta-test';

    protected function setUp()
    {
        if (file_exists($this->path)) {
            exec('rm -Rf ' . $this->path);
        }
        mkdir($this->path);
        $this->migrations = new Migrations($this->mockPdo(), $this->path);
    }

    /** @test */
    public function createsAFileWithTimestamp()
    {
        $this->migrations->createMigration('JustAName');

        self::assertNotNull(FileHelper::getTimeFromFileName($this->getCreatedFileName()));
    }

    /** @test */
    public function addsNameToFileName()
    {
        $this->migrations->createMigration('JustAName');

        self::assertContains('JustAName', $this->getCreatedFileName());
    }

    /** @test */
    public function createsAClassWithNamespace()
    {
        $this->migrations->createMigration('JustAName');

        self::assertSame('Breyta\Migration\JustAName', FileHelper::getClassFromFile($this->getCreatedFileName()));
    }

    /** @test */
    public function appendsFoldersToNamespace()
    {
        $this->migrations->createMigration('News/CreateArticleTable');

        self::assertSame(
            'Breyta\Migration\News\CreateArticleTable',
            FileHelper::getClassFromFile($this->getCreatedFileName())
        );
    }

    /** @test */
    public function containsACommentWithMigrationName()
    {
        $this->migrations->createMigration('News/CreateArticleTable');

        $status = $this->migrations->getStatus();

        self::assertContains('// ' . $status->migrations[1]->file, file_get_contents($this->getCreatedFileName()));
    }

    protected function getCreatedFileName()
    {
        $files = [];
        exec('find ' . $this->path . ' -type f', $files);
        self::assertCount(1, $files);
        return $files[0];
    }
}