示例#1
0
 /**
  * @covers ::updateInverse
  */
 public function testUpdateInverse()
 {
     $user = new User();
     $post = new Post();
     $user->getPosts()->add($post);
     $this->assertSame($user, $post->getUser());
 }
示例#2
0
 /**
  * @coversNothing
  */
 public function testRels()
 {
     $user = User::find(1);
     $user->name = 'New Name';
     $user->isBlocked = true;
     $user->object = new SaveableObject();
     $user->object->setVar('value');
     $address = $user->getAddress();
     $address->location = 'Somewhere else';
     $address->zipCode = '1234';
     $posts = $user->getPosts();
     $post = $posts->getFirst();
     $post->body = 'Changed Body';
     $post = new Post(['title' => 'new post', 'body' => 'Lorem Ipsum', 'price' => 123.23]);
     $posts->add($post);
     $tags = Tag::whereIn('id', [1, 2])->load();
     $post->getTags()->addModels($tags);
     $this->assertQueries(['SELECT `User`.* FROM `User` WHERE (`id` = 1) AND (`User`.`deletedAt` IS NULL) LIMIT 1', 'SELECT `Address`.* FROM `Address` WHERE (`id` IN (1))', 'SELECT `Post`.`class`, `Post`.* FROM `Post` WHERE (`userId` IN (1))', 'SELECT `Tag`.* FROM `Tag` WHERE (`id` IN (1, 2))']);
     User::save($user);
     $this->assertQueries(['SELECT `User`.* FROM `User` WHERE (`id` = 1) AND (`User`.`deletedAt` IS NULL) LIMIT 1', 'SELECT `Address`.* FROM `Address` WHERE (`id` IN (1))', 'SELECT `Post`.`class`, `Post`.* FROM `Post` WHERE (`userId` IN (1))', 'SELECT `Tag`.* FROM `Tag` WHERE (`id` IN (1, 2))', 'INSERT INTO `Post` (`id`, `title`, `body`, `price`, `tags`, `createdAt`, `updatedAt`, `publishedAt`, `userId`, `class`) VALUES (NULL, "new post", "Lorem Ipsum", "123.23", NULL, NULL, NULL, NULL, NULL, "Harp\\Harp\\Test\\TestModel\\Post")', 'INSERT INTO `PostTag` (`id`, `postId`, `tagId`) VALUES (NULL, NULL, 1), (NULL, NULL, 2)', 'UPDATE `User` SET `name` = "New Name", `isBlocked` = 1, `object` = "C:41:"Harp\\Harp\\Test\\Integration\\SaveableObject":22:{a:1:{i:0;s:5:"value";}}" WHERE (`id` = 1)', 'UPDATE `Address` SET `zipCode` = "1234", `location` = "Somewhere else" WHERE (`id` = 1)', 'UPDATE `Post` SET `body` = CASE `id` WHEN 1 THEN "Changed Body" ELSE `body` END, `userId` = CASE `id` WHEN 5 THEN 1 ELSE `userId` END WHERE (`id` IN (1, 5))', 'UPDATE `PostTag` SET `postId` = CASE `id` WHEN 4 THEN "5" WHEN 5 THEN "5" ELSE `postId` END WHERE (`id` IN (4, 5))']);
     Container::clear();
     $user = User::find(1);
     $this->assertEquals('New Name', $user->name);
     $this->assertEquals('value', $user->object->getVar());
     $this->assertEquals(true, $user->isBlocked);
     $address = $user->getAddress();
     $this->assertEquals('Somewhere else', $address->location);
     $this->assertEquals('1234', $address->zipCode);
     $posts = $user->getPosts();
     $post = $posts->getFirst();
     $this->assertEquals('Changed Body', $post->body);
     $newPost = Post::where('title', 'new post')->loadFirst();
     $this->assertTrue($posts->has($newPost));
     $this->assertEquals([1, 2], $newPost->getTags()->get()->getIds());
 }
示例#3
0
 public function testTest()
 {
     $user = User::find(1);
     $this->assertEmpty($user->getUnmapped());
     $user->unmappedField = 'some value';
     $user->otherProp = 'val2';
     $this->assertEquals('some value', $user->unmappedField);
     $expected = ['unmappedField' => 'some value', 'otherProp' => 'val2'];
     $this->assertEquals($expected, $user->getUnmapped());
 }
示例#4
0
 /**
  * @covers ::initializeModel
  */
 public function testInitializeModel()
 {
     $user = new User();
     $user->object = 'C:41:"Harp\\Harp\\Test\\Integration\\SaveableObject":22:{a:1:{i:0;s:5:"test1";}}';
     $expected = new SaveableObject();
     $expected->setVar('test1');
     User::getRepo()->initializeModel($user);
     $this->assertEquals($expected, $user->object);
     $post = new BlogPost(['class' => null]);
     BlogPost::getRepo()->initializeModel($post);
     $this->assertEquals('Harp\\Harp\\Test\\TestModel\\BlogPost', $post->class);
 }
示例#5
0
 /**
  * @covers ::realDelete
  * @covers ::isSoftDeleted
  */
 public function testRealDelete()
 {
     $object = new User(null, State::SAVED);
     $object->delete();
     $this->assertTrue($object->isDeleted());
     $this->assertTrue($object->isSoftDeleted());
     $object->realDelete();
     $this->assertTrue($object->isDeleted());
     $this->assertFalse($object->isSoftDeleted());
 }
示例#6
0
 public function testRels()
 {
     $user = User::find(1231421);
     $this->assertInstanceOf('Harp\\Harp\\Test\\TestModel\\User', $user);
     $this->assertTrue($user->isVoid());
     $address = $user->getAddress();
     $this->assertInstanceOf('Harp\\Harp\\Test\\TestModel\\Address', $address);
     $this->assertTrue($address->isVoid());
     $post = $user->getPosts()->getFirst();
     $this->assertInstanceOf('Harp\\Harp\\Test\\TestModel\\Post', $post);
     $this->assertTrue($post->isVoid());
     $user = $post->getUser();
     $this->assertInstanceOf('Harp\\Harp\\Test\\TestModel\\User', $user);
     $this->assertTrue($user->isVoid());
 }
示例#7
0
 public function testTest()
 {
     $user1 = User::find(1);
     $address1 = $user1->getAddress();
     $post1 = $user1->getPosts()->getFirst();
     $user2 = User::find(1);
     $address2 = $user2->getAddress();
     $post2 = $user2->getPosts()->getFirst();
     $address3 = Address::find(1);
     $post3 = Post::find(1);
     $this->assertSame($user1, $user2);
     $this->assertSame($address1, $address2);
     $this->assertSame($post1, $post2);
     $this->assertSame($address1, $address3);
     $this->assertSame($post1, $post3);
 }
示例#8
0
 public function testTest()
 {
     $user = User::find(1);
     $name = $user->name;
     $this->assertFalse($user->isChanged());
     $this->assertEmpty($user->getChanges());
     $user->name = 'changed';
     $user->isBlocked = false;
     $this->assertTrue($user->isChanged());
     $this->assertTrue($user->hasChange('name'));
     $this->assertFalse($user->hasChange('isBlocked'));
     $this->assertEquals($name, $user->getOriginal('name'));
     $this->assertEquals(false, $user->getOriginal('isBlocked'));
     $this->assertEquals(['name' => 'changed'], $user->getChanges());
     $user->name = $name;
     $user->isBlocked = true;
     $this->assertTrue($user->isChanged());
     $this->assertFalse($user->hasChange('name'));
     $this->assertTrue($user->hasChange('isBlocked'));
     $this->assertEquals(['isBlocked' => true], $user->getChanges());
     $user->isBlocked = false;
     $this->assertFalse($user->isChanged());
     $this->assertEmpty($user->getChanges());
 }
示例#9
0
 /**
  * @covers ::set
  */
 public function testSetInverse()
 {
     $user = new User();
     $profile = new Profile();
     $user->setProfile($profile);
     $this->assertSame($user, $profile->getUser());
 }
示例#10
0
 /**
  * @covers ::findAllWhereIn
  */
 public function testFindAllWhereIn()
 {
     $rel = $this->getMockForAbstractClass('Harp\\Harp\\Rel\\AbstractRel', ['test', User::getRepo()->getConfig(), 'Harp\\Harp\\Test\\TestModel\\User']);
     $find = $rel->findAllWhereIn('name', [10, 13], State::DELETED);
     $expected = 'SELECT `User`.* FROM `User` WHERE (`name` IN (10, 13)) AND (`User`.`deletedAt` IS NOT NULL)';
     $this->assertEquals($expected, $find->applyFlags()->humanize());
 }
示例#11
0
 /**
  * @covers ::get
  */
 public function testGet()
 {
     $links = new Links(new User());
     $linkOne = new LinkOne(new User(), User::getRepo()->getRel('address'), new Address());
     $this->assertNull($links->get('address'));
     $links->add($linkOne);
     $this->assertEquals($linkOne, $links->get('address'));
 }
示例#12
0
 /**
  * @covers ::join
  * @expectedException BadMethodCallException
  */
 public function testJoin()
 {
     $rel = new BelongsToPolymorphic('location', User::getRepo()->getConfig(), 'Harp\\Harp\\Test\\TestModel\\Country');
     $select = new Select(User::getRepo());
     $rel->join($select, 'City');
 }
示例#13
0
 /**
  * @covers ::getLink
  */
 public function testGetLink()
 {
     $user = User::find(1);
     $link = $user->getLink('address');
     $this->assertSame($user, $link->getModel());
     $this->assertSame(Address::getRepo(), $link->getRel()->getRepo());
 }
示例#14
0
 /**
  * @covers ::joinNestedRels
  * @expectedException InvalidArgumentException
  */
 public function testJoinRelsError()
 {
     $repo = User::getRepo();
     $select = new Select($repo);
     $select->joinRels(['unknown address']);
 }
示例#15
0
 /**
  * @covers ::onlyDeleted
  * @covers ::onlySaved
  * @covers ::deletedAndSaved
  */
 public function testFlagSetters()
 {
     $repo = User::getRepo();
     $find = new Find($repo);
     $find->onlyDeleted();
     $this->assertSame(State::DELETED, $find->getFlags());
     $find->onlySaved();
     $this->assertSame(State::SAVED, $find->getFlags());
     $find->deletedAndSaved();
     $this->assertSame(State::DELETED | State::SAVED, $find->getFlags());
 }
示例#16
0
 public function testTest()
 {
     $user1 = User::find(1);
     $posts = $user1->getPosts();
     $this->assertInstanceOf('Harp\\Harp\\Test\\TestModel\\LinkManyPosts', $posts);
 }
示例#17
0
 /**
  * @coversNothing
  */
 public function testLoadWith()
 {
     $users = User::findAll()->loadWith(['address', 'posts' => 'tags']);
     $this->assertCount(4, $users);
     $user = $users->getFirst();
     $this->assertEquals(1, $user->id);
     $this->assertEquals(1, $user->getAddress()->id);
     $this->assertCount(1, $user->getPosts());
     $this->assertEquals(1, $user->getPosts()->getFirst()->id);
     $this->assertCount(2, $user->getPosts()->getFirst()->getTags());
     $this->assertEquals([1, 2], $user->getPosts()->getFirst()->getTags()->get()->getIds());
     $user = $users->getNext();
     $this->assertEquals(2, $user->id);
     $this->assertTrue($user->getAddress()->isVoid());
     $this->assertCount(0, $user->getPosts());
     $user = $users->getNext();
     $this->assertEquals(3, $user->id);
     $this->assertTrue($user->getAddress()->isVoid());
     $this->assertCount(1, $user->getPosts());
     $this->assertInstanceof('Harp\\Harp\\Test\\TestModel\\BlogPost', $user->getPosts()->getFirst());
     $this->assertEquals(4, $user->getPosts()->getFirst()->id);
     $this->assertCount(0, $user->getPosts()->getFirst()->getTags());
     $user = $users->getNext();
     $this->assertEquals(4, $user->id);
     $this->assertEquals(2, $user->getAddress()->id);
     $posts = $user->getPosts();
     $this->assertCount(2, $posts);
     $post = $posts->getFirst();
     $this->assertEquals(2, $post->id);
     $this->assertCount(0, $post->getTags());
     $post = $posts->getNext();
     $this->assertEquals(3, $post->id);
     $this->assertCount(1, $post->getTags());
     $this->assertEquals([2], $post->getTags()->get()->getIds());
     $this->assertQueries(['SELECT `User`.* FROM `User` WHERE (`User`.`deletedAt` IS NULL)', 'SELECT `Address`.* FROM `Address` WHERE (`id` IN (1, 2))', 'SELECT `Post`.`class`, `Post`.* FROM `Post` WHERE (`userId` IN (1, 2, 3, 4))', 'SELECT `Tag`.*, `postTags`.`postId` AS `tagsKey` FROM `Tag` JOIN `PostTag` AS `postTags` ON `postTags`.`tagId` = `Tag`.`id` WHERE (`postTags`.`postId` IN (1, 2, 3, 4))']);
 }
示例#18
0
 /**
  * @covers ::eachLink
  */
 public function testEachLink()
 {
     $save = new Save();
     $model1 = new User();
     $model2 = new Country();
     $model3 = new City();
     $link1 = new LinkOne($model1, User::getRepo()->getRel('location'), $model2);
     $link2 = new LinkMany($model2, Country::getRepo()->getRel('cities'), []);
     User::getRepo()->addLink($link1);
     Country::getRepo()->addLink($link2);
     $save->add($model1);
     $i = 0;
     $expected = [[$model1, $link1], [$model2, $link2]];
     $save->eachLink(function (AbstractLink $link) use($expected, $model3, &$i) {
         $this->assertSame($expected[$i][0], $link->getModel());
         $this->assertSame($expected[$i][1], $link);
         $i++;
         return new Models([$model3]);
     });
     $this->assertTrue($save->has($model3));
 }