diff --git a/src/store/src/Document/TextDocument.php b/src/store/src/Document/TextDocument.php index 7db9a7520..0cab882bf 100644 --- a/src/store/src/Document/TextDocument.php +++ b/src/store/src/Document/TextDocument.php @@ -28,4 +28,9 @@ public function __construct( throw new InvalidArgumentException('The content shall not be an empty string.'); } } + + public function withContent(string $content): self + { + return new self($this->id, $content, $this->metadata); + } } diff --git a/src/store/tests/Document/TextDocumentTest.php b/src/store/tests/Document/TextDocumentTest.php index 2c93dc93f..42aff7902 100644 --- a/src/store/tests/Document/TextDocumentTest.php +++ b/src/store/tests/Document/TextDocumentTest.php @@ -247,4 +247,22 @@ public function testExceptionMessageIsCorrect() new TextDocument(Uuid::v4(), ' '); } + + #[TestDox('withContent creates new instance with updated content')] + public function testWithContent() + { + $id = Uuid::v4(); + $originalContent = 'Original content'; + $newContent = 'Updated content'; + $metadata = new Metadata(['title' => 'Test Document']); + + $originalDocument = new TextDocument($id, $originalContent, $metadata); + $updatedDocument = $originalDocument->withContent($newContent); + + $this->assertNotSame($originalDocument, $updatedDocument); + $this->assertSame($id, $updatedDocument->id); + $this->assertSame($newContent, $updatedDocument->content); + $this->assertSame($metadata, $updatedDocument->metadata); + $this->assertSame($originalContent, $originalDocument->content); + } }