public function testPartiallyUpdate()
 {
     $this->assertCount(0, $this->logrepo->findAll());
     $user = new User();
     $user->setName('firstName');
     $user->setCompany('firstCompany');
     $this->em->persist($user);
     $this->em->flush();
     $this->assertCount(1, $this->logrepo->findAll());
     $this->assertEquals(array('name'), $user->getFieldsToSchedule());
     $this->assertEquals('firstName', $user->getName());
     $this->assertEquals('firstCompany', $user->getCompany());
     $user->setName('firstName new');
     $user->setCompany('firstCompany new');
     $user->setScheduledChangeDate(new \DateTime("+ 100 days"));
     $this->em->persist($user);
     $this->em->flush();
     $logs = $this->logrepo->findAll();
     $this->assertCount(2, $logs);
     $this->assertEquals('firstName', $user->getName());
     $this->assertEquals('firstCompany new', $user->getCompany());
     $changes = $this->changeRepo->findAll();
     $this->assertCount(1, $changes);
     $change = array_pop($changes);
     $data = $change->getData();
     $dataold = $change->getOldData();
     $this->assertEquals($change->getObjectId(), $user->getId());
     $this->assertEquals($change->getObjectClass(), get_class($user));
     $this->assertArrayHasKey('name', $data);
     $this->assertEquals('firstName new', $data['name']);
     $this->assertArrayNotHasKey('company', $data);
     $this->assertArrayHasKey('name', $dataold);
     $this->assertEquals('firstName', $dataold['name']);
     $log = array_pop($logs);
     $data = $log->getData();
     $dataold = $log->getOldData();
     $this->assertEquals($log->getObjectId(), $user->getId());
     $this->assertEquals($log->getObjectClass(), get_class($user));
     $this->assertArrayHasKey('company', $data);
     $this->assertEquals('firstCompany new', $data['company']);
     $this->assertArrayNotHasKey('name', $data);
     $this->assertArrayHasKey('company', $dataold);
     $this->assertEquals('firstCompany', $dataold['company']);
 }
 public function testEditMany2Many()
 {
     $this->assertCount(0, $this->logrepo->findAll());
     $art0 = new Article();
     $art0->setTitle('Title');
     $art1 = new Article();
     $art1->setTitle('Title1');
     $art2 = new Article();
     $art2->setTitle('Title2');
     $user = new User();
     $user->setName('Username');
     $user1 = new User();
     $user1->setName('Username2');
     $user2 = new User();
     $user2->setName('Username3');
     $this->em->persist($user);
     $this->em->persist($user1);
     $this->em->persist($user2);
     $this->em->persist($art0);
     $this->em->persist($art1);
     $this->em->persist($art2);
     $this->em->flush();
     $logs = $this->mainlogrepo->findAll();
     $this->assertCount(6, $logs);
     $user->addArticle($art0);
     $user->addArticle($art1);
     $this->em->flush();
     $logs = $this->mainlogrepo->findAll();
     $this->assertCount(8, $logs);
     $logs = $this->mainlogrepo->getLogsByObject($user);
     $this->assertCount(3, $logs);
     $manylog = array_shift($logs);
     $this->assertInstanceOf(get_class(new LogMany2Many()), $manylog);
     $this->assertEquals($manylog->getInverseClass(), get_class($art1));
     $this->assertEquals($manylog->getInverseId(), $art1->getId());
     $this->assertEquals($manylog->getObjectClass(), get_class($user));
     $this->assertEquals($manylog->getObjectId(), $user->getId());
     $manylog = array_shift($logs);
     $this->assertInstanceOf(get_class(new LogMany2Many()), $manylog);
     $this->assertEquals($manylog->getInverseClass(), get_class($art0));
     $this->assertEquals($manylog->getInverseId(), $art0->getId());
     $this->assertEquals($manylog->getObjectClass(), get_class($user));
     $this->assertEquals($manylog->getObjectId(), $user->getId());
     $logs = $this->logrepoMany->getLogsByObject($art1);
     $this->assertCount(1, $logs);
     $manylog = array_pop($logs);
     $this->assertInstanceOf(get_class(new LogMany2Many()), $manylog, true, true);
     $this->assertEquals($manylog->getInverseClass(), get_class($art1));
     $this->assertEquals($manylog->getInverseId(), $art1->getId());
     $this->assertEquals($manylog->getObjectClass(), get_class($user));
     $this->assertEquals($manylog->getObjectId(), $user->getId());
     $logs = $this->logrepoMany->getLogsByObject($art0);
     $this->assertCount(1, $logs);
     $manylog = array_pop($logs);
     $this->assertInstanceOf(get_class(new LogMany2Many()), $manylog, true, true);
     $this->assertEquals($manylog->getInverseClass(), get_class($art0));
     $this->assertEquals($manylog->getInverseId(), $art0->getId());
     $this->assertEquals($manylog->getObjectClass(), get_class($user));
     $this->assertEquals($manylog->getObjectId(), $user->getId());
 }