MDL-63137 mod_feedback: PHPUnit tests for new userid parameter
This commit is contained in:
@@ -193,6 +193,42 @@ class mod_feedback_lib_testcase extends advanced_testcase {
|
||||
$this->assertTrue($actionevent->is_actionable());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test calendar event provide action open, viewed by a different user.
|
||||
*/
|
||||
public function test_feedback_core_calendar_provide_event_action_open_for_user() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$now = time();
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
$studentrole = $DB->get_record('role', array('shortname' => 'student'));
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$this->getDataGenerator()->enrol_user($user->id, $course->id, $studentrole->id, 'manual');
|
||||
|
||||
$feedback = $this->getDataGenerator()->create_module('feedback', ['course' => $course->id,
|
||||
'timeopen' => $now - DAYSECS, 'timeclose' => $now + DAYSECS]);
|
||||
$event = $this->create_action_event($course->id, $feedback->id, FEEDBACK_EVENT_TYPE_OPEN);
|
||||
$factory = new \core_calendar\action_factory();
|
||||
|
||||
$this->setUser($user2);
|
||||
|
||||
// User2 checking their events.
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user2->id);
|
||||
$this->assertNull($actionevent);
|
||||
|
||||
// User2 checking $user's events.
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user->id);
|
||||
$this->assertInstanceOf('\core_calendar\local\event\value_objects\action', $actionevent);
|
||||
$this->assertEquals(get_string('answerquestions', 'feedback'), $actionevent->get_name());
|
||||
$this->assertInstanceOf('moodle_url', $actionevent->get_url());
|
||||
$this->assertEquals(1, $actionevent->get_item_count());
|
||||
$this->assertTrue($actionevent->is_actionable());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test calendar event provide action closed.
|
||||
*/
|
||||
@@ -212,6 +248,38 @@ class mod_feedback_lib_testcase extends advanced_testcase {
|
||||
$this->assertNull($actionevent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test calendar event provide action closed, viewed by a different user.
|
||||
*/
|
||||
public function test_feedback_core_calendar_provide_event_action_closed_for_user() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
$studentrole = $DB->get_record('role', array('shortname' => 'student'));
|
||||
$this->getDataGenerator()->enrol_user($user->id, $course->id, $studentrole->id, 'manual');
|
||||
|
||||
$feedback = $this->getDataGenerator()->create_module('feedback', array('course' => $course->id,
|
||||
'timeclose' => time() - DAYSECS));
|
||||
$event = $this->create_action_event($course->id, $feedback->id, FEEDBACK_EVENT_TYPE_OPEN);
|
||||
$factory = new \core_calendar\action_factory();
|
||||
$this->setUser($user2);
|
||||
|
||||
// User2 checking their events.
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user2->id);
|
||||
$this->assertNull($actionevent);
|
||||
|
||||
// User2 checking $user's events.
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user->id);
|
||||
|
||||
// No event on the dashboard if feedback is closed.
|
||||
$this->assertNull($actionevent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test calendar event action open in future.
|
||||
*
|
||||
@@ -236,6 +304,44 @@ class mod_feedback_lib_testcase extends advanced_testcase {
|
||||
$this->assertFalse($actionevent->is_actionable());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test calendar event action open in future, viewed by a different user.
|
||||
*
|
||||
* @throws coding_exception
|
||||
*/
|
||||
public function test_feedback_core_calendar_provide_event_action_open_in_future_for_user() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
$studentrole = $DB->get_record('role', array('shortname' => 'student'));
|
||||
$this->getDataGenerator()->enrol_user($user->id, $course->id, $studentrole->id, 'manual');
|
||||
|
||||
$feedback = $this->getDataGenerator()->create_module('feedback', ['course' => $course->id,
|
||||
'timeopen' => time() + DAYSECS]);
|
||||
$event = $this->create_action_event($course->id, $feedback->id, FEEDBACK_EVENT_TYPE_OPEN);
|
||||
|
||||
$factory = new \core_calendar\action_factory();
|
||||
$this->setUser($user2);
|
||||
|
||||
// User2 checking their events.
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user2->id);
|
||||
$this->assertNull($actionevent);
|
||||
|
||||
// User2 checking $user's events.
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user->id);
|
||||
|
||||
$this->assertInstanceOf('\core_calendar\local\event\value_objects\action', $actionevent);
|
||||
$this->assertEquals(get_string('answerquestions', 'feedback'), $actionevent->get_name());
|
||||
$this->assertInstanceOf('moodle_url', $actionevent->get_url());
|
||||
$this->assertEquals(1, $actionevent->get_item_count());
|
||||
$this->assertFalse($actionevent->is_actionable());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test calendar event with no time specified.
|
||||
*
|
||||
@@ -259,6 +365,43 @@ class mod_feedback_lib_testcase extends advanced_testcase {
|
||||
$this->assertTrue($actionevent->is_actionable());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test calendar event with no time specified, viewed by a different user.
|
||||
*
|
||||
* @throws coding_exception
|
||||
*/
|
||||
public function test_feedback_core_calendar_provide_event_action_no_time_specified_for_user() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
$studentrole = $DB->get_record('role', array('shortname' => 'student'));
|
||||
$this->getDataGenerator()->enrol_user($user->id, $course->id, $studentrole->id, 'manual');
|
||||
|
||||
$feedback = $this->getDataGenerator()->create_module('feedback', ['course' => $course->id]);
|
||||
$event = $this->create_action_event($course->id, $feedback->id, FEEDBACK_EVENT_TYPE_OPEN);
|
||||
|
||||
$factory = new \core_calendar\action_factory();
|
||||
$this->setUser($user2);
|
||||
|
||||
// User2 checking their events.
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user2->id);
|
||||
$this->assertNull($actionevent);
|
||||
|
||||
// User2 checking $user's events.
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user->id);
|
||||
|
||||
$this->assertInstanceOf('\core_calendar\local\event\value_objects\action', $actionevent);
|
||||
$this->assertEquals(get_string('answerquestions', 'feedback'), $actionevent->get_name());
|
||||
$this->assertInstanceOf('moodle_url', $actionevent->get_url());
|
||||
$this->assertEquals(1, $actionevent->get_item_count());
|
||||
$this->assertTrue($actionevent->is_actionable());
|
||||
}
|
||||
|
||||
/**
|
||||
* A user that can not submit feedback should not have an action.
|
||||
*/
|
||||
@@ -286,6 +429,40 @@ class mod_feedback_lib_testcase extends advanced_testcase {
|
||||
$this->assertNull($action);
|
||||
}
|
||||
|
||||
/**
|
||||
* A user that can not submit feedback should not have an action, viewed by a different user.
|
||||
*/
|
||||
public function test_feedback_core_calendar_provide_event_action_can_not_submit_for_user() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
$studentrole = $DB->get_record('role', array('shortname' => 'student'));
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$feedback = $this->getDataGenerator()->create_module('feedback', ['course' => $course->id]);
|
||||
$event = $this->create_action_event($course->id, $feedback->id, FEEDBACK_EVENT_TYPE_OPEN);
|
||||
$cm = get_coursemodule_from_instance('feedback', $feedback->id);
|
||||
$context = context_module::instance($cm->id);
|
||||
$this->getDataGenerator()->enrol_user($user->id, $course->id, $studentrole->id, 'manual');
|
||||
|
||||
assign_capability('mod/feedback:complete', CAP_PROHIBIT, $studentrole->id, $context);
|
||||
$factory = new \core_calendar\action_factory();
|
||||
$this->setUser($user2);
|
||||
|
||||
// User2 checking their events.
|
||||
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user2->id);
|
||||
$this->assertNull($actionevent);
|
||||
|
||||
// User2 checking $user's events.
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user->id);
|
||||
|
||||
$this->assertNull($actionevent);
|
||||
}
|
||||
|
||||
/**
|
||||
* A user that has already submitted feedback should not have an action.
|
||||
*/
|
||||
@@ -321,6 +498,49 @@ class mod_feedback_lib_testcase extends advanced_testcase {
|
||||
$this->assertNull($action);
|
||||
}
|
||||
|
||||
/**
|
||||
* A user that has already submitted feedback should not have an action, viewed by a different user.
|
||||
*/
|
||||
public function test_feedback_core_calendar_provide_event_action_already_submitted_for_user() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
$studentrole = $DB->get_record('role', array('shortname' => 'student'));
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$feedback = $this->getDataGenerator()->create_module('feedback', ['course' => $course->id]);
|
||||
$event = $this->create_action_event($course->id, $feedback->id, FEEDBACK_EVENT_TYPE_OPEN);
|
||||
$cm = get_coursemodule_from_instance('feedback', $feedback->id);
|
||||
$context = context_module::instance($cm->id);
|
||||
|
||||
$this->setUser($user);
|
||||
|
||||
$record = [
|
||||
'feedback' => $feedback->id,
|
||||
'userid' => $user->id,
|
||||
'timemodified' => time(),
|
||||
'random_response' => 0,
|
||||
'anonymous_response' => FEEDBACK_ANONYMOUS_NO,
|
||||
'courseid' => 0,
|
||||
];
|
||||
$DB->insert_record('feedback_completed', (object) $record);
|
||||
|
||||
$factory = new \core_calendar\action_factory();
|
||||
$this->setUser($user2);
|
||||
|
||||
// User2 checking their events.
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user2->id);
|
||||
$this->assertNull($actionevent);
|
||||
|
||||
// User2 checking $user's events.
|
||||
$actionevent = mod_feedback_core_calendar_provide_event_action($event, $factory, $user->id);
|
||||
|
||||
$this->assertNull($actionevent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an action event.
|
||||
*
|
||||
|
||||
@@ -524,22 +524,18 @@ class mod_feedback_privacy_testcase extends provider_testcase {
|
||||
* @return void
|
||||
*/
|
||||
protected function create_submission_with_answers($feedback, $user, $answers, $submissioncount = 1) {
|
||||
global $DB, $USER;
|
||||
$origuser = $USER;
|
||||
$this->setUser($user);
|
||||
global $DB;
|
||||
|
||||
$modinfo = get_fast_modinfo($feedback->course);
|
||||
$cm = $modinfo->get_cm($feedback->cmid);
|
||||
|
||||
$feedbackcompletion = new mod_feedback_completion($feedback, $cm, $feedback->course);
|
||||
$feedbackcompletion = new mod_feedback_completion($feedback, $cm, $feedback->course, false, null, null, $user->id);
|
||||
$feedbackcompletion->save_response_tmp((object) $answers);
|
||||
$feedbackcompletion->save_response();
|
||||
$this->assertEquals($submissioncount, $DB->count_records('feedback_completed', ['feedback' => $feedback->id,
|
||||
'userid' => $user->id]));
|
||||
$this->assertEquals(count($answers), $DB->count_records('feedback_value', [
|
||||
'completed' => $feedbackcompletion->get_completed()->id]));
|
||||
|
||||
$this->setUser($origuser);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -551,19 +547,15 @@ class mod_feedback_privacy_testcase extends provider_testcase {
|
||||
* @return void
|
||||
*/
|
||||
protected function create_tmp_submission_with_answers($feedback, $user, $answers) {
|
||||
global $DB, $USER;
|
||||
$origuser = $USER;
|
||||
$this->setUser($user);
|
||||
global $DB;
|
||||
|
||||
$modinfo = get_fast_modinfo($feedback->course);
|
||||
$cm = $modinfo->get_cm($feedback->cmid);
|
||||
|
||||
$feedbackcompletion = new mod_feedback_completion($feedback, $cm, $feedback->course);
|
||||
$feedbackcompletion = new mod_feedback_completion($feedback, $cm, $feedback->course, false, null, null, $user->id);
|
||||
$feedbackcompletion->save_response_tmp((object) $answers);
|
||||
$this->assertEquals(1, $DB->count_records('feedback_completedtmp', ['feedback' => $feedback->id, 'userid' => $user->id]));
|
||||
$this->assertEquals(2, $DB->count_records('feedback_valuetmp', [
|
||||
'completed' => $feedbackcompletion->get_current_completed_tmp()->id]));
|
||||
|
||||
$this->setUser($origuser);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user