RequestTestable::bindRequestForTest()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 1
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Padosoft\Laravel\Request;
4
5
use Illuminate\Http\Request;
6
7
/**
8
 * Class RequestTestable
9
 * Trait to easy get an istance of Illuminate\Http\Request and bint it for testing.
10
 * @package Padosoft\Laravel\Request
11
 */
12
trait RequestTestable
13
{
14
    /**
15
     * Create an instance of \Illuminate\Http\Request for testing.
16
     * @param string $uri
17
     * @param string $method
18
     * @param array $parameters
19
     * @param array $cookies
20
     * @param array $files
21
     * @param array $server
22
     * @param null $content
23
     * @return \Illuminate\Http\Request
24
     */
25
    public function getRequestForTest(
26
        $uri = '/',
27
        string $method = 'GET',
28
        array $parameters = [],
29
        array $cookies = [],
30
        array $files = [],
31
        array $server = [],
32
        $content = null
33
    ) : \Illuminate\Http\Request
34
    {
35
        //create request
36
        return Request::create($uri, $method, $parameters, $cookies, $files, $server, $content);
37
    }
38
39
    /**
40
     * Create an instance of Illuminate\Http\Request for testing.
41
     * @param string $uri
42
     * @param string $method
43
     * @param array $parameters
44
     * @param array $cookies
45
     * @param array $files
46
     * @param array $server
47
     * @param null $content
48
     * @return \Illuminate\Http\Request
49
     */
50
    public function getRequestAndBindItForTest(
51
        $uri = '/',
52
        string $method = 'GET',
53
        array $parameters = [],
54
        array $cookies = [],
55
        array $files = [],
56
        array $server = [],
57
        $content = null
58
    ) : \Illuminate\Http\Request
59
    {
60
        //create request
61
        $request = $this->getRequestForTest($uri, $method, $parameters, $cookies, $files, $server, $content);
62
63
        //bind request istance and facade to this class
64
        $this->bindRequestForTest($request);
65
66
        //return the request
67
        return $request;
68
    }
69
70
    /**
71
     * @param \Illuminate\Http\Request $request
72
     */
73
    public function bindRequestForTest(\Illuminate\Http\Request $request)
74
    {
75
        //bind request istance to this class
76
        $this->app->instance(Request::class, $request);
77
        //bind request facade to this istance
78
        $this->app->instance('request', $request);
79
    }
80
81
    /**
82
     * Get request for upload file and bind.
83
     * Usefull for testing upload.
84
     * @param array $arrUploadedFiles are in the form ['image' => $UploadFile1, 'file' => $UploadFile2,....]
85
     * where $UploadFile1 and $uploadFile2 are istance of \Illuminate\Http\UploadedFile.
86
     * @return \Illuminate\Http\Request
87
     */
88
    public function getRequestAndBindItForUploadTest(array $arrUploadedFiles) : \Illuminate\Http\Request
89
    {
90
        //create request with uploaded files
91
        return $this->getRequestAndBindItForTest('/', 'GET', [], [], $arrUploadedFiles);
92
    }
93
}
94