Файл: gapps/vendor/cartalyst/support/tests/CollectionTest.php
Строк: 417
<?php
/**
* Part of the Support package.
*
* NOTICE OF LICENSE
*
* Licensed under the 3-clause BSD License.
*
* This source file is subject to the 3-clause BSD License that is
* bundled with this package in the LICENSE file.
*
* @package Support
* @version 2.0.1
* @author Cartalyst LLC
* @license BSD License (3-clause)
* @copyright (c) 2011-2017, Cartalyst LLC
* @link http://cartalyst.com
*/
namespace CartalystSupportTests;
use PHPUnit_Framework_TestCase;
use CartalystSupportCollection;
class CollectionTest extends PHPUnit_Framework_TestCase
{
/** @test */
public function a_collection_can_be_instantiated()
{
$collection = new Collection('main');
}
/** @test */
public function it_can_get_all_the_items_from_the_collection()
{
$collection = new Collection('main');
$this->assertEmpty($collection->all());
$collection = new Collection('main');
$collection->put('foo', 'Foo');
$collection->put('bar', 'Bar');
$this->assertEquals([
'foo' => 'Foo',
'bar' => 'Bar',
], $collection->all());
}
/** @test */
public function it_can_get_the_total_items_from_the_collection()
{
$collection = new Collection('main');
$this->assertCount(0, $collection);
$collection = new Collection('main');
$collection->put('foo', 'Foo');
$collection->put('bar', 'Bar');
$this->assertCount(2, $collection);
}
/** @test */
public function it_can_check_an_item_exists_on_the_collection()
{
$collection = new Collection('main');
$this->assertFalse($collection->exists('foo'));
$collection = new Collection('main');
$collection->put('foo', 'Foo');
$collection->put('bar', 'Bar');
$this->assertTrue($collection->exists('foo'));
}
/** @test */
public function it_can_find_an_item_from_the_collection()
{
$collection = new Collection('main');
$this->assertNull($collection->find('foo'));
$collection = new Collection('main');
$collection->put('foo', 'Foo');
$collection->put('bar', 'Bar');
$this->assertEquals('Foo', $collection->find('foo'));
}
/** @test */
public function it_can_return_the_first_item_from_the_collection()
{
$collection = new Collection('main');
$collection->put('name', 'Bar');
$this->assertEquals('Bar', $collection->first());
}
/** @test */
public function it_can_get_a_collection_attribute()
{
$collection = new Collection('main');
$this->assertEquals(null, $collection->get('foo'));
$collection->foo = 'Foo';
$this->assertEquals('Foo', $collection->get('foo'));
}
/** @test */
public function it_can_get_all_the_attributes_from_the_collection()
{
$collection = new Collection('main');
$collection->put('foo', 'Foo');
$collection->name = 'Foo';
$this->assertEquals([
'id' => 'main',
'name' => 'Foo',
], $collection->getAttributes());
}
/** @test */
public function it_can_check_if_the_collection_has_an_item()
{
$collection = new Collection('main');
$this->assertFalse($collection->has('foo'));
$collection->put('foo', 'Foo');
$this->assertTrue($collection->has('foo'));
}
/** @test */
public function it_can_check_that_a_collection_is_empty()
{
$collection = new Collection('main');
$this->assertTrue($collection->isEmpty());
}
/** @test */
public function it_can_check_that_a_collection_is_not_empty()
{
$collection = new Collection('main');
$collection->put('foo', 'Foo');
$this->assertFalse($collection->isEmpty());
}
/** @test */
public function it_can_return_the_last_item_from_the_collection()
{
$collection = new Collection('main');
$collection->put('foo', 'Foo');
$collection->put('bar', 'Bar');
$this->assertEquals('Bar', $collection->last());
}
/** @test */
public function it_can_retrieve_the_collection_items_as_an_array()
{
$collection = new Collection('main');
$this->assertEquals(null, $collection->get('foo'));
$this->assertEquals([
'id' => 'main',
], $collection->getAttributes());
$collection->put('foo', 'Foo');
$this->assertEquals(['foo' => 'Foo'], $collection->toArray());
}
/** @test */
public function it_can_pull_an_item_from_the_collection()
{
$collection = new Collection('main');
$collection->put('foo', 'Foo');
$collection->put('bar', 'Bar');
$collection->put('baz', 'Baz');
$collection->put('bat', 'Bat');
$this->assertCount(4, $collection);
$collection->pull('bar');
$this->assertCount(3, $collection);
}
/** @test */
public function it_can_test_the_offset_methods()
{
$collection = new Collection('main');
$collection['name'] = 'Foo';
$this->assertTrue(isset($collection['name']));
$this->assertEquals('Foo', $collection['name']);
unset($collection['name']);
$this->assertFalse(isset($collection['name']));
$collection = new Collection('main');
$collection->name = 'Foo';
$this->assertTrue(isset($collection->name));
unset($collection->name);
$this->assertFalse(isset($collection->name));
$collection = new Collection('main');
$collection->put('foo.bar', 'baz');
$this->assertEquals('baz', $collection['foo.bar']);
unset($collection['foo.bar']);
$this->assertFalse($collection->exists('foo.bar'));
$collection = new Collection('main');
$collection->put('foo.bar.baz', 'bat');
$this->assertEquals('bat', $collection['foo.bar.baz']);
$this->assertTrue($collection->exists('foo.bar.baz'));
}
/** @test */
public function a_collection_can_have_attributes()
{
$collection = new CollectionStub('main');
$collection->name = 'Foo';
$this->assertEquals('Test Foo', $collection->name);
}
/** @test */
public function it_can_use_magic_methods_to_set_items()
{
$collection = new Collection('main');
$collection->id = 'foo';
$this->assertEquals('foo', $collection->id);
$collection = new Collection('main');
$collection->id = 'foo';
$this->assertEquals('foo', $collection->id);
$collection = new Collection('main', function ($collection) {
$collection->id = 'foo';
});
$this->assertEquals('foo', $collection->id);
}
/** @test */
public function it_can_sort_the_collection_items()
{
$collection = new Collection('main');
$collection->put('foo', ['id' => 1, 'name' => 'Foo']);
$collection->put('bar', ['id' => 2, 'name' => 'Bar']);
$collection->put('baz', ['id' => 3, 'name' => 'Baz']);
$this->assertEquals([
'foo' => [
'id' => 1,
'name' => 'Foo',
],
'bar' => [
'id' => 2,
'name' => 'Bar',
],
'baz' => [
'id' => 3,
'name' => 'Baz',
],
], $collection->all());
$this->assertEquals([
'bar' => [
'id' => 2,
'name' => 'Bar',
],
'baz' => [
'id' => 3,
'name' => 'Baz',
],
'foo' => [
'id' => 1,
'name' => 'Foo',
],
], $collection->sortBy('name')->all());
$expected = [
'baz' => [
'id' => 3,
'name' => 'Baz',
],
'bar' => [
'id' => 2,
'name' => 'Bar',
],
'foo' => [
'id' => 1,
'name' => 'Foo',
],
];
$output = $collection->sortByDesc('id')->all();
$this->assertTrue($expected === $output);
}
/** @test */
public function it_can_execute_the_before_callback_method()
{
$collection = new CollectionStub('foo');
$collection->put('foo', new Collection('foo'));
$collection->put('bar', new Collection('bar'));
$this->assertCount(2, $collection->all());
$this->assertTrue($collection->first()->valid);
$this->assertEquals('Foo', $collection->first()->name);
$this->assertTrue($collection->last()->valid);
$this->assertEquals('Bar', $collection->last()->name);
}
/** @test */
public function it_can_attach_a_collection()
{
$collection = new Collection('foo');
$this->assertCount(0, $collection);
$collection->attach(new Collection('foo'));
$collection->attach(new Collection('bar'));
$collection->attach(new Collection('baz'));
$collection->attach(new Collection('foo'));
$this->assertCount(3, $collection);
}
/** @test */
public function it_can_make_an_item_on_a_collection_the_first_item()
{
$collection = new Collection('main');
$collection->put('a', 'A');
$collection->put('b', 'B');
$collection->put('c', 'C');
$collection->put('d', 'D');
$this->assertEquals('A', $collection->first());
$collection->makeFirst('c');
$this->assertEquals('C', $collection->first());
$collection->makeFirst('z');
$this->assertEquals('C', $collection->first());
}
/** @test */
public function it_can_make_an_item_on_a_collection_the_last_item()
{
$collection = new Collection('main');
$collection->put('a', 'A');
$collection->put('b', 'B');
$collection->put('c', 'C');
$collection->put('d', 'D');
$this->assertEquals('D', $collection->last());
$collection->makeLast('c');
$this->assertEquals('C', $collection->last());
$collection->makeLast('z');
$this->assertEquals('C', $collection->last());
}
}
class CollectionStub extends Collection
{
public function nameAttribute($name)
{
return "Test {$name}";
}
public function beforeCallback()
{
foreach ($this->items as $item) {
$item->valid = true;
$item->name = ucfirst($item->id);
}
}
}