Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F1426976
MockHttpTraitTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
9 KB
Referenced Files
None
Subscribers
None
MockHttpTraitTest.php
View Options
<?php
use
PHPUnit\Framework\AssertionFailedError
;
use
Psr\Http\Message\ResponseInterface
;
/**
* @covers \MockHttpTrait
* @group MediaWikiIntegrationTestCaseTest
*/
class
MockHttpTraitTest
extends
MediaWikiIntegrationTestCase
{
use
MockHttpTrait
;
public
function
testInstallMockHttpPreventsRequests
()
{
$this
->
installMockHttp
();
try
{
$this
->
getServiceContainer
()->
getHttpRequestFactory
()
->
create
(
'http://example.com'
);
$pass
=
false
;
}
catch
(
AssertionFailedError
$ex
)
{
$pass
=
true
;
}
$this
->
assertTrue
(
$pass
,
'HTTP request prevented'
);
}
public
function
testMakeMockHttpRequestFactoryPreventsRequests
()
{
try
{
$this
->
makeMockHttpRequestFactory
()->
create
(
'http://example.com'
);
$pass
=
false
;
}
catch
(
AssertionFailedError
$ex
)
{
$pass
=
true
;
}
$this
->
assertTrue
(
$pass
,
'HTTP request prevented'
);
}
public
function
provideFactoryRequestData
()
{
yield
'a request object'
=>
[
$this
->
makeFakeHttpRequest
(
'Hello World'
),
'Hello World'
];
yield
'just a string'
=>
[
'Hello World'
,
'Hello World'
];
yield
'a closure returning a request'
=>
[
function
()
{
return
$this
->
makeFakeHttpRequest
(
'Hello World'
);
},
'Hello World'
];
yield
'a list of requests'
=>
[
[
$this
->
makeFakeHttpRequest
(
'Hello World'
),
$this
->
makeFakeHttpRequest
(
'Yadda Yadda'
),
],
'Hello World'
];
}
/**
* @dataProvider provideFactoryRequestData
*/
public
function
testInstallMockHttpEmulatesRequests
(
$request
,
$expected
)
{
$this
->
installMockHttp
(
$request
);
$data
=
$this
->
getServiceContainer
()->
getHttpRequestFactory
()
->
get
(
'http://example.com'
);
$this
->
assertSame
(
$expected
,
$data
);
}
/**
* @dataProvider provideFactoryRequestData
*/
public
function
testMakeMockHttpRequestFactoryEmulatesRequests
(
$request
,
$expected
)
{
$data
=
$this
->
makeMockHttpRequestFactory
(
$request
)
->
get
(
'http://example.com'
);
$this
->
assertSame
(
$expected
,
$data
);
}
public
function
testFakeHttpRequestEmulatesRequests
()
{
$client
=
$this
->
makeFakeHttpRequest
(
'Hello World'
);
$called
=
0
;
$callback
=
function
(
$resource
,
$buffer
)
use
(
&
$called
)
{
$this
->
assertSame
(
'Hello World'
,
$buffer
);
$called
++;
return
strlen
(
$buffer
);
};
$client
->
setCallback
(
$callback
);
$client
->
execute
();
$this
->
assertSame
(
1
,
$called
,
'Callback was called'
);
$this
->
assertSame
(
'Hello World'
,
$client
->
getContent
()
);
}
public
static
function
provideMultiRequestData
()
{
yield
[
[
'a'
=>
[
'url'
=>
'http://a.example.com'
,
],
[
'url'
=>
'http://b.example.com'
,
],
[
'url'
=>
'http://c.example.com'
,
],
],
[
'a'
=>
'Hello World'
,
[
'code'
=>
404
,
'body'
=>
'not found'
],
[
'response'
=>
[
'code'
=>
0
,
'error'
=>
'timeout'
]
]
],
[
'a'
=>
[
'url'
=>
'http://a.example.com'
,
'response'
=>
[
// specifics
'body'
=>
'Hello World'
,
// defaults
'code'
=>
200
,
'reason'
=>
''
,
'headers'
=>
[],
'error'
=>
''
,
// numeric keys
0
=>
200
,
// code
1
=>
''
,
// reason
2
=>
[],
// headers
3
=>
'Hello World'
,
// body
4
=>
''
,
// error
],
],
[
'url'
=>
'http://b.example.com'
,
'response'
=>
[
// specifics
'code'
=>
404
,
'body'
=>
'not found'
,
// defaults
'reason'
=>
''
,
'headers'
=>
[],
'error'
=>
''
,
// numeric keys
0
=>
404
,
// code
1
=>
''
,
// reason
2
=>
[],
// headers
3
=>
'not found'
,
// body
4
=>
''
,
// error
],
],
[
'url'
=>
'http://c.example.com'
,
'response'
=>
[
// specifics
'code'
=>
0
,
'error'
=>
'timeout'
,
// defaults
'reason'
=>
''
,
'headers'
=>
[],
'body'
=>
''
,
// numeric keys
0
=>
0
,
// code
1
=>
''
,
// reason
2
=>
[],
// headers
3
=>
''
,
// body
4
=>
'timeout'
,
// error
],
],
]
];
}
/**
* @dataProvider provideMultiRequestData
*/
public
function
testFakeHttpMultiClientEmulatesRequests
(
$requests
,
$responses
,
$expected
)
{
$client
=
$this
->
makeFakeHttpMultiClient
(
$responses
);
$data
=
$client
->
runMulti
(
$requests
);
$this
->
assertSame
(
$expected
,
$data
);
}
/**
* @dataProvider provideMultiRequestData
*/
public
function
testInstallMockHttpEmulatesMultiClient
(
$requests
,
$responses
,
$expected
)
{
$client
=
$this
->
makeFakeHttpMultiClient
(
$responses
);
$this
->
installMockHttp
(
$client
);
$client
=
$this
->
getServiceContainer
()->
getHttpRequestFactory
()
->
createMultiClient
();
$data
=
$client
->
runMulti
(
$requests
);
$this
->
assertSame
(
$expected
,
$data
);
}
public
function
testConsecutiveRequests
()
{
$responses
=
[
$this
->
makeFakeHttpRequest
(
'a'
),
$this
->
makeFakeHttpRequest
(
'b'
),
];
$this
->
installMockHttp
(
$responses
);
$clientFactory
=
$this
->
getServiceContainer
()->
getHttpRequestFactory
();
$this
->
assertSame
(
'a'
,
$clientFactory
->
get
(
'http://example.com'
)
);
$this
->
assertSame
(
'b'
,
$clientFactory
->
get
(
'http://example.com'
)
);
try
{
$clientFactory
->
get
(
'http://example.com'
);
$pass
=
false
;
}
catch
(
Error
$ex
)
{
$pass
=
true
;
$this
->
assertSame
(
'Call to a member function execute() on null'
,
$ex
->
getMessage
()
);
}
$this
->
assertTrue
(
$pass
,
'Can not consume more requests as defined.'
);
}
/**
* @dataProvider provideMultiRequestData
*/
public
function
testMakeMockHttpRequestFactoryEmulatesMultiClient
(
$requests
,
$responses
,
$expected
)
{
$client
=
$this
->
makeFakeHttpMultiClient
(
$responses
);
$client
=
$this
->
makeMockHttpRequestFactory
(
$client
)
->
createMultiClient
();
$data
=
$client
->
runMulti
(
$requests
);
$this
->
assertSame
(
$expected
,
$data
);
}
/**
* @dataProvider provideMultiRequestData
*/
public
function
testMakeMockHttpRequestFactoryEmulatesMultipleMultiClients
(
$requests
,
$responses
,
$expected
)
{
$clients
=
[
$this
->
makeFakeHttpMultiClient
(
$responses
),
$this
->
makeFakeHttpMultiClient
(
$responses
),
];
$factory
=
$this
->
makeMockHttpRequestFactory
(
$clients
);
foreach
(
$clients
as
$unused
)
{
$client
=
$factory
->
createMultiClient
();
$data
=
$client
->
runMulti
(
$requests
);
$this
->
assertSame
(
$expected
,
$data
);
}
}
public
static
function
provideGuzzleClientData
()
{
yield
[
'Hello Wörld'
,
new
GuzzleHttp\Psr7\Response
(
200
,
[],
'Hello Wörld'
),
];
yield
[
new
GuzzleHttp\Psr7\Response
(
404
,
[
'Test'
=>
'hi'
],
'nope'
),
new
GuzzleHttp\Psr7\Response
(
404
,
[
'Test'
=>
'hi'
],
'nope'
),
];
}
/**
* @dataProvider provideGuzzleClientData
*/
public
function
testFakeGuzzleClientEmulatesRequests
(
$response
,
$expected
)
{
$client
=
$this
->
makeFakeGuzzleClient
(
$response
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
request
(
'TEST'
,
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
get
(
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
put
(
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
post
(
'http://b.example.com'
)
);
}
/**
* @dataProvider provideGuzzleClientData
*/
public
function
testInstallMockHttpEmulatesGuzzleClient
(
$response
,
$expected
)
{
$client
=
$this
->
makeFakeGuzzleClient
(
$response
);
$this
->
installMockHttp
(
$client
);
$client
=
$this
->
getServiceContainer
()->
getHttpRequestFactory
()
->
createGuzzleClient
();
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
request
(
'TEST'
,
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
get
(
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
put
(
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
post
(
'http://b.example.com'
)
);
}
/**
* @dataProvider provideGuzzleClientData
*/
public
function
testMakeMockHttpRequestFactoryEmulatesGuzzleClient
(
$response
,
$expected
)
{
$client
=
$this
->
makeFakeGuzzleClient
(
$response
);
$client
=
$this
->
makeMockHttpRequestFactory
(
$client
)
->
createGuzzleClient
();
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
request
(
'TEST'
,
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
get
(
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
put
(
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
post
(
'http://b.example.com'
)
);
}
/**
* @dataProvider provideGuzzleClientData
*/
public
function
testMakeMockHttpRequestFactoryEmulatesMultipleGuzzleRequests
(
$response
,
$expected
)
{
$fakeClients
=
[
$this
->
makeFakeGuzzleClient
(
$response
),
$this
->
makeFakeGuzzleClient
(
$response
),
];
$factory
=
$this
->
makeMockHttpRequestFactory
(
$fakeClients
);
foreach
(
$fakeClients
as
$unused
)
{
$client
=
$factory
->
createGuzzleClient
();
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
request
(
'TEST'
,
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
get
(
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
put
(
'http://b.example.com'
)
);
$this
->
assertGuzzleResponse
(
$expected
,
$client
->
post
(
'http://b.example.com'
)
);
}
}
/**
* @param ResponseInterface $expected
* @param ResponseInterface $actual
*/
private
function
assertGuzzleResponse
(
$expected
,
ResponseInterface
$actual
)
{
$this
->
assertSame
(
$expected
->
getStatusCode
(),
$actual
->
getStatusCode
(),
'Status'
);
$this
->
assertSame
(
$expected
->
getHeaders
(),
$actual
->
getHeaders
(),
'Headers'
);
$this
->
assertSame
(
strval
(
$expected
->
getBody
()
),
strval
(
$actual
->
getBody
()
),
'Body'
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, May 16, 14:01 (1 d, 18 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
78/ee/f576912ee4a519abd4dc08237946
Default Alt Text
MockHttpTraitTest.php (9 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment