MDL-31830 course: management behat tests corrected after fixes
authorSam Hemelryk <sam@moodle.com>
Sun, 6 Oct 2013 20:13:23 +0000 (09:13 +1300)
committerSam Hemelryk <sam@moodle.com>
Mon, 7 Oct 2013 04:34:09 +0000 (17:34 +1300)
13 files changed:
course/management.php
course/tests/behat/behat_course.php
course/tests/behat/category_change_visibility.feature
course/tests/behat/category_management.feature
course/tests/behat/category_resort.feature
course/tests/behat/course_category_management_listing.feature
course/tests/behat/course_change_visibility.feature
course/tests/behat/course_resort.feature
course/tests/management_helper_test.php
course/yui/build/moodle-course-management/moodle-course-management-debug.js
course/yui/build/moodle-course-management/moodle-course-management-min.js
course/yui/build/moodle-course-management/moodle-course-management.js
course/yui/src/management/js/category.js

index 2eafcc8..c470875 100644 (file)
@@ -235,7 +235,10 @@ if ($action !== false && confirm_sesskey()) {
             if ($data = $mform->get_data()) {
                 // The form has been submit handle it.
                 if ($data->fulldelete == 1 && $category->can_delete_full()) {
-                    $continueurl = new moodle_url('/course/management.php', array('categoryid' => $category->parent));
+                    $continueurl = new moodle_url('/course/management.php');
+                    if ($category->parent != '0') {
+                        $continueurl->param('categoryid', $category->parent);
+                    }
                     $notification = get_string('coursecategorydeleted', '', $category->get_formatted_name());
                     $deletedcourses = $category->delete_full(true);
                     foreach ($deletedcourses as $course) {
index 6783386..d8b3ab8 100644 (file)
@@ -69,10 +69,10 @@ class behat_course extends behat_base {
     public function i_create_a_course_with(TableNode $table) {
         return array(
             new Given('I go to the courses management page'),
-            new Given('I should see the "Course categories" management page'),
-            new Given('I click on "Miscellaneous" category listing'),
-            new Given('I should see the "Course categories and courses" management page'),
-            new Given('I click on "New course" "link" in the "#course-listing" "css_element"'),
+            new Given('I should see the "'.get_string('categories').'" management page'),
+            new Given('I click on category "'.get_string('miscellaneous').'" in the management interface'),
+            new Given('I should see the "'.get_string('categoriesandcoures').'" management page'),
+            new Given('I click on "'.get_string('newcourse').'" "link" in the "#course-listing" "css_element"'),
             new Given('I fill the moodle form with:', $table),
             new Given('I press "' . get_string('savechanges') . '"')
         );
@@ -812,22 +812,38 @@ class behat_course extends behat_base {
 
     /**
      * Returns the id of the category with the given idnumber.
+     *
+     * Please note that this function requires the category to exist. If it does not exist an ExpectationException is thrown.
+     *
      * @param string $idnumber
      * @return string
+     * @throws ExpectationException
      */
     protected function get_category_id($idnumber) {
         global $DB;
-        return $DB->get_field('course_categories', 'id', array('idnumber' => $idnumber), MUST_EXIST);
+        try {
+            return $DB->get_field('course_categories', 'id', array('idnumber' => $idnumber), MUST_EXIST);
+        } catch (dml_missing_record_exception $ex) {
+            throw new ExpectationException(sprintf("There is no category in the database with the idnumber '%s'", $idnumber));
+        }
     }
 
     /**
      * Returns the id of the course with the given idnumber.
+     *
+     * Please note that this function requires the category to exist. If it does not exist an ExpectationException is thrown.
+     *
      * @param string $idnumber
      * @return string
+     * @throws ExpectationException
      */
     protected function get_course_id($idnumber) {
         global $DB;
-        return $DB->get_field('course', 'id', array('idnumber' => $idnumber), MUST_EXIST);
+        try {
+            return $DB->get_field('course', 'id', array('idnumber' => $idnumber), MUST_EXIST);
+        } catch (dml_missing_record_exception $ex) {
+            throw new ExpectationException(sprintf("There is no course in the database with the idnumber '%s'", $idnumber));
+        }
     }
 
     /**
@@ -843,7 +859,9 @@ class behat_course extends behat_base {
     }
 
     /**
-     * @param $name
+     * Returns a category node from within the management interface.
+     *
+     * @param string $name The name of the category.
      * @return \Behat\Mink\Element\NodeElement
      */
     protected function get_management_category_listing_node_by_name($name) {
@@ -852,7 +870,9 @@ class behat_course extends behat_base {
     }
 
     /**
-     * @param $name
+     * Returns a course node from within the management interface.
+     *
+     * @param string $name The name of the course.
      * @return \Behat\Mink\Element\NodeElement
      */
     protected function get_management_course_listing_node_by_name($name) {
@@ -873,29 +893,34 @@ class behat_course extends behat_base {
     }
 
     /**
-     * Toggle the expansion of a category revealing its sub categories within the management UI.
+     * Clicks on a category in the management interface.
      *
-     * @Given /^I click on "(?P<name>[^"]*)" (?P<listing>course|category) listing$/
+     * @Given /^I click on category "(?P<name>[^"]*)" in the management interface$/
      * @param string $name
-     * @param string $listing
      */
-    public function i_click_on_listing($name, $listing) {
-        if ($listing === 'course') {
-            $node = $this->get_management_course_listing_node_by_name($name);
-            $node->find('css', 'a.coursename')->click();
-        } else {
-            $node = $this->get_management_category_listing_node_by_name($name);
-            $node->find('css', 'a.categoryname')->click();
-        }
+    public function i_click_on_category_in_the_management_interface($name) {
+        $node = $this->get_management_category_listing_node_by_name($name);
+        $node->find('css', 'a.categoryname')->click();
     }
 
     /**
-     * Toggle the expansion of a category revealing its sub categories within the management UI.
+     * Clicks on a course in the management interface.
      *
-     * @Given /^I click to toggle subcategories expansion "(?P<idnumber>[^"]*)"$/
+     * @Given /^I click on course "(?P<name>[^"]*)" in the management interface$/
+     * @param string $name
+     */
+    public function i_click_on_course_in_the_management_interface($name) {
+        $node = $this->get_management_course_listing_node_by_name($name);
+        $node->find('css', 'a.coursename')->click();
+    }
+
+    /**
+     * Click to expand a category revealing its sub categories within the management UI.
+     *
+     * @Given /^I click to expand category "(?P<idnumber>[^"]*)" in the management interface$/
      * @param string $idnumber
      */
-    public function i_click_to_toggle_subcategories_expansion($idnumber) {
+    public function i_click_to_expand_category_in_the_management_interface($idnumber) {
         $categorynode = $this->get_management_category_listing_node_by_idnumber($idnumber);
         $exception = new ExpectationException('Category "' . $idnumber . '" does not contain an expand or collapse toggle.', $this->getSession());
         $togglenode = $this->find('css', 'a[data-action=collapse],a[data-action=expand]', $exception, $categorynode);
@@ -903,7 +928,7 @@ class behat_course extends behat_base {
     }
 
     /**
-     * Throws an exception if the category with the matching idnumber is not "visible" in the management UI.
+     * Checks that a category within the management interface is visible.
      *
      * @Given /^category in management listing should be visible "(?P<idnumber>[^"]*)"$/
      * @param string $idnumber
@@ -916,7 +941,7 @@ class behat_course extends behat_base {
     }
 
     /**
-     * Throws an exception if the category with the matching idnumber is "visible" in the management UI.
+     * Checks that a category within the management interface is dimmed.
      *
      * @Given /^category in management listing should be dimmed "(?P<idnumber>[^"]*)"$/
      * @param string $idnumber
@@ -929,7 +954,7 @@ class behat_course extends behat_base {
     }
 
     /**
-     * Throws an exception if the course with the matching idnumber is not "visible" in the management UI.
+     * Checks that a course within the management interface is visible.
      *
      * @Given /^course in management listing should be visible "(?P<idnumber>[^"]*)"$/
      * @param string $idnumber
@@ -942,7 +967,7 @@ class behat_course extends behat_base {
     }
 
     /**
-     * Throws an exception if the course with the matching idnumber is "visible" in the management UI.
+     * Checks that a course within the management interface is dimmed.
      *
      * @Given /^course in management listing should be dimmed "(?P<idnumber>[^"]*)"$/
      * @param string $idnumber
@@ -996,36 +1021,62 @@ class behat_course extends behat_base {
     }
 
     /**
-     * @Given /^I click to move (?P<listing>category|course) "(?P<idnumber>[^"]*)" (?P<direction>up|down) one(?P<nohighlight> without highlight)?$/
-     * @param $listing
-     * @param $idnumber
-     * @param $direction
+     * Moves a category displayed in the management interface up or down one place.
+     *
+     * @Given /^I click to move category "(?P<idnumber>[^"]*)" (?P<direction>up|down) one$/
+     *
+     * @param string $idnumber The category idnumber
+     * @param string $direction The direction to move in, either up or down
      */
-    public function i_click_to_move_listing_by_one($listing, $idnumber, $direction, $nohighlight = false) {
-        $up = ($direction === 'up');
-        if ($listing === 'category') {
-            $node = $this->get_management_category_listing_node_by_idnumber($idnumber);
-        } else {
-            $node = $this->get_management_course_listing_node_by_idnumber($idnumber);
-        }
+    public function i_click_to_move_category_by_one($idnumber, $direction) {
+        $node = $this->get_management_category_listing_node_by_idnumber($idnumber);
+        $this->user_moves_listing_by_one('category', $node, $direction);
+    }
+
+    /**
+     * Moves a course displayed in the management interface up or down one place.
+     *
+     * @Given /^I click to move course "(?P<idnumber>[^"]*)" (?P<direction>up|down) one$/
+     *
+     * @param string $idnumber The course idnumber
+     * @param string $direction The direction to move in, either up or down
+     */
+    public function i_click_to_move_course_by_one($idnumber, $direction) {
+        $node = $this->get_management_course_listing_node_by_idnumber($idnumber);
+        $this->user_moves_listing_by_one('course', $node, $direction);
+    }
+
+    /**
+     * Moves a course or category listing within the management interface up or down by one.
+     *
+     * @param string $listingtype One of course or category
+     * @param \Behat\Mink\Element\NodeElement $listingnode
+     * @param string $direction One of up or down.
+     * @param bool $highlight If set to false we don't check the node has been highlighted.
+     */
+    protected function user_moves_listing_by_one($listingtype, $listingnode, $direction, $highlight = true) {
+        $up = (strtolower($direction) === 'up');
         if ($up) {
-            $exception = new ExpectationException($listing.' listing "' . $idnumber . '" does not contain a moveup button.', $this->getSession());
-            $button = $this->find('css', 'a.action-moveup', $exception, $node);
+            $exception = new ExpectationException($listingtype.' listing does not contain a moveup button.', $this->getSession());
+            $button = $this->find('css', 'a.action-moveup', $exception, $listingnode);
         } else {
-            $exception = new ExpectationException($listing.' listing "' . $idnumber . '" does not contain a movedown button.', $this->getSession());
-            $button = $this->find('css', 'a.action-movedown', $exception, $node);
+            $exception = new ExpectationException($listingtype.' listing does not contain a movedown button.', $this->getSession());
+            $button = $this->find('css', 'a.action-movedown', $exception, $listingnode);
         }
         $button->click();
-        if ($this->running_javascript() && empty($nohighlight)) {
-            $listitem = $node->getParent();
+        if ($this->running_javascript() && $highlight) {
+            $listitem = $listingnode->getParent();
             $exception = new ExpectationException('Nothing was highlighted, ajax didn\'t occur or didn\'t succeed.', $this->getSession());
             $this->spin(array($this, 'listing_is_highlighted'), $listitem->getTagName().'#'.$listitem->getAttribute('id'), 2, $exception, true);
         }
     }
 
     /**
-     * @param \Behat\Mink\Element\NodeElement $listitem
-     * @return mixed
+     * Used by spin to determine the callback has been highlighted.
+     *
+     * @param behat_course $self A self reference (default first arg from a spin callback)
+     * @param \Behat\Mink\Element\NodeElement $selector
+     * @return bool
      */
     protected function listing_is_highlighted($self, $selector) {
         $listitem = $this->find('css', $selector);
@@ -1033,30 +1084,47 @@ class behat_course extends behat_base {
     }
 
     /**
-     * Confirms that listings appear in a specific order.
+     * Check that one course appears before another in the course category management listings.
      *
-     * @Given /^I should see (?P<listing>category|course) listing "(?P<before>[^"]*)" before "(?P<after>[^"]*)"$/
-     * @param string $listing Is either category or course
-     * @param string $before The name of the before listitem.
-     * @string string $after The name of the after listitem.
+     * @Given /^I should see course listing "(?P<preceedingcourse>[^"]*)" before "(?P<followingcourse>[^"]*)"$/
+     *
+     * @param string $preceedingcourse The first course to find
+     * @param string $followingcourse The second course to find (should be AFTER the first course)
+     * @throws ExpectationException
+     */
+    public function i_should_see_course_listing_before($preceedingcourse, $followingcourse) {
+        $xpath = "//div[@id='course-listing']//li[contains(concat(' ', @class, ' '), ' listitem-course ')]//a[text()='{$preceedingcourse}']/ancestor::li[@data-id]//following::a[text()='{$followingcourse}']";
+        $msg = "{$preceedingcourse} course does not appear before {$followingcourse} course";
+        if (!$this->getSession()->getDriver()->find($xpath)) {
+            throw new ExpectationException($msg, $this->getSession());
+        }
+    }
+
+    /**
+     * Check that one category appears before another in the course category management listings.
+     *
+     * @Given /^I should see category listing "(?P<preceedingcategory>[^"]*)" before "(?P<followingcategory>[^"]*)"$/
+     *
+     * @param string $preceedingcategory The first category to find
+     * @param string $followingcategory The second category to find (should be after the first category)
+     * @throws ExpectationException
      */
-    public function i_should_see_listing_before($listing, $before, $after) {
-        $xpath = "//div[@id='{$listing}-listing']//li[contains(concat(' ', @class, ' '), ' listitem-{$listing} ')]//a[text()='{$before}']/ancestor::li[@data-id]//following::a[text()='{$after}']";
-        $msg = "{$before} {$listing} does not appear before {$after} {$listing}";
+    public function i_should_see_category_listing_before($preceedingcategory, $followingcategory) {
+        $xpath = "//div[@id='category-listing']//li[contains(concat(' ', @class, ' '), ' listitem-category ')]//a[text()='{$preceedingcategory}']/ancestor::li[@data-id]//following::a[text()='{$followingcategory}']";
+        $msg = "{$preceedingcategory} category does not appear before {$followingcategory} category";
         if (!$this->getSession()->getDriver()->find($xpath)) {
             throw new ExpectationException($msg, $this->getSession());
         }
     }
 
     /**
-     * Returns an array of checks to be performed to make sure we are on the management page with the expected components.
+     * Checks that we are on the course management page that we expect to be on and that no course has been selected.
      *
-     * @Given /^I should see the "(?P<mode>[^"]*)" management page(?P<withcourse> with a course selected)?$/
-     * @param string $mode
-     * @param bool $withcourse
+     * @Given /^I should see the "(?P<mode>[^"]*)" management page$/
+     * @param string $mode The mode to expected. One of 'Courses', 'Course categories' or 'Course categories and courses'
      * @return Given[]
      */
-    public function i_should_see_the_courses_management_page($mode, $withcourse = false) {
+    public function i_should_see_the_courses_management_page($mode) {
         $return = array(
             new Given('I should see "Course and category management" in the "h2" "css_element"')
         );
@@ -1075,33 +1143,68 @@ class behat_course extends behat_base {
                 $return[] = new Given('"#course-listing" "css_element" should exists');
                 break;
         }
-        if (!empty($withcourse)) {
-            $return[] = new Given('"#course-detail" "css_element" should exists');
-        } else {
-            $return[] = new Given('"#course-detail" "css_element" should not exists');
-        }
+        $return[] = new Given('"#course-detail" "css_element" should not exists');
         return $return;
     }
 
     /**
-     * @Given /^I click on "(?P<action>[^"]*)" action for "(?P<name>[^"]*)" in management (?P<listing>course|category) listing$/
+     * Checks that we are on the course management page that we expect to be on and that a course has been selected.
+     *
+     * @Given /^I should see the "(?P<mode>[^"]*)" management page with a course selected$/
+     * @param string $mode The mode to expected. One of 'Courses', 'Course categories' or 'Course categories and courses'
+     * @return Given[]
      */
-    public function i_click_on_action_for_item_in_management_course_listing($action, $name, $listing) {
-        if ($listing === 'category') {
-            $node = $this->get_management_category_listing_node_by_name($name);
-        } else {
-            $node = $this->get_management_course_listing_node_by_name($name);
-            $listing = 'course';
-        }
-        $actionsnode = $node->find('xpath', "//*[contains(concat(' ', normalize-space(@class), ' '), '{$listing}-item-actions')]");
+    public function i_should_see_the_courses_management_page_with_a_course_selected($mode) {
+        $return = $this->i_should_see_the_courses_management_page($mode);
+        array_pop($return);
+        $return[] = new Given('"#course-detail" "css_element" should exists');
+        return $return;
+    }
+
+    /**
+     * Locates a course in the course category management interface and then triggers an action for it.
+     *
+     * @Given /^I click on "(?P<action>[^"]*)" action for "(?P<name>[^"]*)" in management course listing$/
+     *
+     * @param string $action The action to take. One of
+     * @param string $name The name of the course as it is displayed in the management interface.
+     */
+    public function i_click_on_action_for_item_in_management_course_listing($action, $name) {
+        $node = $this->get_management_course_listing_node_by_name($name);
+        $this->user_clicks_on_management_listing_action('course', $node, $action);
+    }
+
+    /**
+     * Locates a category in the course category management interface and then triggers an action for it.
+     *
+     * @Given /^I click on "(?P<action>[^"]*)" action for "(?P<name>[^"]*)" in management category listing$/
+     *
+     * @param string $action The action to take. One of
+     * @param string $name The name of the category as it is displayed in the management interface.
+     */
+    public function i_click_on_action_for_item_in_management_category_listing($action, $name) {
+        $node = $this->get_management_category_listing_node_by_name($name);
+        $this->user_clicks_on_management_listing_action('category', $node, $action);
+    }
+
+    /**
+     * Finds the node to use for a management listitem action and clicks it.
+     *
+     * @param string $listingtype Either course or category.
+     * @param \Behat\Mink\Element\NodeElement $listingnode
+     * @param string $action The action being taken
+     * @throws Behat\Mink\Exception\ExpectationException
+     */
+    protected function user_clicks_on_management_listing_action($listingtype, $listingnode, $action) {
+        $actionsnode = $listingnode->find('xpath', "//*[contains(concat(' ', normalize-space(@class), ' '), '{$listingtype}-item-actions')]");
         if (!$actionsnode) {
-            throw new ExpectationException("Could not find the actions for $listing $name", $this->getSession());
+            throw new ExpectationException("Could not find the actions for $listingtype", $this->getSession());
         }
         $actionnode = $actionsnode->find('css', '.action-'.$action);
         if ($actionnode === null && $this->running_javascript()) {
             $actionsnode->find('css', 'a.toggle-display')->click();
             if ($actionnode) {
-                $actionnode = $node->find('css', '.action-'.$action);
+                $actionnode = $listingnode->find('css', '.action-'.$action);
             }
         }
         if (!$actionnode) {
index ff75c0b..d51aef5 100644 (file)
@@ -59,7 +59,7 @@ Feature: We can change the visibility of categories in the management interface.
     And I should see "Cat 1" in the "#category-listing ul.ml" "css_element"
     And I should not see "Cat 2" in the "#category-listing ul.ml" "css_element"
     And category in management listing should be visible "CAT1"
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Cat 1" in the "#category-listing ul.ml" "css_element"
@@ -95,7 +95,7 @@ Feature: We can change the visibility of categories in the management interface.
     And I should see "Cat 1" in the "#category-listing ul.ml" "css_element"
     And I should not see "Cat 2" in the "#category-listing ul.ml" "css_element"
     And category in management listing should be visible "CAT1"
-    And I click to toggle subcategories expansion "CAT1"
+    And I click to expand category "CAT1" in the management interface
     # AJAX loads sub category.
     And category in management listing should be visible "CAT1"
     And category in management listing should be visible "CAT2"
@@ -125,7 +125,7 @@ Feature: We can change the visibility of categories in the management interface.
     And I log in as "admin"
     And I go to the courses management page
     And I should see the "Course categories" management page
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Cat 1" in the "#category-listing ul.ml" "css_element"
@@ -200,7 +200,7 @@ Feature: We can change the visibility of categories in the management interface.
     And I log in as "admin"
     And I go to the courses management page
     And I should see the "Course categories" management page
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Cat 1" in the "#category-listing ul.ml" "css_element"
index 1b88c10..5dbc4f9 100644 (file)
@@ -65,7 +65,7 @@ Feature: Test category management actions
     And I should see "This category is empty"
     And I press "Cancel"
     # Redirect
-    And I should see the "Course categories" management page
+    And I should see the "Course categories and courses" management page
     And I should see "Cat 1" in the "#category-listing ul.ml" "css_element"
     And I should see "Cat 2" in the "#category-listing ul.ml" "css_element"
     And I should see "Cat 3" in the "#category-listing ul.ml" "css_element"
@@ -175,7 +175,7 @@ Feature: Test category management actions
     And I should see the "Course categories and courses" management page
     And I should see "Cat 1" in the "#course-listing h3" "css_element"
 
-  @javascript @MDL-31830
+  @javascript
   Scenario: Test that I can create a category and view it in the management interface
     Given the following "categories" exists:
       | name | category | idnumber |
index 3ece4d7..147617f 100644 (file)
@@ -71,20 +71,20 @@ Feature: Test we can resort categories in the management interface.
     And I go to the courses management page
     And I should see the "Course categories" management page
     And I click on "Master cat" "link"
-  # Redirect.
+    # Redirect.
     And I should see the "Course categories and courses" management page
-    And I should see "Re-sort categories" in the ".category-listing-actions" "css_element"
+    And I should see "Re-sort subcategories" in the ".category-listing-actions" "css_element"
     And I should see "By name" in the ".category-listing-actions" "css_element"
     And I should see "By idnumber" in the ".category-listing-actions" "css_element"
     And I click on <sortby> "link" in the ".category-listing-actions" "css_element"
-  # Redirect.
+    # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see category listing <cat1> before <cat2>
     And I should see category listing <cat2> before <cat3>
 
   Examples:
     | sortby | cat1 | cat2 | cat3 |
-    | "Re-sort categories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
+    | "Re-sort subcategories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
     | "By name"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
     | "By idnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
 
@@ -103,10 +103,10 @@ Feature: Test we can resort categories in the management interface.
     And I click on "Master cat" "link"
   # Redirect.
     And I should see the "Course categories and courses" management page
-    And I should see "Re-sort categories" in the ".category-listing-actions" "css_element"
+    And I should see "Re-sort subcategories" in the ".category-listing-actions" "css_element"
     And I should not see "By name" in the ".category-listing-actions" "css_element"
     And I should not see "By idnumber" in the ".category-listing-actions" "css_element"
-    And I click on "Re-sort categories" "link"
+    And I click on "Re-sort subcategories" "link"
     And I should see "By name" in the ".category-listing-actions" "css_element"
     And I should see "By idnumber" in the ".category-listing-actions" "css_element"
     And I click on <sortby> "link" in the ".category-listing-actions" "css_element"
@@ -117,7 +117,7 @@ Feature: Test we can resort categories in the management interface.
 
   Examples:
     | sortby | cat1 | cat2 | cat3 |
-    | "Re-sort categories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
+    | "Re-sort subcategories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
     | "By name"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
     | "By idnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
 
@@ -134,7 +134,7 @@ Feature: Test we can resort categories in the management interface.
     And I log in as "admin"
     And I go to the courses management page
     And I should see the "Course categories" management page
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect. We should a 1, 1a, 1b, 1c, 2.
     And I should see the "Course categories and courses" management page
     And I should see category listing "Cat 1" before "Cat 1a"
@@ -173,7 +173,7 @@ Feature: Test we can resort categories in the management interface.
     # Redirect. We should a 2, 1.
     And I should see the "Course categories and courses" management page
     And I should see category listing "Cat 2" before "Cat 1"
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect. We should a 2, 1, 1b, 1c, 1a.
     And I should see the "Course categories and courses" management page
     And I should see category listing "Cat 2" before "Cat 1"
@@ -194,7 +194,7 @@ Feature: Test we can resort categories in the management interface.
     And I log in as "admin"
     And I go to the courses management page
     And I should see the "Course categories" management page
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see category listing "Cat 1" before "Cat 1a"
@@ -212,16 +212,4 @@ Feature: Test we can resort categories in the management interface.
     And I should see category listing "Cat 1" before "Cat 1b"
     And I should see category listing "Cat 1b" before "Cat 1c"
     And I should see category listing "Cat 1c" before "Cat 1a"
-    And I should see category listing "Cat 1a" before "Cat 2"
-    And I click to move category "CATA" down one without highlight
-    # AJAX request. No redirect. We should a 1, 1b, 1c, 1a, 2.
-    And I should see category listing "Cat 1" before "Cat 1b"
-    And I should see category listing "Cat 1b" before "Cat 1c"
-    And I should see category listing "Cat 1c" before "Cat 1a"
-    And I should see category listing "Cat 1a" before "Cat 2"
-    And I click to move category "CATB" up one without highlight
-    # AJAX request. No redirect. We should a 1, 1b, 1c, 1a, 2.
-    And I should see category listing "Cat 1" before "Cat 1b"
-    And I should see category listing "Cat 1b" before "Cat 1c"
-    And I should see category listing "Cat 1c" before "Cat 1a"
     And I should see category listing "Cat 1a" before "Cat 2"
\ No newline at end of file
index 6ac0b5b..4f75808 100644 (file)
@@ -45,7 +45,7 @@ Feature: Course category management interface performs as expected
     And I should see "Courses" in the "#course-listing h3" "css_element"
     And I should see "Cat 1" in the "#category-listing" "css_element"
     And I should see "Please select a category" in the "#course-listing" "css_element"
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Course categories" in the "#category-listing h3" "css_element"
@@ -59,7 +59,7 @@ Feature: Course category management interface performs as expected
     And I should see the "Courses" management page
     And I should see "Cat 1" in the "#course-listing h3" "css_element"
     And I should see "Course 1" in the "#course-listing" "css_element"
-    And I click on "Course 1" course listing
+    And I click on course "Course 1" in the management interface
     # Redirect.
     And I should see the "Courses" management page with a course selected
     And I should see "Cat 1" in the "#course-listing h3" "css_element"
@@ -173,7 +173,7 @@ Feature: Course category management interface performs as expected
     And I should not see "Cat 1-1-2"
     And I should not see "Cat 2-1"
     And I should not see "Cat 2-1-1"
-    And I click to toggle subcategories expansion "CAT1"
+    And I click to expand category "CAT1" in the management interface
     # AJAX action - no redirect.
     And I should see "Cat 1"
     And I should see "Cat 2"
@@ -183,7 +183,7 @@ Feature: Course category management interface performs as expected
     And I should not see "Cat 1-1-2"
     And I should not see "Cat 2-1"
     And I should not see "Cat 2-1-1"
-    And I click to toggle subcategories expansion "CAT3"
+    And I click to expand category "CAT3" in the management interface
     # AJAX action - no redirect.
     And I should see "Cat 1"
     And I should see "Cat 2"
@@ -193,7 +193,7 @@ Feature: Course category management interface performs as expected
     And I should see "Cat 1-1-2"
     And I should not see "Cat 2-1"
     And I should not see "Cat 2-1-1"
-    And I click to toggle subcategories expansion "CAT2"
+    And I click to expand category "CAT2" in the management interface
     # AJAX action - no redirect.
     And I should see "Cat 1"
     And I should see "Cat 2"
@@ -203,7 +203,7 @@ Feature: Course category management interface performs as expected
     And I should see "Cat 1-1-2"
     And I should see "Cat 2-1"
     And I should not see "Cat 2-1-1"
-    And I click to toggle subcategories expansion "CAT7"
+    And I click to expand category "CAT7" in the management interface
     # AJAX action - no redirect.
     And I should see "Cat 1"
     And I should see "Cat 2"
@@ -213,7 +213,7 @@ Feature: Course category management interface performs as expected
     And I should see "Cat 1-1-2"
     And I should see "Cat 2-1"
     And I should see "Cat 2-1-1"
-    And I click to toggle subcategories expansion "CAT1"
+    And I click to expand category "CAT1" in the management interface
     # AJAX action - no redirect.
     And I should see "Cat 1"
     And I should see "Cat 2"
@@ -223,7 +223,7 @@ Feature: Course category management interface performs as expected
     And I should not see "Cat 1-1-2"
     And I should see "Cat 2-1"
     And I should see "Cat 2-1-1"
-    And I click to toggle subcategories expansion "CAT1"
+    And I click to expand category "CAT1" in the management interface
     # AJAX action - no redirect.
     And I should see "Cat 1"
     And I should see "Cat 2"
@@ -275,7 +275,7 @@ Feature: Course category management interface performs as expected
     And I click on "Master cat" "link"
     # Redirect.
     And I should see the "Course categories and courses" management page
-    And I click on "Re-sort categories" "link"
+    And I click on "Re-sort subcategories" "link"
     And I should see "By name" in the ".category-listing-actions" "css_element"
     And I should see "By idnumber" in the ".category-listing-actions" "css_element"
     And I click on <sortby> "link" in the ".category-listing-actions" "css_element"
@@ -286,7 +286,7 @@ Feature: Course category management interface performs as expected
 
   Examples:
     | sortby | cat1 | cat2 | cat3 |
-    | "Re-sort categories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
+    | "Re-sort subcategories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
     | "By name"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
     | "By idnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
 
@@ -653,7 +653,7 @@ Feature: Course category management interface performs as expected
     And I log in as "admin"
     And I go to the courses management page
     And I should see the "Course categories" management page
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     And I click on "edit" action for "Course 1" in management course listing
     # Redirect
     And I should see "Edit course settings"
index e0236d1..08ae96c 100644 (file)
@@ -16,7 +16,7 @@ Feature: We can change the visibility of courses in the management interface.
     And I log in as "admin"
     And I go to the courses management page
     And I should see the "Course categories" management page
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Cat 1" in the "#category-listing ul.ml" "css_element"
@@ -63,7 +63,7 @@ Feature: We can change the visibility of courses in the management interface.
     And I log in as "admin"
     And I go to the courses management page
     And I should see the "Course categories" management page
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Cat 1" in the "#category-listing ul.ml" "css_element"
index a0e8b14..1b03560 100644 (file)
@@ -18,7 +18,7 @@ Feature: Test we can resort course in the management interface.
     And I log in as "admin"
     And I go to the courses management page
     And I should see the "Course categories" management page
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Re-sort courses" in the ".course-listing-actions" "css_element"
@@ -51,7 +51,7 @@ Feature: Test we can resort course in the management interface.
     And I log in as "admin"
     And I go to the courses management page
     And I should see the "Course categories" management page
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Re-sort courses" in the ".course-listing-actions" "css_element"
@@ -87,7 +87,7 @@ Feature: Test we can resort course in the management interface.
     And I log in as "admin"
     And I go to the courses management page
     And I should see the "Course categories" management page
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Course categories" in the "#category-listing h3" "css_element"
@@ -124,7 +124,7 @@ Feature: Test we can resort course in the management interface.
     And I log in as "admin"
     And I go to the courses management page
     And I should see the "Course categories" management page
-    And I click on "Cat 1" category listing
+    And I click on category "Cat 1" in the management interface
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Course categories" in the "#category-listing h3" "css_element"
index 45c7f38..901388c 100644 (file)
@@ -1169,7 +1169,8 @@ class core_course_management_helper_test extends advanced_testcase {
             'moodle/course:enrolreview',
             'moodle/course:delete',
             'moodle/backup:backupcourse',
-            'moodle/restore:restorecourse'
+            'moodle/restore:restorecourse',
+            'moodle/site:accessallgroups'
         ), $roleid, $context->id);
 
         $details = \core_course\management\helper::get_course_detail_array(new course_in_list($course));
index 0421bb1..a870380 100644 (file)
Binary files a/course/yui/build/moodle-course-management/moodle-course-management-debug.js and b/course/yui/build/moodle-course-management/moodle-course-management-debug.js differ
index 6cdaf76..4a22850 100644 (file)
Binary files a/course/yui/build/moodle-course-management/moodle-course-management-min.js and b/course/yui/build/moodle-course-management/moodle-course-management-min.js differ
index ee7a052..cb60e73 100644 (file)
Binary files a/course/yui/build/moodle-course-management/moodle-course-management.js and b/course/yui/build/moodle-course-management/moodle-course-management.js differ
index 39585c2..e2a967e 100644 (file)
@@ -317,9 +317,10 @@ Category.prototype = {
         var console = this.get('console'),
             key,
             course;
+        Y.log('Changing categories course visibility', 'info', 'moodle-course-management');
         try {
             for (key in courses) {
-                if (courses.hasOwnProperty[key]) {
+                if (typeof courses[key] === 'object') {
                     course = console.getCourseById(courses[key].id);
                     if (course) {
                         if (courses[key].show === "1") {
@@ -346,9 +347,10 @@ Category.prototype = {
         var console = this.get('console'),
             key,
             category;
+        Y.log('Changing categories subcategory visibility', 'info', 'moodle-course-management');
         try {
             for (key in categories) {
-                if (categories.hasOwnProperty[key]) {
+                if (typeof categories[key] === 'object') {
                     category = console.getCategoryById(categories[key].id);
                     if (category) {
                         if (categories[key].show === "1") {