示例#1
0
 public function test_get_entries_by_term()
 {
     $this->resetAfterTest(true);
     // Generate all the things.
     $gg = $this->getDataGenerator()->get_plugin_generator('mod_glossary');
     $c1 = $this->getDataGenerator()->create_course();
     $g1 = $this->getDataGenerator()->create_module('glossary', array('course' => $c1->id));
     $g2 = $this->getDataGenerator()->create_module('glossary', array('course' => $c1->id));
     $u1 = $this->getDataGenerator()->create_user();
     $ctx = context_module::instance($g1->cmid);
     $this->getDataGenerator()->enrol_user($u1->id, $c1->id);
     $this->setAdminUser();
     $e1 = $gg->create_content($g1, array('userid' => $u1->id, 'approved' => 1, 'concept' => 'cat'));
     $e2 = $gg->create_content($g1, array('userid' => $u1->id, 'approved' => 1), array('cat', 'dog'));
     $e3 = $gg->create_content($g1, array('userid' => $u1->id, 'approved' => 1), array('dog'));
     $e4 = $gg->create_content($g1, array('userid' => $u1->id, 'approved' => 0, 'concept' => 'dog'));
     $e5 = $gg->create_content($g2, array('userid' => $u1->id, 'approved' => 1, 'concept' => 'dog'), array('cat'));
     // Search concept + alias.
     $return = mod_glossary_external::get_entries_by_term($g1->id, 'cat', 0, 20, array('includenotapproved' => false));
     $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
     $this->assertCount(2, $return['entries']);
     $this->assertEquals(2, $return['count']);
     // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
     $expected = array($e1->id, $e2->id);
     $actual = array($return['entries'][0]['id'], $return['entries'][1]['id']);
     $this->assertEquals($expected, $actual, '', 0.0, 10, true);
     // Search alias.
     $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 20, array('includenotapproved' => false));
     $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
     $this->assertCount(2, $return['entries']);
     $this->assertEquals(2, $return['count']);
     // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
     $expected = array($e2->id, $e3->id);
     $actual = array($return['entries'][0]['id'], $return['entries'][1]['id']);
     $this->assertEquals($expected, $actual, '', 0.0, 10, true);
     // Search including not approved.
     $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 20, array('includenotapproved' => true));
     $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
     $this->assertCount(3, $return['entries']);
     $this->assertEquals(3, $return['count']);
     // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
     $expected = array($e4->id, $e2->id, $e3->id);
     $actual = array($return['entries'][0]['id'], $return['entries'][1]['id'], $return['entries'][2]['id']);
     $this->assertEquals($expected, $actual, '', 0.0, 10, true);
     // Pagination.
     $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 1, array('includenotapproved' => true));
     $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
     $this->assertCount(1, $return['entries']);
     // We don't compare the returned entry id because it may be different depending on the DBMS,
     // for example, Postgres does a random sorting in this case.
     $this->assertEquals(3, $return['count']);
     $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 1, 1, array('includenotapproved' => true));
     $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
     $this->assertCount(1, $return['entries']);
     $this->assertEquals(3, $return['count']);
 }