MDL-64057 core_favourites: add get_join_sql_by_type() to service layer
[moodle.git] / favourites / tests / service_test.php
index 5ead879..c48e81f 100644 (file)
@@ -429,4 +429,35 @@ class user_favourite_service_testcase extends advanced_testcase {
         // Gets counted if we include all contexts.
         $this->assertEquals(3, $service->count_favourites_by_type('core_course', 'course'));
     }
+
+    /**
+     * Verify that the join sql generated by get_join_sql_by_type is valid and can be used to include favourite information.
+     */
+    public function test_get_join_sql_by_type() {
+        global $DB;
+        list($user1context, $user2context, $course1context, $course2context) = $this->setup_users_and_courses();
+
+        // Get a user_favourite_service for the user.
+        // We need to use a real (DB) repository, as we want to run the SQL.
+        $repo = new \core_favourites\local\repository\favourite_repository();
+        $service = new \core_favourites\local\service\user_favourite_service($user1context, $repo);
+
+        // Favourite the first course only.
+        $service->create_favourite('core_course', 'course', $course1context->instanceid, $course1context);
+
+        // Generate the join snippet.
+        list($favsql, $favparams) = $service->get_join_sql_by_type('core_course', 'course', 'favalias', 'c.id');
+
+        // Join against a simple select, including the 2 courses only.
+        $params = ['courseid1' => $course1context->instanceid, 'courseid2' => $course2context->instanceid];
+        $params = $params + $favparams;
+        $records = $DB->get_records_sql("SELECT c.id, favalias.component
+                                           FROM {course} c $favsql
+                                          WHERE c.id = :courseid1 OR c.id = :courseid2", $params);
+
+        // Verify the favourite information is returned, but only for the favourited course.
+        $this->assertCount(2, $records);
+        $this->assertEquals('core_course', $records[$course1context->instanceid]->component);
+        $this->assertEmpty($records[$course2context->instanceid]->component);
+    }
 }