| Línea 25... | Línea 25... | 
          
            | 25 |  * @package    enrol_database
 | 25 |  * @package    enrol_database
 | 
          
            | 26 |  * @category   test
 | 26 |  * @category   test
 | 
          
            | 27 |  * @copyright  2011 Petr Skoda {@link http://skodak.org}
 | 27 |  * @copyright  2011 Petr Skoda {@link http://skodak.org}
 | 
          
            | 28 |  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 | 28 |  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 | 
          
            | 29 |  */
 | 29 |  */
 | 
          
            | 30 | class sync_test extends \advanced_testcase {
 | 30 | final class sync_test extends \advanced_testcase {
 | 
          
            | 31 |     protected static $courses = array();
 | 31 |     protected static $courses = array();
 | 
          
            | 32 |     protected static $users = array();
 | 32 |     protected static $users = array();
 | 
          
            | 33 |     protected static $roles = array();
 | 33 |     protected static $roles = array();
 | 
          
            | Línea 34... | Línea 34... | 
          
            | 34 |  
 | 34 |  
 | 
          
            | Línea 42... | Línea 42... | 
          
            | 42 |         if ($DB->get_dbfamily() === 'mssql') {
 | 42 |         if ($DB->get_dbfamily() === 'mssql') {
 | 
          
            | 43 |             sqlsrv_configure("WarningsReturnAsErrors", false);
 | 43 |             sqlsrv_configure("WarningsReturnAsErrors", false);
 | 
          
            | 44 |             sqlsrv_configure("LogSubsystems", SQLSRV_LOG_SYSTEM_OFF);
 | 44 |             sqlsrv_configure("LogSubsystems", SQLSRV_LOG_SYSTEM_OFF);
 | 
          
            | 45 |             sqlsrv_configure("LogSeverity", SQLSRV_LOG_SEVERITY_ERROR);
 | 45 |             sqlsrv_configure("LogSeverity", SQLSRV_LOG_SEVERITY_ERROR);
 | 
          
            | 46 |         }
 | 46 |         }
 | 
          
            | - |   | 47 |         parent::tearDownAfterClass();
 | 
          
            | 47 |     }
 | 48 |     }
 | 
          
            | Línea 48... | Línea 49... | 
          
            | 48 |  
 | 49 |  
 | 
          
            | 49 |     protected function init_enrol_database() {
 | 50 |     protected function init_enrol_database() {
 | 
          
            | Línea 79... | Línea 80... | 
          
            | 79 |                     }
 | 80 |                     }
 | 
          
            | 80 |                     set_config('dbtype', 'mysqli://'.rawurlencode($CFG->dbuser).':'.rawurlencode($CFG->dbpass).'@'.rawurlencode($CFG->dbhost).'/'.rawurlencode($CFG->dbname).'?socket='.rawurlencode($dbsocket), 'enrol_database');
 | 81 |                     set_config('dbtype', 'mysqli://'.rawurlencode($CFG->dbuser).':'.rawurlencode($CFG->dbpass).'@'.rawurlencode($CFG->dbhost).'/'.rawurlencode($CFG->dbname).'?socket='.rawurlencode($dbsocket), 'enrol_database');
 | 
          
            | 81 |                 }
 | 82 |                 }
 | 
          
            | 82 |                 break;
 | 83 |                 break;
 | 
          
            | Línea 83... | Línea -... | 
          
            | 83 |  
 | - |   | 
          
            | 84 |             case 'oracle':
 | - |   | 
          
            | 85 |                 set_config('dbtype', 'oci8po', 'enrol_database');
 | - |   | 
          
            | 86 |                 set_config('dbsybasequoting', '1', 'enrol_database');
 | - |   | 
          
            | 87 |                 break;
 | - |   | 
          
            | 88 |  
 | 84 |  
 | 
          
            | 89 |             case 'postgres':
 | 85 |             case 'postgres':
 | 
          
            | 90 |                 set_config('dbtype', 'postgres7', 'enrol_database');
 | 86 |                 set_config('dbtype', 'postgres7', 'enrol_database');
 | 
          
            | 91 |                 $setupsql = "SET NAMES 'UTF-8'";
 | 87 |                 $setupsql = "SET NAMES 'UTF-8'";
 | 
          
            | 92 |                 if (!empty($CFG->dboptions['dbschema'])) {
 | 88 |                 if (!empty($CFG->dboptions['dbschema'])) {
 | 
          
            | Línea 148... | Línea 144... | 
          
            | 148 |         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
 | 144 |         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
 | 
          
            | 149 |         $table->add_field('fullname', XMLDB_TYPE_CHAR, '255', null, null, null);
 | 145 |         $table->add_field('fullname', XMLDB_TYPE_CHAR, '255', null, null, null);
 | 
          
            | 150 |         $table->add_field('shortname', XMLDB_TYPE_CHAR, '255', null, null, null);
 | 146 |         $table->add_field('shortname', XMLDB_TYPE_CHAR, '255', null, null, null);
 | 
          
            | 151 |         $table->add_field('idnumber', XMLDB_TYPE_CHAR, '255', null, null, null);
 | 147 |         $table->add_field('idnumber', XMLDB_TYPE_CHAR, '255', null, null, null);
 | 
          
            | 152 |         $table->add_field('category', XMLDB_TYPE_CHAR, '255', null, null, null);
 | 148 |         $table->add_field('category', XMLDB_TYPE_CHAR, '255', null, null, null);
 | 
          
            | - |   | 149 |         $table->add_field('startdate', XMLDB_TYPE_CHAR, '255', null, null, null);
 | 
          
            | - |   | 150 |         $table->add_field('enddate', XMLDB_TYPE_CHAR, '255', null, null, null);
 | 
          
            | 153 |         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
 | 151 |         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
 | 
          
            | 154 |         if ($dbman->table_exists($table)) {
 | 152 |         if ($dbman->table_exists($table)) {
 | 
          
            | 155 |             $dbman->drop_table($table);
 | 153 |             $dbman->drop_table($table);
 | 
          
            | 156 |         }
 | 154 |         }
 | 
          
            | 157 |         $dbman->create_table($table);
 | 155 |         $dbman->create_table($table);
 | 
          
            | Línea 438... | Línea 436... | 
          
            | 438 |  
 | 436 |  
 | 
          
            | Línea 439... | Línea 437... | 
          
            | 439 |         $trace = new \null_progress_trace();
 | 437 |         $trace = new \null_progress_trace();
 | 
          
            | Línea 440... | Línea -... | 
          
            | 440 |  
 | - |   | 
          
            | 441 |         // Test basic enrol sync for one user after login.
 | 438 |  
 | 
          
            | 442 |  
 | 439 |         // Test basic enrol sync for one user after login.
 | 
          
            | 443 |         $this->reset_enrol_database();
 | 440 |  
 | 
          
            | Línea 444... | Línea 441... | 
          
            | 444 |         $plugin->set_config('localcoursefield', 'idnumber');
 | 441 |         $plugin->set_config('localcoursefield', 'idnumber');
 | 
          
            | Línea 796... | Línea 793... | 
          
            | 796 |         $plugin->set_config('newcoursecategory', '');
 | 793 |         $plugin->set_config('newcoursecategory', '');
 | 
          
            | 797 |         $plugin->sync_courses($trace);
 | 794 |         $plugin->sync_courses($trace);
 | 
          
            | 798 |         $this->assertEquals(1+2+1+4+1+count(self::$courses), $DB->count_records('course'));
 | 795 |         $this->assertEquals(1+2+1+4+1+count(self::$courses), $DB->count_records('course'));
 | 
          
            | 799 |         $this->assertTrue($DB->record_exists('course', array('idnumber' => 'ncid9')));
 | 796 |         $this->assertTrue($DB->record_exists('course', array('idnumber' => 'ncid9')));
 | 
          
            | Línea 800... | Línea -... | 
          
            | 800 |  
 | - |   | 
          
            | 801 |  
 | 797 |  
 | 
          
            | 802 |         // Final cleanup - remove extra tables, fixtures and caches.
 | 798 |         // Final cleanup - remove extra tables, fixtures and caches.
 | 
          
            | 803 |         $this->cleanup_enrol_database();
 | 799 |         $this->cleanup_enrol_database();
 | 
          
            | - |   | 800 |     }
 | 
          
            | - |   | 801 |  
 | 
          
            | - |   | 802 |     /**
 | 
          
            | - |   | 803 |      * Test syncing courses with start and end dates.
 | 
          
            | - |   | 804 |      *
 | 
          
            | - |   | 805 |      * @covers \enrol_database_plugin::sync_courses
 | 
          
            | - |   | 806 |      */
 | 
          
            | - |   | 807 |     public function test_sync_courses_start_end_dates(): void {
 | 
          
            | - |   | 808 |         global $DB;
 | 
          
            | - |   | 809 |  
 | 
          
            | - |   | 810 |         $this->resetAfterTest();
 | 
          
            | - |   | 811 |         $this->preventResetByRollback();
 | 
          
            | - |   | 812 |         $this->init_enrol_database();
 | 
          
            | - |   | 813 |  
 | 
          
            | - |   | 814 |         $courseconfig = get_config('moodlecourse');
 | 
          
            | - |   | 815 |         $nextyear = (int) date('Y') + 1;
 | 
          
            | - |   | 816 |         $prev = (int) date('Y') - 1;
 | 
          
            | - |   | 817 |  
 | 
          
            | - |   | 818 |         $midnightstartdate = usergetmidnight(time());
 | 
          
            | - |   | 819 |         $midnightenddate = usergetmidnight(time()) + $courseconfig->courseduration;
 | 
          
            | - |   | 820 |  
 | 
          
            | - |   | 821 |         $plugin = enrol_get_plugin('database');
 | 
          
            | - |   | 822 |  
 | 
          
            | - |   | 823 |         $trace = new \null_progress_trace();
 | 
          
            | - |   | 824 |  
 | 
          
            | - |   | 825 |         $course1 = ['fullname' => 'C1', 'shortname' => 'c1', 'idnumber' => 'c1', 'startdate' => 0,
 | 
          
            | - |   | 826 |             'enddate' => 0];
 | 
          
            | - |   | 827 |         $course2 = ['fullname' => 'C2', 'shortname' => 'c2', 'idnumber' => 'c2', 'startdate' => null,
 | 
          
            | - |   | 828 |             'enddate' => null];
 | 
          
            | - |   | 829 |         // This course won't be created. Broken start date.
 | 
          
            | - |   | 830 |         $course3 = ['fullname' => 'C3', 'shortname' => 'c3', 'idnumber' => 'c3', 'startdate' => 'not date',
 | 
          
            | - |   | 831 |             'enddate' => 0];
 | 
          
            | - |   | 832 |         // This course won't be created. Broken end date.
 | 
          
            | - |   | 833 |         $course4 = ['fullname' => 'C4', 'shortname' => 'c4', 'idnumber' => 'c4', 'startdate' => 0,
 | 
          
            | - |   | 834 |             'enddate' => 'not date'];
 | 
          
            | - |   | 835 |         // This course won't be created. Start date after end date.
 | 
          
            | - |   | 836 |         $course5 = ['fullname' => 'C5', 'shortname' => 'c5', 'idnumber' => 'c5', 'startdate' => '12.05.2024',
 | 
          
            | - |   | 837 |             'enddate' => '12.05.2021'];
 | 
          
            | - |   | 838 |         $course6 = ['fullname' => 'C6', 'shortname' => 'c6', 'idnumber' => 'c6', 'startdate' => '2024-05-22',
 | 
          
            | - |   | 839 |             'enddate' => '2027-05-12'];
 | 
          
            | - |   | 840 |         $course7 = ['fullname' => 'C7', 'shortname' => 'c7', 'idnumber' => 'c7', 'startdate' => null,
 | 
          
            | - |   | 841 |             'enddate' => '12.05.' . $nextyear];
 | 
          
            | - |   | 842 |         $course8 = ['fullname' => 'C8', 'shortname' => 'c8', 'idnumber' => 'c8', 'startdate' => '12.05.2024',
 | 
          
            | - |   | 843 |             'enddate' => null];
 | 
          
            | - |   | 844 |         // This course won't be created. Start date is not set, but it should be set to date after end date.
 | 
          
            | - |   | 845 |         $course9 = ['fullname' => 'C9', 'shortname' => 'c9', 'idnumber' => 'c9', 'startdate' => null,
 | 
          
            | - |   | 846 |             'enddate' => '12.05.' . $prev];
 | 
          
            | - |   | 847 |  
 | 
          
            | - |   | 848 |         $DB->insert_record('enrol_database_test_courses', $course1);
 | 
          
            | - |   | 849 |         $DB->insert_record('enrol_database_test_courses', $course2);
 | 
          
            | - |   | 850 |         $DB->insert_record('enrol_database_test_courses', $course3);
 | 
          
            | - |   | 851 |         $DB->insert_record('enrol_database_test_courses', $course4);
 | 
          
            | - |   | 852 |         $DB->insert_record('enrol_database_test_courses', $course5);
 | 
          
            | - |   | 853 |         $DB->insert_record('enrol_database_test_courses', $course6);
 | 
          
            | - |   | 854 |         $DB->insert_record('enrol_database_test_courses', $course7);
 | 
          
            | - |   | 855 |         $DB->insert_record('enrol_database_test_courses', $course8);
 | 
          
            | - |   | 856 |         $DB->insert_record('enrol_database_test_courses', $course9);
 | 
          
            | - |   | 857 |  
 | 
          
            | - |   | 858 |         $plugin->set_config('newcoursestartdate', 'startdate');
 | 
          
            | - |   | 859 |         $plugin->set_config('newcourseenddate', 'enddate');
 | 
          
            | - |   | 860 |  
 | 
          
            | - |   | 861 |         $plugin->sync_courses($trace);
 | 
          
            | - |   | 862 |  
 | 
          
            | - |   | 863 |         // Course 3, course 4, course 5 and course 9 should not be created.
 | 
          
            | - |   | 864 |         $this->assertTrue($DB->record_exists('course', ['shortname' => $course1['shortname']]));
 | 
          
            | - |   | 865 |         $this->assertTrue($DB->record_exists('course', ['shortname' => $course2['shortname']]));
 | 
          
            | - |   | 866 |         $this->assertFalse($DB->record_exists('course', ['shortname' => $course3['shortname']]));
 | 
          
            | - |   | 867 |         $this->assertFalse($DB->record_exists('course', ['shortname' => $course4['shortname']]));
 | 
          
            | - |   | 868 |         $this->assertFalse($DB->record_exists('course', ['shortname' => $course5['shortname']]));
 | 
          
            | - |   | 869 |         $this->assertTrue($DB->record_exists('course', ['shortname' => $course6['shortname']]));
 | 
          
            | - |   | 870 |         $this->assertTrue($DB->record_exists('course', ['shortname' => $course7['shortname']]));
 | 
          
            | - |   | 871 |         $this->assertTrue($DB->record_exists('course', ['shortname' => $course8['shortname']]));
 | 
          
            | - |   | 872 |         $this->assertFalse($DB->record_exists('course', ['shortname' => $course9['shortname']]));
 | 
          
            | - |   | 873 |  
 | 
          
            | - |   | 874 |         // Check dates for created courses.
 | 
          
            | - |   | 875 |         $this->assertEquals($midnightstartdate, $DB->get_field('course', 'startdate', ['shortname' => $course1['shortname']]));
 | 
          
            | - |   | 876 |         $this->assertEquals($midnightenddate, $DB->get_field('course', 'enddate', ['shortname' => $course1['shortname']]));
 | 
          
            | - |   | 877 |  
 | 
          
            | - |   | 878 |         $this->assertEquals($midnightstartdate, $DB->get_field('course', 'startdate', ['shortname' => $course2['shortname']]));
 | 
          
            | - |   | 879 |         $this->assertEquals($midnightenddate, $DB->get_field('course', 'enddate', ['shortname' => $course2['shortname']]));
 | 
          
            | - |   | 880 |  
 | 
          
            | - |   | 881 |         $this->assertEquals(strtotime('22.05.2024'), $DB->get_field('course', 'startdate', ['shortname' => $course6['shortname']]));
 | 
          
            | - |   | 882 |         $this->assertEquals(strtotime('12.05.2027'), $DB->get_field('course', 'enddate', ['shortname' => $course6['shortname']]));
 | 
          
            | - |   | 883 |  
 | 
          
            | - |   | 884 |         $this->assertEquals($midnightstartdate, $DB->get_field('course', 'startdate', ['shortname' => $course7['shortname']]));
 | 
          
            | - |   | 885 |         $expected = strtotime('12.05.' . $nextyear);
 | 
          
            | - |   | 886 |         $this->assertEquals($expected, $DB->get_field('course', 'enddate', ['shortname' => $course7['shortname']]));
 | 
          
            | - |   | 887 |  
 | 
          
            | - |   | 888 |         $this->assertEquals(strtotime('12.05.2024'), $DB->get_field('course', 'startdate', ['shortname' => $course8['shortname']]));
 | 
          
            | - |   | 889 |         $expected = strtotime('12.05.2024') + $courseconfig->courseduration;
 | 
          
            | - |   | 890 |         $this->assertEquals($expected, $DB->get_field('course', 'enddate', ['shortname' => $course8['shortname']]));
 | 
          
            | - |   | 891 |  
 | 
          
            | - |   | 892 |         // Push course with dates as timestamp.
 | 
          
            | - |   | 893 |         $course10 = ['fullname' => 'C10', 'shortname' => 'c10', 'idnumber' => 'c10', 'startdate' => 1810051200,
 | 
          
            | - |   | 894 |             'enddate' => 1810051211];
 | 
          
            | - |   | 895 |         $DB->insert_record('enrol_database_test_courses', $course10);
 | 
          
            | - |   | 896 |  
 | 
          
            | - |   | 897 |         $plugin->sync_courses($trace);
 | 
          
            | - |   | 898 |  
 | 
          
            | - |   | 899 |         $this->assertTrue($DB->record_exists('course', ['shortname' => $course10['shortname']]));
 | 
          
            | - |   | 900 |         $this->assertEquals(1810051200, $DB->get_field('course', 'startdate', ['shortname' => $course10['shortname']]));
 | 
          
            | - |   | 901 |         $this->assertEquals(1810051211, $DB->get_field('course', 'enddate', ['shortname' => $course10['shortname']]));
 | 
          
            | - |   | 902 |  
 | 
          
            | - |   | 903 |         // Push course with broken dates, but delete dates from plugin configuration before syncing.
 | 
          
            | - |   | 904 |         $course11 = ['fullname' => 'C11', 'shortname' => 'c11', 'idnumber' => 'c11', 'startdate' => 'not date',
 | 
          
            | - |   | 905 |             'enddate' => 'not date'];
 | 
          
            | - |   | 906 |         $DB->insert_record('enrol_database_test_courses', $course11);
 | 
          
            | - |   | 907 |  
 | 
          
            | - |   | 908 |         $plugin->set_config('newcoursestartdate', '');
 | 
          
            | - |   | 909 |         $plugin->set_config('newcourseenddate', '');
 | 
          
            | - |   | 910 |         $plugin->sync_courses($trace);
 | 
          
            | - |   | 911 |  
 | 
          
            | - |   | 912 |         $this->assertTrue($DB->record_exists('course', ['shortname' => $course11['shortname']]));
 | 
          
            | - |   | 913 |         $this->assertEquals($midnightstartdate, $DB->get_field('course', 'startdate', ['shortname' => $course11['shortname']]));
 | 
          
            | - |   | 914 |         $this->assertEquals($midnightenddate, $DB->get_field('course', 'enddate', ['shortname' => $course11['shortname']]));
 | 
          
            | - |   | 915 |  
 | 
          
            | - |   | 916 |         // Push courses with correct dates, but set date configuration to not existing date fields.
 | 
          
            | - |   | 917 |         $course12 = ['fullname' => 'C12', 'shortname' => 'c12', 'idnumber' => 'c12', 'startdate' => '2024-05-22',
 | 
          
            | - |   | 918 |             'enddate' => '2027-05-12'];
 | 
          
            | - |   | 919 |         $DB->insert_record('enrol_database_test_courses', $course11);
 | 
          
            | - |   | 920 |  
 | 
          
            | - |   | 921 |         $plugin->set_config('newcoursestartdate', 'startdate');
 | 
          
            | - |   | 922 |         $plugin->set_config('newcourseenddate', 'ed');
 | 
          
            | - |   | 923 |         $plugin->sync_courses($trace);
 | 
          
            | - |   | 924 |  
 | 
          
            | - |   | 925 |         // Course should not be synced to prevent setting up incorrect dates.
 | 
          
            | - |   | 926 |         $this->assertFalse($DB->record_exists('course', ['shortname' => $course12['shortname']]));
 | 
          
            | - |   | 927 |  
 | 
          
            | - |   | 928 |         $course13 = ['fullname' => 'C13', 'shortname' => 'c13', 'idnumber' => 'c13', 'startdate' => '2024-05-22',
 | 
          
            | - |   | 929 |             'enddate' => '2027-05-12'];
 | 
          
            | - |   | 930 |         $DB->insert_record('enrol_database_test_courses', $course11);
 | 
          
            | - |   | 931 |  
 | 
          
            | - |   | 932 |         $plugin->set_config('newcoursestartdate', 'sd');
 | 
          
            | - |   | 933 |         $plugin->set_config('newcourseenddate', 'enddate');
 | 
          
            | - |   | 934 |         $plugin->sync_courses($trace);
 | 
          
            | - |   | 935 |  
 | 
          
            | - |   | 936 |         // Course should not be synced to prevent setting up incorrect dates.
 | 
          
            | - |   | 937 |         $this->assertFalse($DB->record_exists('course', ['shortname' => $course13['shortname']]));
 | 
          
            | - |   | 938 |  
 | 
          
            | - |   | 939 |         $this->cleanup_enrol_database();
 | 
          
            | 804 |     }
 | 940 |     }
 |