class TestStaxingTutorTeacher(unittest.TestCase): """Staxing case tests for Teacher.""" book_sections = None class_start_end_dates = None def setUp(self): """Pretest settings.""" self.teacher = Teacher(use_env_vars=True, driver_type=DRIVER) self.teacher.username = os.getenv('TEACHER_USER_MULTI', self.teacher.username) self.teacher.set_window_size(height=700, width=1200) self.teacher.login() courses = self.teacher.get_course_list() if len(courses) < 1: raise ValueError('No course available for selection') course = courses[randint(0, len(courses) - 1)] self.teacher.select_course(title=course.get_attribute('data-title')) if not self.__class__.book_sections: self.__class__.book_sections = self.teacher.get_book_sections() if not self.__class__.class_start_end_dates: self.__class__.class_start_end_dates = \ self.teacher.get_course_begin_end() self.book_sections = self.__class__.book_sections self.start_end = self.__class__.class_start_end_dates def tearDown(self): """Test destructor.""" try: self.teacher.delete() except Exception: pass @pytest.mark.skipif(str(301) not in TESTS, reason='Excluded') def test_add_reading_assignment_individual_publish_301(self): """Build reading assignments. Type: reading Sections: individualized Action: publish """ assignment_title = 'Reading-%s' % Assignment.rword(5) left_delta = randint(0, 20) left = datetime.date.today() + datetime.timedelta(left_delta) start_date_1 = self.teacher.date_string(day_delta=left_delta) start_date_2 = self.teacher.date_string(day_delta=left_delta + 1) start_date_3 = self.teacher.date_string(day_delta=left_delta + 2) start_date_4 = self.teacher.date_string(day_delta=left_delta + 3) if not self.teacher.date_is_valid(left): start_date_1 = (self.class_start_end_dates[0]) \ .strftime('%m/%d/%Y') start_date_2 = \ (self.class_start_end_dates[0] + datetime.timedelta(1)) \ .strftime('%m/%d/%Y') start_date_3 = \ (self.class_start_end_dates[0] + datetime.timedelta(2)) \ .strftime('%m/%d/%Y') start_date_4 = \ (self.class_start_end_dates[0] + datetime.timedelta(3)) \ .strftime('%m/%d/%Y') right_delta = left_delta + randint(1, 10) right = datetime.date.today() + datetime.timedelta(right_delta) end_date_1 = self.teacher.date_string(day_delta=right_delta) end_date_2 = self.teacher.date_string(day_delta=right_delta + 1) end_date_3 = self.teacher.date_string(day_delta=right_delta + 2) end_date_4 = self.teacher.date_string(day_delta=right_delta + 3) if not self.teacher.date_is_valid(right): end_date_1 = \ (self.class_start_end_dates[1] - datetime.timedelta(3)) \ .strftime('%m/%d/%Y') end_date_2 = \ (self.class_start_end_dates[1] - datetime.timedelta(2)) \ .strftime('%m/%d/%Y') end_date_3 = \ (self.class_start_end_dates[1] - datetime.timedelta(1)) \ .strftime('%m/%d/%Y') end_date_4 = \ (self.class_start_end_dates[1]) \ .strftime('%m/%d/%Y') print('Left: %s Right: %s' % (left, right)) start_time_2 = '6:30 am' end_time_2 = '11:59 pm' reading_start = randint(0, (len(self.book_sections) - 1)) reading_end = reading_start + randint(1, 5) reading_list = self.book_sections[reading_start:reading_end] sections = self.teacher.get_course_sections() assign_sections = {} if len(sections) >= 1 and sections[0]: assign_sections[sections[0]] = (start_date_1, end_date_1) if len(sections) >= 2 and sections[1]: assign_sections[sections[1]] = ((start_date_2, start_time_2), (end_date_2, end_time_2)) if len(sections) >= 3 and sections[2]: assign_sections[sections[2]] = (start_date_3, end_date_3) if len(sections) >= 4 and sections[3]: assign_sections[sections[3]] = (start_date_4, end_date_4) for number, section in enumerate(sections): assign_sections[section] = ((start_date_1, start_time_2), (end_date_1, end_time_2)) self.teacher.add_assignment( assignment='reading', args={ 'title': assignment_title, 'description': 'Staxing test reading - individual periods - ' + 'publish', 'periods': assign_sections, 'reading_list': reading_list, 'status': 'publish', 'break_point': None, }) assert('course' in self.teacher.current_url()), \ 'Not at dashboard' print(self.teacher.current_url()) self.teacher.rotate_calendar(end_date_1) reading = self.teacher.find(By.XPATH, '//label[text()="%s"]' % assignment_title) time.sleep(5.0) assert (reading), '%s not publishing on %s' % (assignment_title, end_date_1) @pytest.mark.skipif(str(302) not in TESTS, reason='Excluded') def test_add_reading_assignment_all_publish_302(self): """Build reading assignments.""" # Reading, all periods, publish assignment_title = 'Reading-%s' % Assignment.rword(5) left_delta = randint(0, 20) left = datetime.date.today() + datetime.timedelta(left_delta) # start_date_1 = self.teacher.date_string(day_delta=left_delta) start_date_2 = self.teacher.date_string(day_delta=left_delta + 1) if not self.teacher.date_is_valid(left): # start_date_1 = \ # (self.class_start_end_dates[0]) \ # .strftime('%m/%d/%Y') start_date_2 = \ (self.class_start_end_dates[0] + datetime.timedelta(1)) \ .strftime('%m/%d/%Y') right_delta = left_delta + randint(1, 10) right = datetime.date.today() + datetime.timedelta(right_delta) end_date_1 = self.teacher.date_string(day_delta=right_delta) end_date_2 = self.teacher.date_string(day_delta=right_delta + 1) if not self.teacher.date_is_valid(right): end_date_1 = \ (self.class_start_end_dates[1] - datetime.timedelta(2)) \ .strftime('%m/%d/%Y') end_date_2 = \ (self.class_start_end_dates[1] - datetime.timedelta(1)) \ .strftime('%m/%d/%Y') print('Left: %s Right: %s' % (left, right)) # self.book_sections = self.teacher.get_book_sections() reading_start = randint(0, (len(self.book_sections) - 1)) reading_end = reading_start + randint(1, 5) reading_list = self.book_sections[reading_start:reading_end] self.teacher.add_assignment( assignment='reading', args={ 'title': assignment_title, 'description': 'Staxing test reading - all periods - publish', 'periods': { # '1st': (start_date_1, end_date_1), 'all': (start_date_2, end_date_2), }, 'reading_list': reading_list, 'status': 'publish', 'break_point': None, }) assert('course' in self.teacher.current_url()), \ 'Not at dashboard' time.sleep(2.0) self.teacher.rotate_calendar(end_date_1) reading = self.teacher.find(By.XPATH, '//label[text()="%s"]' % assignment_title) time.sleep(5.0) assert (reading), '%s not publishing on %s' % (assignment_title, end_date_2) @pytest.mark.skipif(str(303) not in TESTS, reason='Excluded') def test_add_reading_assignment_individual_draft_303(self): """Build reading assignments.""" # Reading, individual periods, draft assignment_title = 'Reading-%s' % Assignment.rword(5) left_delta = randint(0, 20) left = datetime.date.today() + datetime.timedelta(left_delta) '''start_date_1 = self.teacher.date_string(day_delta=left_delta) start_date_2 = self.teacher.date_string(day_delta=left_delta + 1) start_date_3 = self.teacher.date_string(day_delta=left_delta + 2) if not self.teacher.date_is_valid(left): start_date_1 = \ (self.class_start_end_dates[0]).strftime('%m/%d/%Y') start_date_2 = \ (self.class_start_end_dates[0] + datetime.timedelta(1)) \ .strftime('%m/%d/%Y') start_date_3 = \ (self.class_start_end_dates[0] + datetime.timedelta(2)) \ .strftime('%m/%d/%Y')''' right_delta = left_delta + randint(1, 10) right = datetime.date.today() + datetime.timedelta(right_delta) end_date_1 = self.teacher.date_string(day_delta=right_delta) # end_date_2 = self.teacher.date_string(day_delta=right_delta + 1) end_date_3 = self.teacher.date_string(day_delta=right_delta + 2) if not self.teacher.date_is_valid(right): end_date_1 = \ (self.class_start_end_dates[1] - datetime.timedelta(2)) \ .strftime('%m/%d/%Y') # end_date_2 = \ # (self.class_start_end_dates[1] - datetime.timedelta(1)) \ # .strftime('%m/%d/%Y') end_date_3 = \ (self.class_start_end_dates[1]) \ .strftime('%m/%d/%Y') print('Left: %s Right: %s' % (left, right)) # self.book_sections = self.teacher.get_book_sections() reading_start = randint(0, (len(self.book_sections) - 1)) reading_end = reading_start + randint(1, 5) reading_list = self.book_sections[reading_start:reading_end] sections = self.teacher.get_course_sections() periods = {} for index, section in enumerate(sections): periods[section] = \ (self.teacher.date_string(day_delta=left_delta + index), self.teacher.date_string(day_delta=right_delta + index)) self.teacher.add_assignment( assignment='reading', args={ 'title': assignment_title, 'description': 'Staxing test reading - individual periods ' + '- draft', 'periods': periods, 'reading_list': reading_list, 'status': 'draft', 'break_point': None, }) assert('course' in self.teacher.current_url()), \ 'Not at dashboard' self.teacher.rotate_calendar(end_date_1) reading = self.teacher.find(By.XPATH, '//label[text()="%s"]' % assignment_title) time.sleep(5.0) assert (reading), '%s not publishing on %s' % (assignment_title, end_date_3) @pytest.mark.skipif(str(304) not in TESTS, reason='Excluded') def test_add_reading_assignment_all_draft_304(self): """Build reading assignments.""" # Reading, all periods, draft assignment_title = 'Reading-%s' % Assignment.rword(5) left_delta = randint(0, 20) left = datetime.date.today() + datetime.timedelta(left_delta) start_date_1 = self.teacher.date_string(day_delta=left_delta) if not self.teacher.date_is_valid(left): start_date_1 = \ (self.class_start_end_dates[0]) \ .strftime('%m/%d/%Y') right_delta = left_delta + randint(1, 10) right = datetime.date.today() + datetime.timedelta(right_delta) end_date_1 = self.teacher.date_string(day_delta=right_delta) if not self.teacher.date_is_valid(right): end_date_1 = \ (self.class_start_end_dates[1] - datetime.timedelta(2)) \ .strftime('%m/%d/%Y') print('Left: %s Right: %s' % (left, right)) # self.book_sections = self.teacher.get_book_sections() reading_start = randint(0, (len(self.book_sections) - 1)) reading_end = reading_start + randint(1, 5) reading_list = self.book_sections[reading_start:reading_end] self.teacher.add_assignment( assignment='reading', args={ 'title': assignment_title, 'description': 'Staxing test reading - all periods - draft', 'periods': { 'all': (start_date_1, end_date_1), }, 'reading_list': reading_list, 'status': 'draft', 'break_point': None, }) assert('course' in self.teacher.current_url()), \ 'Not at dashboard' self.teacher.rotate_calendar(end_date_1) reading = self.teacher.find(By.XPATH, '//label[text()="%s"]' % assignment_title) time.sleep(5.0) assert (reading), '%s not publishing on %s' % (assignment_title, end_date_1) @pytest.mark.skipif(str(305) not in TESTS, reason='Excluded') def test_add_reading_assignment_one_cancel_305(self): """Build reading assignments.""" # Reading, one period, cancel assignment_title = 'Reading-%s' % Assignment.rword(5) left_delta = randint(0, 20) left = datetime.date.today() + datetime.timedelta(left_delta) start_date_1 = self.teacher.date_string(day_delta=left_delta) if not self.teacher.date_is_valid(left): start_date_1 = \ (self.class_start_end_dates[0]) \ .strftime('%m/%d/%Y') right_delta = left_delta + randint(1, 10) right = datetime.date.today() + datetime.timedelta(right_delta) end_date_1 = self.teacher.date_string(day_delta=right_delta) if not self.teacher.date_is_valid(right): end_date_1 = \ (self.class_start_end_dates[1] - datetime.timedelta(2)) \ .strftime('%m/%d/%Y') print('Left: %s Right: %s' % (left, right)) # self.book_sections = self.teacher.get_book_sections() reading_start = randint(0, (len(self.book_sections) - 1)) reading_end = reading_start + randint(1, 5) reading_list = self.book_sections[reading_start:reading_end] sections = self.teacher.get_course_sections() if not isinstance(sections, list): sections = [sections] self.teacher.add_assignment(assignment='reading', args={ 'title': assignment_title, 'description': 'Staxing test reading - cancel', 'periods': { sections[0]: (start_date_1, end_date_1), }, 'reading_list': reading_list, 'status': 'cancel', 'break_point': None, }) assert('course' in self.teacher.current_url()), \ 'Not at dashboard' self.teacher.rotate_calendar(end_date_1) time.sleep(5.0) with pytest.raises(NoSuchElementException): self.teacher.find(By.XPATH, '//label[text()="%s"]' % assignment_title) @pytest.mark.skipif(str(306) not in TESTS, reason='Excluded') def test_change_assignment_306(self): """No test placeholder.""" pass @pytest.mark.skipif(str(307) not in TESTS, reason='Excluded') def test_delete_assignment_307(self): """No test placeholder.""" assignment_title = 'Reading-%s' % Assignment.rword(5) left_delta = randint(0, 20) left = datetime.date.today() + datetime.timedelta(left_delta) start_date = self.teacher.date_string(day_delta=left_delta) if not self.teacher.date_is_valid(left): start_date = \ (self.class_start_end_dates[0]) \ .strftime('%m/%d/%Y') right_delta = left_delta + randint(1, 10) right = datetime.date.today() + datetime.timedelta(right_delta) end_date = self.teacher.date_string(day_delta=right_delta) if not self.teacher.date_is_valid(right): end_date = \ (self.class_start_end_dates[1] - datetime.timedelta(2)) \ .strftime('%m/%d/%Y') self.teacher.add_assignment(assignment='reading', args={ 'title': assignment_title, 'periods': { 'all': (start_date, end_date), }, 'reading_list': ['1', '1.1'], 'status': 'publish', 'break_point': None, }) assert('course' in self.teacher.current_url()), \ 'Not at dashboard' self.teacher.rotate_calendar(end_date) reading = self.teacher.find(By.XPATH, '//label[text()="%s"]' % assignment_title) print('Waiting for publish') time.sleep(5.0) assert(reading), \ '%s not publishing on %s' % (assignment_title, end_date) self.teacher.delete_assignment(assignment='reading', args={ 'title': assignment_title, 'periods': { 'all': (start_date, end_date), }, }) self.teacher.rotate_calendar(end_date) time.sleep(5.0) try: self.teacher.find(By.XPATH, '//label[text()="%s"]' % assignment_title) assert (False), '%s still exists' % assignment_title except Exception: pass @pytest.mark.skipif(str(308) not in TESTS, reason='Excluded') def test_goto_menu_item_308(self): """No test placeholder.""" pass @pytest.mark.skipif(str(309) not in TESTS, reason='Excluded') def test_goto_calendar_309(self): """No test placeholder.""" pass @pytest.mark.skipif(str(310) not in TESTS, reason='Excluded') def test_goto_performance_forecast_310(self): """No test placeholder.""" self.teacher.goto_performance_forecast() @pytest.mark.skipif(str(311) not in TESTS, reason='Excluded') def test_goto_student_scores_311(self): """No test placeholder.""" self.teacher.goto_student_scores() @pytest.mark.skipif(str(312) not in TESTS, reason='Excluded') def test_goto_course_roster_312(self): """No test placeholder.""" self.teacher.goto_course_roster() @pytest.mark.skipif(str(313) not in TESTS, reason='Excluded') def test_goto_course_settings_313(self): """No test placeholder.""" self.teacher.goto_course_settings() @pytest.mark.skipif(str(314) not in TESTS, reason='Excluded') def test_add_course_section_314(self): """Add a course section to a class.""" section_name = 'New Section' self.teacher.add_course_section(section_name) classes = self.teacher.find_all(By.CSS_SELECTOR, 'a[role*="tab"]') section_names = [] for section in classes: section_names.append(section.get_attribute('innerHTML')) assert(section_name in section_names), \ '%s not in %s' % (section_name, section_names) self.teacher.goto_course_settings() self.teacher.find @pytest.mark.skipif(str(315) not in TESTS, reason='Excluded') def test_get_enrollment_code_315(self): """No test placeholder.""" code = self.teacher.get_enrollment_code() assert('enroll' in code and re.search('\d{6}', code) is not None), \ '%s is not the correct enrollment URL' % code @pytest.mark.skipif(str(316) not in TESTS, reason='Excluded') def test_teacher_handle_modals_316(self): self.teacher.enable_debug_mode() self.teacher.close_beta_windows() time.sleep(3) assert ("modal closed")