public function testUpdate($fieldValues, $result, $exeption = null)
{
$common = self::TEST_UPDATE_COMMON;
$db = $this->getMockBuilder(ConnectionPool::class)->disableOriginalConstructor()->setMethods(['Execute'])->getMock();
/* @var $entity Entity1 */
$entity = $this->getMockBuilder(Entity1::class)->setMethods(['db', '_getReflectionClass'])->getMock();
$entity->expects($this->any())->method('db')->will($this->returnValue($db));
$entity->expects($this->any())->method('_getReflectionClass')->will($this->returnValue(new ReflectionClass(Entity1::class)));
if (empty($fieldValues)) {
$db->expects($this->never())->method('Execute');
} elseif (!$exeption) {
$template = "UPDATE `prices` SET " . $result[0] . " " . "WHERE `prices`.`price_id` = ? AND `prices`.`instance_type` = ? AND `prices`.`os` = ? LIMIT 1";
$db->expects($this->once())->method('Execute')->with($this->equalTo($template), $this->equalTo($result[1]));
}
if ($exeption != self::ERROR_MSG_PK_NOT_INITIALIZED) {
$entity->priceId = $common[0];
}
$entity->instanceType = $common[1];
$entity->os = $common[2];
$entity->cost = self::TEST_UPDATE_DEFAULT_COST;
try {
$exceptionMessage = null;
$entity->update($fieldValues);
} catch (ModelException $e) {
$exceptionMessage = $e->getMessage();
}
if ($exeption) {
$this->assertTrue(isset($exceptionMessage));
$this->assertContains($exeption, $exceptionMessage);
} else {
foreach ($fieldValues as $fieldName => $value) {
if (is_numeric($fieldName)) {
$this->assertEquals('cost', $value);
$this->assertEquals(self::TEST_UPDATE_DEFAULT_COST, $entity->{$value});
continue;
}
$this->assertEquals($entity->{$fieldName}, $value);
}
}
}