mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-24 00:43:20 +01:00
Some automatic tests for server-side customfields
This commit is contained in:
parent
9c1dd164a1
commit
fb32fbf819
8
api/templates/test/customfields_test.xet
Normal file
8
api/templates/test/customfields_test.xet
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE overlay PUBLIC "-//EGroupware GmbH//eTemplate 2.0//EN" "https://www.egroupware.org/etemplate2.0.dtd">
|
||||||
|
<!-- This template is used in automated testing -->
|
||||||
|
<overlay>
|
||||||
|
<template id="api.customfields_test" template="test" lang="" group="0" version="16.1">
|
||||||
|
<customfields-list id="widget" private="@private"></customfields-list>
|
||||||
|
</template>
|
||||||
|
</overlay>
|
216
api/tests/Etemplate/Widget/CustomfieldsTest.php
Normal file
216
api/tests/Etemplate/Widget/CustomfieldsTest.php
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test for Customfields widget
|
||||||
|
*
|
||||||
|
* @link http://www.egroupware.org
|
||||||
|
* @author Nathan Gray
|
||||||
|
* @package api
|
||||||
|
* @subpackage etemplate
|
||||||
|
* @copyright (c) 2017 Nathan Gray
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace EGroupware\Api\Etemplate\Widget;
|
||||||
|
|
||||||
|
require_once realpath(__DIR__ . '/../WidgetBaseTest.php');
|
||||||
|
|
||||||
|
use EGroupware\Api\Etemplate;
|
||||||
|
|
||||||
|
class CustomfieldsTest extends \EGroupware\Api\Etemplate\WidgetBaseTest
|
||||||
|
{
|
||||||
|
|
||||||
|
const TEST_TEMPLATE = 'api.customfields_test';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mocked customfields used throughout.
|
||||||
|
*/
|
||||||
|
const cf_list = [
|
||||||
|
'text' => array(
|
||||||
|
'id' => '1',
|
||||||
|
'app' => 'infolog',
|
||||||
|
'name' => 'text',
|
||||||
|
'label' => 'text',
|
||||||
|
'type' => 'text',
|
||||||
|
'needed' => false,
|
||||||
|
'private' => [],
|
||||||
|
),
|
||||||
|
'required' => array(
|
||||||
|
'id' => '2',
|
||||||
|
'app' => 'infolog',
|
||||||
|
'name' => 'required',
|
||||||
|
'label' => 'required',
|
||||||
|
'type' => 'text',
|
||||||
|
'needed' => true,
|
||||||
|
'private' => [],
|
||||||
|
),
|
||||||
|
'private' => array(
|
||||||
|
'id' => '3',
|
||||||
|
'app' => 'infolog',
|
||||||
|
'name' => 'private',
|
||||||
|
'label' => 'private',
|
||||||
|
'type' => 'text',
|
||||||
|
'needed' => false,
|
||||||
|
'private' => ['-1'],
|
||||||
|
),
|
||||||
|
'type_limited' => array(
|
||||||
|
'id' => '4',
|
||||||
|
'app' => 'infolog',
|
||||||
|
'name' => 'type_limited',
|
||||||
|
'label' => 'type limited',
|
||||||
|
'type' => 'text',
|
||||||
|
'type2' => ['subtype'],
|
||||||
|
'needed' => false,
|
||||||
|
)
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the widget's basic functionality - we put data in, it comes back
|
||||||
|
* unchanged.
|
||||||
|
*
|
||||||
|
* @dataProvider validProvider
|
||||||
|
*/
|
||||||
|
public function testBasic($content)
|
||||||
|
{
|
||||||
|
// Instanciate the template
|
||||||
|
$etemplate = new Etemplate();
|
||||||
|
$etemplate->read(static::TEST_TEMPLATE, 'test');
|
||||||
|
|
||||||
|
// Set CFs
|
||||||
|
$etemplate->setElementAttribute('widget', 'customfields', self::cf_list);
|
||||||
|
|
||||||
|
// Send it around
|
||||||
|
$result = $this->mockedRoundTrip($etemplate, array('widget' => $content));
|
||||||
|
|
||||||
|
// Test it
|
||||||
|
$this->validateTest($result, array('widget' => $content));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that the widget does not return a value if readonly
|
||||||
|
*
|
||||||
|
* @dataProvider validProvider
|
||||||
|
*
|
||||||
|
* It's the client that removes them here, so we can't really test without.
|
||||||
|
*
|
||||||
|
* public function testReadonly($content)
|
||||||
|
* {
|
||||||
|
* // Instanciate the template
|
||||||
|
* $etemplate = new Etemplate();
|
||||||
|
* $etemplate->read(static::TEST_TEMPLATE, 'test');
|
||||||
|
*
|
||||||
|
* // Set CFs
|
||||||
|
* $etemplate->setElementAttribute('widget', 'customfields', self::cf_list);
|
||||||
|
*
|
||||||
|
* // Exec
|
||||||
|
* $result = $this->mockedRoundTrip($etemplate, ['widget' => $content], array(), array('widget' => true));
|
||||||
|
*
|
||||||
|
* // Check
|
||||||
|
* $this->assertEquals(array(), $result);
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider validProvider
|
||||||
|
* @return void
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public function testPrivateFilter($content)
|
||||||
|
{
|
||||||
|
// Instanciate the template
|
||||||
|
$etemplate = new Etemplate();
|
||||||
|
$etemplate->read(static::TEST_TEMPLATE, 'test');
|
||||||
|
|
||||||
|
// Set CFs
|
||||||
|
$etemplate->setElementAttribute('widget', 'customfields', self::cf_list);
|
||||||
|
|
||||||
|
// Exec
|
||||||
|
$result = $this->mockedRoundTrip($etemplate, ['private' => true, 'widget' => $content]);
|
||||||
|
|
||||||
|
// Check for only the private field
|
||||||
|
$this->assertSame(['widget' => ['#private' => 'private']], $result);
|
||||||
|
|
||||||
|
|
||||||
|
// Now the opposite, only non-private
|
||||||
|
unset($content['#private']);
|
||||||
|
// Exec
|
||||||
|
$etemplate->setElementAttribute('widget', 'customfields', self::cf_list);
|
||||||
|
$result = $this->mockedRoundTrip($etemplate, ['private' => '0', 'widget' => $content]);
|
||||||
|
|
||||||
|
// Check for all but the private field
|
||||||
|
$this->assertSame(['widget' => $content], $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check field filtering
|
||||||
|
*
|
||||||
|
* @param type $content
|
||||||
|
* @param type $validation_errors
|
||||||
|
*
|
||||||
|
* @dataProvider fieldFilterProvider
|
||||||
|
*/
|
||||||
|
public function testFieldFilter($content, $fields, $expected)
|
||||||
|
{
|
||||||
|
// Instanciate the template
|
||||||
|
$etemplate = new Etemplate();
|
||||||
|
$etemplate->read(static::TEST_TEMPLATE, 'test');
|
||||||
|
|
||||||
|
// Set CFs
|
||||||
|
$etemplate->setElementAttribute('widget', 'customfields', self::cf_list);
|
||||||
|
|
||||||
|
// Filter
|
||||||
|
$etemplate->setElementAttribute('widget', 'fields', $fields);
|
||||||
|
|
||||||
|
$content = array('widget' => $content);
|
||||||
|
$result = $this->mockedExec($etemplate, $content);
|
||||||
|
|
||||||
|
// Check for the load
|
||||||
|
$data = array();
|
||||||
|
foreach($result as $command)
|
||||||
|
{
|
||||||
|
if($command['type'] == 'et2_load')
|
||||||
|
{
|
||||||
|
$data = $command['data'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure we're sending what is expected
|
||||||
|
$this->assertContains(key($expected), array_keys($data['data']['content']['widget']), "Filtered field missing");
|
||||||
|
$this->assertEquals(current($expected), $data['data']['content']['widget'][key($expected)], "Filtered field's value missing");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* These are all valid, since fields are all text.
|
||||||
|
* The individual widgets to their own type validation.
|
||||||
|
*/
|
||||||
|
public static function validProvider()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
[['#text' => 'text', '#required' => 'required', '#private' => 'private', '#type_limited' => 'type_limited']]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check filtering each field individually, then filtering to allow all fields
|
||||||
|
*/
|
||||||
|
public function fieldFilterProvider()
|
||||||
|
{
|
||||||
|
$field_values = CustomfieldsTest::validProvider()[0][0];
|
||||||
|
$field_filters = array();
|
||||||
|
foreach(CustomfieldsTest::cf_list as $field_name => $field)
|
||||||
|
{
|
||||||
|
$field_filters[] = array(
|
||||||
|
$field_values,
|
||||||
|
$field_name,
|
||||||
|
['#' . $field_name => $field_values['#' . $field_name]]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$field_filters[] = array(
|
||||||
|
$field_values,
|
||||||
|
array_keys(CustomfieldsTest::cf_list),
|
||||||
|
$field_values
|
||||||
|
);
|
||||||
|
return $field_filters;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user