diff --git a/src/Contracts/Revisions/Revision.php b/src/Contracts/Revisions/Revision.php index 73b3cc336a..7ccc0ac5bd 100644 --- a/src/Contracts/Revisions/Revision.php +++ b/src/Contracts/Revisions/Revision.php @@ -2,11 +2,9 @@ namespace Statamic\Contracts\Revisions; -use Statamic\Revisions\Revisable; - interface Revision { - public function currentContent(): Revisable; + public function currentContent(); public function id($id = null); diff --git a/src/Revisions/Revision.php b/src/Revisions/Revision.php index a03708b363..69aadc3ea8 100644 --- a/src/Revisions/Revision.php +++ b/src/Revisions/Revision.php @@ -10,7 +10,7 @@ use Statamic\Events\RevisionSaved; use Statamic\Events\RevisionSaving; use Statamic\Facades; -use Statamic\Facades\Data; +use Statamic\Facades\Entry; use Statamic\Facades\Revision as Revisions; use Statamic\Support\Traits\FluentlyGetsAndSets; @@ -36,9 +36,9 @@ class Revision implements Arrayable, Contract protected $attributes = []; - public function currentContent(): Revisable + public function currentContent() { - return Data::find($this->attribute('id')); + return Entry::find($this->attribute('id')); } public function id($id = null) @@ -78,7 +78,7 @@ public function message($message = null) public function publishAt($dateTime = null) { - return $this->fluentlyGetOrSet('publishAt')->value($dateTime); + return $this->fluentlyGetOrSet('publishAt')->args(func_get_args()); } public function attributes($attributes = null) diff --git a/tests/Feature/Revisions/RevisableTest.php b/tests/Feature/Revisions/RevisableTest.php new file mode 100644 index 0000000000..84fb07f0ba --- /dev/null +++ b/tests/Feature/Revisions/RevisableTest.php @@ -0,0 +1,68 @@ + [ + 'enabled' => true, + 'path' => __DIR__.'/__fixtures__', + ]]); + + $this->revisable = new class + { + use Revisable; + + protected function revisionKey() + { + return '123'; + } + + protected function revisionAttributes() + { + return [ + 'id' => 123 + ]; + } + + public function makeFromRevision($revision) + { + return new self; + } + }; + } + + #[Test] + public function has_revisions() + { + $this->assertTrue($this->revisable->hasRevisions()); + } + + #[Test] + public function sets_publish_at_from_options() + { + Carbon::setTestNow($now = now()); + + $this->revisable->createRevision(['publish_at' => $now]); + + $revision = $this->revisable->latestRevision(); + Revision::delete($revision); + + $this->assertEquals($revision->publishAt()->timestamp, $now->timestamp); + } +} diff --git a/tests/Feature/Revisions/RevisionsTest.php b/tests/Feature/Revisions/RevisionsTest.php index 50b003faab..457c0ba68d 100644 --- a/tests/Feature/Revisions/RevisionsTest.php +++ b/tests/Feature/Revisions/RevisionsTest.php @@ -60,4 +60,56 @@ public function a_revision_can_be_made_from_a_dated_entry() $this->assertEquals(['id' => '123', 'published' => true, 'slug' => 'my-entry', 'data' => ['foo' => 'bar'], 'date' => '1482624000'], $revision->attributes()); } + + #[Test] + public function can_get_its_entry() + { + config(['statamic.revisions.path' => '/path/to']); + + Carbon::setTestNow($now = Carbon::parse('2019-03-25 13:15')); + + $entry = EntryFactory::id('123') + ->collection(tap(Collection::make('test')->dated(true))->save()) + ->slug('my-entry') + ->data(['foo' => 'bar']) + ->date('2016-12-25') + ->make(); + + $entry->save(); + $revision = $entry->makeRevision(); + + $this->assertEquals($entry->id(), $revision->currentContent()->id()); + } + + #[Test] + public function converts_publish_at_to_timestamp_when_saving() + { + Carbon::setTestNow(now()); + + $revision = (new Revision) + ->date(now()) + ->publishAt(now()); + + $this->assertEquals(now()->timestamp, $revision->fileData()['publish_at']); + } + + #[Test] + public function converts_publish_at_to_null_when_saving() + { + $revision = (new Revision)->date(now()); + + $this->assertNull($revision->fileData()['publish_at']); + } + + #[Test] + public function outputs_publish_at_when_to_array() + { + Carbon::setTestNow(now()); + + $revision = (new Revision) + ->date(now()) + ->publishAt(now()); + + $this->assertEquals(now(), $revision->toArray()['publish_at']); + } } diff --git a/tests/Feature/Revisions/__fixtures__/123/1553546421.yaml b/tests/Feature/Revisions/__fixtures__/123/1553546421.yaml new file mode 100644 index 0000000000..a19607e74a --- /dev/null +++ b/tests/Feature/Revisions/__fixtures__/123/1553546421.yaml @@ -0,0 +1,3 @@ +date: 1553546421 +attributes: + date: 1740528000 diff --git a/tests/Feature/Revisions/__fixtures__/123/1553546422.yaml b/tests/Feature/Revisions/__fixtures__/123/1553546422.yaml new file mode 100644 index 0000000000..e196e528ae --- /dev/null +++ b/tests/Feature/Revisions/__fixtures__/123/1553546422.yaml @@ -0,0 +1,4 @@ +date: 1553546422 +publish_at: 1553644800 +attributes: + date: 1740528000 diff --git a/tests/Feature/Revisions/__fixtures__/123/working.yaml b/tests/Feature/Revisions/__fixtures__/123/working.yaml new file mode 100644 index 0000000000..c7e919a489 --- /dev/null +++ b/tests/Feature/Revisions/__fixtures__/123/working.yaml @@ -0,0 +1,3 @@ +date: 1553546423 +attributes: + id: 123 diff --git a/tests/Revisions/RepositoryTest.php b/tests/Revisions/RepositoryTest.php index aa5a408fb4..9fbc53aa8c 100644 --- a/tests/Revisions/RepositoryTest.php +++ b/tests/Revisions/RepositoryTest.php @@ -36,4 +36,12 @@ public function it_can_call_to_array_on_a_revision_collection() $this->assertIsArray($revisions->toArray()); } + + #[Test] + public function it_loads_publish_at_as_carbon() + { + $revision = $this->repo->whereKey('123')->last(); + + $this->assertEquals(1553644800, $revision->publishAt()->timestamp); + } }