Completed
Push — feature/manager_poster_index ( 926b3c...747099 )
by Chris
30:27 queued 15:24
created

JobPosterTest::testJobPosterApplyBy()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 8
rs 10
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
use Doctrine\Common\Cache\VoidCache;
13
14
class JobPosterTest extends TestCase
15
{
16
    use WithFaker;
17
18
    /**
19
     * Test that JobPoster->isOpen() behaves properly
20
     *
21
     * @return void
22
     */
23
    public function testJobPosterIsOpen() : void
24
    {
25
        $jobPoster = factory(JobPoster::class)->states('published')->make();
26
        $this->assertTrue($jobPoster->isOpen());
27
28
        $jobPoster->close_date_time = $this->faker->dateTimeBetween('-1 weeks', 'now');
29
        $this->assertFalse($jobPoster->isOpen());
30
31
        $jobPoster = factory(JobPoster::class)->states('unpublished')->make();
32
        $this->assertFalse($jobPoster->isOpen());
33
    }
34
35
    /**
36
     * Test that JobPoster->isClosed() behaves properly
37
     *
38
     * @return void
39
     */
40
    public function testJobPosterIsClosed()
41
    {
42
        $jobPoster = factory(JobPoster::class)->states('published')->make();
43
        $this->assertFalse($jobPoster->isClosed());
44
45
        $jobPoster->close_date_time = $this->faker->dateTimeBetween('-1 weeks', '-5 minutes');
46
        $this->assertTrue($jobPoster->isClosed());
47
48
        $jobPoster = factory(JobPoster::class)->states('unpublished')->make();
49
        $this->assertFalse($jobPoster->isClosed());
50
    }
51
52
    /**
53
     * Test that JobPoster->status() behaves properly
54
     *
55
     * @return void
56
     */
57
    public function testJobPosterStatus()
58
    {
59
        $jobPoster = factory(JobPoster::class)->states('unpublished')->make();
60
        $this->assertEquals('draft', $jobPoster->status());
61
62
        $jobPoster = factory(JobPoster::class)->states('published')->make();
63
        $this->assertEquals('published', $jobPoster->status());
64
65
        $jobPoster = factory(JobPoster::class)->states('closed')->make();
66
        $this->assertEquals('closed', $jobPoster->status());
67
68
        $jobPoster = factory(JobPoster::class)->states('review_requested')->make();
69
        $this->assertEquals('submitted', $jobPoster->status());
70
    }
71
72
73
    /**
74
     * Test that JobPoster->timeRemaining() behaves properly
75
     *
76
     * @return void
77
     */
78
    public function testJobPosterTimeRemaining() : void
79
    {
80
        $jobPoster = factory(JobPoster::class)->make(
81
            [
82
                'close_date_time' => date('Y-m-d H:i:s', strtotime('-1 hour'))
83
            ]
84
        );
85
        $this->assertEquals(Lang::choice('common/time.hour', 1), $jobPoster->timeRemaining());
86
87
        $jobPoster->close_date_time = date('Y-m-d H:i:s', strtotime('-2 days'));
88
        $langString = Lang::choice('common/time.day', 2);
89
        $this->assertEquals($langString, $jobPoster->timeRemaining());
90
91
        $jobPoster->close_date_time = date('Y-m-d H:i:s', strtotime('-5 minutes'));
92
        $langString = Lang::choice('common/time.minute', 5);
93
        $this->assertEquals($langString, $jobPoster->timeRemaining());
94
95
        $jobPoster->close_date_time = date('Y-m-d H:i:s', strtotime('-30 seconds'));
96
        $langString = Lang::choice('common/time.second', 30);
97
        $this->assertEquals($langString, $jobPoster->timeRemaining());
98
    }
99
100
    /**
101
     * Test that JobPoster->applyBy() behaves properly
102
     *
103
     * @return void
104
     */
105
    public function testJobPosterApplyBy() : void
106
    {
107
        $jobPoster = factory(JobPoster::class)->make();
108
        $date = new Date($jobPoster->close_date_time);
0 ignored issues
show
Bug introduced by
It seems like $jobPoster->close_date_time can also be of type Illuminate\Database\Eloq...uent\Relations\Relation and Illuminate\Database\Eloquent\Relations\Relation; however, parameter $time of Jenssegers\Date\Date::__construct() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

108
        $date = new Date(/** @scrutinizer ignore-type */ $jobPoster->close_date_time);
Loading history...
109
        $date->setTimezone(JobPoster::TIMEZONE);
110
        $this->assertEquals(
111
            $date->format(JobPoster::DATE_FORMAT['en']) . $date->format(JobPoster::TIME_FORMAT['en']),
112
            $jobPoster->applyBy()['date'] . $jobPoster->applyBy()['time']
113
        );
114
    }
115
116
    /**
117
     * Ensure the published mutator functions correctly.
118
     *
119
     * @return void
120
     */
121
    public function testJobPosterPublishedMutator() : void
122
    {
123
        // Open but not yet published
124
        $jobPoster = factory(JobPoster::class)->states('unpublished')->make();
125
        $this->assertEquals(null, $jobPoster->published_at);
126
127
        $jobPoster->published = true;
128
        $jobPoster->save();
129
        $jobPoster->refresh();
130
131
        $this->assertInstanceOf(Date::class, $jobPoster->published_at);
132
        $this->assertNotEquals($jobPoster->open_date_time, $jobPoster->published_at);
133
134
        // Not yet open and not yet published
135
        $jobPoster = factory(JobPoster::class)->states('unpublished')->make([
136
            'open_date_time' => $this->faker->dateTimeBetween('now', '1 weeks'),
137
            'close_date_time' => $this->faker->dateTimeBetween('2 weeks', '4 weeks')
138
        ]);
139
        $this->assertEquals(null, $jobPoster->published_at);
140
141
        $jobPoster->published = true;
142
        $jobPoster->save();
143
        $jobPoster->refresh();
144
145
        $this->assertInstanceOf(Date::class, $jobPoster->published_at);
146
        $this->assertEquals($jobPoster->open_date_time, $jobPoster->published_at);
147
    }
148
}
149