/** * update document * * @param DocumentEntity $doc document entity * @param ConfigEntity $config config entity * @param ConfigEntity $originConfig original instance config entity * @return DocumentEntity */ public function update(DocumentEntity $doc, ConfigEntity $config, ConfigEntity $originConfig = null) { $this->connection->beginTransaction(); $doc = $this->document->update($doc, $config); if ($config->get('revision') === true && $this->revision->isChanged($doc) === true) { $this->revision->insert($doc, $config); } if ($config->get('division') === true) { $diff = $doc->diff(); if (isset($diff['instanceId'])) { $this->document->insertDivision($doc, $config); } else { $this->document->updateDivision($doc, $config); } } // 인스턴스 아이디 변경 시 이전 인스턴스 디비전 테이블 데이터 삭제 if ($originConfig != null && $originConfig->get('division') === true) { $diff = $doc->diff(); if (isset($diff['instanceId'])) { $doc->instanceId = $doc->getOriginal()['instanceId']; $this->document->deleteDivision($doc, $originConfig); } } $this->connection->commit(); return $doc; }
/** * test update * * @return void */ public function testUpdate() { $conn = $this->conn; $repo = new DocumentRepository($conn); $doc = $this->getDocumentEntity(); $doc->shouldReceive('getAttributes')->andReturn([]); $config = $this->getConfigEntity(); $config->shouldReceive('get')->with('division')->andReturn(true); $config->shouldReceive('get')->with('instanceId')->andReturn('instanceId'); $this->query->shouldReceive('update'); $this->query->shouldReceive('where')->andReturn($this->query); $result = $repo->update($doc, $config); $this->assertInstanceOf('Xpressengine\\Document\\DocumentEntity', $result); }