Completed
Push — 2.0 ( 307403...95f77b )
by Nicolas
18:06
created

BaseBlogTestCase::createBlogPost()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 24
rs 8.9713
cc 1
eloc 16
nc 1
nop 0
1
<?php
2
3
namespace Modules\Blog\Tests;
4
5
use Faker\Factory;
6
use Illuminate\Support\Str;
7
use Maatwebsite\Sidebar\SidebarServiceProvider;
8
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
9
use Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider;
10
use Modules\Blog\Entities\Status;
11
use Modules\Blog\Providers\BlogServiceProvider;
12
use Modules\Core\Providers\CoreServiceProvider;
13
use Modules\Media\Image\ImageServiceProvider;
14
use Modules\Media\Providers\MediaServiceProvider;
15
use Modules\Tag\Providers\TagServiceProvider;
16
use Nwidart\Modules\LaravelModulesServiceProvider;
17
use Orchestra\Testbench\TestCase;
18
19
abstract class BaseBlogTestCase extends TestCase
20
{
21
    /**
22
     * @var \Modules\Blog\Repositories\PostRepository
23
     */
24
    protected $post;
25
26
    /**
27
     * @var \Modules\Blog\Repositories\TagRepository
28
     */
29
    protected $tag;
30
31
    public function setUp()
32
    {
33
        parent::setUp();
34
35
        $this->resetDatabase();
36
37
        $this->post = app('Modules\Blog\Repositories\PostRepository');
38
        $this->tag = app('Modules\Blog\Repositories\TagRepository');
39
    }
40
41
    protected function getPackageProviders($app)
42
    {
43
        return [
44
            LaravelModulesServiceProvider::class,
45
            LaravelLocalizationServiceProvider::class,
46
            CoreServiceProvider::class,
47
            ImageServiceProvider::class,
48
            TagServiceProvider::class,
49
            MediaServiceProvider::class,
50
            BlogServiceProvider::class,
51
            SidebarServiceProvider::class,
52
        ];
53
    }
54
55
    protected function getPackageAliases($app)
56
    {
57
        return [
58
            'LaravelLocalization' => LaravelLocalization::class,
59
        ];
60
    }
61
62
    protected function getEnvironmentSetUp($app)
63
    {
64
        $app['path.base'] = __DIR__ . '/..';
65
        $app['config']->set('database.default', 'sqlite');
66
        $app['config']->set('database.connections.sqlite', array(
67
            'driver' => 'sqlite',
68
            'database' => ':memory:',
69
            'prefix' => '',
70
        ));
71
        $app['config']->set('translatable.locales', ['en', 'fr']);
72
    }
73
74
    /**
75
     * Helper method to create a blog post
76
     * @return object
77
     */
78
    public function createBlogPost()
79
    {
80
        $faker = Factory::create();
81
82
        $title = implode(' ', $faker->words(3));
83
        $slug = Str::slug($title);
84
85
        $data = [
86
            'en' => [
87
                'title' => $title,
88
                'slug' => $slug,
89
                'content' => $faker->paragraph(),
90
            ],
91
            'fr' => [
92
                'title' => $title,
93
                'slug' => $slug,
94
                'content' => $faker->paragraph(),
95
            ],
96
            'category_id' => 1,
97
            'status' => Status::PUBLISHED,
98
        ];
99
100
        return $this->post->create($data);
101
    }
102
103
    public function createTag()
104
    {
105
        $faker = Factory::create();
106
107
        $enName = $faker->word;
108
        $enSlug = Str::slug($enName);
109
110
        $frName = $faker->word;
111
        $frSlug = Str::slug($enName);
112
113
        $data = [
114
            'en' => [
115
                'name' => $enName,
116
                'slug' => $enSlug,
117
            ],
118
            'fr' => [
119
                'name' => $frName,
120
                'slug' => $frSlug,
121
            ],
122
        ];
123
124
        return $this->tag->create($data);
125
    }
126
127
    private function resetDatabase()
128
    {
129
        // Makes sure the migrations table is created
130
        $this->artisan('migrate', [
131
            '--database' => 'sqlite',
132
        ]);
133
        // We empty all tables
134
        $this->artisan('migrate:reset', [
135
            '--database' => 'sqlite',
136
        ]);
137
        // Migrate
138
        $this->artisan('migrate', [
139
            '--database' => 'sqlite',
140
        ]);
141
        $this->artisan('migrate', [
142
            '--database' => 'sqlite',
143
            '--path'     => 'Modules/Media/Database/Migrations',
144
        ]);
145
    }
146
}
147