mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge pull request #7486 from wernerkrauss/improve-test-dataproviders
Improve test dataproviders
This commit is contained in:
commit
5203ddff42
@ -16,25 +16,38 @@ class SapphireTestTest extends SapphireTest
|
|||||||
public function provideResolveFixturePath()
|
public function provideResolveFixturePath()
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
[__DIR__ . '/CsvBulkLoaderTest.yml', './CsvBulkLoaderTest.yml'],
|
'sameDirectory' => [
|
||||||
//same dir
|
__DIR__ . '/CsvBulkLoaderTest.yml',
|
||||||
[__DIR__ . '/CsvBulkLoaderTest.yml', 'CsvBulkLoaderTest.yml'],
|
'./CsvBulkLoaderTest.yml',
|
||||||
// Filename only
|
'Could not resolve fixture path relative from same directory',
|
||||||
[dirname(__DIR__) . '/ORM/DataObjectTest.yml', '../ORM/DataObjectTest.yml'],
|
],
|
||||||
// Parent path
|
'filenameOnly' => [
|
||||||
[dirname(__DIR__) . '/ORM/DataObjectTest.yml', dirname(__DIR__) . '/ORM/DataObjectTest.yml'],
|
__DIR__ . '/CsvBulkLoaderTest.yml',
|
||||||
// Absolute path
|
'CsvBulkLoaderTest.yml',
|
||||||
|
'Could not resolve fixture path from filename only',
|
||||||
|
],
|
||||||
|
'parentPath' => [
|
||||||
|
dirname(__DIR__) . '/ORM/DataObjectTest.yml',
|
||||||
|
'../ORM/DataObjectTest.yml',
|
||||||
|
'Could not resolve fixture path from parent path',
|
||||||
|
],
|
||||||
|
'absolutePath' => [
|
||||||
|
dirname(__DIR__) . '/ORM/DataObjectTest.yml',
|
||||||
|
dirname(__DIR__) . '/ORM/DataObjectTest.yml',
|
||||||
|
'Could not relsolve fixture path from absolute path',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider provideResolveFixturePath
|
* @dataProvider provideResolveFixturePath
|
||||||
*/
|
*/
|
||||||
public function testResolveFixturePath($expected, $path)
|
public function testResolveFixturePath($expected, $path, $message)
|
||||||
{
|
{
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$expected,
|
$expected,
|
||||||
$this->resolveFixturePath($path)
|
$this->resolveFixturePath($path),
|
||||||
|
$message
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,10 +59,10 @@ class SapphireTestTest extends SapphireTest
|
|||||||
$this->logOut();
|
$this->logOut();
|
||||||
$this->assertFalse(Permission::check('ADMIN'));
|
$this->assertFalse(Permission::check('ADMIN'));
|
||||||
$this->actWithPermission('ADMIN', function () {
|
$this->actWithPermission('ADMIN', function () {
|
||||||
$this->assertTrue(Permission::check('ADMIN'));
|
$this->assertTrue(Permission::check('ADMIN'), 'Member should now have ADMIN role');
|
||||||
// check nested actAs calls work as expected
|
// check nested actAs calls work as expected
|
||||||
Member::actAs(null, function () {
|
Member::actAs(null, function () {
|
||||||
$this->assertFalse(Permission::check('ADMIN'));
|
$this->assertFalse(Permission::check('ADMIN'), 'Member should not act as ADMIN any more after reset');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -59,9 +72,16 @@ class SapphireTestTest extends SapphireTest
|
|||||||
*/
|
*/
|
||||||
public function testCreateMemberWithPermission()
|
public function testCreateMemberWithPermission()
|
||||||
{
|
{
|
||||||
$this->assertCount(0, Member::get()->filter(['Email' => 'TESTPERM@example.org']));
|
$this->assertEmpty(
|
||||||
|
Member::get()->filter(['Email' => 'TESTPERM@example.org']),
|
||||||
|
'DB should not have the test member created when the test starts'
|
||||||
|
);
|
||||||
$this->createMemberWithPermission('TESTPERM');
|
$this->createMemberWithPermission('TESTPERM');
|
||||||
$this->assertCount(1, Member::get()->filter(['Email' => 'TESTPERM@example.org']));
|
$this->assertCount(
|
||||||
|
1,
|
||||||
|
Member::get()->filter(['Email' => 'TESTPERM@example.org']),
|
||||||
|
'Database should now contain the test member'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,13 +89,30 @@ class SapphireTestTest extends SapphireTest
|
|||||||
*
|
*
|
||||||
* @param $match
|
* @param $match
|
||||||
* @param $itemsForList
|
* @param $itemsForList
|
||||||
|
*
|
||||||
* @testdox Has assertion assertListAllMatch
|
* @testdox Has assertion assertListAllMatch
|
||||||
*/
|
*/
|
||||||
public function testAssertListAllMatch($match, $itemsForList)
|
public function testAssertListAllMatch($match, $itemsForList, $message)
|
||||||
{
|
{
|
||||||
$list = $this->generateArrayListFromItems($itemsForList);
|
$list = $this->generateArrayListFromItems($itemsForList);
|
||||||
|
|
||||||
$this->assertListAllMatch($match, $list);
|
$this->assertListAllMatch($match, $list, $message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* generate SS_List as this is not possible in dataProvider
|
||||||
|
*
|
||||||
|
* @param array $itemsForList
|
||||||
|
*
|
||||||
|
* @return ArrayList
|
||||||
|
*/
|
||||||
|
private function generateArrayListFromItems($itemsForList)
|
||||||
|
{
|
||||||
|
$list = ArrayList::create();
|
||||||
|
foreach ($itemsForList as $data) {
|
||||||
|
$list->push(Member::create($data));
|
||||||
|
}
|
||||||
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -100,6 +137,7 @@ class SapphireTestTest extends SapphireTest
|
|||||||
*
|
*
|
||||||
* @param $matches
|
* @param $matches
|
||||||
* @param $itemsForList
|
* @param $itemsForList
|
||||||
|
*
|
||||||
* @testdox Has assertion assertListContains
|
* @testdox Has assertion assertListContains
|
||||||
*/
|
*/
|
||||||
public function testAssertListContains($matches, $itemsForList)
|
public function testAssertListContains($matches, $itemsForList)
|
||||||
@ -109,7 +147,7 @@ class SapphireTestTest extends SapphireTest
|
|||||||
$list->push(Member::create(['FirstName' => 'Bar', 'Surname' => 'Bar']));
|
$list->push(Member::create(['FirstName' => 'Bar', 'Surname' => 'Bar']));
|
||||||
$list->push(Member::create(['FirstName' => 'Baz', 'Surname' => 'Baz']));
|
$list->push(Member::create(['FirstName' => 'Baz', 'Surname' => 'Baz']));
|
||||||
|
|
||||||
$this->assertListContains($matches, $list);
|
$this->assertListContains($matches, $list, 'The list does not contain the expected items');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -143,7 +181,7 @@ class SapphireTestTest extends SapphireTest
|
|||||||
{
|
{
|
||||||
$list = $this->generateArrayListFromItems($itemsForList);
|
$list = $this->generateArrayListFromItems($itemsForList);
|
||||||
|
|
||||||
$this->assertListNotContains($matches, $list);
|
$this->assertListNotContains($matches, $list, 'List contains forbidden items');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -151,6 +189,7 @@ class SapphireTestTest extends SapphireTest
|
|||||||
*
|
*
|
||||||
* @param $matches
|
* @param $matches
|
||||||
* @param $itemsForList
|
* @param $itemsForList
|
||||||
|
*
|
||||||
* @testdox assertion assertListNotContains throws a exception when a matching item is found in the list
|
* @testdox assertion assertListNotContains throws a exception when a matching item is found in the list
|
||||||
*
|
*
|
||||||
* @expectedException \PHPUnit_Framework_ExpectationFailedException
|
* @expectedException \PHPUnit_Framework_ExpectationFailedException
|
||||||
@ -165,7 +204,6 @@ class SapphireTestTest extends SapphireTest
|
|||||||
$this->assertListNotContains($matches, $list);
|
$this->assertListNotContains($matches, $list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider \SilverStripe\Dev\Tests\SapphireTestTest\DataProvider::provideEqualListsWithEmptyList()
|
* @dataProvider \SilverStripe\Dev\Tests\SapphireTestTest\DataProvider::provideEqualListsWithEmptyList()
|
||||||
* @testdox Has assertion assertListEquals
|
* @testdox Has assertion assertListEquals
|
||||||
@ -177,7 +215,7 @@ class SapphireTestTest extends SapphireTest
|
|||||||
{
|
{
|
||||||
$list = $this->generateArrayListFromItems($itemsForList);
|
$list = $this->generateArrayListFromItems($itemsForList);
|
||||||
|
|
||||||
$this->assertListEquals($matches, $list);
|
$this->assertListEquals($matches, $list, 'Lists do not equal');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -195,19 +233,4 @@ class SapphireTestTest extends SapphireTest
|
|||||||
|
|
||||||
$this->assertListEquals($matches, $list);
|
$this->assertListEquals($matches, $list);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* generate SS_List as this is not possible in dataProvider
|
|
||||||
*
|
|
||||||
* @param $itemsForList array
|
|
||||||
* @return ArrayList
|
|
||||||
*/
|
|
||||||
private function generateArrayListFromItems($itemsForList)
|
|
||||||
{
|
|
||||||
$list = ArrayList::create();
|
|
||||||
foreach ($itemsForList as $data) {
|
|
||||||
$list->push(Member::create($data));
|
|
||||||
}
|
|
||||||
return $list;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -7,12 +7,17 @@ use SilverStripe\Dev\TestOnly;
|
|||||||
class DataProvider implements TestOnly
|
class DataProvider implements TestOnly
|
||||||
{
|
{
|
||||||
protected static $oneItemList = [
|
protected static $oneItemList = [
|
||||||
['FirstName' => 'Ingo', 'Surname' => 'Schommer']
|
['FirstName' => 'Ingo', 'Surname' => 'Schommer'],
|
||||||
];
|
];
|
||||||
|
|
||||||
protected static $twoItemList = [
|
protected static $twoItemList = [
|
||||||
['FirstName' => 'Ingo', 'Surname' => 'Schommer'],
|
['FirstName' => 'Ingo', 'Surname' => 'Schommer'],
|
||||||
['FirstName' => 'Sam', 'Surname' => 'Minnee']
|
['FirstName' => 'Sam', 'Surname' => 'Minnee'],
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $memberList = [
|
||||||
|
['FirstName' => 'Ingo', 'Surname' => 'Schommer', 'Locale' => 'en_US'],
|
||||||
|
['FirstName' => 'Sam', 'Surname' => 'Minnee', 'Locale' => 'en_US'],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -21,11 +26,11 @@ class DataProvider implements TestOnly
|
|||||||
public static function provideEqualListsWithEmptyList()
|
public static function provideEqualListsWithEmptyList()
|
||||||
{
|
{
|
||||||
return array_merge(
|
return array_merge(
|
||||||
[ //empty list
|
|
||||||
[
|
[
|
||||||
|
'emptyLists' => [
|
||||||
[],
|
[],
|
||||||
[]
|
[],
|
||||||
]
|
],
|
||||||
],
|
],
|
||||||
self::provideEqualLists()
|
self::provideEqualLists()
|
||||||
);
|
);
|
||||||
@ -38,37 +43,37 @@ class DataProvider implements TestOnly
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
[
|
[
|
||||||
[ //one param
|
'oneParameterOneItem' => [
|
||||||
['FirstName' => 'Ingo']
|
|
||||||
],
|
|
||||||
self::$oneItemList
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[ //two params
|
|
||||||
['FirstName' => 'Ingo', 'Surname' => 'Schommer']
|
|
||||||
],
|
|
||||||
self::$oneItemList
|
|
||||||
],
|
|
||||||
[ //only one param
|
|
||||||
[
|
|
||||||
['FirstName' => 'Ingo'],
|
['FirstName' => 'Ingo'],
|
||||||
['FirstName' => 'Sam']
|
|
||||||
],
|
],
|
||||||
self::$twoItemList
|
self::$oneItemList,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
[ //two params
|
'twoParametersOneItem' => [
|
||||||
['FirstName' => 'Ingo', 'Surname' => 'Schommer'],
|
['FirstName' => 'Ingo', 'Surname' => 'Schommer'],
|
||||||
['FirstName' => 'Sam', 'Surname' => 'Minnee']
|
|
||||||
],
|
],
|
||||||
self::$twoItemList
|
self::$oneItemList,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
[ //mixed
|
'oneParameterTwoItems' => [
|
||||||
['FirstName' => 'Ingo', 'Surname' => 'Schommer'],
|
['FirstName' => 'Ingo'],
|
||||||
['FirstName' => 'Sam']
|
['FirstName' => 'Sam'],
|
||||||
],
|
],
|
||||||
self::$twoItemList
|
self::$twoItemList,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'twoParametersTwoItems' => [
|
||||||
|
['FirstName' => 'Ingo', 'Surname' => 'Schommer'],
|
||||||
|
['FirstName' => 'Sam', 'Surname' => 'Minnee'],
|
||||||
|
],
|
||||||
|
self::$twoItemList,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'mixedParametersTwoItems' => [
|
||||||
|
['FirstName' => 'Ingo', 'Surname' => 'Schommer'],
|
||||||
|
['FirstName' => 'Sam'],
|
||||||
|
],
|
||||||
|
self::$twoItemList,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -80,40 +85,38 @@ class DataProvider implements TestOnly
|
|||||||
{
|
{
|
||||||
|
|
||||||
return [
|
return [
|
||||||
[ //empty list
|
|
||||||
[
|
[
|
||||||
['FirstName' => 'Ingo']
|
'checkAgainstEmptyList' => [
|
||||||
|
['FirstName' => 'Ingo'],
|
||||||
],
|
],
|
||||||
[]
|
[],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
[ //one item expected
|
'oneItemExpectedListContainsMore' => [
|
||||||
['FirstName' => 'Ingo']
|
['FirstName' => 'Ingo'],
|
||||||
]
|
],
|
||||||
,
|
self::$twoItemList,
|
||||||
self::$twoItemList
|
|
||||||
],
|
],
|
||||||
[ //one item with wrong param
|
|
||||||
[
|
[
|
||||||
|
'oneExpectationHasWrontParamter' => [
|
||||||
['FirstName' => 'IngoXX'],
|
['FirstName' => 'IngoXX'],
|
||||||
['FirstName' => 'Sam']
|
['FirstName' => 'Sam'],
|
||||||
]
|
],
|
||||||
,
|
self::$twoItemList,
|
||||||
self::$twoItemList
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
[ //two params wrong
|
'differentParametersInDifferentItemsAreWrong' => [
|
||||||
['FirstName' => 'IngoXXX', 'Surname' => 'Schommer'],
|
['FirstName' => 'IngoXXX', 'Surname' => 'Schommer'],
|
||||||
['FirstName' => 'Sam', 'Surname' => 'MinneeXXX']
|
['FirstName' => 'Sam', 'Surname' => 'MinneeXXX'],
|
||||||
],
|
],
|
||||||
self::$twoItemList
|
self::$twoItemList,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
[ //mixed
|
'differentParametersNotMatching' => [
|
||||||
['FirstName' => 'Daniel', 'Surname' => 'Foo'],
|
['FirstName' => 'Daniel', 'Surname' => 'Foo'],
|
||||||
['FirstName' => 'Dan']
|
['FirstName' => 'Dan'],
|
||||||
],
|
],
|
||||||
self::$twoItemList
|
self::$twoItemList,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -124,32 +127,31 @@ class DataProvider implements TestOnly
|
|||||||
public static function provideNotContainingList()
|
public static function provideNotContainingList()
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
[ //empty list
|
'listIsEmpty' => [
|
||||||
[
|
[
|
||||||
['FirstName' => 'Ingo']
|
['FirstName' => 'Ingo'],
|
||||||
],
|
],
|
||||||
[]
|
[],
|
||||||
],
|
],
|
||||||
|
'oneItemIsExpected' => [
|
||||||
[
|
[
|
||||||
[ //one item expected
|
['FirstName' => 'Sam'],
|
||||||
['FirstName' => 'Sam']
|
|
||||||
]
|
|
||||||
,
|
|
||||||
self::$oneItemList
|
|
||||||
],
|
],
|
||||||
|
self::$oneItemList,
|
||||||
|
],
|
||||||
|
'twoParametersAreWrong' => [
|
||||||
[
|
[
|
||||||
[ //two params wrong
|
|
||||||
['FirstName' => 'IngoXXX', 'Surname' => 'Schommer'],
|
['FirstName' => 'IngoXXX', 'Surname' => 'Schommer'],
|
||||||
['FirstName' => 'Sam', 'Surname' => 'MinneeXXX']
|
['FirstName' => 'Sam', 'Surname' => 'MinneeXXX'],
|
||||||
],
|
],
|
||||||
self::$twoItemList
|
self::$twoItemList,
|
||||||
],
|
],
|
||||||
|
'mixedList' => [
|
||||||
[
|
[
|
||||||
[ //mixed
|
|
||||||
['FirstName' => 'Daniel', 'Surname' => 'Foo'],
|
['FirstName' => 'Daniel', 'Surname' => 'Foo'],
|
||||||
['FirstName' => 'Dan']
|
['FirstName' => 'Dan'],
|
||||||
],
|
],
|
||||||
self::$twoItemList
|
self::$twoItemList,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -159,14 +161,17 @@ class DataProvider implements TestOnly
|
|||||||
*/
|
*/
|
||||||
public static function provideAllMatchingList()
|
public static function provideAllMatchingList()
|
||||||
{
|
{
|
||||||
$list = [
|
|
||||||
['FirstName' => 'Ingo', 'Surname' => 'Schommer', 'Locale' => 'en_US'],
|
|
||||||
['FirstName' => 'Sam', 'Surname' => 'Minnee', 'Locale' => 'en_US']
|
|
||||||
];
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
[[], $list], //empty match
|
'emptyMatch' => [
|
||||||
[['Locale' => 'en_US'], $list] //all items have this field set
|
[],
|
||||||
|
self::$memberList,
|
||||||
|
'empty list did not match',
|
||||||
|
],
|
||||||
|
'allItemsWithLocaleSet' => [
|
||||||
|
['Locale' => 'en_US'],
|
||||||
|
self::$memberList,
|
||||||
|
'list with Locale set in all items did not match',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,13 +180,8 @@ class DataProvider implements TestOnly
|
|||||||
*/
|
*/
|
||||||
public static function provideNotMatchingList()
|
public static function provideNotMatchingList()
|
||||||
{
|
{
|
||||||
$list = [
|
|
||||||
['FirstName' => 'Ingo', 'Surname' => 'Schommer', 'Locale' => 'en_US'],
|
|
||||||
['FirstName' => 'Sam', 'Surname' => 'Minnee', 'Locale' => 'en_US']
|
|
||||||
];
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
[['FirstName' => 'Ingo'], $list] //not all items have this field set
|
'notAllItemsHaveLocaleSet' => [['FirstName' => 'Ingo'], self::$memberList],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user