/**
  * test set reply
  *
  * @return void
  */
 public function testReplyHelper()
 {
     $helper = new ReplyHelper($this->replyCharLen);
     $doc = $this->getDocumentEntity();
     $parent = $this->getDocumentEntity();
     $lastReply = 'aaa';
     $helper->setReply($doc, $parent, $lastReply);
     $this->assertEquals($doc->reply, 'aab');
     $this->assertEquals($this->replyCharLen, $helper->getReplyCharLen());
 }
 /**
  * insert document
  *
  * @param DocumentEntity $doc    document entity
  * @param ConfigEntity   $config config entity
  * @return DocumentEntity
  */
 public function insert(DocumentEntity $doc, ConfigEntity $config)
 {
     if ($doc->id == null) {
         throw new Exceptions\RequiredValueException();
     }
     if ($doc->writer == null) {
         throw new Exceptions\RequiredValueException();
     }
     // set default values
     if ($doc->userType == null) {
         $doc->userType = $doc::USER_TYPE_USER;
     }
     if ($doc->approved == null) {
         $doc->approved = $doc::APPROVED_APPROVED;
     }
     if ($doc->published == null) {
         $doc->published = $doc::PUBLISHED_PUBLISHED;
     }
     if ($doc->status == null) {
         $doc->status = $doc::STATUS_PUBLIC;
     }
     if ($doc->display == null) {
         $doc->display = $doc::DISPLAY_VISIBLE;
     }
     if ($doc->createdAt == null) {
         $doc->createdAt = date('Y-m-d H:i:s');
     }
     if ($doc->updatedAt == null) {
         $doc->updatedAt = $doc->createdAt;
     }
     if ($doc->published == 'published' && $doc->publishedAt == null) {
         $doc->publishedAt = $doc->createdAt;
     }
     if ($doc->langCode == null) {
         $doc->langCode = 'default';
     }
     $timestamp = time();
     if ($doc->parentId == null || $doc->parentId == '') {
         $doc->head = $timestamp . '-' . $doc->id;
     } else {
         // for 계층 모델
         if ($doc->parentId !== $doc->id) {
             $parent = $this->findById($doc->parentId);
             if ($parent === null) {
                 throw new Exceptions\DocumentNotExistsException();
             }
             $parent = new DocumentEntity($parent);
             $lastChar = $this->document->getLastChildReply($parent, $this->reply->getReplyCharLen());
             $this->reply->setReply($doc, $parent, $lastChar);
             $doc->head = $parent->head;
         }
     }
     $doc->listOrder = $doc->head . (isset($doc->reply) ? $doc->reply : '');
     $this->connection->beginTransaction();
     $doc = $this->document->insert($doc, $config);
     if ($config->get('revision') === true && $this->revision->isChanged($doc) === true) {
         $this->revision->insert($doc, $config);
     }
     $this->connection->commit();
     return $doc;
 }