public function testSubCellsToView() { /** @var CompoundColumn $column */ $column = $this->factory->createColumn('actions', $this->getTestedType(), ['label' => 'Actions']); $columns = []; $columns['age'] = $this->factory->createColumn('age', NumberType::class, ['parent_column' => $column]); $columns['name'] = $this->factory->createColumn('name', TextType::class, ['parent_column' => $column, 'block_name' => 'my_named']); $column->setColumns($columns); $datagrid = new Datagrid('grid', [$column]); $object = new \stdClass(); $object->key = ' foo '; $object->name = ' sheldon '; $object->age = 42; $datagrid->setData([1 => $object]); $datagridView = $datagrid->createView(); $row = $datagridView->rows[1]->cells; // Actions (root) column $view = $row['actions']; self::assertDatagridCompoundCell('age', ['unique_block_prefix' => '_grid_actions', 'row' => 1], $view); self::assertDatagridCompoundCell('name', ['unique_block_prefix' => '_grid_actions', 'row' => 1], $view); self::assertArrayHasKey('age', $view->value); self::assertArrayHasKey('name', $view->value); self::assertArrayNotHasKey('key', $view->value); // Internal cells $cells = $view->value; self::assertDatagridCell('age', '42', ['unique_block_prefix' => '_grid_actions_age', 'block_prefixes' => ['column', 'number', '_grid_actions_age'], 'cache_key' => '_grid_actions_age_number', 'row' => 1, 'compound' => true], $cells['age']); self::assertDatagridCell('name', ' sheldon ', ['unique_block_prefix' => '_my_named', 'block_prefixes' => ['column', 'text', '_my_named'], 'cache_key' => '_my_named_text', 'row' => 1, 'compound' => true], $cells['name']); }
public function testCreateView() { $gridData = [new Entity('entity1'), new Entity('entity2')]; $this->datagrid->setData($gridData); $view = $this->datagrid->createView(); self::assertEquals('_users', $view->vars['unique_block_prefix']); self::assertEquals(['datagrid', '_users'], $view->vars['block_prefixes']); self::assertEquals(['unique_block_prefix' => '_users_row', 'block_prefixes' => ['datagrid_row', '_users_row']], $view->vars['row_vars']); self::assertTrue($view->hasColumn('foo')); self::assertFalse($view->hasColumn('foo2')); }
public function testPassLabelToHeaderView() { $column = $this->factory->createColumn('edit', $this->getTestedType(), ['label' => 'My label', 'data_provider' => function ($data) { return ['key' => $data->key]; }, 'uri_scheme' => '/entity/{key}/edit']); $datagrid = new Datagrid('grid', [$column]); $object = new \stdClass(); $object->key = ' foo '; $datagrid->setData([1 => $object]); $view = $datagrid->createView(); $view = $column->createHeaderView($view); $this->assertSame('My label', $view->label); }
public function testPassLabelAndOtherToView() { $column = $this->factory->createColumn('id', $this->getTestedType(), ['label' => 'My label', 'label_attr' => ['class' => 'info'], 'header_attr' => ['class' => 'striped'], 'cell_attr' => ['class' => 'striped'], 'label_translation_domain' => 'messages', 'data_provider' => function ($data) { return $data->key; }]); $datagrid = new Datagrid('my_grid', [$column]); $object = new \stdClass(); $object->key = new \DateTime(); $datagrid->setData([1 => $object]); $view = $datagrid->createView(); $view = $column->createHeaderView($view); $this->assertSame('My label', $view->label); self::assertViewVarsEquals(['label_attr' => ['class' => 'info'], 'header_attr' => ['class' => 'striped'], 'cell_attr' => ['class' => 'striped'], 'label_translation_domain' => 'messages', 'unique_block_prefix' => '_my_grid_id', 'block_prefixes' => ['column', 'date_time', '_my_grid_id']], $view); }
protected function assertCellValueNotEquals($expectedValue, $data, array $options = [], $idx = 1) { $column = $this->factory->createColumn('id', $this->getTestedType(), array_merge(['label' => 'My label', 'data_provider' => !is_array($data) ? function ($data) { return $data->key; } : null], $options)); $datagrid = new Datagrid('grid', [$column]); if (!is_array($data)) { $object = new \stdClass(); $object->key = $data; $data = [$idx => $object]; } $datagrid->setData($data); $datagridView = $datagrid->createView(); $view = $column->createCellView($datagridView->columns['id'], $data[$idx], $idx); $this->assertNotEquals($expectedValue, $view->value); }
/** @test */ public function configures_batch_element_name_and_id() { $object1 = new \stdClass(); $object1->key = 'b2-3b-fa-31-31:fb'; $object2 = new \stdClass(); $object2->key = '12-3b-fa-31-31-fb'; $data = [1 => $object1, 2 => $object2]; $column = $this->factory->createColumn('key', BatchType::class); $datagrid = new Datagrid('my_grid', [$column]); $datagrid->setData($data); $datagridView = $datagrid->createView(); $view1 = $column->createCellView($datagridView->columns['key'], $object1, 1); $view2 = $column->createCellView($datagridView->columns['key'], $object2, 2); self::assertEquals($this->normalizeViewExpectation(['row' => 1, 'datagrid_name' => 'my_grid', 'selection_name' => 'my_grid[key][]', 'selection_id' => 'my_grid-key__b2-3b-fa-31-31-fb'], $view1), $view1->vars); self::assertEquals($this->normalizeViewExpectation(['row' => 2, 'datagrid_name' => 'my_grid', 'selection_name' => 'my_grid[key][]', 'selection_id' => 'my_grid-key__12-3b-fa-31-31-fb'], $view2), $view2->vars); }
public function testDifferentCurrencyByMapping() { \Locale::setDefault('de_DE'); $column = $this->factory->createColumn('price', $this->getTestedType(), ['currency' => 'EUR']); $column2 = $this->factory->createColumn('price2', $this->getTestedType(), ['data_provider' => function ($value) { return ['currency' => $value->currency, 'amount' => $value->price2]; }]); $datagrid = new Datagrid('grid', [$column, $column2]); $object = new \stdClass(); $object->price = '1.23'; $object->price2 = '1.23'; $object->currency = null; $object2 = new \stdClass(); $object2->price = '1.23'; $object2->price2 = '1.23'; $object2->currency = 'GBP'; $data = [1 => $object, 2 => $object2]; $datagrid->setData($data); $datagridView = $datagrid->createView(); $view = $column->createCellView($datagridView->columns['price'], $data[1], 1); $this->assertSame('1,23 €', $view->value); $view = $column2->createCellView($datagridView->columns['price'], $data[2], 1); $this->assertSame('1,23 £', $view->value); }
/** @test */ public function url_or_uri_schema_must_be_provided() { $column = $this->factory->createColumn('id', $this->getTestedType(), ['url' => null, 'uri_scheme' => null, 'content' => 'edit', 'label' => 'My label', 'data_provider' => function ($data) { return ['id' => $data->id, 'username' => $data->name]; }]); $datagrid = new Datagrid('grid', [$column]); $object = new \stdClass(); $object->id = 50; $object->name = 'sheldon'; $data = [1 => $object]; $datagrid->setData($data); $this->expectException(InvalidConfigurationException::class); $this->expectExceptionMessage('Action needs an "url" or "uri_scheme" but none is provided.'); $datagrid->createView(); }
public function testInvalidPropertyPathProviderFailsWithHelpfulMessage() { $object = new \stdClass(); $object->key = 'foo'; $object->key2 = 'bar'; $data = [1 => $object]; $column = $this->factory->createColumn('key2', ColumnType::class, ['data_provider' => '][key3']); $datagrid = new Datagrid('grid', [$column]); $datagrid->setData($data); $this->expectException(DataProviderException::class); $this->expectExceptionMessage('Invalid property-path for column "key2" with message: Could not parse property path "][key3"'); $datagrid->createView(); }