Completed
Push — master ( 81f90a...fb71af )
by Joschi
03:44
created

testAutoconnectRelativeUrlWebserver()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
rs 9.4285
cc 1
eloc 4
nc 1
nop 0
1
<?php
2
3
/**
4
 * apparat-object
5
 *
6
 * @category    Apparat
7
 * @package     Apparat\Object
8
 * @subpackage  Apparat\Object\Tests
9
 * @author      Joschi Kuphal <[email protected]> / @jkphl
10
 * @copyright   Copyright © 2016 Joschi Kuphal <[email protected]> / @jkphl
11
 * @license     http://opensource.org/licenses/MIT The MIT License (MIT)
12
 */
13
14
/***********************************************************************************
15
 *  The MIT License (MIT)
16
 *
17
 *  Copyright © 2016 Joschi Kuphal <[email protected]> / @jkphl
18
 *
19
 *  Permission is hereby granted, free of charge, to any person obtaining a copy of
20
 *  this software and associated documentation files (the "Software"), to deal in
21
 *  the Software without restriction, including without limitation the rights to
22
 *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
23
 *  the Software, and to permit persons to whom the Software is furnished to do so,
24
 *  subject to the following conditions:
25
 *
26
 *  The above copyright notice and this permission notice shall be included in all
27
 *  copies or substantial portions of the Software.
28
 *
29
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
31
 *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
32
 *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
33
 *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
34
 *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
 ***********************************************************************************/
36
37
namespace Apparat\Object\Tests {
38
39
    use Apparat\Kernel\Ports\Kernel;
40
    use Apparat\Kernel\Tests\AbstractTest;
41
    use Apparat\Object\Application\Model\Object\Contact;
42
    use Apparat\Object\Domain\Repository\Service;
43
    use Apparat\Object\Infrastructure\Repository\AutoConnector;
44
    use Apparat\Object\Ports\Object;
45
46
    /**
47
     * Autoconnector tests
48
     *
49
     * @package Apparat\Object
50
     * @subpackage Apparat\Object\Tests
51
     */
52
    class AutoconnectorTest extends AbstractTest
53
    {
54
        /**
55
         * Example object path
56
         *
57
         * @var string
58
         */
59
        const OBJECT_PATH = '/2016/01/08/2.contact/2';
60
61
        /**
62
         * Setup
63
         */
64
        public static function setUpBeforeClass()
65
        {
66
            parent::setUpBeforeClass();
67
            Kernel::create(Service::class)->reset()->useAutoConnect(true);
68
        }
69
70
        /**
71
         * Tears down the fixture
72
         */
73
        public function tearDown()
74
        {
75
            putenv('MOCK_PHP_SAPI_NAME');
76
            Kernel::create(Service::class)->reset();
77
            parent::tearDown();
78
        }
79
80
        /**
81
         * This method is called after the last test of this test class is run.
82
         */
83
        public static function tearDownAfterClass()
84
        {
85
            parent::tearDownAfterClass();
86
            Kernel::create(Service::class)->useAutoConnect(false);
87
        }
88
89
        /**
90
         * Test basic auto-connect functionality with a relative URL and the CLI SAPI
91
         */
92
        public function testAutoconnectRelativeUrlCli()
93
        {
94
            $article = Object::instance(self::OBJECT_PATH);
95
            $this->assertInstanceOf(Contact::class, $article);
96
        }
97
98
        /**
99
         * Test basic auto-connect functionality with a relative URL and the webserver SAPI
100
         */
101
        public function testAutoconnectRelativeUrlWebserver()
102
        {
103
            putenv('MOCK_PHP_SAPI_NAME=1');
104
            $article = Object::instance(self::OBJECT_PATH);
105
            $this->assertInstanceOf(Contact::class, $article);
106
        }
107
108
        /**
109
         * Test basic autoconnection functionality
110
         *
111
         * @todo Implement when absolute repository is implemented
112
         */
113
        public function testAutoconnectAbsoluteUrl()
114
        {
115
            $autoconnector = new AutoConnector();
116
            $this->assertTrue($autoconnector->connect('http://example.com'.self::OBJECT_PATH));
117
        }
118
    }
119
}
120
121
namespace Apparat\Object\Infrastructure\Repository {
122
    /**
123
     * Mocked version of the native php_sapi_name() function
124
     *
125
     * @return string PHP SAPI
126
     */
127
    function php_sapi_name() {
128
        return (getenv('MOCK_PHP_SAPI_NAME') != 1) ? \php_sapi_name() : 'web';
129
    }
130
}
131