*/
class mod_data_external_testcase extends externallib_advanced_testcase {
+ /** @var stdClass Test module context. */
+ protected $context;
+
+ /** @var stdClass Test course.*/
+ protected $course;
+
+ /** @var stdClass Test course module. */
+ protected $cm;
+
+ /** @var stdClass Test database activity. */
+ protected $database;
+
+ /** @var stdClass Test group 1. */
+ protected $group1;
+
+ /** @var stdClass Test group 2. */
+ protected $group2;
+
+ /** @var stdClass Test student 1. */
+ protected $student1;
+
+ /** @var stdClass Test student 2. */
+ protected $student2;
+
+ /** @var stdClass Test student 3. */
+ protected $student3;
+
+ /** @var stdClass Test student 4. */
+ protected $student4;
+
+ /** @var stdClass Student role. */
+ protected $studentrole;
+
+ /** @var stdClass Test teacher. */
+ protected $teacher;
+
+ /** @var stdClass Teacher role. */
+ protected $teacherrole;
+
/**
* Set up for every test
*/
$course->groupmode = SEPARATEGROUPS;
$course->groupmodeforce = true;
$this->course = $this->getDataGenerator()->create_course($course);
- $this->data = $this->getDataGenerator()->create_module('data', array('course' => $this->course->id));
- $this->context = context_module::instance($this->data->cmid);
- $this->cm = get_coursemodule_from_instance('data', $this->data->id);
+ $this->database = $this->getDataGenerator()->create_module('data', array('course' => $this->course->id));
+ $this->context = context_module::instance($this->database->cmid);
+ $this->cm = get_coursemodule_from_instance('data', $this->database->id);
// Create users.
- $this->student1 = self::getDataGenerator()->create_user();
- $this->student2 = self::getDataGenerator()->create_user();
- $this->student3 = self::getDataGenerator()->create_user();
- $this->teacher = self::getDataGenerator()->create_user();
+ $this->student1 = self::getDataGenerator()->create_user(['firstname' => 'Olivia', 'lastname' => 'Smith']);
+ $this->student2 = self::getDataGenerator()->create_user(['firstname' => 'Ezra', 'lastname' => 'Johnson']);
+ $this->student3 = self::getDataGenerator()->create_user(['firstname' => 'Amelia', 'lastname' => 'Williams']);
+ $this->teacher = self::getDataGenerator()->create_user(['firstname' => 'Asher', 'lastname' => 'Jones']);
// Users enrolments.
$this->studentrole = $DB->get_record('role', array('shortname' => 'student'));
public function test_view_database_invalid_id() {
// Test invalid instance id.
- $this->setExpectedException('moodle_exception');
+ $this->expectException('moodle_exception');
mod_data_external::view_database(0);
}
$usernotenrolled = self::getDataGenerator()->create_user();
$this->setUser($usernotenrolled);
- $this->setExpectedException('moodle_exception');
+ $this->expectException('moodle_exception');
mod_data_external::view_database(0);
}
assign_capability('mod/data:viewpage', CAP_PROHIBIT, $this->studentrole->id, $this->context->id);
accesslib_clear_all_caches_for_unit_testing();
- $this->setExpectedException('moodle_exception');
+ $this->expectException('moodle_exception');
mod_data_external::view_database(0);
}
// Trigger and capture the event.
$sink = $this->redirectEvents();
- $result = mod_data_external::view_database($this->data->id);
+ $result = mod_data_external::view_database($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::view_database_returns(), $result);
$events = $sink->get_events();
public function test_get_data_access_information_student() {
global $DB;
// Modify the database to add access restrictions.
- $this->data->timeavailablefrom = time() + DAYSECS;
- $this->data->requiredentries = 2;
- $this->data->requiredentriestoview = 2;
- $DB->update_record('data', $this->data);
+ $this->database->timeavailablefrom = time() + DAYSECS;
+ $this->database->requiredentries = 2;
+ $this->database->requiredentriestoview = 2;
+ $DB->update_record('data', $this->database);
// Test user with full capabilities.
$this->setUser($this->student1);
- $result = mod_data_external::get_data_access_information($this->data->id);
+ $result = mod_data_external::get_data_access_information($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::get_data_access_information_returns(), $result);
$this->assertEquals($this->group1->id, $result['groupid']);
$this->assertFalse($result['timeavailable']);
$this->assertFalse($result['inreadonlyperiod']);
$this->assertEquals(0, $result['numentries']);
- $this->assertEquals($this->data->requiredentries, $result['entrieslefttoadd']);
- $this->assertEquals($this->data->requiredentriestoview, $result['entrieslefttoview']);
+ $this->assertEquals($this->database->requiredentries, $result['entrieslefttoadd']);
+ $this->assertEquals($this->database->requiredentriestoview, $result['entrieslefttoview']);
}
/**
public function test_get_data_access_information_teacher() {
global $DB;
// Modify the database to add access restrictions.
- $this->data->timeavailablefrom = time() + DAYSECS;
- $this->data->requiredentries = 2;
- $this->data->requiredentriestoview = 2;
- $DB->update_record('data', $this->data);
+ $this->database->timeavailablefrom = time() + DAYSECS;
+ $this->database->requiredentries = 2;
+ $this->database->requiredentriestoview = 2;
+ $DB->update_record('data', $this->database);
// Test user with full capabilities.
$this->setUser($this->teacher);
- $result = mod_data_external::get_data_access_information($this->data->id);
+ $result = mod_data_external::get_data_access_information($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::get_data_access_information_returns(), $result);
$this->assertEquals(0, $result['groupid']);
global $DB;
// Force approval.
- $DB->set_field('data', 'approval', 1, array('id' => $this->data->id));
+ $DB->set_field('data', 'approval', 1, array('id' => $this->database->id));
$generator = $this->getDataGenerator()->get_plugin_generator('mod_data');
$fieldtypes = array('checkbox', 'date', 'menu', 'multimenu', 'number', 'radiobutton', 'text', 'textarea', 'url');
$record->type = $fieldtype;
$record->required = 1;
- $generator->create_field($record, $this->data);
+ $generator->create_field($record, $this->database);
$count++;
}
// Get all the fields created.
- $fields = $DB->get_records('data_fields', array('dataid' => $this->data->id), 'id');
+ $fields = $DB->get_records('data_fields', array('dataid' => $this->database->id), 'id');
// Populate with contents, creating a new entry.
$contents = array();
}
$this->setUser($this->student1);
- $entry11 = $generator->create_entry($this->data, $fieldcontents, $this->group1->id);
+ $entry11 = $generator->create_entry($this->database, $fieldcontents, $this->group1->id);
$this->setUser($this->student2);
- $entry12 = $generator->create_entry($this->data, $fieldcontents, $this->group1->id);
- $entry13 = $generator->create_entry($this->data, $fieldcontents, $this->group1->id);
+ $entry12 = $generator->create_entry($this->database, $fieldcontents, $this->group1->id);
+ $entry13 = $generator->create_entry($this->database, $fieldcontents, $this->group1->id);
$this->setUser($this->student3);
- $entry21 = $generator->create_entry($this->data, $fieldcontents, $this->group2->id);
+ $entry21 = $generator->create_entry($this->database, $fieldcontents, $this->group2->id);
// Approve all except $entry13.
$DB->set_field('data_records', 'approved', 1, ['id' => $entry11]);
// First of all, expect to see only my group entries (not other users in other groups ones).
$this->setUser($this->student1);
- $result = mod_data_external::get_entries($this->data->id);
+ $result = mod_data_external::get_entries($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']);
$this->assertCount(2, $result['entries']);
$this->assertEquals($entry11, $result['entries'][0]['id']);
$this->assertEquals($this->student1->id, $result['entries'][0]['userid']);
$this->assertEquals($this->group1->id, $result['entries'][0]['groupid']);
- $this->assertEquals($this->data->id, $result['entries'][0]['dataid']);
+ $this->assertEquals($this->database->id, $result['entries'][0]['dataid']);
$this->assertEquals($entry12, $result['entries'][1]['id']);
$this->assertEquals($this->student2->id, $result['entries'][1]['userid']);
$this->assertEquals($this->group1->id, $result['entries'][1]['groupid']);
- $this->assertEquals($this->data->id, $result['entries'][1]['dataid']);
+ $this->assertEquals($this->database->id, $result['entries'][1]['dataid']);
// Other user in same group.
$this->setUser($this->student2);
- $result = mod_data_external::get_entries($this->data->id);
+ $result = mod_data_external::get_entries($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']);
$this->assertCount(3, $result['entries']); // I can see my entry not approved yet.
// Now try with the user in the second group that must see only one entry.
$this->setUser($this->student3);
- $result = mod_data_external::get_entries($this->data->id);
+ $result = mod_data_external::get_entries($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']);
$this->assertCount(1, $result['entries']);
$this->assertEquals($entry21, $result['entries'][0]['id']);
$this->assertEquals($this->student3->id, $result['entries'][0]['userid']);
$this->assertEquals($this->group2->id, $result['entries'][0]['groupid']);
- $this->assertEquals($this->data->id, $result['entries'][0]['dataid']);
+ $this->assertEquals($this->database->id, $result['entries'][0]['dataid']);
// Now, as teacher we should see all (we have permissions to view all groups).
$this->setUser($this->teacher);
- $result = mod_data_external::get_entries($this->data->id);
+ $result = mod_data_external::get_entries($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']);
$this->assertCount(4, $result['entries']); // I can see the not approved one.
$this->assertEquals(4, $result['totalcount']);
- $entries = $DB->get_records('data_records', array('dataid' => $this->data->id), 'id');
+ $entries = $DB->get_records('data_records', array('dataid' => $this->database->id), 'id');
$this->assertCount(4, $entries);
$count = 0;
foreach ($entries as $entry) {
// Basic test passing the parameter (instead having to calculate it).
$this->setUser($this->student1);
- $result = mod_data_external::get_entries($this->data->id, $this->group1->id);
+ $result = mod_data_external::get_entries($this->database->id, $this->group1->id);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']);
$this->assertCount(2, $result['entries']);
// Test ordering (reverse).
$this->setUser($this->student1);
- $result = mod_data_external::get_entries($this->data->id, $this->group1->id, false, null, 'DESC');
+ $result = mod_data_external::get_entries($this->database->id, $this->group1->id, false, null, 'DESC');
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']);
$this->assertCount(2, $result['entries']);
// Test pagination.
$this->setUser($this->student1);
- $result = mod_data_external::get_entries($this->data->id, $this->group1->id, false, null, null, 0, 1);
+ $result = mod_data_external::get_entries($this->database->id, $this->group1->id, false, null, null, 0, 1);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']);
$this->assertCount(1, $result['entries']);
$this->assertEquals(2, $result['totalcount']);
$this->assertEquals($entry11, $result['entries'][0]['id']);
- $result = mod_data_external::get_entries($this->data->id, $this->group1->id, false, null, null, 1, 1);
+ $result = mod_data_external::get_entries($this->database->id, $this->group1->id, false, null, null, 1, 1);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']);
$this->assertCount(1, $result['entries']);
$this->assertEquals($entry12, $result['entries'][0]['id']);
// Now test the return contents.
- data_generate_default_template($this->data, 'listtemplate', 0, false, true); // Generate a default list template.
- $result = mod_data_external::get_entries($this->data->id, $this->group1->id, true, null, null, 0, 2);
+ data_generate_default_template($this->database, 'listtemplate', 0, false, true); // Generate a default list template.
+ $result = mod_data_external::get_entries($this->database->id, $this->group1->id, true, null, null, 0, 2);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']);
$this->assertCount(2, $result['entries']);
$this->assertTrue($result['entry']['canmanageentry']); // Is mine, I can manage it.
// Retrieve contents.
- data_generate_default_template($this->data, 'singletemplate', 0, false, true);
+ data_generate_default_template($this->database, 'singletemplate', 0, false, true);
$result = mod_data_external::get_entry($entry11, true);
$result = external_api::clean_returnvalue(mod_data_external::get_entry_returns(), $result);
$this->assertCount(0, $result['warnings']);
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries();
$this->setUser($this->student1);
- $result = mod_data_external::get_fields($this->data->id);
+ $result = mod_data_external::get_fields($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::get_fields_returns(), $result);
// Basically compare we retrieve all the fields and the correct values.
- $fields = $DB->get_records('data_fields', array('dataid' => $this->data->id), 'id');
+ $fields = $DB->get_records('data_fields', array('dataid' => $this->database->id), 'id');
foreach ($result['fields'] as $field) {
$this->assertEquals($field, (array) $fields[$field['id']]);
}
// First do a normal text search as student 1. I should see my two group entries.
$this->setUser($this->student1);
- $result = mod_data_external::search_entries($this->data->id, 0, false, 'text');
+ $result = mod_data_external::search_entries($this->database->id, 0, false, 'text');
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(2, $result['entries']);
$this->assertEquals(2, $result['totalcount']);
// Now as the other student I should receive my not approved entry. Apply ordering here.
$this->setUser($this->student2);
- $result = mod_data_external::search_entries($this->data->id, 0, false, 'text', [], DATA_APPROVED, 'ASC');
+ $result = mod_data_external::search_entries($this->database->id, 0, false, 'text', [], DATA_APPROVED, 'ASC');
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(3, $result['entries']);
$this->assertEquals(3, $result['totalcount']);
// Now as the other group student.
$this->setUser($this->student3);
- $result = mod_data_external::search_entries($this->data->id, 0, false, 'text');
+ $result = mod_data_external::search_entries($this->database->id, 0, false, 'text');
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(1, $result['entries']);
$this->assertEquals(1, $result['totalcount']);
// Same normal text search as teacher.
$this->setUser($this->teacher);
- $result = mod_data_external::search_entries($this->data->id, 0, false, 'text');
+ $result = mod_data_external::search_entries($this->database->id, 0, false, 'text');
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(4, $result['entries']); // I can see all groups and non approved.
$this->assertEquals(4, $result['totalcount']);
// Pagination.
$this->setUser($this->teacher);
- $result = mod_data_external::search_entries($this->data->id, 0, false, 'text', [], DATA_TIMEADDED, 'ASC', 0, 2);
+ $result = mod_data_external::search_entries($this->database->id, 0, false, 'text', [], DATA_TIMEADDED, 'ASC', 0, 2);
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(2, $result['entries']); // Only 2 per page.
$this->assertEquals(4, $result['totalcount']);
$advsearch = [
['name' => 'fn', 'value' => json_encode($this->student2->firstname)]
];
- $result = mod_data_external::search_entries($this->data->id, 0, false, '', $advsearch);
+ $result = mod_data_external::search_entries($this->database->id, 0, false, '', $advsearch);
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(1, $result['entries']);
$this->assertEquals(1, $result['totalcount']);
$advsearch = [
['name' => 'f_' . $field->id , 'value' => 'sampleurl']
];
- $result = mod_data_external::search_entries($this->data->id, 0, false, '', $advsearch);
+ $result = mod_data_external::search_entries($this->database->id, 0, false, '', $advsearch);
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(2, $result['entries']); // Found two entries matching this.
$this->assertEquals(2, $result['totalcount']);
['name' => 'f_' . $field2->id , 'value' => '12345'],
['name' => 'ln', 'value' => json_encode($this->student2->lastname)]
];
- $result = mod_data_external::search_entries($this->data->id, 0, false, '', $advsearch);
+ $result = mod_data_external::search_entries($this->database->id, 0, false, '', $advsearch);
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(1, $result['entries']); // Only one matching everything.
$this->assertEquals(1, $result['totalcount']);
['name' => 'f_' . $field->id , 'value' => 'sampleurl'],
['name' => 'f_' . $field2->id , 'value' => '98780333'], // Non existent number.
];
- $result = mod_data_external::search_entries($this->data->id, 0, false, '', $advsearch);
+ $result = mod_data_external::search_entries($this->database->id, 0, false, '', $advsearch);
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(0, $result['entries']); // Only one matching everything.
$this->assertEquals(0, $result['totalcount']);
global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries();
// Set a time period.
- $this->data->timeviewfrom = time() - HOURSECS;
- $this->data->timeviewto = time() + HOURSECS;
- $DB->update_record('data', $this->data);
+ $this->database->timeviewfrom = time() - HOURSECS;
+ $this->database->timeviewto = time() + HOURSECS;
+ $DB->update_record('data', $this->database);
$this->setUser($this->student1);
$this->expectException('moodle_exception');
$this->setUser($this->student1);
$newentrydata = [];
- $fields = $DB->get_records('data_fields', array('dataid' => $this->data->id), 'id');
+ $fields = $DB->get_records('data_fields', array('dataid' => $this->database->id), 'id');
// Prepare the new entry data.
foreach ($fields as $field) {
$subfield = $value = '';
'value' => json_encode($value)
];
}
- $result = mod_data_external::add_entry($this->data->id, 0, $newentrydata);
+ $result = mod_data_external::add_entry($this->database->id, 0, $newentrydata);
$result = external_api::clean_returnvalue(mod_data_external::add_entry_returns(), $result);
$newentryid = $result['newentryid'];
// Now, try to add another entry but removing some required data.
unset($newentrydata[0]);
- $result = mod_data_external::add_entry($this->data->id, 0, $newentrydata);
+ $result = mod_data_external::add_entry($this->database->id, 0, $newentrydata);
$result = external_api::clean_returnvalue(mod_data_external::add_entry_returns(), $result);
$this->assertEquals(0, $result['newentryid']);
$this->assertCount(0, $result['generalnotifications']);
* Test add_entry empty_form.
*/
public function test_add_entry_empty_form() {
- $result = mod_data_external::add_entry($this->data->id, 0, []);
+ $result = mod_data_external::add_entry($this->database->id, 0, []);
$result = external_api::clean_returnvalue(mod_data_external::add_entry_returns(), $result);
$this->assertEquals(0, $result['newentryid']);
$this->assertCount(1, $result['generalnotifications']);
global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries();
// Set a time period.
- $this->data->timeviewfrom = time() - HOURSECS;
- $this->data->timeviewto = time() + HOURSECS;
- $DB->update_record('data', $this->data);
+ $this->database->timeviewfrom = time() - HOURSECS;
+ $this->database->timeviewto = time() + HOURSECS;
+ $DB->update_record('data', $this->database);
$this->setUser($this->student1);
$this->expectExceptionMessage(get_string('noaccess', 'data'));
$this->expectException('moodle_exception');
- mod_data_external::add_entry($this->data->id, 0, []);
+ mod_data_external::add_entry($this->database->id, 0, []);
}
/**
global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries();
// Set a time period.
- $this->data->maxentries = 1;
- $DB->update_record('data', $this->data);
+ $this->database->maxentries = 1;
+ $DB->update_record('data', $this->database);
$this->setUser($this->student1);
$this->expectExceptionMessage(get_string('noaccess', 'data'));
$this->expectException('moodle_exception');
- mod_data_external::add_entry($this->data->id, 0, []);
+ mod_data_external::add_entry($this->database->id, 0, []);
}
/**
$this->setUser($this->student1);
$newentrydata = [];
- $fields = $DB->get_records('data_fields', array('dataid' => $this->data->id), 'id');
+ $fields = $DB->get_records('data_fields', array('dataid' => $this->database->id), 'id');
// Prepare the new entry data.
foreach ($fields as $field) {
$subfield = $value = '';
global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries();
// Set a time period.
- $this->data->timeviewfrom = time() - HOURSECS;
- $this->data->timeviewto = time() + HOURSECS;
- $DB->update_record('data', $this->data);
+ $this->database->timeviewfrom = time() - HOURSECS;
+ $this->database->timeviewto = time() + HOURSECS;
+ $DB->update_record('data', $this->database);
$this->setUser($this->student1);
$this->expectExceptionMessage(get_string('noaccess', 'data'));