public function test_reset_data_with_groups() { global $DB; $c1 = $this->getDataGenerator()->create_course(); $c2 = $this->getDataGenerator()->create_course(); $u1 = $this->getDataGenerator()->create_user(); $u2 = $this->getDataGenerator()->create_user(); $g1 = $this->getDataGenerator()->create_group(array('courseid' => $c1->id)); $this->getDataGenerator()->enrol_user($u1->id, $c1->id); $this->getDataGenerator()->enrol_user($u2->id, $c1->id); $this->getDataGenerator()->enrol_user($u1->id, $c2->id); $this->getDataGenerator()->create_group_member(array('groupid' => $g1->id, 'userid' => $u1->id)); $manager = block_xp_manager::get($c1->id); $manager->update_config(array('enabled' => true, 'timebetweensameactions' => 0)); $e = \block_xp\event\something_happened::mock(array('crud' => 'c', 'userid' => $u1->id, 'courseid' => $c1->id)); $manager->capture_event($e); $manager->capture_event($e); $e = \block_xp\event\something_happened::mock(array('crud' => 'c', 'userid' => $u2->id, 'courseid' => $c1->id)); $manager->capture_event($e); $manager->capture_event($e); $manager = block_xp_manager::get($c2->id); $manager->update_config(array('enabled' => true, 'timebetweensameactions' => 0)); $e = \block_xp\event\something_happened::mock(array('crud' => 'c', 'userid' => $u1->id, 'courseid' => $c2->id)); $manager->capture_event($e); $this->assertEquals(1, $DB->count_records('block_xp', array('courseid' => $c1->id, 'userid' => $u1->id))); $this->assertEquals(1, $DB->count_records('block_xp', array('courseid' => $c1->id, 'userid' => $u2->id))); $this->assertEquals(2, $DB->count_records('block_xp_log', array('courseid' => $c1->id, 'userid' => $u1->id))); $this->assertEquals(2, $DB->count_records('block_xp_log', array('courseid' => $c1->id, 'userid' => $u2->id))); $this->assertEquals(1, $DB->count_records('block_xp', array('courseid' => $c2->id))); $this->assertEquals(1, $DB->count_records('block_xp_log', array('courseid' => $c2->id))); $manager = block_xp_manager::get($c1->id); $manager->reset_data($g1->id); $this->assertEquals(0, $DB->count_records('block_xp', array('courseid' => $c1->id, 'userid' => $u1->id))); $this->assertEquals(1, $DB->count_records('block_xp', array('courseid' => $c1->id, 'userid' => $u2->id))); $this->assertEquals(0, $DB->count_records('block_xp_log', array('courseid' => $c1->id, 'userid' => $u1->id))); $this->assertEquals(2, $DB->count_records('block_xp_log', array('courseid' => $c1->id, 'userid' => $u2->id))); $this->assertEquals(1, $DB->count_records('block_xp', array('courseid' => $c2->id))); $this->assertEquals(1, $DB->count_records('block_xp_log', array('courseid' => $c2->id))); }
public function test_custom_filters() { $this->resetAfterTest(true); $course = $this->getDataGenerator()->create_course(); $manager = block_xp_manager::get($course->id); $fm = $manager->get_filter_manager(); // Define some custom rules, the sortorder and IDs are mixed here. $rule = new block_xp_rule_property(block_xp_rule_base::EQ, 'c', 'crud'); $data = array('courseid' => $course->id, 'sortorder' => 1, 'points' => 100, 'rule' => $rule); block_xp_filter::load_from_data($data)->save(); $rule = new block_xp_ruleset(array(new block_xp_rule_property(block_xp_rule_base::EQ, 2, 'objectid'), new block_xp_rule_property(block_xp_rule_base::EQ, 'u', 'crud')), block_xp_ruleset::ANY); $data = array('courseid' => $course->id, 'sortorder' => 2, 'points' => 120, 'rule' => $rule); block_xp_filter::load_from_data($data)->save(); $rule = new block_xp_ruleset(array(new block_xp_rule_property(block_xp_rule_base::GTE, 100, 'objectid'), new block_xp_rule_property(block_xp_rule_base::EQ, 'r', 'crud')), block_xp_ruleset::ALL); $data = array('courseid' => $course->id, 'sortorder' => 0, 'points' => 130, 'rule' => $rule); block_xp_filter::load_from_data($data)->save(); // We can override default filters. $e = \block_xp\event\something_happened::mock(array('crud' => 'c', 'objectid' => 2)); $this->assertSame(100, $fm->get_points_for_event($e)); // We can still fallback on default filters. $e = \block_xp\event\something_happened::mock(array('crud' => 'd')); $this->assertSame(0, $fm->get_points_for_event($e)); // Sort order is respected. $e = \block_xp\event\something_happened::mock(array('crud' => 'u', 'objectid' => 2)); $this->assertSame(120, $fm->get_points_for_event($e)); $e = \block_xp\event\something_happened::mock(array('crud' => 'r')); $this->assertSame(9, $fm->get_points_for_event($e)); $e = \block_xp\event\something_happened::mock(array('crud' => 'r', 'objectid' => 100)); $this->assertSame(130, $fm->get_points_for_event($e)); // This filter will catch everything before the default rules. $rule = new block_xp_rule_property(block_xp_rule_base::CT, 'something', 'eventname'); $data = array('courseid' => $course->id, 'sortorder' => 3, 'points' => 110, 'rule' => $rule); block_xp_filter::load_from_data($data)->save(); $e = \block_xp\event\something_happened::mock(array('crud' => 'd')); $this->assertSame(110, $fm->get_points_for_event($e)); $e = \block_xp\event\something_happened::mock(array('crud' => 'r')); $this->assertSame(110, $fm->get_points_for_event($e)); // This filter will catch everything. $rule = new block_xp_rule_property(block_xp_rule_base::CT, 'something', 'eventname'); $data = array('courseid' => $course->id, 'sortorder' => -1, 'points' => -10, 'rule' => $rule); block_xp_filter::load_from_data($data)->save(); $e = \block_xp\event\something_happened::mock(array('crud' => 'u', 'objectid' => 2)); $this->assertSame(-10, $fm->get_points_for_event($e)); $e = \block_xp\event\something_happened::mock(array('crud' => 'r', 'objectid' => 100)); $this->assertSame(-10, $fm->get_points_for_event($e)); $e = \block_xp\event\something_happened::mock(array('crud' => 'd')); $this->assertSame(-10, $fm->get_points_for_event($e)); $e = \block_xp\event\something_happened::mock(array('crud' => 'r')); $this->assertSame(-10, $fm->get_points_for_event($e)); }