Grading bokchoy tests
This commit is contained in:
@@ -2,26 +2,6 @@
|
||||
Feature: CMS.Course Grading
|
||||
As a course author, I want to be able to configure how my course is graded
|
||||
|
||||
Scenario: Users can add grading ranges
|
||||
Given I have opened a new course in Studio
|
||||
And I am viewing the grading settings
|
||||
When I add "1" new grade
|
||||
Then I see I now have "3" grades
|
||||
|
||||
Scenario: Users can only have up to 5 grading ranges
|
||||
Given I have opened a new course in Studio
|
||||
And I am viewing the grading settings
|
||||
When I add "6" new grades
|
||||
Then I see I now have "5" grades
|
||||
|
||||
Scenario: When user removes a grade the remaining grades should be consistent
|
||||
Given I have opened a new course in Studio
|
||||
And I am viewing the grading settings
|
||||
When I add "2" new grade
|
||||
Then Grade list has "ABCF" grades
|
||||
And I delete a grade
|
||||
Then Grade list has "ABF" grades
|
||||
|
||||
# Cannot reliably make the delete button appear so using javascript instead
|
||||
Scenario: Users can delete grading ranges
|
||||
Given I have opened a new course in Studio
|
||||
|
||||
@@ -33,14 +33,6 @@ def delete_grade(step):
|
||||
world.browser.execute_script('document.getElementsByClassName("remove-button")[0].click()')
|
||||
|
||||
|
||||
@step(u'Grade list has "([^"]*)" grades$')
|
||||
def check_grade_values(step, grade_list): # pylint: disable=unused-argument
|
||||
visible_list = ''.join(
|
||||
[grade.text for grade in world.css_find('.letter-grade')]
|
||||
)
|
||||
assert_equal(visible_list, grade_list, 'Grade lists should be equal')
|
||||
|
||||
|
||||
@step(u'I see I now have "([^"]*)" grades$')
|
||||
def view_grade_slider(step, how_many):
|
||||
grade_slider_css = '.grade-specific-bar'
|
||||
|
||||
@@ -3,6 +3,9 @@ Course Grading Settings page.
|
||||
"""
|
||||
|
||||
from common.test.acceptance.pages.studio.settings import SettingsPage
|
||||
from common.test.acceptance.pages.studio.utils import press_the_notification_button
|
||||
from common.test.acceptance.pages.common.utils import click_css
|
||||
from bok_choy.promise import BrokenPromise
|
||||
|
||||
|
||||
class GradingPage(SettingsPage):
|
||||
@@ -11,6 +14,7 @@ class GradingPage(SettingsPage):
|
||||
"""
|
||||
|
||||
url_path = "settings/grading"
|
||||
grade_ranges = '.grades .grade-specific-bar'
|
||||
|
||||
def is_browser_on_page(self):
|
||||
return self.q(css='body.grading').present
|
||||
@@ -23,6 +27,15 @@ class GradingPage(SettingsPage):
|
||||
"""
|
||||
return self.q(css=selector)[0].text
|
||||
|
||||
@property
|
||||
def total_number_of_grades(self):
|
||||
"""
|
||||
Gets total number of grades present in the grades bar
|
||||
returns: Single number length of grades
|
||||
"""
|
||||
self.wait_for_element_visibility(self.grade_ranges, 'Grades are visible')
|
||||
return len(self.q(css=self.grade_ranges))
|
||||
|
||||
def add_new_grade(self):
|
||||
"""
|
||||
Add new grade
|
||||
@@ -40,6 +53,13 @@ class GradingPage(SettingsPage):
|
||||
self.wait_for_ajax()
|
||||
self.save_changes()
|
||||
|
||||
def remove_grades(self, number_of_grades):
|
||||
"""
|
||||
Remove grade ranges from grades bar.
|
||||
"""
|
||||
for _ in range(number_of_grades):
|
||||
self.browser.execute_script('document.getElementsByClassName("remove-button")[0].click()')
|
||||
|
||||
def remove_all_grades(self):
|
||||
"""
|
||||
Removes all grades
|
||||
@@ -47,6 +67,36 @@ class GradingPage(SettingsPage):
|
||||
while len(self.q(css='.remove-button')) > 0:
|
||||
self.remove_grade()
|
||||
|
||||
@property
|
||||
def grade_letters(self):
|
||||
"""
|
||||
Get names of grade ranges.
|
||||
Returns: A list containing names of the grade ranges.
|
||||
"""
|
||||
return self.q(css='.letter-grade').text
|
||||
|
||||
def click_add_grade(self):
|
||||
"""
|
||||
Clicks to add a grade
|
||||
"""
|
||||
click_css(self, '.new-grade-button', require_notification=False)
|
||||
|
||||
def is_grade_added(self, length):
|
||||
"""
|
||||
Checks to see if grade is added by comparing number of grades after the addition
|
||||
Returns: True if grade is added
|
||||
Returns: False if grade is not added
|
||||
"""
|
||||
try:
|
||||
self.wait_for(
|
||||
lambda: len(self.q(css=self.grade_ranges)) == length + 1,
|
||||
description="Grades are added",
|
||||
timeout=3
|
||||
)
|
||||
return True
|
||||
except BrokenPromise:
|
||||
return False
|
||||
|
||||
def add_new_assignment_type(self):
|
||||
"""
|
||||
Add New Assignment type
|
||||
@@ -102,3 +152,16 @@ class GradingPage(SettingsPage):
|
||||
"""
|
||||
while len(self.q(css='.remove-grading-data')) > 0:
|
||||
self.delete_assignment_type()
|
||||
|
||||
def save(self):
|
||||
"""
|
||||
Click on save settings button.
|
||||
"""
|
||||
press_the_notification_button(self, "Save")
|
||||
|
||||
def refresh_and_wait_for_load(self):
|
||||
"""
|
||||
Refresh the page and wait for all resources to load.
|
||||
"""
|
||||
self.browser.refresh()
|
||||
self.wait_for_page()
|
||||
|
||||
95
common/test/acceptance/tests/studio/test_studio_grading.py
Normal file
95
common/test/acceptance/tests/studio/test_studio_grading.py
Normal file
@@ -0,0 +1,95 @@
|
||||
"""
|
||||
Acceptance tests for grade settings in Studio.
|
||||
"""
|
||||
from common.test.acceptance.pages.studio.settings_graders import GradingPage
|
||||
from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest
|
||||
from common.test.acceptance.fixtures.course import XBlockFixtureDesc
|
||||
|
||||
|
||||
class GradingPageTest(StudioCourseTest):
|
||||
"""
|
||||
Bockchoy tests to add/edit grade settings in studio.
|
||||
"""
|
||||
|
||||
url = None
|
||||
|
||||
def setUp(self): # pylint: disable=arguments-differ
|
||||
super(GradingPageTest, self).setUp()
|
||||
self.grading_page = GradingPage(
|
||||
self.browser,
|
||||
self.course_info['org'],
|
||||
self.course_info['number'],
|
||||
self.course_info['run']
|
||||
)
|
||||
|
||||
self.grading_page.visit()
|
||||
|
||||
def populate_course_fixture(self, course_fixture):
|
||||
"""
|
||||
Return a test course fixture.
|
||||
"""
|
||||
course_fixture.add_children(
|
||||
XBlockFixtureDesc("chapter", "Test Section").add_children(
|
||||
XBlockFixtureDesc("sequential", "Test Subsection").add_children(
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
def test_add_grade_range(self):
|
||||
"""
|
||||
Scenario: Users can add grading ranges
|
||||
Given I have opened a new course in Studio
|
||||
And I am viewing the grading settings
|
||||
When I add "1" new grade
|
||||
Then I see I now have "3"
|
||||
"""
|
||||
length = self.grading_page.total_number_of_grades
|
||||
self.grading_page.click_add_grade()
|
||||
self.assertTrue(self.grading_page.is_grade_added(length))
|
||||
self.grading_page.save()
|
||||
self.grading_page.refresh_and_wait_for_load()
|
||||
total_number_of_grades = self.grading_page.total_number_of_grades
|
||||
self.assertEqual(total_number_of_grades, 3)
|
||||
|
||||
def test_staff_can_add_up_to_five_grades_only(self):
|
||||
"""
|
||||
Scenario: Users can only have up to 5 grading ranges
|
||||
Given I have opened a new course in Studio
|
||||
And I am viewing the grading settings
|
||||
When I try to add more than 5 grades
|
||||
Then I see I have only "5" grades
|
||||
"""
|
||||
for grade_ordinal in range(1, 5):
|
||||
length = self.grading_page.total_number_of_grades
|
||||
self.grading_page.click_add_grade()
|
||||
# By default page has 2 grades, so greater than 3 means, attempt is made to add 6th grade
|
||||
if grade_ordinal > 3:
|
||||
self.assertFalse(self.grading_page.is_grade_added(length))
|
||||
else:
|
||||
self.assertTrue(self.grading_page.is_grade_added(length))
|
||||
self.grading_page.save()
|
||||
self.grading_page.refresh_and_wait_for_load()
|
||||
total_number_of_grades = self.grading_page.total_number_of_grades
|
||||
self.assertEqual(total_number_of_grades, 5)
|
||||
|
||||
def test_grades_remain_consistent(self):
|
||||
"""
|
||||
Scenario: When user removes a grade the remaining grades should be consistent
|
||||
Given I have opened a new course in Studio
|
||||
And I am viewing the grading settings
|
||||
When I add "2" new grade
|
||||
Then Grade list has "A,B,C,F" grades
|
||||
And I delete a grade
|
||||
Then Grade list has "A,B,F" grades
|
||||
"""
|
||||
for _ in range(2):
|
||||
length = self.grading_page.total_number_of_grades
|
||||
self.grading_page.click_add_grade()
|
||||
self.assertTrue(self.grading_page.is_grade_added(length))
|
||||
self.grading_page.save()
|
||||
grades_alphabets = self.grading_page.grade_letters
|
||||
self.assertEqual(grades_alphabets, ['A', 'B', 'C', 'F'])
|
||||
self.grading_page.remove_grades(1)
|
||||
self.grading_page.save()
|
||||
grades_alphabets = self.grading_page.grade_letters
|
||||
self.assertEqual(grades_alphabets, ['A', 'B', 'F'])
|
||||
Reference in New Issue
Block a user