summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Rothstein <drothstein@gmail.com>2013-02-27 17:08:32 -0500
committerDavid Rothstein <drothstein@gmail.com>2013-02-27 17:08:32 -0500
commit297665a47120ae533aa1bbde1de9cb1227e7c6bf (patch)
tree1488b6c8a5c817a12c662f4715a02c4bec2e82ad
parentad244e2cb8a23b767907a5e33a2d675d251b248a (diff)
downloadbrdo-297665a47120ae533aa1bbde1de9cb1227e7c6bf.tar.gz
brdo-297665a47120ae533aa1bbde1de9cb1227e7c6bf.tar.bz2
Issue #1012620 by Berdir, kbasarab, YesCT: Fixed Unique key on date_formats().(format|type) is problematic for case insensitive collations.
-rw-r--r--modules/simpletest/tests/common.test16
-rw-r--r--modules/simpletest/tests/upgrade/upgrade.test14
-rw-r--r--modules/system/system.install16
3 files changed, 46 insertions, 0 deletions
diff --git a/modules/simpletest/tests/common.test b/modules/simpletest/tests/common.test
index e8e403330..cc4606951 100644
--- a/modules/simpletest/tests/common.test
+++ b/modules/simpletest/tests/common.test
@@ -2298,6 +2298,12 @@ class FormatDateUnitTest extends DrupalWebTestCase {
$edit = array('date_format' => $admin_date_format);
$this->drupalPost('admin/config/regional/date-time/formats/add', $edit, t('Add format'));
+ // Add a new date format which just differs in the case.
+ $admin_date_format_uppercase = 'j M Y';
+ $edit = array('date_format' => $admin_date_format_uppercase);
+ $this->drupalPost('admin/config/regional/date-time/formats/add', $edit, t('Add format'));
+ $this->assertText(t('Custom date format added.'));
+
// Add new date type.
$edit = array(
'date_type' => 'Example Style',
@@ -2306,8 +2312,18 @@ class FormatDateUnitTest extends DrupalWebTestCase {
);
$this->drupalPost('admin/config/regional/date-time/types/add', $edit, t('Add date type'));
+ // Add a second date format with a different case than the first.
+ $edit = array(
+ 'machine_name' => 'example_style_uppercase',
+ 'date_type' => 'Example Style Uppercase',
+ 'date_format' => $admin_date_format_uppercase,
+ );
+ $this->drupalPost('admin/config/regional/date-time/types/add', $edit, t('Add date type'));
+ $this->assertText(t('New date type added successfully.'));
+
$timestamp = strtotime('2007-03-10T00:00:00+00:00');
$this->assertIdentical(format_date($timestamp, 'example_style', '', 'America/Los_Angeles'), '9 Mar 07', t('Test format_date() using an admin-defined date type.'));
+ $this->assertIdentical(format_date($timestamp, 'example_style_uppercase', '', 'America/Los_Angeles'), '9 Mar 2007', 'Test format_date() using an admin-defined date type with different case.');
$this->assertIdentical(format_date($timestamp, 'undefined_style'), format_date($timestamp, 'medium'), t('Test format_date() defaulting to medium when $type not found.'));
}
diff --git a/modules/simpletest/tests/upgrade/upgrade.test b/modules/simpletest/tests/upgrade/upgrade.test
index 9df8ec779..cc849aa79 100644
--- a/modules/simpletest/tests/upgrade/upgrade.test
+++ b/modules/simpletest/tests/upgrade/upgrade.test
@@ -566,6 +566,20 @@ class BasicMinimalUpdatePath extends UpdatePathTestCase {
// Confirm that no {menu_links} entry exists for user/autocomplete.
$result = db_query('SELECT COUNT(*) FROM {menu_links} WHERE link_path = :user_autocomplete', array(':user_autocomplete' => 'user/autocomplete'))->fetchField();
$this->assertFalse($result, t('No {menu_links} entry exists for user/autocomplete'));
+
+ // Confirm that a date format that just differs in the case can be added.
+ $admin_date_format = 'j M y';
+ $edit = array('date_format' => $admin_date_format);
+ $this->drupalPost('admin/config/regional/date-time/formats/add', $edit, t('Add format'));
+
+ // Add a new date format which just differs in the case.
+ $admin_date_format_uppercase = 'j M Y';
+ $edit = array('date_format' => $admin_date_format_uppercase);
+ $this->drupalPost('admin/config/regional/date-time/formats/add', $edit, t('Add format'));
+ $this->assertText(t('Custom date format added.'));
+
+ // Verify that the unique key on {date_formats}.format still exists.
+ $this->assertTrue(db_index_exists('date_formats', 'formats'), 'Unique key on {date_formats} exists');
}
}
diff --git a/modules/system/system.install b/modules/system/system.install
index 338e73a21..59bb2f14a 100644
--- a/modules/system/system.install
+++ b/modules/system/system.install
@@ -744,6 +744,7 @@ function system_schema() {
'type' => 'varchar',
'length' => 100,
'not null' => TRUE,
+ 'binary' => TRUE,
),
'type' => array(
'description' => 'The date format type, e.g. medium.',
@@ -3088,6 +3089,21 @@ function system_update_7077() {
));
}
+
+/**
+ * Add binary to {date_formats}.format.
+ */
+function system_update_7078() {
+ db_drop_unique_key('date_formats', 'formats');
+ db_change_field('date_formats', 'format', 'format', array(
+ 'description' => 'The date format string.',
+ 'type' => 'varchar',
+ 'length' => 100,
+ 'not null' => TRUE,
+ 'binary' => TRUE,
+ ), array('unique keys' => array('formats' => array('format', 'type'))));
+}
+
/**
* @} End of "defgroup updates-7.x-extra".
* The next series of updates should start at 8000.