1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-07-30 21:40:43 +02:00

Merge pull request #4680 from marc1706/ticket/15055

[ticket/15055] Add appveyor file to allow running tests on appveyor as well
This commit is contained in:
Derky
2018-01-05 22:44:34 +01:00
25 changed files with 439 additions and 44 deletions

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<dataset>
<table name="phpbb_attachments">
<column>attach_id</column>
<column>post_msg_id</column>
<column>topic_id</column>
<column>in_message</column>
@@ -9,6 +10,7 @@
<column>physical_filename</column>
<column>thumbnail</column>
<row>
<value>1</value>
<value>1</value>
<value>1</value>
<value>0</value>
@@ -18,6 +20,7 @@
<value>0</value>
</row>
<row>
<value>2</value>
<value>1</value>
<value>1</value>
<value>1</value>
@@ -27,6 +30,7 @@
<value>0</value>
</row>
<row>
<value>3</value>
<value>1</value>
<value>1</value>
<value>1</value>
@@ -37,13 +41,16 @@
</row>
</table>
<table name="phpbb_extensions">
<column>extension_id</column>
<column>extension</column>
<column>group_id</column>
<row>
<value>1</value>
<value>jpg</value>
<value>1</value>
</row>
<row>
<value>2</value>
<value>png</value>
<value>1</value>
</row>

View File

@@ -14,12 +14,15 @@
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Tester\CommandTester;
use phpbb\console\command\user\add;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\Question;
require_once dirname(__FILE__) . '/base.php';
class phpbb_console_user_add_test extends phpbb_console_user_base
{
public function get_command_tester()
public function get_command_tester($question_answers = [])
{
$application = new Application();
$application->add(new add(
@@ -34,7 +37,42 @@ class phpbb_console_user_add_test extends phpbb_console_user_base
$command = $application->find('user:add');
$this->command_name = $command->getName();
$this->question = $command->getHelper('question');
if (!empty($question_answers))
{
$ask = function(InputInterface $input, OutputInterface $output, Question $question) use ($question_answers)
{
$text = $question->getQuestion();
// handle a question
foreach ($question_answers as $expected_question => $answer)
{
if (strpos($text, $expected_question) !== false)
{
$response = $answer;
}
}
if (!isset($response))
{
throw new \RuntimeException('Was asked for input on an unhandled question: ' . $text);
}
$output->writeln(print_r($response, true));
return $response;
};
$helper = $this->getMock('\Symfony\Component\Console\Helper\QuestionHelper', array('ask'));
$helper->expects($this->any())
->method('ask')
->will($this->returnCallback($ask));
$this->question = $helper;
$command->getHelperSet()->set($helper, 'question');
}
else
{
$this->question = $command->getHelper('question');
}
return new CommandTester($command);
}
@@ -57,7 +95,11 @@ class phpbb_console_user_add_test extends phpbb_console_user_base
public function test_add_dialog()
{
$command_tester = $this->get_command_tester();
$command_tester = $this->get_command_tester([
'USERNAME' => 'bar',
'PASSWORD' => 'password',
'EMAIL_ADDRESS' => 'bar@test.com',
]);
$this->assertEquals(2, $this->get_user_id('Admin'));

View File

@@ -203,8 +203,15 @@ class phpbb_dbal_db_tools_test extends phpbb_database_test_case
public function test_list_columns()
{
$config = $this->get_database_config();
$table_columns = $this->table_data['COLUMNS'];
if (strpos($config['dbms'], 'mssql') !== false)
{
ksort($table_columns);
}
$this->assertEquals(
array_keys($this->table_data['COLUMNS']),
array_keys($table_columns),
array_values($this->tools->sql_list_columns('prefix_table_name'))
);
}
@@ -432,28 +439,37 @@ class phpbb_dbal_db_tools_test extends phpbb_database_test_case
$this->markTestIncomplete('The table prefix length is too long for proper testing of index shortening function.');
}
$max_index_length = 30;
if ($this->tools instanceof \phpbb\db\tools\mssql)
{
$max_length_method = new ReflectionMethod('\phpbb\db\tools\mssql', 'get_max_index_name_length');
$max_length_method->setAccessible(true);
$max_index_length = $max_length_method->invoke($this->tools);
}
$table_suffix = str_repeat('a', 25 - strlen($table_prefix));
$table_name = $table_prefix . $table_suffix;
$this->tools->sql_create_table($table_name, $this->table_data);
// Index name and table suffix and table prefix have > 30 chars in total.
// Index name and table suffix have <= 30 chars in total.
$long_index_name = str_repeat('i', 30 - strlen($table_suffix));
// Index name and table suffix and table prefix have > maximum index length chars in total.
// Index name and table suffix have <= maximum index length chars in total.
$long_index_name = str_repeat('i', $max_index_length - strlen($table_suffix));
$this->assertFalse($this->tools->sql_index_exists($table_name, $long_index_name));
$this->assertTrue($this->tools->sql_create_index($table_name, $long_index_name, array('c_timestamp')));
$this->assertTrue($this->tools->sql_index_exists($table_name, $long_index_name));
// Index name and table suffix have > 30 chars in total.
$very_long_index_name = str_repeat('i', 30);
// Index name and table suffix have > maximum index length chars in total.
$very_long_index_name = str_repeat('i', $max_index_length);
$this->assertFalse($this->tools->sql_index_exists($table_name, $very_long_index_name));
$this->assertTrue($this->tools->sql_create_index($table_name, $very_long_index_name, array('c_timestamp')));
$this->assertTrue($this->tools->sql_index_exists($table_name, $very_long_index_name));
$this->tools->sql_table_drop($table_name);
// Index name has > 30 chars - that should not be possible.
$too_long_index_name = str_repeat('i', 31);
// Index name has > maximum index length chars - that should not be possible.
$too_long_index_name = str_repeat('i', $max_index_length + 1);
$this->assertFalse($this->tools->sql_index_exists('prefix_table_name', $too_long_index_name));
$this->setExpectedTriggerError(E_USER_ERROR);
$this->tools->sql_create_index('prefix_table_name', $too_long_index_name, array('c_timestamp'));

View File

@@ -60,25 +60,31 @@
<table name="phpbb_user_group">
<column>user_id</column>
<column>group_id</column>
<column>group_leader</column>
<row>
<value>1</value>
<value>1</value>
<value>2</value>
</row>
<row>
<value>2</value>
<value>1</value>
<value>2</value>
</row>
<row>
<value>3</value>
<value>1</value>
<value>2</value>
</row>
<row>
<value>4</value>
<value>2</value>
<value>2</value>
</row>
<row>
<value>5</value>
<value>2</value>
<value>2</value>
</row>
</table>
</dataset>

View File

@@ -133,7 +133,7 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
for ($i = 0; $i < $crawler->filter('dl')->count(); $i++)
{
$text = $crawler->filter('dl')->eq($i)->text();
$text = trim($crawler->filter('dl')->eq($i)->text());
$match = false;

View File

@@ -1,9 +1,11 @@
<?xml version="1.0" encoding="UTF-8" ?>
<dataset>
<table name="phpbb_groups">
<column>group_id</column>
<column>group_name</column>
<column>group_desc</column>
<row>
<value>10</value>
<value>foobar_group</value>
<value>test123</value>
</row>

View File

@@ -515,35 +515,44 @@
</table>
<table name="phpbb_privmsgs_folder">
<column>user_id</column>
<column>folder_id</column>
<row>
<value>2</value>
<value>1</value>
</row>
<row>
<value>3</value>
<value>2</value>
</row>
</table>
<table name="phpbb_privmsgs_rules">
<column>user_id</column>
<column>rule_string</column>
<column>rule_id</column>
<row>
<value>2</value>
<value></value>
<value>1</value>
</row>
<row>
<value>3</value>
<value></value>
<value>2</value>
</row>
</table>
<table name="phpbb_drafts">
<column>user_id</column>
<column>draft_message</column>
<column>draft_id</column>
<row>
<value>2</value>
<value></value>
<value>1</value>
</row>
<row>
<value>3</value>
<value></value>
<value>2</value>
</row>
</table>
</dataset>

View File

@@ -29,6 +29,7 @@
</row>
</table>
<table name="phpbb_notifications">
<column>notification_id</column>
<column>notification_type_id</column>
<column>user_id</column>
<column>item_id</column>
@@ -36,6 +37,7 @@
<column>notification_read</column>
<column>notification_data</column>
<row>
<value>1</value>
<value>1</value>
<value>5</value>
<value>1</value>

View File

@@ -21,6 +21,7 @@
</row>
</table>
<table name="phpbb_notifications">
<column>notification_id</column>
<column>notification_type_id</column>
<column>user_id</column>
<column>item_id</column>
@@ -28,6 +29,7 @@
<column>notification_read</column>
<column>notification_data</column>
<row>
<value>1</value>
<value>1</value>
<value>5</value>
<value>1</value>
@@ -36,6 +38,7 @@
<value></value>
</row>
<row>
<value>2</value>
<value>1</value>
<value>8</value>
<value>1</value>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<dataset>
<table name="phpbb_notifications">
<column>notification_id</column>
<column>notification_type_id</column>
<column>user_id</column>
<column>item_id</column>
@@ -8,6 +9,7 @@
<column>notification_read</column>
<column>notification_data</column>
<row>
<value>1</value>
<value>1</value>
<value>6</value>
<value>1</value>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<dataset>
<table name="phpbb_notifications">
<column>notification_id</column>
<column>notification_type_id</column>
<column>user_id</column>
<column>item_id</column>
@@ -8,6 +9,7 @@
<column>notification_read</column>
<column>notification_data</column>
<row>
<value>1</value>
<value>1</value>
<value>5</value>
<value>1</value>

View File

@@ -21,6 +21,7 @@
</row>
</table>
<table name="phpbb_notifications">
<column>notification_id</column>
<column>notification_type_id</column>
<column>user_id</column>
<column>item_id</column>
@@ -28,6 +29,7 @@
<column>notification_read</column>
<column>notification_data</column>
<row>
<value>1</value>
<value>1</value>
<value>8</value>
<value>1</value>

View File

@@ -108,7 +108,7 @@ class phpbb_notification_test extends phpbb_tests_notification_base
$types = array('notification.type.quote', 'notification.type.bookmark', 'notification.type.post', 'test');
foreach ($types as $id => $type)
{
$this->db->sql_query('INSERT INTO phpbb_notification_types ' .
$this->getConnection()->createQueryTable('insertNotification', 'INSERT INTO phpbb_notification_types ' .
$this->db->sql_build_array('INSERT', array(
'notification_type_id' => ($id + 1),
'notification_type_name' => $type,

View File

@@ -1,25 +1,30 @@
<?xml version="1.0" encoding="UTF-8" ?>
<dataset>
<table name="phpbb_posts">
<column>post_id</column>
<column>post_username</column>
<column>post_subject</column>
<column>post_text</column>
<row>
<value>1</value>
<value>foo</value>
<value>foo</value>
<value>foo</value>
</row>
<row>
<value>2</value>
<value>bar</value>
<value>bar</value>
<value>bar</value>
</row>
<row>
<value>3</value>
<value>commonword</value>
<value>commonword</value>
<value>commonword</value>
</row>
<row>
<value>4</value>
<value>baaz</value>
<value>baaz</value>
<value>baaz</value>

View File

@@ -142,9 +142,86 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
$manager->database_synchronisation($table_column_map);
}
/**
* Create xml data set for insertion into database
*
* @param string $path Path to fixture XML
* @return PHPUnit_Extensions_Database_DataSet_DefaultDataSet|PHPUnit_Extensions_Database_DataSet_XmlDataSet
*/
public function createXMLDataSet($path)
{
$this->fixture_xml_data = parent::createXMLDataSet($path);
// Extend XML data set on MSSQL
if (strpos($this->get_database_config()['dbms'], 'mssql') !== false)
{
$newXmlData = new PHPUnit_Extensions_Database_DataSet_DefaultDataSet();
$db = $this->new_dbal();
foreach ($this->fixture_xml_data as $key => $value)
{
/** @var \PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData $tableMetaData */
$tableMetaData = $value->getTableMetaData();
$columns = $tableMetaData->getColumns();
$primaryKeys = $tableMetaData->getPrimaryKeys();
$sql = "SELECT COLUMN_NAME AS identity_column
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMNPROPERTY(object_id(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
AND TABLE_NAME = '$key'
ORDER BY TABLE_NAME";
$result = $db->sql_query($sql);
$identity_columns = $db->sql_fetchrowset($result);
$has_default_identity = false;
$add_primary_keys = false;
// Iterate over identity columns to check for missing primary
// keys in data set and special identity column 'mssqlindex'
// that might have been added when no default identity column
// exists in the current table.
foreach ($identity_columns as $column)
{
if (in_array($column['identity_column'], $columns) && !in_array($column['identity_column'], $primaryKeys))
{
$primaryKeys[] = $column['identity_column'];
$add_primary_keys = true;
}
if ($column['identity_column'] === 'mssqlindex')
{
$has_default_identity = true;
break;
}
}
if ($has_default_identity || $add_primary_keys)
{
// Add default identity column to columns list
if ($has_default_identity)
{
$columns[] = 'mssqlindex';
}
$newMetaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData($key, $columns, $primaryKeys);
$newTable = new PHPUnit_Extensions_Database_DataSet_DefaultTable($newMetaData);
for ($i = 0; $i < $value->getRowCount(); $i++)
{
$dataRow = $value->getRow($i);
if ($has_default_identity)
{
$dataRow['mssqlindex'] = $i + 1;
}
$newTable->addRow($dataRow);
}
$newXmlData->addTable($newTable);
}
else
{
$newXmlData->addTable($value);
}
}
$this->fixture_xml_data = $newXmlData;
}
return $this->fixture_xml_data;
}

View File

@@ -222,6 +222,14 @@ class phpbb_database_test_connection_manager
$this->purge_extras();
break;
case 'phpbb\db\driver\mssql':
case 'phpbb\db\driver\mssqlnative':
$this->connect();
// Drop all tables
$this->pdo->exec("EXEC sp_MSforeachtable 'DROP TABLE ?'");
$this->purge_extras();
break;
default:
$this->connect(false);

View File

@@ -509,7 +509,6 @@ class phpbb_functional_test_case extends phpbb_test_case
else
{
$db->sql_multi_insert(STYLES_TABLE, array(array(
'style_id' => $style_id,
'style_name' => $style_path,
'style_copyright' => '',
'style_active' => 1,

View File

@@ -69,7 +69,7 @@ class phpbb_tests_tree_nestedset_forum_base extends phpbb_database_test_case
static $forums;
if (empty($forums))
{
{
$this->create_forum('Parent with two flat children');
$this->create_forum('Flat child #1', 1);
$this->create_forum('Flat child #2', 1);
@@ -86,7 +86,7 @@ class phpbb_tests_tree_nestedset_forum_base extends phpbb_database_test_case
// Updating forum_parents column here so it's not empty
// This is required, so we can see whether the methods
// correctly clear the values.
// correctly clear the values.
$sql = "UPDATE phpbb_forums
SET forum_parents = 'a:0:{}'";
$this->db->sql_query($sql);
@@ -100,6 +100,13 @@ class phpbb_tests_tree_nestedset_forum_base extends phpbb_database_test_case
}
else
{
// Turn on identity insert on mssql to be able to insert into
// identity columns (e.g. forum_id)
if (strpos($this->db->sql_layer, 'mssql') !== false)
{
$sql = 'SET IDENTITY_INSERT phpbb_forums ON';
$this->db->sql_query($sql);
}
$buffer = new \phpbb\db\sql_insert_buffer($this->db, 'phpbb_forums');
$buffer->insert_all($forums);
$buffer->flush();
@@ -107,7 +114,14 @@ class phpbb_tests_tree_nestedset_forum_base extends phpbb_database_test_case
$this->database_synchronisation(array(
'phpbb_forums' => array('forum_id'),
));
}
// Disable identity insert on mssql again
if (strpos($this->db->sql_layer, 'mssql') !== false)
{
$sql = 'SET IDENTITY_INSERT phpbb_forums OFF';
$this->db->sql_query($sql);
}
}
}
protected function create_forum($name, $parent_id = 0)