xref: /webtrees/tests/app/Services/TimeoutServiceTest.php (revision 67994fb087e1b24564a780e4ae8aeff801733e35)
1<?php
2/**
3 * webtrees: online genealogy
4 * Copyright (C) 2018 webtrees development team
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16declare(strict_types=1);
17
18namespace Fisharebest\Webtrees\Services;
19
20use Fisharebest\Webtrees\TestCase;
21use Mockery;
22
23/**
24 * Mock function.
25 *
26 * @param mixed ...$args
27 *
28 * @return mixed
29 */
30function ini_get(...$args)
31{
32    return TimeoutServiceTest::$mock_functions->ini_get(...$args);
33}
34
35/**
36 * Mock function.
37 *
38 * @param mixed ...$args
39 *
40 * @return mixed
41 */
42function microtime(...$args)
43{
44    return TimeoutServiceTest::$mock_functions->microtime(...$args);
45}
46
47/**
48 * Test harness for the class TimeoutServiceTest
49 */
50class TimeoutServiceTest extends TestCase
51{
52    /** @var object */
53    public static $mock_functions;
54
55    /**
56     * Initialize the test script
57     *
58     * @return void
59     */
60    public function setUp()
61    {
62        self::$mock_functions = Mockery::mock();
63    }
64
65    /**
66     * @covers \Fisharebest\Webtrees\Services\TimeoutService::__construct()
67     * @covers \Fisharebest\Webtrees\Services\TimeoutService::isTimeNearlyUp()
68     *
69     * @return void
70     */
71    public function testNoTimeOut()
72    {
73        $now = \microtime(true);
74
75        $timeout_service = new TimeoutService($now);
76
77        self::$mock_functions
78            ->shouldReceive('ini_get')
79            ->with('max_execution_time')
80            ->once()
81            ->andReturn('0');
82
83        $this->assertFalse($timeout_service->isTimeNearlyUp());
84    }
85
86    /**
87     * @covers \Fisharebest\Webtrees\Services\TimeoutService::__construct()
88     * @covers \Fisharebest\Webtrees\Services\TimeoutService::isTimeNearlyUp()
89     *
90     * @return void
91     */
92    public function testTimeOutReached()
93    {
94        $now = \microtime(true);
95
96        $timeout_service = new TimeoutService($now);
97
98        self::$mock_functions
99            ->shouldReceive('ini_get')
100            ->with('max_execution_time')
101            ->once()
102            ->andReturn('30');
103
104        self::$mock_functions
105            ->shouldReceive('microtime')
106            ->with('true')
107            ->once()
108            ->andReturn($now + 60.0);
109
110        $this->assertTrue($timeout_service->isTimeNearlyUp());
111    }
112
113    /**
114     * @covers \Fisharebest\Webtrees\Services\TimeoutService::__construct()
115     * @covers \Fisharebest\Webtrees\Services\TimeoutService::isTimeNearlyUp()
116     *
117     * @return void
118     */
119    public function testTimeOutNotReached()
120    {
121        $now = \microtime(true);
122
123        $timeout_service = new TimeoutService($now);
124
125        self::$mock_functions
126            ->shouldReceive('ini_get')
127            ->with('max_execution_time')
128            ->once()
129            ->andReturn('30');
130
131        self::$mock_functions
132            ->shouldReceive('microtime')
133            ->with('true')
134            ->once()
135            ->andReturn($now + 10.0);
136
137        $this->assertFalse($timeout_service->isTimeNearlyUp());
138    }
139
140    /**
141     * @covers \Fisharebest\Webtrees\Services\TimeoutService::__construct()
142     * @covers \Fisharebest\Webtrees\Services\TimeoutService::isTimeLimitUp()
143     *
144     * @return void
145     */
146    public function testTimeLimitNotReached()
147    {
148        $now = \microtime(true);
149
150        $timeout_service = new TimeoutService($now);
151
152        self::$mock_functions
153            ->shouldReceive('microtime')
154            ->with('true')
155            ->once()
156            ->andReturn($now + 1.4);
157
158        $this->assertFalse($timeout_service->isTimeLimitUp());
159    }
160
161    /**
162     * @covers \Fisharebest\Webtrees\Services\TimeoutService::__construct()
163     * @covers \Fisharebest\Webtrees\Services\TimeoutService::isTimeLimitUp()
164     *
165     * @return void
166     */
167    public function testTimeLimitReached()
168    {
169        $now = \microtime(true);
170
171        $timeout_service = new TimeoutService($now);
172
173        self::$mock_functions
174            ->shouldReceive('microtime')
175            ->with('true')
176            ->once()
177            ->andReturn($now + 1.6);
178
179        $this->assertTrue($timeout_service->isTimeLimitUp());
180    }
181}
182