Passed
Push — feature/manager_poster_index ( 088fdc...087dce )
by Chris
07:33
created

JobPosterTest::testJobPosterPublishedMutator()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 16
dl 0
loc 26
rs 9.7333
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Tests\Unit;
4
5
use Tests\TestCase;
6
use Illuminate\Foundation\Testing\WithFaker;
7
use Illuminate\Foundation\Testing\RefreshDatabase;
8
use Illuminate\Support\Facades\Lang;
9
use Jenssegers\Date\Date;
10
11
use App\Models\JobPoster;
12
13
class JobPosterTest extends TestCase
14
{
15
    use WithFaker;
16
17
    /**
18
     * Test that JobPoster->isOpen() behaves properly
19
     *
20
     * @return void
21
     */
22
    public function testJobPosterIsOpen()
23
    {
24
        $jobPoster = factory(JobPoster::class)->states('published')->make();
25
        $this->assertTrue($jobPoster->isOpen());
26
27
        $jobPoster->close_date_time = $this->faker->dateTimeBetween('-1 weeks', 'now');
28
        $this->assertFalse($jobPoster->isOpen());
29
30
        $jobPoster = factory(JobPoster::class)->states('unpublished')->make();
31
        $this->assertFalse($jobPoster->isOpen());
32
    }
33
34
    /**
35
     * Test that JobPoster->isClosed() behaves properly
36
     *
37
     * @return void
38
     */
39
    public function testJobPosterIsClosed()
40
    {
41
        $jobPoster = factory(JobPoster::class)->states('published')->make();
42
        $this->assertFalse($jobPoster->isClosed());
43
44
        $jobPoster->close_date_time = $this->faker->dateTimeBetween('-1 weeks', '-5 minutes');
45
        $this->assertTrue($jobPoster->isClosed());
46
47
        $jobPoster = factory(JobPoster::class)->states('unpublished')->make();
48
        $this->assertFalse($jobPoster->isClosed());
49
    }
50
51
    /**
52
     * Test that JobPoster->status() behaves properly
53
     *
54
     * @return void
55
     */
56
    public function testJobPosterStatus()
57
    {
58
        $jobPoster = factory(JobPoster::class)->states('unpublished')->make();
59
        $this->assertEquals('draft', $jobPoster->status());
60
61
        $jobPoster = factory(JobPoster::class)->states('published')->make();
62
        $this->assertEquals('posted', $jobPoster->status());
63
64
        $jobPoster = factory(JobPoster::class)->states('closed')->make();
65
        $this->assertEquals('closed', $jobPoster->status());
66
67
        $jobPoster = factory(JobPoster::class)->states('review_requested')->make();
68
        $this->assertEquals('submitted', $jobPoster->status());
69
    }
70
71
72
    /**
73
     * Test that JobPoster->timeRemaining() behaves properly
74
     *
75
     * @return void
76
     */
77
    public function testJobPosterTimeRemaining()
78
    {
79
        $jobPoster = factory(JobPoster::class)->make(
80
            [
81
                'close_date_time' => date('Y-m-d H:i:s', strtotime('-1 hour'))
82
            ]
83
        );
84
        $this->assertEquals(Lang::choice('common/time.hour', 1), $jobPoster->timeRemaining());
85
86
        $jobPoster = factory(JobPoster::class)->make(
87
            [
88
                'close_date_time' => date('Y-m-d H:i:s', strtotime('-2 days'))
89
            ]
90
        );
91
        $langString = Lang::choice('common/time.day', 2);
92
        $this->assertEquals($langString, $jobPoster->timeRemaining());
93
    }
94
95
    /**
96
     * Ensure the published mutator functions correctly.
97
     *
98
     * @return void
99
     */
100
    public function testJobPosterPublishedMutator() : void
101
    {
102
        // Open but not yet published
103
        $jobPoster = factory(JobPoster::class)->states('unpublished')->make();
104
        $this->assertEquals(null, $jobPoster->published_at);
105
106
        $jobPoster->published = true;
107
        $jobPoster->save();
108
        $jobPoster->refresh();
109
110
        $this->assertInstanceOf(Date::class, $jobPoster->published_at);
111
        $this->assertNotEquals($jobPoster->open_date_time, $jobPoster->published_at);
112
113
        // Not yet open and not yet published
114
        $jobPoster = factory(JobPoster::class)->states('unpublished')->make([
115
            'open_date_time' => $this->faker->dateTimeBetween('now', '1 weeks'),
116
            'close_date_time' => $this->faker->dateTimeBetween('2 weeks', '4 weeks')
117
        ]);
118
        $this->assertEquals(null, $jobPoster->published_at);
119
120
        $jobPoster->published = true;
121
        $jobPoster->save();
122
        $jobPoster->refresh();
123
124
        $this->assertInstanceOf(Date::class, $jobPoster->published_at);
125
        $this->assertEquals($jobPoster->open_date_time, $jobPoster->published_at);
126
    }
127
}
128