ary = new ArrayContainsComparator(
[
'ticket' => [
'title' => 'Bug should be fixed',
'user' => ['name' => 'Davert'],
'labels' => null
]
]
);
}
// tests
public function testInclusion()
{
$this->assertTrue($this->ary->containsArray(['name' => 'Davert']));
$this->assertTrue($this->ary->containsArray(['user' => ['name' => 'Davert']]));
$this->assertTrue($this->ary->containsArray(['ticket' => ['title' => 'Bug should be fixed']]));
$this->assertTrue($this->ary->containsArray(['ticket' => ['user' => ['name' => 'Davert']]]));
$this->assertTrue($this->ary->containsArray(['ticket' => ['labels' => null]]));
}
/**
* @Issue https://github.com/Codeception/Codeception/issues/2070
*/
public function testContainsArrayComparesArrayWithMultipleZeroesCorrectly()
{
$comparator = new ArrayContainsComparator([
'responseCode' => 0,
'message' => 'OK',
'data' => [9, 0, 0],
]);
$expectedArray = [
'responseCode' => 0,
'message' => 'OK',
'data' => [0, 0, 0],
];
$this->assertFalse($comparator->containsArray($expectedArray));
}
public function testContainsArrayComparesArrayWithMultipleIdenticalSubArraysCorrectly()
{
$comparator = new ArrayContainsComparator([
'responseCode' => 0,
'message' => 'OK',
'data' => [[9], [0], [0]],
]);
$expectedArray = [
'responseCode' => 0,
'message' => 'OK',
'data' => [[0], [0], [0]],
];
$this->assertFalse($comparator->containsArray($expectedArray));
}
public function testContainsArrayComparesArrayWithValueRepeatedMultipleTimesCorrectlyNegativeCase()
{
$comparator = new ArrayContainsComparator(['foo', 'foo', 'bar']);
$expectedArray = ['foo', 'foo', 'foo'];
$this->assertFalse($comparator->containsArray($expectedArray));
}
public function testContainsArrayComparesArrayWithValueRepeatedMultipleTimesCorrectlyPositiveCase()
{
$comparator = new ArrayContainsComparator(['foo', 'foo', 'bar']);
$expectedArray = ['foo', 'bar', 'foo'];
$this->assertTrue($comparator->containsArray($expectedArray));
}
/**
* @issue https://github.com/Codeception/Codeception/issues/2630
*/
public function testContainsArrayComparesNestedSequentialArraysCorrectlyWhenSecondValueIsTheSame()
{
$array = [
['2015-09-10', 'unknown-date-1'],
['2015-10-10', 'unknown-date-1'],
];
$comparator = new ArrayContainsComparator($array);
$this->assertTrue($comparator->containsArray($array));
}
/**
* @issue https://github.com/Codeception/Codeception/issues/2630
* @codingStandardsIgnoreStart
*/
public function testContainsArrayComparesNestedSequentialArraysCorrectlyWhenSecondValueIsTheSameButOrderOfItemsIsDifferent()
{
// @codingStandardsIgnoreEnd
$comparator = new ArrayContainsComparator([
[
"2015-09-10",
"unknown-date-1"
],
[
"2015-10-10",
"unknown-date-1"
]
]);
$expectedArray = [
["2015-10-10", "unknown-date-1"],
["2015-09-10", "unknown-date-1"],
];
$this->assertTrue($comparator->containsArray($expectedArray));
}
/**
* @issue https://github.com/Codeception/Codeception/issues/2630
*/
public function testContainsArrayComparesNestedSequentialArraysCorrectlyWhenSecondValueIsDifferent()
{
$comparator = new ArrayContainsComparator([
[
"2015-09-10",
"unknown-date-1"
],
[
"2015-10-10",
"unknown-date-2"
]
]);
$expectedArray = [
["2015-09-10", "unknown-date-1"],
["2015-10-10", "unknown-date-2"],
];
$this->assertTrue($comparator->containsArray($expectedArray));
}
/**
* @issue https://github.com/Codeception/Codeception/issues/2630
*/
public function testContainsArrayComparesNestedSequentialArraysCorrectlyWhenJsonHasMoreItemsThanExpectedArray()
{
$comparator = new ArrayContainsComparator([
[
"2015-09-10",
"unknown-date-1"
],
[
"2015-10-02",
"unknown-date-1"
],
[
"2015-10-10",
"unknown-date-2"
]
]);
$expectedArray = [
["2015-09-10", "unknown-date-1"],
["2015-10-10", "unknown-date-2"],
];
$this->assertTrue($comparator->containsArray($expectedArray));
}
/**
* @issue https://github.com/Codeception/Codeception/pull/2635
*/
public function testContainsMatchesSuperSetOfExpectedAssociativeArrayInsideSequentialArray()
{
$comparator = new ArrayContainsComparator([[
'id' => '1',
'title' => 'Game of Thrones',
'body' => 'You are so awesome',
'created_at' => '2015-12-16 10:42:20',
'updated_at' => '2015-12-16 10:42:20',
]]);
$expectedArray = [['id' => '1']];
$this->assertTrue($comparator->containsArray($expectedArray));
}
/**
* @issue https://github.com/Codeception/Codeception/issues/2630
*/
public function testContainsArrayWithUnexpectedLevel()
{
$comparator = new ArrayContainsComparator([
"level1" => [
"level2irrelevant" => [],
"level2" => [
[
"level3" => [
[
"level5irrelevant1" => "a1",
"level5irrelevant2" => "a2",
"level5irrelevant3" => "a3",
"level5irrelevant4" => "a4",
"level5irrelevant5" => "a5",
"level5irrelevant6" => "a6",
"level5irrelevant7" => "a7",
"level5irrelevant8" => "a8",
"int1" => 1
]
],
"level3irrelevant" => [
"level4irrelevant" => 1
]
],
[
"level3" => [
[
"level5irrelevant1" => "b1",
"level5irrelevant2" => "b2",
"level5irrelevant3" => "b3",
"level5irrelevant4" => "b4",
"level5irrelevant5" => "b5",
"level5irrelevant6" => "b6",
"level5irrelevant7" => "b7",
"level5irrelevant8" => "b8",
"int1" => 1
]
],
"level3irrelevant" => [
"level4irrelevant" => 2
]
]
]
]
]);
$expectedArray = [
'level1' => [
'level2' => [
[
'int1' => 1,
],
[
'int1' => 1,
],
]
]
];
$this->assertTrue(
$comparator->containsArray($expectedArray),
"- " . var_export($expectedArray, true) . "\n"
. "+ " . var_export($comparator->getHaystack(), true)
);
}
/**
* Simplified testcase for issue reproduced by testContainsArrayWithUnexpectedLevel
*/
public function testContainsArrayComparesSequentialArraysHavingDuplicateSubArraysCorrectly()
{
$comparator = new ArrayContainsComparator([[1],[1]]);
$expectedArray = [[1],[1]];
$this->assertTrue(
$comparator->containsArray($expectedArray),
"- " . var_export($expectedArray, true) . "\n"
. "+ " . var_export($comparator->getHaystack(), true)
);
}
/**
* @issue https://github.com/Codeception/Codeception/issues/5303
*/
public function testContainsArrayComparesAssociativeArrayIntersectCorrectlyWhenExpectedArrayKeyIsEmptyArray()
{
$comparator = new ArrayContainsComparator([
'key' => [
'foo' => 'bar',
],
]);
$expectedArray = [
'key' => [],
];
$this->assertTrue($comparator->containsArray($expectedArray));
}
}