1
0
mirror of https://github.com/flextype/flextype.git synced 2025-08-07 13:46:42 +02:00

feat(tests): improve and rewrite tests

This commit is contained in:
Awilum
2021-08-17 22:26:09 +03:00
parent a61fb13d6e
commit afa864832b
45 changed files with 269 additions and 908 deletions

View File

@@ -0,0 +1 @@
title: Blog

View File

@@ -1,7 +0,0 @@
title: blog
content:
fetch:
posts:
id: blog
options:
collection: true

View File

@@ -1 +0,0 @@
title: Bikes

View File

@@ -1,24 +0,0 @@
title: GT
brand: gt
content:
fetch:
discounts_available:
id: discounts
options:
collection: true
filter:
where:
-
key: category
operator: eq
value: bikes
label1:
id: discounts/50-off
options:
filter:
limit: 3
label2:
id: discounts/30-off
options:
filter:
limit: 2

View File

@@ -1,12 +0,0 @@
title: Norco
brand: norco
content:
fetch:
label:
id: discounts/30-off
options:
collection: true
discounts:
id: discounts
options:
collection: true

View File

@@ -1,34 +0,0 @@
title: Catalog
visibility: visible
content:
fetch:
label1:
id: discounts/50-off
options:
filter:
limit: 4
bikes:
id: catalog/bikes
options:
collection: true
filter:
where:
-
key: brand
operator: eq
value: gt
limit: 10
discounts:
id: discounts
options:
collection: true
filter:
where:
-
key: title
operator: eq
value: '30% off'
-
key: category
operator: eq
value: bikes

View File

@@ -1,5 +0,0 @@
title: level1
content:
fetch:
root:
id: level1/level2

View File

@@ -1,5 +0,0 @@
title: level2
content:
fetch:
root:
id: level1/level2/level3

View File

@@ -1,5 +0,0 @@
title: level3
content:
fetch:
root:
id: level1/level2/level3/level4

View File

@@ -1 +0,0 @@
title: level4

View File

@@ -1,8 +0,0 @@
title: Macroable
content:
fetch:
table:
id: table
options:
method: fetchExtraData
hello: world

View File

@@ -1,26 +0,0 @@
title: Media
media:
folders:
fetch:
macroable_folder:
id: 'foo'
options:
method: fetchExtraData
foo_folder:
id: 'foo'
collection_of_folders:
id: '/'
options:
collection: true
files:
fetch:
macroable_file:
id: 'foo'
options:
method: fetchExtraData
foo_file:
id: foo.txt
collection_of_files:
id: '/'
options:
collection: true

View File

@@ -1,14 +0,0 @@
title: Root
registry:
get:
flextype:
key: flextype.manifest.name
author.name:
key: flextype.manifest.author.name
license:
key: flextype.manifest.license
content:
fetch:
level1:
id: registry-root/level-1
result: toArray

View File

@@ -1,14 +0,0 @@
title: Level 1
content:
fetch:
level2:
id: registry-root/level-1/level-2
result: toArray
registry:
get:
flextype:
key: flextype.manifest.name
author.name:
key: flextype.manifest.author.name
license:
key: flextype.manifest.license

View File

@@ -1,9 +0,0 @@
title: Level 2
registry:
get:
flextype:
key: flextype.manifest.name
author.name:
key: flextype.manifest.author.name
license:
key: flextype.manifest.license

View File

@@ -1,19 +0,0 @@
title: Album 1
content:
fetch:
banner-single:
id: banners
banner-single-2:
id: banners/2
banners-collection:
id: banners
options:
collection: true
banners-collection-2:
id: banners
options:
collection: true
filter:
limit: 1
find:
depth: ">0"

View File

@@ -1 +0,0 @@
title: Category1

View File

@@ -1 +0,0 @@
title: Albums

View File

@@ -1,15 +0,0 @@
title: Root
content:
fetch:
albums:
id: albums
collection:
id: albums
options:
collection: true
collectionWithDepth:
id: albums
options:
collection: false
find:
depth: '>0'

View File

@@ -1,4 +0,0 @@
hashed_access_token: $2y$10$YGKSNfRneBWO.PnJsdo0zuI1crQJnrswZow0UoMapM6/RvmAcNrAm
calls: 13
limit_calls: 0
state: enabled

View File

@@ -2,8 +2,96 @@
declare(strict_types=1);
use Flextype\Flextype;
use Flextype\Parsers\Parsers;
use Flextype\Serializers\Serializers;
use Flextype\Entries\Entries;
use Atomastic\Strings\Strings;
use Atomastic\Registry\Registry;
use Atomastic\Session\Session;
use Slim\App;
use DI\Container;
use League\Event\Emitter;
use Phpfastcache\Helper\Psr16Adapter as Cache;
use Monolog\Logger;
use Atomastic\Csrf\Csrf;
use Cocur\Slugify\Slugify;
use Atomastic\Arrays\Arrays;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries')->ensureExists(0755, true);
});
afterEach(function () {
filesystem()->directory(PATH['project'] . '/entries')->delete();
});
test('test flextype() helper', function () {
$this->assertSame(flextype(), Flextype::getInstance());
expect(flextype())->toBeInstanceOf(Flextype::class);
});
test('test app() helper', function () {
$this->assertSame(app(), Flextype::getInstance()->app());
expect(app())->toBeInstanceOf(App::class);
});
test('test container() helper', function () {
$this->assertSame(container(), Flextype::getInstance()->container());
$this->assertSame(container(), Flextype::getInstance()->app()->getContainer());
expect(container())->toBeInstanceOf(Container::class);
});
test('test emitter() helper', function () {
$this->assertSame(emitter(), Flextype::getInstance()->container()->get('emitter'));
expect(emitter())->toBeInstanceOf(Emitter::class);
});
test('test registry() helper', function () {
$this->assertSame(registry(), Flextype::getInstance()->container()->get('registry'));
expect(registry())->toBeInstanceOf(Registry::class);
});
test('test session() helper', function () {
$this->assertSame(session(), Flextype::getInstance()->container()->get('session'));
expect(session())->toBeInstanceOf(Session::class);
});
test('test cache() helper', function () {
$this->assertSame(cache(), Flextype::getInstance()->container()->get('cache'));
expect(cache())->toBeInstanceOf(Cache::class);
});
test('test entries() helper', function () {
$this->assertSame(entries(), Flextype::getInstance()->container()->get('entries'));
expect(entries())->toBeInstanceOf(Entries::class);
});
test('test logger() helper', function () {
$this->assertSame(logger(), Flextype::getInstance()->container()->get('logger'));
expect(logger())->toBeInstanceOf(Logger::class);
});
test('test parsers() helper', function () {
$this->assertSame(parsers(), Flextype::getInstance()->container()->get('parsers'));
expect(parsers())->toBeInstanceOf(Parsers::class);
});
test('test serializers() helper', function () {
$this->assertSame(serializers(), Flextype::getInstance()->container()->get('serializers'));
expect(serializers())->toBeInstanceOf(Serializers::class);
});
test('test csrf() helper', function () {
$this->assertSame(csrf(), Flextype::getInstance()->container()->get('csrf'));
expect(csrf())->toBeInstanceOf(Csrf::class);
});
test('test slugify() helper', function () {
$this->assertSame(slugify(), Flextype::getInstance()->container()->get('slugify'));
expect(slugify())->toBeInstanceOf(Slugify::class);
});
test('test filterCollection() method', function () {
$this->assertEquals([], filterCollection());
$this->assertEquals([], filterCollection([]));
@@ -80,3 +168,12 @@ test('test filterCollection() method', function () {
filterCollection($data, ['return' => 'all',
'where' => [['key' => 'title', 'operator' => '=', 'value' => 'About']]]));
});
test('test find() method', function () {
entries()->create('foo', []);
$this->assertTrue(find(PATH['project'] . '/entries')->hasResults());
$this->assertTrue(find(PATH['project'] . '/entries', [])->hasResults());
$this->assertTrue(find(PATH['project'] . '/entries', [], 'files')->hasResults());
$this->assertTrue(find(PATH['project'], [], 'directories')->hasResults());
});

View File

@@ -1,170 +0,0 @@
<?php
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->ensureExists(0755, true);
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test create() method', function () {
$this->assertTrue(content()->create('foo', []));
$this->assertFalse(content()->create('foo', []));
});
test('test has()', function () {
content()->create('foo', []);
$this->assertTrue(content()->has('foo'));
$this->assertFalse(content()->has('bar'));
});
test('test update() method', function () {
content()->create('foo', []);
$this->assertTrue(content()->update('foo', ['title' => 'Test']));
$this->assertFalse(content()->update('bar', ['title' => 'Test']));
});
test('test fetch() content', function () {
content()->create('foo', ['title' => 'Foo']);
content()->create('foo/bar', ['title' => 'Bar']);
content()->create('foo/baz', ['title' => 'Baz']);
content()->create('foo/zed', ['title' => 'Zed']);
$this->assertEquals(11, content()->fetch('foo')->count());
$this->assertEquals('foo', content()->fetch('foo')['id']);
$this->assertEquals(11, content()->fetch('foo', [])->count());
$this->assertEquals('foo', content()->fetch('foo')['id']);
$this->assertEquals(3, content()->fetch('foo', ['collection' => true])->count());
$this->assertEquals('Bar', content()->fetch('foo/bar')['title']);
$this->assertEquals('Baz', content()->fetch('foo/baz')['title']);
$this->assertEquals('Zed', content()->fetch('foo/zed')['title']);
content()->registry()->set('fetch.id', 'wrong-content');
$this->assertEquals(0, content()->fetch('wrong-content')->count());
content()->registry()->set('fetch.id', 'wrong-content');
$this->assertEquals(0, content()->fetch('wrong-content')->count());
$this->assertTrue(count(content()->fetch('foo', ['collection' => true])) > 0);
$this->assertEquals(['title' => 'Foo'], content()->fetch('foo', ['filter' => ['only' => ['title']]])->toArray());
$this->assertEquals(10, content()->fetch('foo', ['filter' => ['except' => ['title']]])->count());
$this->assertEquals(1, content()->fetch('foo', ['filter' => ['only' => ['title']]])->count());
$this->assertEquals(['foo/zed' => ['title' => 'Zed'], 'foo/baz' => ['title' => 'Baz'], 'foo/bar' => ['title' => 'Bar']], content()->fetch('foo', ['collection' => true, 'filter' => ['only' => ['title']]])->toArray());
$except = content()->fetch('foo', ['collection' => true, 'filter' => ['except' => ['title']]]);
$this->assertEquals(10, count($except['foo/bar']));
});
test('test copy() method', function () {
content()->create('foo', []);
content()->create('foo/bar', []);
content()->create('foo/baz', []);
content()->create('zed', []);
content()->copy('foo', 'zed');
$this->assertTrue(content()->has('zed'));
});
test('test delete() method', function () {
content()->create('foo', []);
content()->create('foo/bar', []);
content()->create('foo/baz', []);
$this->assertTrue(content()->delete('foo'));
$this->assertFalse(content()->has('foo'));
});
test('test move() method', function () {
content()->create('foo', []);
content()->create('zed', []);
$this->assertTrue(content()->move('foo', 'bar'));
$this->assertTrue(content()->has('bar'));
$this->assertFalse(content()->has('foo'));
$this->assertFalse(content()->move('zed', 'bar'));
});
test('test getFileLocation() method', function () {
content()->create('foo', []);
$this->assertStringContainsString('/foo/content.yaml',
content()->getFileLocation('foo'));
});
test('test getDirectoryLocation() content', function () {
content()->create('foo', []);
$this->assertStringContainsString('/foo',
content()->getDirectoryLocation('foo'));
});
test('test getCacheID() content', function () {
registry()->set('flextype.settings.cache.enabled', false);
content()->create('foo', []);
$this->assertEquals('', content()->getCacheID('foo'));
registry()->set('flextype.settings.cache.enabled', true);
content()->create('bar', []);
$cache_id = content()->getCacheID('bar');
$this->assertEquals(32, strlen($cache_id));
registry()->set('flextype.settings.cache.enabled', false);
});
test('test storage() content', function () {
content()->registry()->set('foo', ['title' => 'Foo']);
$this->assertEquals('Foo', content()->registry()->get('foo')['title']);
content()->registry()->set('bar', ['title' => 'Bar']);
$this->assertEquals(true, content()->registry()->has('foo.title'));
$this->assertEquals(true, content()->registry()->has('bar.title'));
content()->registry()->delete('foo.title');
content()->registry()->delete('bar.title');
$this->assertEquals(false, content()->registry()->has('foo.title'));
$this->assertEquals(false, content()->registry()->has('bar.title'));
});
test('test macro() content', function () {
content()->create('foo', []);
content()->create('foo/bar', []);
content()->create('foo/baz', []);
content()::macro('fetchRecentPosts', function($limit = 1) {
return content()
->fetch('foo')
->sortBy('published_at')
->limit($limit);
});
$this->assertEquals(1, content()->fetchRecentPosts()->count());
$this->assertEquals(1, content()->fetchRecentPosts(1)->count());
$this->assertEquals(2, content()->fetchRecentPosts(2)->count());
});
test('test mixin() content', function () {
content()->create('foo', []);
content()->create('foo/bar', []);
content()->create('foo/baz', []);
class FooMixin {
public function foo() {
return function () {
return 'Foo';
};
}
public function bar() {
return function ($val = 'Foo') {
return $val;
};
}
}
content()::mixin(new FooMixin());
$this->assertEquals('Foo', content()->foo());
$this->assertEquals('Foo', content()->bar());
$this->assertEquals('Bar', content()->bar('Bar'));
});

View File

@@ -1,107 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test content field for blog', function () {
content()->create('blog', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/blog/content.yaml')->get()));
content()->create('blog/post-1', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/blog/post-1/content.yaml')->get()));
content()->create('blog/post-2', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/blog/post-2/content.yaml')->get()));
$blog = content()->fetch('blog');
$this->assertEquals(13, $blog->count());
});
test('test content field for catalog', function () {
// Create catalog
content()->create('catalog', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/catalog/content.yaml')->get()));
content()->create('catalog/bikes', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/catalog/bikes/content.yaml')->get()));
content()->create('catalog/bikes/gt', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/catalog/bikes/gt/content.yaml')->get()));
content()->create('catalog/bikes/norco', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/catalog/bikes/norco/content.yaml')->get()));
content()->create('catalog/bikes/foo', ['title' => 'foo']);
content()->create('catalog/bikes/foo/bar', ['title' => 'bar']);
// Create discounts
content()->create('discounts', ['title' => 'Discounts']);
content()->create('discounts/30-off', ['title' => '30% off', 'category' => 'bikes']);
content()->create('discounts/50-off', ['title' => '50% off', 'category' => 'bikes']);
// Create banner
content()->create('banner', ['title' => 'Banner']);
$catalogSingle = content()->fetch('catalog');
$this->assertEquals(15, $catalogSingle->count());
$this->assertEquals('Catalog', $catalogSingle['title']);
$this->assertEquals('catalog', $catalogSingle['id']);
$this->assertEquals(1, $catalogSingle['bikes']->count());
$this->assertTrue(isset($catalogSingle['bikes']['catalog/bikes/gt']));
$this->assertEquals('GT', $catalogSingle['bikes']['catalog/bikes/gt']['title']);
$this->assertEquals(1, $catalogSingle['discounts']->count());
$this->assertTrue(isset($catalogSingle['discounts']['discounts/30-off']));
$this->assertEquals('30% off', $catalogSingle['discounts']['discounts/30-off']['title']);
$catalogCollection = content()->fetch('catalog', ['collection' => true]);
$this->assertEquals(1, $catalogCollection->count());
$this->assertEquals('Bikes', $catalogCollection['catalog/bikes']['title']);
$this->assertEquals('catalog/bikes', $catalogCollection['catalog/bikes']['id']);
$catalogLongCollecion = content()->fetch('catalog', ['collection' => true, 'find' => ['depth' => ['>0', '<4']]]);
$this->assertEquals(5, $catalogLongCollecion->count());
$banner = content()->fetch('banner');
$this->assertEquals('Banner', $banner['title']);
$this->assertEquals('banner', $banner['id']);
});
test('test content field for albmus', function () {
content()->create('root', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/root/content.yaml')->get()));
content()->create('albums', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/root/albums/content.yaml')->get()));
content()->create('albums/category-1', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/root/albums/category-1/content.yaml')->get()));
content()->create('albums/category-1/album-1', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/root/albums/category-1/album-1/content.yaml')->get()));
content()->create('banners', ['title' => 'Banners']);
content()->create('banners/1', ['title' => 'Banner1']);
content()->create('banners/2', ['title' => 'Banner2']);
$root = content()->fetch('root');
$this->assertEquals(15, $root->count());
});
test('test content field for long nested content', function () {
content()->create('level1', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/level1/content.yaml')->get()));
content()->create('level1/level2', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/level1/level2/content.yaml')->get()));
content()->create('level1/level2/level3', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/level1/level2/level3/content.yaml')->get()));
content()->create('level1/level2/level3/level4', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/level1/level2/level3/level4/content.yaml')->get()));
$level = content()->fetch('level1');
$this->assertEquals(13, $level->count());
$this->assertEquals('level1/level2', $level['root']['id']);
$this->assertEquals('level1/level2/level3', $level['root']['root']['id']);
$this->assertEquals('level1/level2/level3/level4', $level['root']['root']['root']['id']);
});
test('test content field for macroable fetch content', function () {
content()->create('macroable', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/macroable/content.yaml')->get()));
content()::macro('fetchExtraData', function ($id, $options) {
return ['id' => $id, 'options' => $options];
});
$macroable = content()->fetch('macroable');
$this->assertEquals('table', $macroable['table']['id']);
$this->assertEquals('world', $macroable['table']['options']['hello']);
});

View File

@@ -1,19 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test CreatedAtField', function () {
// 1
content()->create('foo', []);
$created_at = content()->fetch('foo')['created_at'];
$this->assertTrue(strlen($created_at) > 0);
$this->assertTrue((ctype_digit($created_at) && strtotime(date('Y-m-d H:i:s', $created_at)) === (int)$created_at));
});

View File

@@ -1,21 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test CreatedByField', function () {
content()->create('foo', []);
$created_by = content()->fetch('foo')['created_by'];
$this->assertEquals('', $created_by);
content()->create('bar', ['created_by' => 'Zed']);
$created_by = content()->fetch('bar')['created_by'];
$this->assertEquals('Zed', $created_by);
});

View File

@@ -1,21 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test IdField', function () {
content()->create('foo', []);
$id = content()->fetch('foo')['id'];
$this->assertEquals('foo', $id);
content()->create('foo/bar', []);
$id = content()->fetch('foo/bar')['id'];
$this->assertEquals('foo/bar', $id);
});

View File

@@ -1,20 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test ModifiedAtField', function () {
content()->create('foo', []);
$modified_at = content()->fetch('foo')['modified_at'];
$this->assertTrue(strlen($modified_at) > 0);
$this->assertTrue((ctype_digit($modified_at) && strtotime(date('Y-m-d H:i:s', $modified_at)) === (int)$modified_at));
});

View File

@@ -1,16 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test ParsersField', function () {
content()->create('bar', ['content' => '[registry_get name="Bar" default="Zed"]', 'parsers' => ['shortcodes' => ['enabled' => true, 'fields' => ['content']]]]);
$this->assertEquals('Zed', content()->fetch('bar')['content']);
});

View File

@@ -1,20 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test PublishedAtField', function () {
content()->create('foo', []);
$published_at = content()->fetch('foo')['published_at'];
$this->assertTrue(strlen($published_at) > 0);
$this->assertTrue((ctype_digit($published_at) && strtotime(date('Y-m-d H:i:s', $published_at)) === (int)$published_at));
});

View File

@@ -1,21 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test PublishedByField', function () {
content()->create('foo', []);
$published_by = content()->fetch('foo')['published_by'];
$this->assertEquals('', $published_by);
content()->create('bar', ['published_by' => 'Zed']);
$published_by = content()->fetch('bar')['published_by'];
$this->assertEquals('Zed', $published_by);
});

View File

@@ -1,29 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test RegistryField', function () {
content()->create('registry-root', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/registry-root/content.yaml')->get()));
content()->create('registry-root/level-1', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/registry-root/level-1/content.yaml')->get()));
content()->create('registry-root/level-1/level-2', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/content/registry-root/level-1/level-2/content.yaml')->get()));
$data = content()->fetch('registry-root');
$this->assertEquals('Flextype', $data['flextype']);
$this->assertEquals('Sergey Romanenko', $data['author']['name']);
$this->assertEquals('MIT', $data['license']);
$this->assertEquals('Flextype', $data['level1']['flextype']);
$this->assertEquals('Sergey Romanenko', $data['level1']['author']['name']);
$this->assertEquals('MIT', $data['level1']['license']);
$this->assertEquals('Flextype', $data['level1']['level2']['flextype']);
$this->assertEquals('Sergey Romanenko', $data['level1']['level2']['author']['name']);
$this->assertEquals('MIT', $data['level1']['level2']['license']);
});

View File

@@ -1,27 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test RoutableField', function () {
registry()->set('flextype.settings.cache.enabled', false);
content()->create('foo', ['routable' => true]);
$routable = content()->fetch('foo')['routable'];
$this->assertTrue($routable);
content()->create('bar', []);
$routable = content()->fetch('bar')['routable'];
$this->assertTrue($routable);
content()->create('zed', ['routable' => false]);
$routable = content()->fetch('zed')['routable'];
$this->assertFalse($routable);
});

View File

@@ -1,21 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test SlugField', function () {
content()->create('foo', []);
$slug = content()->fetch('foo')['slug'];
$this->assertEquals('foo', $slug);
content()->create('bar', []);
$slug = content()->fetch('bar')['slug'];
$this->assertEquals('bar', $slug);
});

View File

@@ -1,19 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
use Respect\Validation\Validator as v;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test UuidField', function () {
content()->create('foo', []);
$uuid = content()->fetch('foo')['uuid'];
$this->assertTrue(v::uuid()->validate($uuid));
});

View File

@@ -1,25 +0,0 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test VisibilityField', function () {
content()->create('foo', []);
$visibility = content()->fetch('foo')['visibility'];
$this->assertEquals('visible', $visibility);
content()->create('bar', ['visibility' => 'draft']);
$visibility = content()->fetch('bar')['visibility'];
$this->assertEquals('draft', $visibility);
content()->create('zed', ['visibility' => 'foobar']);
$visibility = content()->fetch('zed')['visibility'];
$this->assertEquals('visible', $visibility);
});

View File

@@ -0,0 +1,10 @@
<?php
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries')->ensureExists(0755, true);
});
afterEach(function () {
filesystem()->directory(PATH['project'] . '/entries')->delete();
});

View File

@@ -0,0 +1,143 @@
<?php
use Atomastic\Arrays\Arrays;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries')->ensureExists(0755, true);
});
afterEach(function () {
filesystem()->directory(PATH['project'] . '/entries')->delete();
});
test('create new entry foo', function () {
expect(entries()->create('foo', []))->toBeTrue();
expect(entries()->create('foo', []))->toBeFalse();
});
test('has entry foo', function () {
expect(entries()->create('foo', []))->toBeTrue();
expect(entries()->has('foo'))->toBeTrue();
expect(entries()->has('bar'))->toBeFalse();
});
test('update entry foo', function () {
expect(entries()->create('foo', []))->toBeTrue();
expect(entries()->update('foo', ['title' => 'Foo']))->toBeTrue();
expect(entries()->update('bar', ['title' => 'Bar']))->toBeFalse();
});
test('delete entry foo', function () {
expect(entries()->create('foo', []))->toBeTrue();
expect(entries()->create('foo/bar', []))->toBeTrue();
expect(entries()->create('foo/zed', []))->toBeTrue();
expect(entries()->delete('foo'))->toBeTrue();
expect(entries()->has('foo'))->toBeFalse();
});
test('move entry foo into bar', function () {
expect(entries()->create('foo', []))->toBeTrue();
expect(entries()->create('bar', []))->toBeTrue();
expect(entries()->move('foo', 'bar/foo'))->toBeTrue();
expect(entries()->has('bar/foo'))->toBeTrue();
});
test('copy entry foo into bar', function () {
expect(entries()->create('foo', []))->toBeTrue();
expect(entries()->create('bar', []))->toBeTrue();
expect(entries()->copy('foo', 'bar/foo'))->toBeTrue();
expect(entries()->has('bar/foo'))->toBeTrue();
expect(entries()->has('foo'))->toBeTrue();
});
test('fetch entry foo', function () {
expect(entries()->create('foo', []))->toBeTrue();
expect(entries()->fetch('foo'))->toBeInstanceOf(Arrays::class);
expect(count(entries()->fetch('foo')->toArray()) > 0)->toBeTrue();
});
test('get file location for entry foo', function () {
expect(entries()->create('foo', []))->toBeTrue();
expect(entries()->getFileLocation('foo'))->toContain('/foo/entry.yaml');
});
test('get directory location for entry foo', function () {
expect(entries()->create('foo', []))->toBeTrue();
expect(entries()->getDirectoryLocation('foo'))->toContain('/foo');
});
test('get cache ID for entry foo with cache enabled false', function () {
registry()->set('flextype.settings.cache.enabled', false);
expect(entries()->create('foo', []))->toBeTrue();
expect(entries()->getCacheID('foo'))->toBeEmpty();
});
test('get cache ID for entry foo with cache enabled true', function () {
registry()->set('flextype.settings.cache.enabled', true);
expect(entries()->create('foo', []))->toBeTrue();
expect(strlen(entries()->getCacheID('foo')))->toEqual(32);
});
test('registry for entry foo', function() {
entries()->registry()->set('foo', ['title' => 'Foo']);
expect(entries()->registry()->get('foo.title'))->toEqual('Foo');
entries()->registry()->set('bar', ['title' => 'Bar']);
expect(entries()->registry()->get('bar.title'))->toEqual('Bar');
expect(entries()->registry()->has('foo.title'))->toBeTrue();
expect(entries()->registry()->has('bar.title'))->toBeTrue();
entries()->registry()->delete('foo.title');
entries()->registry()->delete('bar.title');
expect(entries()->registry()->has('foo.title'))->toBeFalse();
expect(entries()->registry()->has('bar.title'))->toBeFalse();
});
test('macro for entries', function() {
expect(entries()->create('foo', []))->toBeTrue();
expect(entries()->create('foo/bar', []))->toBeTrue();
expect(entries()->create('foo/zed', []))->toBeTrue();
entries()::macro('fetchRecentEntries', function(int $limit = 1) {
return entries()
->fetch('foo', ['collection' => true])
->limit($limit);
});
expect(entries()->fetchRecentEntries()->count())->toEqual(1);
expect(entries()->fetchRecentEntries(1)->count())->toEqual(1);
expect(entries()->fetchRecentEntries(2)->count())->toEqual(2);
});
test('mixin for entries', function() {
class FooMixin {
public function foo() {
return function () {
return 'Foo';
};
}
public function bar() {
return function ($val = 'Foo') {
return $val;
};
}
}
entries()::mixin(new FooMixin());
expect(entries()->foo())->toEqual('Foo');
expect(entries()->bar())->toEqual('Foo');
expect(entries()->bar('Bar'))->toEqual('Bar');
});
test('get entries options', function () {
expect(entries()->getOptions())->toBeArray();
});

View File

@@ -1,21 +0,0 @@
<?php
declare(strict_types=1);
use Symfony\Component\Finder\Finder;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create(0755, true);
content()->create('foo', []);
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test find() method', function () {
$this->assertTrue(find(PATH['project'] . '/entries/content')->hasResults());
$this->assertTrue(find(PATH['project'] . '/entries/content', [])->hasResults());
$this->assertTrue(find(PATH['project'] . '/entries/content', [], 'files')->hasResults());
$this->assertTrue(find(PATH['project'], [], 'directories')->hasResults());
});

View File

@@ -6,14 +6,6 @@ use Flextype\Flextype;
use Flextype\Content\Content;
use Atomastic\Strings\Strings;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
});
test('test getVersion() method', function () {
$this->assertTrue(!Strings::create(Flextype::getInstance()->getVersion())->isEmpty());
});

View File

@@ -1,92 +0,0 @@
<?php
declare(strict_types=1);
use Flextype\Flextype;
use Flextype\Content\Content;
use Flextype\Media\Media;
use Flextype\Parsers\Parsers;
use Flextype\Serializers\Serializers;
use Flextype\Tokens\Tokens;
use Atomastic\Strings\Strings;
use Atomastic\Registry\Registry;
use Atomastic\Session\Session;
use Slim\App;
use DI\Container;
use League\Event\Emitter;
use Phpfastcache\Helper\Psr16Adapter as Cache;
use Monolog\Logger;
use Atomastic\Csrf\Csrf;
use Cocur\Slugify\Slugify;
test('test flextype() helper', function () {
$this->assertSame(flextype(), Flextype::getInstance());
expect(flextype())->toBeInstanceOf(Flextype::class);
});
test('test app() helper', function () {
$this->assertSame(app(), Flextype::getInstance()->app());
expect(app())->toBeInstanceOf(App::class);
});
test('test container() helper', function () {
$this->assertSame(container(), Flextype::getInstance()->container());
$this->assertSame(container(), Flextype::getInstance()->app()->getContainer());
expect(container())->toBeInstanceOf(Container::class);
});
test('test emitter() helper', function () {
$this->assertSame(emitter(), Flextype::getInstance()->container()->get('emitter'));
expect(emitter())->toBeInstanceOf(Emitter::class);
});
test('test registry() helper', function () {
$this->assertSame(registry(), Flextype::getInstance()->container()->get('registry'));
expect(registry())->toBeInstanceOf(Registry::class);
});
test('test session() helper', function () {
$this->assertSame(session(), Flextype::getInstance()->container()->get('session'));
expect(session())->toBeInstanceOf(Session::class);
});
test('test cache() helper', function () {
$this->assertSame(cache(), Flextype::getInstance()->container()->get('cache'));
expect(cache())->toBeInstanceOf(Cache::class);
});
test('test media() helper', function () {
$this->assertSame(media(), Flextype::getInstance()->container()->get('media'));
expect(media())->toBeInstanceOf(Media::class);
});
test('test content() helper', function () {
$this->assertSame(content(), Flextype::getInstance()->container()->get('content'));
expect(content())->toBeInstanceOf(Content::class);
});
test('test logger() helper', function () {
$this->assertSame(logger(), Flextype::getInstance()->container()->get('logger'));
expect(logger())->toBeInstanceOf(Logger::class);
});
test('test parsers() helper', function () {
$this->assertSame(parsers(), Flextype::getInstance()->container()->get('parsers'));
expect(parsers())->toBeInstanceOf(Parsers::class);
});
test('test serializers() helper', function () {
$this->assertSame(serializers(), Flextype::getInstance()->container()->get('serializers'));
expect(serializers())->toBeInstanceOf(Serializers::class);
});
test('test csrf() helper', function () {
$this->assertSame(csrf(), Flextype::getInstance()->container()->get('csrf'));
expect(csrf())->toBeInstanceOf(Csrf::class);
});
test('test slugify() helper', function () {
$this->assertSame(slugify(), Flextype::getInstance()->container()->get('slugify'));
expect(slugify())->toBeInstanceOf(Slugify::class);
});

View File

@@ -1,32 +0,0 @@
<?php
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/media')->ensureExists(0755, true);
filesystem()->directory(PATH['project'] . '/uploads/media')->ensureExists(0755, true);
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/media')->delete();
filesystem()->directory(PATH['project'] . '/uploads/media')->delete();
});
test('test create() method', function () {
$this->assertTrue(media()->create('foo'));
$this->assertFalse(media()->create('foo'));
});
test('test move() method', function () {
$this->assertTrue(media()->create('foo'));
$this->assertTrue(media()->move('foo', 'bar'));
});
test('test copy() method', function () {
$this->assertTrue(media()->create('foo'));
$this->assertTrue(media()->create('bar'));
$this->assertTrue(media()->copy('foo', 'bar'));
});
test('test delete() method', function () {
$this->assertTrue(media()->create('foo'));
$this->assertTrue(media()->delete('foo'));
});

View File

@@ -3,15 +3,15 @@
declare(strict_types=1);
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
filesystem()->directory(PATH['project'] . '/entries')->ensureExists(0755, true);
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
afterEach(function () {
filesystem()->directory(PATH['project'] . '/entries')->delete();
});
test('test content_fetch shortcode', function () {
$this->assertTrue(content()->create('foo', ['title' => 'Foo']));
$this->assertEquals('Foo', parsers()->shortcodes()->parse('[content_fetch id="foo" field="title"]'));
$this->assertEquals('Bar', parsers()->shortcodes()->parse('[content_fetch id="foo" field="bar" default="Bar"]'));
test('test entries_fetch shortcode', function () {
$this->assertTrue(entries()->create('foo', ['title' => 'Foo']));
$this->assertEquals('Foo', parsers()->shortcodes()->parse('[entries_fetch id="foo" field="title"]'));
$this->assertEquals('Bar', parsers()->shortcodes()->parse('[entries_fetch id="foo" field="bar" default="Bar"]'));
});

View File

@@ -3,15 +3,15 @@
declare(strict_types=1);
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries/content')->create();
filesystem()->directory(PATH['project'] . '/entries')->ensureExists(0755, true);
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries/content')->delete();
afterEach(function () {
filesystem()->directory(PATH['project'] . '/entries')->delete();
});
test('test raw shortcode', function () {
$this->assertTrue(content()->create('foo', ['title' => 'Foo']));
$this->assertEquals('[content_fetch id="foo" field="title"]',
parsers()->shortcodes()->parse('[raw][content_fetch id="foo" field="title"][/raw]'));
test('test raw shortcode', function () {
$this->assertTrue(entries()->create('foo', ['title' => 'Foo']));
$this->assertEquals('[entries_fetch id="foo" field="title"]',
parsers()->shortcodes()->parse('[raw][entries_fetch id="foo" field="title"][/raw]'));
});