array('name' => 'coursedisplay', 'value' => $dbcourse->coursedisplay),
));
}
- if ($dbcourse->id == 4) {
- $this->assertEquals($course['customfields'], [array_merge($customfield, $customfieldvalue)]);
+
+ // Assert custom field that we previously added to test course 4.
+ if ($dbcourse->id == $course4->id) {
+ $this->assertEquals([
+ 'shortname' => $customfield['shortname'],
+ 'name' => $customfield['name'],
+ 'type' => $customfield['type'],
+ 'value' => $customfieldvalue['value'],
+ 'valueraw' => $customfieldvalue['value'],
+ ], $course['customfields'][0]);
}
}
$this->assertEquals($DB->count_records('course'), count($courses));
}
+ /**
+ * Test retrieving courses returns custom field data
+ */
+ public function test_get_courses_customfields(): void {
+ $this->resetAfterTest();
+ $this->setAdminUser();
+
+ $fieldcategory = $this->getDataGenerator()->create_custom_field_category([]);
+ $datefield = $this->getDataGenerator()->create_custom_field([
+ 'categoryid' => $fieldcategory->get('id'),
+ 'shortname' => 'mydate',
+ 'name' => 'My date',
+ 'type' => 'date',
+ ]);
+
+ $newcourse = $this->getDataGenerator()->create_course(['customfields' => [
+ [
+ 'shortname' => $datefield->get('shortname'),
+ 'value' => 1580389200, // 30/01/2020 13:00 GMT.
+ ],
+ ]]);
+
+ $courses = external_api::clean_returnvalue(
+ core_course_external::get_courses_returns(),
+ core_course_external::get_courses(['ids' => [$newcourse->id]])
+ );
+
+ $this->assertCount(1, $courses);
+ $course = reset($courses);
+
+ $this->assertArrayHasKey('customfields', $course);
+ $this->assertCount(1, $course['customfields']);
+
+ // Assert the received custom field, "value" containing a human-readable version and "valueraw" the unmodified version.
+ $this->assertEquals([
+ 'name' => $datefield->get('name'),
+ 'shortname' => $datefield->get('shortname'),
+ 'type' => $datefield->get('type'),
+ 'value' => userdate(1580389200),
+ 'valueraw' => 1580389200,
+ ], reset($course['customfields']));
+ }
+
/**
* Test get_courses without capability
*/
$results = core_course_external::search_courses('blocklist', $blockid);
}
+ /**
+ * Test searching for courses returns custom field data
+ */
+ public function test_search_courses_customfields(): void {
+ $this->resetAfterTest();
+ $this->setAdminUser();
+
+ $fieldcategory = $this->getDataGenerator()->create_custom_field_category([]);
+ $datefield = $this->getDataGenerator()->create_custom_field([
+ 'categoryid' => $fieldcategory->get('id'),
+ 'shortname' => 'mydate',
+ 'name' => 'My date',
+ 'type' => 'date',
+ ]);
+
+ $newcourse = $this->getDataGenerator()->create_course(['customfields' => [
+ [
+ 'shortname' => $datefield->get('shortname'),
+ 'value' => 1580389200, // 30/01/2020 13:00 GMT.
+ ],
+ ]]);
+
+ $result = external_api::clean_returnvalue(
+ core_course_external::search_courses_returns(),
+ core_course_external::search_courses('search', $newcourse->shortname)
+ );
+
+ $this->assertCount(1, $result['courses']);
+ $course = reset($result['courses']);
+
+ $this->assertArrayHasKey('customfields', $course);
+ $this->assertCount(1, $course['customfields']);
+
+ // Assert the received custom field, "value" containing a human-readable version and "valueraw" the unmodified version.
+ $this->assertEquals([
+ 'name' => $datefield->get('name'),
+ 'shortname' => $datefield->get('shortname'),
+ 'type' => $datefield->get('type'),
+ 'value' => userdate(1580389200),
+ 'valueraw' => 1580389200,
+ ], reset($course['customfields']));
+ }
+
/**
* Create a course with contents
* @return array A list with the course object and course modules objects
array('noclean' => true, 'para' => false, 'filter' => false));
$this->assertEquals($formattedtext, $module['description']);
$this->assertEquals($forumcm->instance, $module['instance']);
+ $this->assertEquals(context_module::instance($forumcm->id)->id, $module['contextid']);
$this->assertContains('1 unread post', $module['afterlink']);
$this->assertFalse($module['noviewlink']);
$this->assertNotEmpty($module['description']); // Module showdescription is on.
array('noclean' => true, 'para' => false, 'filter' => false));
$this->assertEquals($formattedtext, $module['description']);
$this->assertEquals($labelcm->instance, $module['instance']);
+ $this->assertEquals(context_module::instance($labelcm->id)->id, $module['contextid']);
$this->assertTrue($module['noviewlink']);
$this->assertNotEmpty($module['description']); // Label always prints the description.
$testexecuted = $testexecuted + 1;
$this->assertCount(1, $result['courses']);
$this->assertEquals($course2->id, $result['courses'][0]['id']);
// Check custom fields properly returned.
- unset($customfield['categoryid']);
- $this->assertEquals([array_merge($customfield, $customfieldvalue)], $result['courses'][0]['customfields']);
+ $this->assertEquals([
+ 'shortname' => $customfield['shortname'],
+ 'name' => $customfield['name'],
+ 'type' => $customfield['type'],
+ 'value' => $customfieldvalue['value'],
+ 'valueraw' => $customfieldvalue['value'],
+ ], $result['courses'][0]['customfields'][0]);
$result = core_course_external::get_courses_by_field('ids', "$course1->id,$course2->id");
$result = external_api::clean_returnvalue(core_course_external::get_courses_by_field_returns(), $result);
$this->assertCount(0, $result['courses']);
}
+ /**
+ * Test retrieving courses by field returns custom field data
+ */
+ public function test_get_courses_by_field_customfields(): void {
+ $this->resetAfterTest();
+ $this->setAdminUser();
+
+ $fieldcategory = $this->getDataGenerator()->create_custom_field_category([]);
+ $datefield = $this->getDataGenerator()->create_custom_field([
+ 'categoryid' => $fieldcategory->get('id'),
+ 'shortname' => 'mydate',
+ 'name' => 'My date',
+ 'type' => 'date',
+ ]);
+
+ $newcourse = $this->getDataGenerator()->create_course(['customfields' => [
+ [
+ 'shortname' => $datefield->get('shortname'),
+ 'value' => 1580389200, // 30/01/2020 13:00 GMT.
+ ],
+ ]]);
+
+ $result = external_api::clean_returnvalue(
+ core_course_external::get_courses_by_field_returns(),
+ core_course_external::get_courses_by_field('id', $newcourse->id)
+ );
+
+ $this->assertCount(1, $result['courses']);
+ $course = reset($result['courses']);
+
+ $this->assertArrayHasKey('customfields', $course);
+ $this->assertCount(1, $course['customfields']);
+
+ // Assert the received custom field, "value" containing a human-readable version and "valueraw" the unmodified version.
+ $this->assertEquals([
+ 'name' => $datefield->get('name'),
+ 'shortname' => $datefield->get('shortname'),
+ 'type' => $datefield->get('type'),
+ 'value' => userdate(1580389200),
+ 'valueraw' => 1580389200,
+ ], reset($course['customfields']));
+ }
+
public function test_get_courses_by_field_invalid_field() {
$this->expectException('invalid_parameter_exception');
$result = core_course_external::get_courses_by_field('zyx', 'x');