From cbdcdd473451db2bcea8a6a3d486d374fe8c9104 Mon Sep 17 00:00:00 2001 From: "Eloy Lafuente (stronk7)" Date: Thu, 31 May 2012 00:58:19 +0200 Subject: [PATCH 1/1] MDL-33434 dml: define expected results when unique constraint is violated on insert. --- lib/dml/tests/dml_test.php | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lib/dml/tests/dml_test.php b/lib/dml/tests/dml_test.php index 0ef6eca624d..410c7ffef3b 100644 --- a/lib/dml/tests/dml_test.php +++ b/lib/dml/tests/dml_test.php @@ -2078,6 +2078,34 @@ class dml_testcase extends database_driver_testcase { $this->assertEquals(1e-300, $DB->get_field($tablename, 'onetext', array('id' => $id))); $id = $DB->insert_record($tablename, array('onetext' => 1e300)); $this->assertEquals(1e300, $DB->get_field($tablename, 'onetext', array('id' => $id))); + + // Test that inserting data violating one unique key leads to error. + // Empty the table completely. + $this->assertTrue($DB->delete_records($tablename)); + + // Add one unique constraint (index). + $key = new xmldb_key('testuk', XMLDB_KEY_UNIQUE, array('course', 'oneint')); + $dbman->add_key($table, $key); + + // Let's insert one record violating the constraint multiple times. + $record = (object)array('course' => 1, 'oneint' => 1); + $this->assertTrue($DB->insert_record($tablename, $record, false)); // insert 1st. No problem expected. + + // Re-insert same record, not returning id. dml_exception expected. + try { + $DB->insert_record($tablename, $record, false); + $this->fail("Expecting an exception, none occurred"); + } catch (exception $e) { + $this->assertTrue($e instanceof dml_exception); + } + + // Re-insert same record, returning id. dml_exception expected. + try { + $DB->insert_record($tablename, $record, true); + $this->fail("Expecting an exception, none occurred"); + } catch (exception $e) { + $this->assertTrue($e instanceof dml_exception); + } } public function test_import_record() { -- 2.43.0