From eb663bea8e2da652864918b51e30aa5b2c9dcb1f Mon Sep 17 00:00:00 2001 From: Awilum Date: Mon, 14 Dec 2020 13:42:12 +0300 Subject: [PATCH] feat(fields): Add new field `fetch` for Entries API #492 --- .../Foundation/Entries/Fields/FetchField.php | 2 -- .../Entries/Fields/FetchFieldTest.php | 36 +++++++------------ .../Fields/fixtures/entries/blog/entry.md | 3 +- .../entries/catalog/bikes/gt/entry.md | 6 ++-- .../entries/catalog/bikes/norco/entry.md | 7 ++-- .../Fields/fixtures/entries/catalog/entry.md | 6 ++-- .../Fields/fixtures/entries/level1/entry.md | 1 - .../fixtures/entries/level1/level2/entry.md | 1 - .../entries/level1/level2/level3/entry.md | 1 - .../fixtures/entries/new-api/blog/entry.md | 7 ---- .../entries/new-api/blog/post-1/entry.md | 3 -- .../entries/new-api/blog/post-2/entry.md | 3 -- .../root/albums/category-1/album-1/entry.md | 17 ++++----- .../Fields/fixtures/entries/root/entry.md | 16 +++++---- 14 files changed, 42 insertions(+), 67 deletions(-) delete mode 100644 tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/entry.md delete mode 100644 tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/post-1/entry.md delete mode 100644 tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/post-2/entry.md diff --git a/src/flextype/Foundation/Entries/Fields/FetchField.php b/src/flextype/Foundation/Entries/Fields/FetchField.php index 57159139..ecff19c9 100644 --- a/src/flextype/Foundation/Entries/Fields/FetchField.php +++ b/src/flextype/Foundation/Entries/Fields/FetchField.php @@ -18,7 +18,6 @@ if (flextype('registry')->get('flextype.settings.entries.fields.fetch.enabled')) // Modify fetch. foreach (flextype('entries')->getStorage('fetch.data.fetch') as $field => $body) { $data[$field] = flextype('entries')->fetch($body['id'], - $body['from'], isset($body['options']) ? $body['options'] : []); @@ -26,7 +25,6 @@ if (flextype('registry')->get('flextype.settings.entries.fields.fetch.enabled')) // Save fetch. flextype('entries')->setStorage('fetch.id', $original['id']); - flextype('entries')->setStorage('fetch.from', $original['from']); flextype('entries')->setStorage('fetch.options', $original['options']); flextype('entries')->setStorage('fetch.data', arrays($original['data'])->merge($data)->toArray()); } diff --git a/tests/Foundation/Entries/Fields/FetchFieldTest.php b/tests/Foundation/Entries/Fields/FetchFieldTest.php index 3072165f..2923aafa 100644 --- a/tests/Foundation/Entries/Fields/FetchFieldTest.php +++ b/tests/Foundation/Entries/Fields/FetchFieldTest.php @@ -10,6 +10,16 @@ afterEach(function (): void { filesystem()->directory(PATH['project'] . '/entries')->delete(); }); +test('test fetchField for blog', function () { + flextype('entries')->create('blog', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/blog/entry.md')->get())); + flextype('entries')->create('blog/post-1', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/blog/post-1/entry.md')->get())); + flextype('entries')->create('blog/post-2', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/blog/post-2/entry.md')->get())); + + $blog = flextype('entries')->fetch('blog'); + + $this->assertEquals(14, $blog->count()); +}); + test('test fetchField for catalog', function () { // Create catalog @@ -40,23 +50,12 @@ test('test fetchField for catalog', function () { $this->assertTrue(isset($catalogSingle['discounts']['discounts/30-off'])); $this->assertEquals('30% off', $catalogSingle['discounts']['discounts/30-off']['title']); - $catalogSingleWithCollectionFalse = flextype('entries')->fetch('catalog', 'single'); - $this->assertEquals(16, $catalogSingleWithCollectionFalse->count()); - $this->assertEquals('Catalog', $catalogSingleWithCollectionFalse['title']); - $this->assertEquals('catalog', $catalogSingleWithCollectionFalse['id']); - $this->assertEquals(1, $catalogSingleWithCollectionFalse['bikes']->count()); - $this->assertTrue(isset($catalogSingleWithCollectionFalse['bikes']['catalog/bikes/gt'])); - $this->assertEquals('GT', $catalogSingleWithCollectionFalse['bikes']['catalog/bikes/gt']['title']); - $this->assertEquals(1, $catalogSingleWithCollectionFalse['discounts']->count()); - $this->assertTrue(isset($catalogSingleWithCollectionFalse['discounts']['discounts/30-off'])); - $this->assertEquals('30% off', $catalogSingleWithCollectionFalse['discounts']['discounts/30-off']['title']); - - $catalogCollection = flextype('entries')->fetch('catalog', 'collection'); + $catalogCollection = flextype('entries')->fetch('catalog', ['from' => 'collection']); $this->assertEquals(1, $catalogCollection->count()); $this->assertEquals('Bikes', $catalogCollection['catalog/bikes']['title']); $this->assertEquals('catalog/bikes', $catalogCollection['catalog/bikes']['id']); - $catalogLongCollecion = flextype('entries')->fetch('catalog', 'collection', ['find' => ['depth' => ['>0', '<4']]]); + $catalogLongCollecion = flextype('entries')->fetch('catalog', ['from' => 'collection', 'find' => ['depth' => ['>0', '<4']]]); $this->assertEquals(5, $catalogLongCollecion->count()); $banner = flextype('entries')->fetch('banner'); @@ -64,17 +63,6 @@ test('test fetchField for catalog', function () { $this->assertEquals('banner', $banner['id']); }); -test('test fetchField for blog', function () { - flextype('entries')->create('blog', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/blog/entry.md')->get())); - flextype('entries')->create('blog/post-1', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/blog/post-1/entry.md')->get())); - flextype('entries')->create('blog/post-2', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/blog/post-2/entry.md')->get())); - - $blog = flextype('entries')->fetch('blog')->sortKeys(); - - $this->assertEquals(14, $blog->count()); -}); - - test('test fetchField for albmus', function () { flextype('entries')->create('root', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/root/entry.md')->get())); diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/blog/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/blog/entry.md index 9df762f1..16cfc31a 100644 --- a/tests/Foundation/Entries/Fields/fixtures/entries/blog/entry.md +++ b/tests/Foundation/Entries/Fields/fixtures/entries/blog/entry.md @@ -2,6 +2,7 @@ title: blog fetch: posts: - from: collection id: blog + options: + from: collection --- diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/catalog/bikes/gt/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/catalog/bikes/gt/entry.md index c8d7ca22..953d9bd8 100644 --- a/tests/Foundation/Entries/Fields/fixtures/entries/catalog/bikes/gt/entry.md +++ b/tests/Foundation/Entries/Fields/fixtures/entries/catalog/bikes/gt/entry.md @@ -4,8 +4,8 @@ brand: gt fetch: discounts_available: id: discounts - from: collection options: + from: collection filter: where: - @@ -13,15 +13,15 @@ fetch: operator: eq value: bikes label1: - from: single id: discounts/50-off options: + from: single filter: limit: 3 label2: - from: single id: discounts/30-off options: + from: single filter: limit: 2 --- diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/catalog/bikes/norco/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/catalog/bikes/norco/entry.md index 54d104cf..245bd775 100644 --- a/tests/Foundation/Entries/Fields/fixtures/entries/catalog/bikes/norco/entry.md +++ b/tests/Foundation/Entries/Fields/fixtures/entries/catalog/bikes/norco/entry.md @@ -5,9 +5,10 @@ fetch: label: from: single id: discounts/30-off - options: [] + options: + from: collection discounts: - from: collection id: discounts - options: [] + options: + from: collection --- diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/catalog/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/catalog/entry.md index 6cef8160..0aa18c3f 100644 --- a/tests/Foundation/Entries/Fields/fixtures/entries/catalog/entry.md +++ b/tests/Foundation/Entries/Fields/fixtures/entries/catalog/entry.md @@ -3,15 +3,15 @@ title: Catalog visibility: draft fetch: label1: - from: single id: discounts/50-off options: + from: single filter: limit: 4 bikes: id: catalog/bikes - from: collection options: + from: collection filter: where: - @@ -21,8 +21,8 @@ fetch: limit: 10 discounts: id: discounts - from: collection options: + from: collection filter: where: - diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/level1/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/level1/entry.md index ea0663bb..a38eedbb 100644 --- a/tests/Foundation/Entries/Fields/fixtures/entries/level1/entry.md +++ b/tests/Foundation/Entries/Fields/fixtures/entries/level1/entry.md @@ -2,6 +2,5 @@ title: level1 fetch: root: - from: single id: level1/level2 --- diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/level1/level2/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/level1/level2/entry.md index 8e523370..45ea60fd 100644 --- a/tests/Foundation/Entries/Fields/fixtures/entries/level1/level2/entry.md +++ b/tests/Foundation/Entries/Fields/fixtures/entries/level1/level2/entry.md @@ -2,6 +2,5 @@ title: level2 fetch: root: - from: single id: level1/level2/level3 --- diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/level1/level2/level3/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/level1/level2/level3/entry.md index d2f4a0a6..c05c4552 100644 --- a/tests/Foundation/Entries/Fields/fixtures/entries/level1/level2/level3/entry.md +++ b/tests/Foundation/Entries/Fields/fixtures/entries/level1/level2/level3/entry.md @@ -2,6 +2,5 @@ title: level3 fetch: root: - from: single id: level1/level2/level3/level4 --- diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/entry.md deleted file mode 100644 index 2aa654d1..00000000 --- a/tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/entry.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: blog -fetch: - collection: - id: blog - from: collection ---- diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/post-1/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/post-1/entry.md deleted file mode 100644 index 3789e730..00000000 --- a/tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/post-1/entry.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: Post 1 ---- diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/post-2/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/post-2/entry.md deleted file mode 100644 index c940feff..00000000 --- a/tests/Foundation/Entries/Fields/fixtures/entries/new-api/blog/post-2/entry.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: Post 2 ---- diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/root/albums/category-1/album-1/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/root/albums/category-1/album-1/entry.md index 4b810d65..69e02a0a 100644 --- a/tests/Foundation/Entries/Fields/fixtures/entries/root/albums/category-1/album-1/entry.md +++ b/tests/Foundation/Entries/Fields/fixtures/entries/root/albums/category-1/album-1/entry.md @@ -2,20 +2,21 @@ title: Album 1 fetch: banner-single: - from: single - id: banners - banners-collection: - from: collection - id: banners - banners-collection-2: - from: collection id: banners options: + from: single + banners-collection: + id: banners + options: + from: collection + banners-collection-2: + id: banners + options: + from: collection filter: limit: 1 find: depth: ">0" banner-single-2: - from: single id: banners/2 --- diff --git a/tests/Foundation/Entries/Fields/fixtures/entries/root/entry.md b/tests/Foundation/Entries/Fields/fixtures/entries/root/entry.md index 76c9db0f..fc324737 100644 --- a/tests/Foundation/Entries/Fields/fixtures/entries/root/entry.md +++ b/tests/Foundation/Entries/Fields/fixtures/entries/root/entry.md @@ -2,15 +2,17 @@ title: Root fetch: single: - from: single - id: albums - collection: - from: collection - id: albums - collectionWithDepth: - from: collection id: albums options: + from: single + collection: + id: albums + options: + from: collection + collectionWithDepth: + id: albums + options: + from: collection find: depth: '>0' ---