Permalink
Browse files

MDL-27845 rating: updated rating unit tests

  • Loading branch information...
1 parent d8c7138 commit a924c53e4ae589010750d18fc8babccf9a2d747a @andyjdavis andyjdavis committed Jul 22, 2011
Showing with 49 additions and 27 deletions.
  1. +49 −27 rating/simpletest/testrating.php
@@ -56,24 +56,31 @@ public function setUp() {
*/
function test_get_ratings_sql() {
- // We load 6 ratings, 2 performed by each (1, 2, 3) user to items corresponding to the other users
+ // We load 3 items. Each is rated twice. For simplicity itemid == user id of the item owner
$ctxid = SYSCONTEXTID;
$this->load_test_data('rating',
array('contextid', 'component', 'ratingarea', 'itemid', 'scaleid', 'rating', 'userid', 'timecreated', 'timemodified'), array(
- array( $ctxid , 'mod_forum', 'post', 2 , 10 , 1 , 1 , 1 , 1),
- array( $ctxid , 'mod_forum', 'post', 3 , 10 , 3 , 1 , 1 , 1),
+
+ //user 1's items. Average == 2
array( $ctxid , 'mod_forum', 'post', 1 , 10 , 1 , 2 , 1 , 1),
- array( $ctxid , 'mod_forum', 'post', 3 , 10 , 5 , 2 , 1 , 1),
array( $ctxid , 'mod_forum', 'post', 1 , 10 , 3 , 3 , 1 , 1),
- array( $ctxid , 'mod_forum', 'post', 2 , 10 , 5 , 3 , 1 , 1)));
- // Create 1 post (item) by user 1 (rated above by user 2 and 3 with average = 2)
+ //user 2's items. Average == 3
+ array( $ctxid , 'mod_forum', 'post', 2 , 10 , 1 , 1 , 1 , 1),
+ array( $ctxid , 'mod_forum', 'post', 2 , 10 , 5 , 3 , 1 , 1),
+
+ //user 3's items. Average == 4
+ array( $ctxid , 'mod_forum', 'post', 3 , 10 , 3 , 1 , 1 , 1),
+ array( $ctxid , 'mod_forum', 'post', 3 , 10 , 5 , 2 , 1 , 1)
+ ));
+
+ // a post (item) by user 1 (rated above by user 2 and 3 with average = 2)
$user1posts = array(
(object)array('id' => 1, 'userid' => 1, 'message' => 'hello'));
- // Create 1 post (item) by user 2 (rated above by user 1 and 3 with average = 3)
+ // a post (item) by user 2 (rated above by user 1 and 3 with average = 3)
$user2posts = array(
(object)array('id' => 2, 'userid' => 2, 'message' => 'world'));
- // Create 1 post (item) by user 3 (rated above by user 1 and 2 with average = 4)
+ // a post (item) by user 3 (rated above by user 1 and 2 with average = 4)
$user3posts = array(
(object)array('id' => 3, 'userid' => 3, 'message' => 'moodle'));
@@ -87,9 +94,9 @@ function test_get_ratings_sql() {
$rm = new rating_manager();
- // STEP 1: Aparently, agreggation and counts are always returned ok
+ // STEP 1: Retreive ratings using the current user
- // Get results for items of user 1 (expected average 1 + 3 / 2 = 2)
+ // Get results for user 1's item (expected average 1 + 3 / 2 = 2)
$toptions = (object)array_merge($defaultoptions, array('items' => $user1posts));
$result = $rm->get_ratings($toptions);
$this->assertEqual(count($result), count($user1posts));
@@ -98,6 +105,8 @@ function test_get_ratings_sql() {
$this->assertEqual($result[0]->message, $user1posts[0]->message);
$this->assertEqual($result[0]->rating->count, 2);
$this->assertEqual($result[0]->rating->aggregate, 2);
+ // Note that $result[0]->rating->rating is somewhat random
+ // We didn't supply a user ID so $USER was used which will vary depending on who runs the tests
// Get results for items of user 2 (expected average 1 + 5 / 2 = 3)
$toptions = (object)array_merge($defaultoptions, array('items' => $user2posts));
@@ -108,6 +117,8 @@ function test_get_ratings_sql() {
$this->assertEqual($result[0]->message, $user2posts[0]->message);
$this->assertEqual($result[0]->rating->count, 2);
$this->assertEqual($result[0]->rating->aggregate, 3);
+ // Note that $result[0]->rating->rating is somewhat random
+ // We didn't supply a user ID so $USER was used which will vary depending on who runs the tests
// Get results for items of user 3 (expected average 3 + 5 / 2 = 4)
$toptions = (object)array_merge($defaultoptions, array('items' => $user3posts));
@@ -118,6 +129,8 @@ function test_get_ratings_sql() {
$this->assertEqual($result[0]->message, $user3posts[0]->message);
$this->assertEqual($result[0]->rating->count, 2);
$this->assertEqual($result[0]->rating->aggregate, 4);
+ // Note that $result[0]->rating->rating is somewhat random
+ // We didn't supply a user ID so $USER was used which will vary depending on who runs the tests
// Get results for items of user 1 & 2 together (expected averages are 2 and 3, as tested above)
$posts = array_merge($user1posts, $user2posts);
@@ -129,17 +142,21 @@ function test_get_ratings_sql() {
$this->assertEqual($result[0]->message, $posts[0]->message);
$this->assertEqual($result[0]->rating->count, 2);
$this->assertEqual($result[0]->rating->aggregate, 2);
+ // Note that $result[0]->rating->rating is somewhat random
+ // We didn't supply a user ID so $USER was used which will vary depending on who runs the tests
$this->assertEqual($result[1]->id, $posts[1]->id);
$this->assertEqual($result[1]->userid, $posts[1]->userid);
$this->assertEqual($result[1]->message, $posts[1]->message);
$this->assertEqual($result[1]->rating->count, 2);
$this->assertEqual($result[1]->rating->aggregate, 3);
+ // Note that $result[0]->rating->rating is somewhat random
+ // We didn't supply a user ID so $USER was used which will vary depending on who runs the tests
- // STEP 2: But what happens if only ratings performed by one user are requested? Do we expect
- // complete aggregations and counts?
+ // STEP 2: Retrieve ratings by a specified user
+ // We still expect complete aggregations and counts
- // Get results for items of user 1 rated by user 2 (averages and counts must be the complete ones?)
+ // Get results for items of user 1 rated by user 2 (avg 2, rating 1)
$toptions = (object)array_merge($defaultoptions, array('items' => $user1posts, 'userid' => 2));
$result = $rm->get_ratings($toptions);
$this->assertEqual(count($result), count($user1posts));
@@ -148,9 +165,10 @@ function test_get_ratings_sql() {
$this->assertEqual($result[0]->message, $user1posts[0]->message);
$this->assertEqual($result[0]->rating->count, 2);
$this->assertEqual($result[0]->rating->aggregate, 2);
+ $this->assertEqual($result[0]->rating->rating, 1); //user 2 rated user 1 "1"
$this->assertEqual($result[0]->rating->userid, $toptions->userid); // Must be the passed userid
- // Get results for items of user 1 rated by user 3 (averages and counts must be the complete ones?)
+ // Get results for items of user 1 rated by user 3
$toptions = (object)array_merge($defaultoptions, array('items' => $user1posts, 'userid' => 3));
$result = $rm->get_ratings($toptions);
$this->assertEqual(count($result), count($user1posts));
@@ -159,9 +177,10 @@ function test_get_ratings_sql() {
$this->assertEqual($result[0]->message, $user1posts[0]->message);
$this->assertEqual($result[0]->rating->count, 2);
$this->assertEqual($result[0]->rating->aggregate, 2);
+ $this->assertEqual($result[0]->rating->rating, 3); //user 3 rated user 1 "3"
$this->assertEqual($result[0]->rating->userid, $toptions->userid); // Must be the passed userid
- // Get results for items of user 1 & 2 together rated by user 3 (averages and counts must be the complete ones?)
+ // Get results for items of user 1 & 2 together rated by user 3
$posts = array_merge($user1posts, $user2posts);
$toptions = (object)array_merge($defaultoptions, array('items' => $posts, 'userid' => 3));
$result = $rm->get_ratings($toptions);
@@ -171,33 +190,36 @@ function test_get_ratings_sql() {
$this->assertEqual($result[0]->message, $posts[0]->message);
$this->assertEqual($result[0]->rating->count, 2);
$this->assertEqual($result[0]->rating->aggregate, 2);
+ $this->assertEqual($result[0]->rating->rating, 3); //user 3 rated user 1 "3"
$this->assertEqual($result[0]->rating->userid, $toptions->userid); // Must be the passed userid
$this->assertEqual($result[1]->id, $posts[1]->id);
$this->assertEqual($result[1]->userid, $posts[1]->userid);
$this->assertEqual($result[1]->message, $posts[1]->message);
$this->assertEqual($result[1]->rating->count, 2);
$this->assertEqual($result[1]->rating->aggregate, 3);
+ $this->assertEqual($result[0]->rating->rating, 3); //user 3 rated user 2 "5"
$this->assertEqual($result[1]->rating->userid, $toptions->userid); // Must be the passed userid
- // STEP 3: But there are a lot of information that shouldn't be there at all, these shouldn't fail
+ // STEP 3: Some special cases
- // Get results for items of user 1 (expected average 1 + 3 / 2 = 2)
- // (we have tested this above, but now we are going to look to other variables)
+ // Get results for user 1's items (expected average 1 + 3 / 2 = 2)
+ // supplying a non-existent user id so no rating from that user should be found
$toptions = (object)array_merge($defaultoptions, array('items' => $user1posts));
+ $toptions->userid = 123456; //non-existent user
$result = $rm->get_ratings($toptions);
- // This test fails! Let's name it T1
- $this->assertNull($result[0]->rating->userid); // There are 2 users rating this, no way we are returning "randomly" one here
- // Same for rating->[scaleid, permissions, rating, id.... all them are not unique in this example (there are 2 ratings) so we should nullify them
- // or they will be failing here
+ $this->assertNull($result[0]->rating->userid);
+ $this->assertNull($result[0]->rating->rating);
+ $this->assertEqual($result[0]->rating->aggregate, 2);//should still get the aggregate
// Get results for items of user 2 (expected average 1 + 5 / 2 = 3)
- // (we have tested this above, but now we are going to look to other variables)
+ // Supplying the user id of the user who owns the items so no rating should be found
$toptions = (object)array_merge($defaultoptions, array('items' => $user2posts));
+ $toptions->userid = 2; //user 2 viewing the ratings of their own item
$result = $rm->get_ratings($toptions);
- // This test pass! It's exactly the same than T1 above, so random results are returned!!
- $this->assertNull($result[0]->rating->userid); // There are 2 users rating this, no way we are returning "randomly" one here
- // Same for rating->[scaleid, permissions, rating, id.... all them are not unique in this example (there are 2 ratings) so we should nullify them
- // or they will be failing here
+ //these should be null as the user is viewing their own item and thus cannot rate
+ $this->assertNull($result[0]->rating->userid);
+ $this->assertNull($result[0]->rating->rating);
+ $this->assertEqual($result[0]->rating->aggregate, 3);//should still get the aggregate
}
}

0 comments on commit a924c53

Please sign in to comment.