globalParamDaoMock = $this->mock(GlobalParamDao::class); $this->postNoteDaoMock = $this->mock(PostNoteDao::class); } public function testPostChangeSnapshot() { $tag1 = new Tag(); $tag2 = new Tag(); $tag1->setName('tag1'); $tag2->setName('tag2'); $post1 = new Post(1); $post2 = new Post(2); $post = new Post(5); $post->setTags([$tag1, $tag2]); $post->setRelatedPosts([$post1, $post2]); $post->setContentChecksum('checksum'); $post->setSafety(Post::POST_SAFETY_SKETCHY); $post->setSource('amazing source'); $post->setFlags(Post::FLAG_LOOP); $this->postNoteDaoMock ->method('findByPostId') ->with($post->getId()) ->willReturn([$this->getTestPostNote()]); $postSnapshotProvider = $this->getPostSnapshotProvider(); $snapshot = $postSnapshotProvider->getChangeSnapshot($post); $this->assertEquals([ 'source' => 'amazing source', 'safety' => 'sketchy', 'contentChecksum' => 'checksum', 'featured' => false, 'tags' => ['tag1', 'tag2'], 'relations' => [1, 2], 'flags' => ['loop'], 'notes' => [['x' => 5, 'y' => 6, 'w' => 7, 'h' => 8, 'text' => 'text']], ], $snapshot->getData()); $this->assertEquals(Snapshot::TYPE_POST, $snapshot->getType()); $this->assertEquals(5, $snapshot->getPrimaryKey()); return $post; } /** * @depends testPostChangeSnapshot */ public function testPostChangeSnapshotFeature($post) { $param = new GlobalParam; $param->setValue($post->getId()); $this->globalParamDaoMock ->expects($this->once()) ->method('findByKey') ->with(GlobalParam::KEY_FEATURED_POST) ->willReturn($param); $this->postNoteDaoMock ->method('findByPostId') ->with($post->getId()) ->willReturn([]); $postSnapshotProvider = $this->getPostSnapshotProvider(); $snapshot = $postSnapshotProvider->getChangeSnapshot($post); $this->assertTrue($snapshot->getData()['featured']); } private function getPostSnapshotProvider() { return new PostSnapshotProvider($this->globalParamDaoMock, $this->postNoteDaoMock); } private function getTestPostNote() { $postNote = new PostNote(); $postNote->setLeft(5); $postNote->setTop(6); $postNote->setWidth(7); $postNote->setHeight(8); $postNote->setText('text'); return $postNote; } }