class TestStaxingContentQA(unittest.TestCase): """Staxing case tests.""" def setUp(self): """Pretest settings.""" self.content = ContentQA(use_env_vars=True, driver_type=DRIVER) self.content.set_window_size(height=700, width=1200) def tearDown(self): """Test destructor.""" try: self.content.delete() except Exception: pass
class TestContentPreparationAndImport(unittest.TestCase): """CC1.03 - Content Preparation and Import.""" def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() if not LOCAL_RUN: self.content = ContentQA(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) else: self.content = ContentQA(use_env_vars=True) def tearDown(self): """Test destructor.""" if not LOCAL_RUN: self.ps.update_job(job_id=str(self.content.driver.session_id), **self.ps.test_updates) try: self.content.delete() except: pass # Case C7603 - 001 - Content Analyst | Import content into Tutor @pytest.mark.skipif(str(7603) not in TESTS, reason='Excluded') def test_content_analyst_import_content_into_tutor_7603(self): """Import content into Tutor. Steps: Go to tutor-qa login as content Select Content Analyst from the dropdown menu on the name Click on Ecosystems in the header Click "Download Manifest" for the desired course Scroll down and click Import a new Ecosystem button. Click "Choose File" Select the downloaded In comment section add today's date and your name. Eg: 2016-03-03 Kajal Click on the button Import Now wait for at most 5 mins. Expected Result: The message "Ecosystem import job queued" appears at the top """ self.ps.test_updates['name'] = 'cc1.03.001' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['cc1', 'cc1.03', 'cc1.03.001', '7603'] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element(By.LINK_TEXT, "Content Analyst").click() self.content.page.wait_for_page_load() self.content.driver.find_element(By.LINK_TEXT, "Ecosystems").click() # download a manifest to test with self.content.wait.until( expect.visibility_of_element_located( (By.LINK_TEXT, "Download Manifest"))).click() # import a new ecosystem self.content.driver.execute_script( "window.scrollTo(0, document.body.scrollHeight);") self.content.driver.find_element(By.LINK_TEXT, "Import a new Ecosystem").click() # find a downloaded manifest home = os.getenv("HOME") files = os.listdir(home + '/Downloads') file = '' for i in range(len(files)): if (files[i][-4:] == '.yml'): file = files[i] break else: if i == len(files) - 1: print('no .yml file found in downloads') raise Exception self.content.wait.until( expect.visibility_of_element_located( (By.ID, "ecosystem_manifest"))).send_keys(home + '/Downloads/' + file) self.content.wait.until( expect.visibility_of_element_located( (By.ID, "ecosystem_comments"))).send_keys( str(datetime.date.today()) + ' automated-contentqa') self.content.driver.find_element(By.XPATH, "//input[@type='submit']").click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, '//div[contains(@class,"alert-info")]'))) self.ps.test_updates['passed'] = True # Case C7604 - 002 - Admin | Import content into Tutor @pytest.mark.skipif(str(7604) not in TESTS, reason='Excluded') def test_admin_import_content_into_tutor_7604(self): """Import content into Tutor. Steps: Select Customer Analyst from the dropdown menu on the name Click on Ecosystems in the header Click "Download Manifest" for the desired course Scroll down and click Import a new Ecosystem button. Click "Choose File" Select the downloaded file In comment section add today's date and your name. Eg: 2016-03-03 Kajal Click on the button Import Now wait for at most 5 mins. Expected Result: The message "Ecosystem import job queued" appears at the top """ self.ps.test_updates['name'] = 'cc1.03.002' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['cc1', 'cc1.03', 'cc1.03.002', '7604'] self.ps.test_updates['passed'] = False # Test steps and verification assertions if not LOCAL_RUN: admin = Admin( use_env_vars=True, existing_driver=self.content.driver, pasta_user=self.ps, capabilities=self.desired_capabilities, ) else: admin = Admin( use_env_vars=True, existing_driver=self.content.driver, ) admin.login() admin.open_user_menu() admin.driver.find_element(By.LINK_TEXT, "Content Analyst").click() admin.page.wait_for_page_load() admin.driver.find_element(By.LINK_TEXT, "Ecosystems").click() # download a manifest to test with admin.wait.until( expect.visibility_of_element_located( (By.LINK_TEXT, "Download Manifest"))).click() # import a new ecosystem admin.driver.execute_script( "window.scrollTo(0, document.body.scrollHeight);") admin.driver.find_element(By.LINK_TEXT, "Import a new Ecosystem").click() # find a downloaded manifest home = os.getenv("HOME") files = os.listdir(home + '/Downloads') file = '' for i in range(len(files)): if (files[i][-4:] == '.yml'): file = files[i] break else: if i == len(files) - 1: print('no .yml file found in downloads') raise Exception admin.wait.until( expect.visibility_of_element_located( (By.ID, "ecosystem_manifest"))).send_keys(home + '/Downloads/' + file) admin.wait.until( expect.visibility_of_element_located( (By.ID, "ecosystem_comments"))).send_keys( str(datetime.date.today()) + ' automated-admin') admin.driver.find_element(By.XPATH, "//input[@type='submit']").click() admin.wait.until( expect.visibility_of_element_located( (By.XPATH, '//div[contains(@class,"alert-info")]'))) admin.delete() self.ps.test_updates['passed'] = True # Case C7962 - 003 - Content Analyst| Verify question availability for # CC-Derived Biology @pytest.mark.skipif(str(7962) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_bio_7962(self): """Verify question availability for CC-Derived Biology. Steps: Click QA content Click Available Books Select CC-Derived Biology Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.003' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['cc1', 'cc1.03', 'cc1.03.003', '7962'] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element(By.PARTIAL_LINK_TEXT, "QA Content").click() self.content.page.wait_for_page_load() self.content.driver.find_element(By.ID, "available-books").click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text(),'Biology with Concept Coach')]") self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']").click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]" ))).click() self.ps.test_updates['passed'] = True # Case C7963 - 004 - Content Analyst| Verify question availability for # CC-Derived College Physics @pytest.mark.skipif(str(7963) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_phys_7963(self): """Verify question availability for CC-Derived College Physics. Steps: Click QA content Click Available Books Select CC-Derived College Physics Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.004' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['cc1', 'cc1.03', 'cc1.03.004', '7963'] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element(By.PARTIAL_LINK_TEXT, "QA Content").click() self.content.page.wait_for_page_load() self.content.driver.find_element(By.ID, "available-books").click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text(),'Physics with Concept Coach')]") self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']").click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]" ))).click() self.ps.test_updates['passed'] = True # Case C7964 - 005 - Content Analyst| Verify question availability for # CC-Derived Concepts of Biology @pytest.mark.skipif(str(7964) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_avilability_for_concep_7964(self): """Verify question availability for CC-Derived Concepts of Biology. Steps: Click QA content Click Available Books Select CC-Derived Concepts of Biology Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.005' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['cc1', 'cc1.03', 'cc1.03.005', '7964'] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element(By.PARTIAL_LINK_TEXT, "QA Content").click() self.content.page.wait_for_page_load() self.content.driver.find_element(By.ID, "available-books").click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text(),'Concepts of Biology with Concept Coach')]" ) self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']").click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]" ))).click() self.ps.test_updates['passed'] = True # Case C7965 - 006 - Content Analyst| Verify question availability for # CC-Derived Anatomy & Physiology @pytest.mark.skipif(str(7965) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_ap_7965(self): """Verify question availability for CC-Derived Anatomy & Physiology. Steps: Click QA content Click Available Books Select CC-Derived Anatomy and Physiology Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.006' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['cc1', 'cc1.03', 'cc1.03.006', '7965'] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element(By.PARTIAL_LINK_TEXT, "QA Content").click() self.content.page.wait_for_page_load() self.content.driver.find_element(By.ID, "available-books").click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text()," + "'Anatomy & Physiology with Concept Coach')]") self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']").click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]" ))).click() self.ps.test_updates['passed'] = True # Case C7966 - 007 - Content Analyst| Verify question availability for # CC-Derived Macroeconomics @pytest.mark.skipif(str(7966) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_macro_7966(self): """Verify question availability for CC-Derived Macroeconomics. Steps: Click QA content Click Available Books Select CC-Derived Macroeconomics Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.007' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['cc1', 'cc1.03', 'cc1.03.007', '7966'] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element(By.PARTIAL_LINK_TEXT, "QA Content").click() self.content.page.wait_for_page_load() self.content.driver.find_element(By.ID, "available-books").click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text(),'Macroeconomics with Concept Coach')]") self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']").click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]" ))).click() self.ps.test_updates['passed'] = True # Case C7967 - 008 - Content Analyst| Verify question availability for # CC-Derived Microeconomics @pytest.mark.skipif(str(7967) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_micro_7967(self): """Verify question availability for CC-Derived Microeconomics. Steps: Click QA content Click Available Books Select CC-Derived Microeconomics Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.008' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['cc1', 'cc1.03', 'cc1.03.008', '7967'] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element(By.PARTIAL_LINK_TEXT, "QA Content").click() self.content.page.wait_for_page_load() self.content.driver.find_element(By.ID, "available-books").click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text(),'Microeconomics with Concept Coach')]") self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']").click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]" ))).click() self.ps.test_updates['passed'] = True # Case C7968 - 009 - Content Analyst| Verify question availability for # CC-Derived Principles of Economics @pytest.mark.skipif(str(7968) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_princ_7968(self): """Verify question availability for CC-Derived Principles of Economics. Steps: Click QA content Click Available Books Select CC-Derived Principles of Economics Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.009' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['cc1', 'cc1.03', 'cc1.03.009', '7968'] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element(By.PARTIAL_LINK_TEXT, "QA Content").click() self.content.page.wait_for_page_load() self.content.driver.find_element(By.ID, "available-books").click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text()," + "'Principles of Economics with Concept Coach')]") self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']").click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]" ))).click() self.ps.test_updates['passed'] = True # Case C7969 - 010 - Content Analyst| Verify question availability for # CC-Derived Introduction to Sociology @pytest.mark.skipif(str(7969) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_soci_7969(self): """Verify question availability for CC-Der Introduction to Sociology. Steps: Click QA content Click Available Books Select CC-Derived Introcution to Sociology Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.010' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['cc1', 'cc1.03', 'cc1.03.010', '7969'] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element(By.PARTIAL_LINK_TEXT, "QA Content").click() self.content.page.wait_for_page_load() self.content.driver.find_element(By.ID, "available-books").click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text()," + "'Introduction to Sociology 2e with Concept Coach')]") self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']").click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]" ))).click() self.ps.test_updates['passed'] = True
class TestContentPreparationAndImport(unittest.TestCase): """CC1.03 - Content Preparation and Import.""" def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() self.content = ContentQA( use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities, ) def tearDown(self): """Test destructor.""" self.ps.update_job( job_id=str(self.content.driver.session_id), **self.ps.test_updates ) try: self.content.delete() except: pass # Case C7603 - 001 - Content Analyst | Import content into Tutor @pytest.mark.skipif(str(7603) not in TESTS, reason='Excluded') def test_content_analyst_import_content_into_tutor_7603(self): """Import content into Tutor. Steps: Go to tutor-qa login as content Select Content Analyst from the dropdown menu on the name Click on Ecosystems in the header Click "Download Manifest" for the desired course Scroll down and click Import a new Ecosystem button. Click "Choose File" Select the downloaded In comment section add today's date and your name. Eg: 2016-03-03 Kajal Click on the button Import Now wait for at most 5 mins. Expected Result: The message "Ecosystem import job queued" appears at the top """ self.ps.test_updates['name'] = 'cc1.03.001' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 'cc1', 'cc1.03', 'cc1.03.001', '7603' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element( By.LINK_TEXT, "Content Analyst" ).click() self.content.page.wait_for_page_load() self.content.driver.find_element( By.LINK_TEXT, "Ecosystems" ).click() # download a manifest to test with self.content.wait.until( expect.visibility_of_element_located( (By.LINK_TEXT, "Download Manifest") ) ).click() # import a new ecosystem self.content.driver.execute_script( "window.scrollTo(0, document.body.scrollHeight);") self.content.driver.find_element( By.LINK_TEXT, "Import a new Ecosystem" ).click() # find a downloaded manifest home = os.getenv("HOME") files = os.listdir(home + '/Downloads') file = '' for i in range(len(files)): if (files[i][-4:] == '.yml'): file = files[i] break else: if i == len(files)-1: print('no .yml file found in downloads') raise Exception self.content.wait.until( expect.visibility_of_element_located( (By.ID, "ecosystem_manifest") ) ).send_keys(home + '/Downloads/' + file) self.content.wait.until( expect.visibility_of_element_located( (By.ID, "ecosystem_comments") ) ).send_keys(str(datetime.date.today()) + ' automated-contentqa') self.content.driver.find_element( By.XPATH, "//input[@type='submit']" ).click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, '//div[contains(@class,"alert-info")]') ) ) self.ps.test_updates['passed'] = True # Case C7604 - 002 - Admin | Import content into Tutor @pytest.mark.skipif(str(7604) not in TESTS, reason='Excluded') def test_admin_import_content_into_tutor_7604(self): """Import content into Tutor. Steps: Select Customer Analyst from the dropdown menu on the name Click on Ecosystems in the header Click "Download Manifest" for the desired course Scroll down and click Import a new Ecosystem button. Click "Choose File" Select the downloaded file In comment section add today's date and your name. Eg: 2016-03-03 Kajal Click on the button Import Now wait for at most 5 mins. Expected Result: The message "Ecosystem import job queued" appears at the top """ self.ps.test_updates['name'] = 'cc1.03.002' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 'cc1', 'cc1.03', 'cc1.03.002', '7604' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions admin = Admin( existing_driver=self.content.driver, username=os.getenv('ADMIN_USER'), password=os.getenv('ADMIN_PASSWORD'), pasta_user=self.ps, capabilities=self.desired_capabilities, ) admin.login() admin.open_user_menu() admin.driver.find_element( By.LINK_TEXT, "Content Analyst" ).click() admin.page.wait_for_page_load() admin.driver.find_element( By.LINK_TEXT, "Ecosystems" ).click() # download a manifest to test with admin.wait.until( expect.visibility_of_element_located( (By.LINK_TEXT, "Download Manifest") ) ).click() # import a new ecosystem admin.driver.execute_script( "window.scrollTo(0, document.body.scrollHeight);") admin.driver.find_element( By.LINK_TEXT, "Import a new Ecosystem" ).click() # find a downloaded manifest home = os.getenv("HOME") files = os.listdir(home + '/Downloads') file = '' for i in range(len(files)): if (files[i][-4:] == '.yml'): file = files[i] break else: if i == len(files)-1: print('no .yml file found in downloads') raise Exception admin.wait.until( expect.visibility_of_element_located( (By.ID, "ecosystem_manifest") ) ).send_keys(home + '/Downloads/' + file) admin.wait.until( expect.visibility_of_element_located( (By.ID, "ecosystem_comments") ) ).send_keys(str(datetime.date.today()) + ' automated-admin') admin.driver.find_element( By.XPATH, "//input[@type='submit']" ).click() admin.wait.until( expect.visibility_of_element_located( (By.XPATH, '//div[contains(@class,"alert-info")]') ) ) admin.delete() self.ps.test_updates['passed'] = True # Case C7962 - 003 - Content Analyst| Verify question availability for # CC-Derived Biology @pytest.mark.skipif(str(7962) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_bio_7962(self): """Verify question availability for CC-Derived Biology. Steps: Click QA content Click Available Books Select CC-Derived Biology Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.003' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 'cc1', 'cc1.03', 'cc1.03.003', '7962' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element( By.PARTIAL_LINK_TEXT, "QA Content" ).click() self.content.page.wait_for_page_load() self.content.driver.find_element( By.ID, "available-books" ).click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text(),'Biology with Concept Coach')]" ) self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']" ).click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]") ) ).click() self.ps.test_updates['passed'] = True # Case C7963 - 004 - Content Analyst| Verify question availability for # CC-Derived College Physics @pytest.mark.skipif(str(7963) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_phys_7963(self): """Verify question availability for CC-Derived College Physics. Steps: Click QA content Click Available Books Select CC-Derived College Physics Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.004' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 'cc1', 'cc1.03', 'cc1.03.004', '7963' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element( By.PARTIAL_LINK_TEXT, "QA Content" ).click() self.content.page.wait_for_page_load() self.content.driver.find_element( By.ID, "available-books" ).click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text(),'Physics with Concept Coach')]" ) self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']" ).click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]") ) ).click() self.ps.test_updates['passed'] = True # Case C7964 - 005 - Content Analyst| Verify question availability for # CC-Derived Concepts of Biology @pytest.mark.skipif(str(7964) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_avilability_for_concep_7964(self): """Verify question availability for CC-Derived Concepts of Biology. Steps: Click QA content Click Available Books Select CC-Derived Concepts of Biology Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.005' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 'cc1', 'cc1.03', 'cc1.03.005', '7964' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element( By.PARTIAL_LINK_TEXT, "QA Content" ).click() self.content.page.wait_for_page_load() self.content.driver.find_element( By.ID, "available-books" ).click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text(),'Concepts of Biology with Concept Coach')]" ) self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']" ).click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]") ) ).click() self.ps.test_updates['passed'] = True # Case C7965 - 006 - Content Analyst| Verify question availability for # CC-Derived Anatomy & Physiology @pytest.mark.skipif(str(7965) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_ap_7965(self): """Verify question availability for CC-Derived Anatomy & Physiology. Steps: Click QA content Click Available Books Select CC-Derived Anatomy and Physiology Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.006' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 'cc1', 'cc1.03', 'cc1.03.006', '7965' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element( By.PARTIAL_LINK_TEXT, "QA Content" ).click() self.content.page.wait_for_page_load() self.content.driver.find_element( By.ID, "available-books" ).click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text()," + "'Anatomy & Physiology with Concept Coach')]" ) self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']" ).click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]") ) ).click() self.ps.test_updates['passed'] = True # Case C7966 - 007 - Content Analyst| Verify question availability for # CC-Derived Macroeconomics @pytest.mark.skipif(str(7966) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_macro_7966(self): """Verify question availability for CC-Derived Macroeconomics. Steps: Click QA content Click Available Books Select CC-Derived Macroeconomics Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.007' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 'cc1', 'cc1.03', 'cc1.03.007', '7966' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element( By.PARTIAL_LINK_TEXT, "QA Content" ).click() self.content.page.wait_for_page_load() self.content.driver.find_element( By.ID, "available-books" ).click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text(),'Macroeconomics with Concept Coach')]" ) self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']" ).click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]") ) ).click() self.ps.test_updates['passed'] = True # Case C7967 - 008 - Content Analyst| Verify question availability for # CC-Derived Microeconomics @pytest.mark.skipif(str(7967) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_micro_7967(self): """Verify question availability for CC-Derived Microeconomics. Steps: Click QA content Click Available Books Select CC-Derived Microeconomics Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.008' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 'cc1', 'cc1.03', 'cc1.03.008', '7967' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element( By.PARTIAL_LINK_TEXT, "QA Content" ).click() self.content.page.wait_for_page_load() self.content.driver.find_element( By.ID, "available-books" ).click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text(),'Microeconomics with Concept Coach')]" ) self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']" ).click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]") ) ).click() self.ps.test_updates['passed'] = True # Case C7968 - 009 - Content Analyst| Verify question availability for # CC-Derived Principles of Economics @pytest.mark.skipif(str(7968) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_princ_7968(self): """Verify question availability for CC-Derived Principles of Economics. Steps: Click QA content Click Available Books Select CC-Derived Principles of Economics Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.009' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 'cc1', 'cc1.03', 'cc1.03.009', '7968' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element( By.PARTIAL_LINK_TEXT, "QA Content" ).click() self.content.page.wait_for_page_load() self.content.driver.find_element( By.ID, "available-books" ).click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text()," + "'Principles of Economics with Concept Coach')]" ) self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']" ).click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]") ) ).click() self.ps.test_updates['passed'] = True # Case C7969 - 010 - Content Analyst| Verify question availability for # CC-Derived Introduction to Sociology @pytest.mark.skipif(str(7969) not in TESTS, reason='Excluded') def test_content_analyst_verify_question_availability_for_soci_7969(self): """Verify question availability for CC-Der Introduction to Sociology. Steps: Click QA content Click Available Books Select CC-Derived Introcution to Sociology Click on a section in the table of contents Expected Result: Questions are available """ self.ps.test_updates['name'] = 'cc1.03.010' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 'cc1', 'cc1.03', 'cc1.03.010', '7969' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.content.login() self.content.open_user_menu() self.content.driver.find_element( By.PARTIAL_LINK_TEXT, "QA Content" ).click() self.content.page.wait_for_page_load() self.content.driver.find_element( By.ID, "available-books" ).click() element = self.content.driver.find_element( By.XPATH, "//span[contains(text()," + "'Introduction to Sociology 2e with Concept Coach')]" ) self.content.sleep(0.5) self.content.driver.execute_script( 'return arguments[0].scrollIntoView();', element) self.content.driver.execute_script('window.scrollBy(0, -80);') element.click() self.content.sleep(0.5) self.content.driver.find_element( By.XPATH, "//span[@class='section-number' and text()='1.1']" ).click() self.content.wait.until( expect.visibility_of_element_located( (By.XPATH, "//div[contains(@class,'openstax-exercise-preview')]") ) ).click() self.ps.test_updates['passed'] = True
class TestExercisesTeacher(unittest.TestCase): """Tutor | Teacher""" def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() if not LOCAL_RUN: self.content = ContentQA(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) else: self.content = ContentQA(use_env_vars=True) def tearDown(self): """Test destructor.""" if not LOCAL_RUN: self.ps.update_job(job_id=str(self.teacher.driver.session_id), **self.ps.test_updates) try: self.content.delete() except: pass @pytest.mark.skipif(str(162262) not in TESTS, reason='Excluded') def test_creating_multiple_choice_questions_162262(self): """ Go to exercises qa Log in as a content analyst Click "Write a new exercise" Enter the video embed link into the Question Stem text box ***The video should appear in the box to the right*** Fill out the required fields Click on the box "Order Matters" ***User is able to preserve the order of choices*** Click "Tags" Click "Question Type", "DOK", "Blooms", and/or "Time" ***The user is able to pull out the dropdown tags*** Select a choice from the dropdown tags ***User is able to select a specific tag and the tag(s) appear in the box to the right*** Check the box that says "Requires Context" ***The user is able to specify whether context is required for a question and the tag "requires-context:true" appears in the box to the right*** Click "+" next to "CNX Module" Enter the CNX Module number Click "Save Draft" Click "Assets" Click "Add new image" Select an image ***The image and the options "Choose different image" and "Upload" should come up*** Click "Upload" ***There shoould be a URL and a "Delete" button)*** ***The user is presented with uploaded URL in the HTML snippet*** Click "Delete" ***The image is deleted*** Click "Save Draft", then click "Publish" ***Observe message: "Exercise [exercise ID] has published successfully")*** Click "Search" Enter the desired exercise ID Scroll down to "Detailed Solutions" Edit text in the "Detailed Solutions" text box Click "Publish" Expected Result: ***The user is able to edit detailed solutions and the changes are in the box to the right*** Corresponding test cases: T2.11 010-021 https://trello.com/c/6XGtFvPm/88-creating-multiple-choice-questions """ self.ps.test_updates['name'] = \ 'exercises_new_exercise_content_analyst_162262' + \ inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = \ ['exercises', 'new_exercise', 'content_analyst', '162262'] self.ps.test_updates['passed'] = False self.teacher.login(url=os.getenv('EXERCISES_QA'), username=os.getenv('CONTENT_USER'), password=os.getenv('CONTENT_PASSWORD')) # click create a new question self.teacher.find(By.CSS_SELECTOR, "a[href*='new']").click() textboxes = self.teacher.find_all(By.CSS_SELECTOR, ".question>div>textarea") # put embed link into Question Stem text box embedlink = '<iframe width="560" height="315" ' + \ 'src="https://www.youtube.com/embed/' embedlink += 'QnQe0xW_JY4" frameborder="0" allowfullscreen></iframe>"' textboxes[0].send_keys(embedlink) # verify that the video appears in the box to the right self.teacher.find(By.CSS_SELECTOR, "iframe") # fill out the required fields answers = self.teacher.find_all(By.CSS_SELECTOR, ".correct-answer>textarea") answers[0].send_keys('answer numero uno') answers[1].send_keys('answer numero dos') # textboxes[1].send_keys('answer numero tres') # click on Order Matters checkbox self.teacher.find(By.CSS_SELECTOR, "#input-om").click() # Click on Tabs tag self.teacher.find(By.CSS_SELECTOR, "#exercise-parts-tab-tags").click() # verify that all the dropdowns are clickable tagoptions = self.teacher.find_all(By.CSS_SELECTOR, ".form-control") for num in range(len(tagoptions)): expect.element_to_be_clickable(tagoptions[num]) # choose an option from a dropdown tagoptions[1].click() self.teacher.find_all(By.CSS_SELECTOR, "option")[1].click() # verify that the tag appears in the box to the right self.teacher.find( By.XPATH, "//*[@class='exercise-tag' and contains(text(),'type')]") self.teacher.find(By.CSS_SELECTOR, ".tag>input").click() self.teacher.find( By.XPATH, "//*[@class='exercise-tag' and contains(text(),'context:true')]") # click "+" next to CNX Module self.teacher.find_all(By.CSS_SELECTOR, ".fa.fa-plus-circle")[2].click() # put in a CNX module self.teacher.find( By.XPATH, ".//*[@class='form-control' and @placeholder]").send_keys( '12345678-1234-5788-9123-456798123456') # click save draft self.teacher.find(By.CSS_SELECTOR, ".async-button.draft.btn.btn-info").click() # click assets tab self.teacher.find(By.CSS_SELECTOR, "#exercise-parts-tab-assets").click() # Choose image. This is all local - prob have to edit for diff computer IMAGEPATH = "/Users/openstax10/desktop/bee_clip_art_18782.jpg" self.teacher.find(By.ID, "file").send_keys(IMAGEPATH) # check that Choose different image and Upload buttons are present self.teacher.find(By.XPATH, './/*[contains(text(),"Choose different image")]') self.teacher.find(By.XPATH, './/*[contains(text(),"Upload")]').click() self.teacher.page.wait_for_page_load() # check if uploaded url is present self.teacher.find(By.CSS_SELECTOR, ".copypaste") # check that delete button is present and click it self.teacher.find(By.XPATH, './/*[contains(text(),"Delete")]').click() self.teacher.sleep(1) # click publish self.teacher.find(By.CSS_SELECTOR, '.async-button.publish.btn.btn-primary').click() self.teacher.sleep(1) # confirm that you want to publish self.teacher.find( By.XPATH, './/*[@class="btn btn-primary" and contains(text(),"Publish")]' ).click() self.teacher.sleep(1) # close popup window tellign you ID # self.teacher.find( By.XPATH, './/*[@class="btn btn-primary" and contains(text(),"Close")]' ).click() # get id ID = self.teacher.current_url().split('/')[-1] # click search button self.teacher.find(By.CSS_SELECTOR, '.btn.btn-danger.back.btn.btn-default').click() # enter ID into field self.teacher.find(By.CSS_SELECTOR, '.form-control').send_keys(ID) self.teacher.find(By.CSS_SELECTOR, '.btn.btn-default.load').click() # edit detailed solution self.teacher.find(By.XPATH, "//div[4]/textarea") \ .send_keys('hello edited') detailedsol = self.teacher.find( By.CSS_SELECTOR, '.openstax-has-html.solution').get_attribute('innerHTML') # check that the text you inputted into detailed solution is in the # box to the right assert ('hello edited' == detailedsol) self.ps.test_updates['passed'] = True @pytest.mark.skipif(str(162263) not in TESTS, reason='Excluded') def test_creating_vocabulary_questions_162263(self): """ Go to exercises qa Log in as a content analyst Click "Write a new exercise" Click "New Vocabulary Term" from the header Fill out required fields Click "Save Draft" Click "Publish" ***The "Publish" button is whited out and the exercise ID appears in the box to the right*** Click "Search" Enter the desired exercise ID ***The vocabulary question loads and user is able to review it*** Enter next text into "Key Term", "Key Term Definition", and "Distractors" Click "Save Draft" Click "Publish" Expected result: ***The user is able to edit and save a vocabulary question*** Corresponding test cases: T2.11 032-034 https://trello.com/c/BAcghIsM/92-creating-vocabulary-questions """ self.ps.test_updates['name'] = \ 'exercises_new_exercise_content_analyst_162263' + \ inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = \ ['exercises', 'new_exercise', 'content_analyst', '162263'] self.ps.test_updates['passed'] = False # logging in with these credentials self.teacher.login(url=os.getenv('EXERCISES_QA'), username=os.getenv('CONTENT_USER'), password=os.getenv('CONTENT_PASSWORD')) # click create a new question self.teacher.find(By.CSS_SELECTOR, "a[href*='new']").click() # click New vocabulary question self.teacher.find(By.CSS_SELECTOR, ".btn.btn-success.vocabulary.blank").click() # enter testing as the key term self.teacher.find(By.CSS_SELECTOR, "#key-term").send_keys('testing') # enter 'ignore' as the definition self.teacher.find(By.CSS_SELECTOR, "#key-term-def").send_keys('ignore') # click save draft self.teacher.find(By.CSS_SELECTOR, ".async-button.draft.btn.btn-info").click() # click publish self.teacher.find(By.CSS_SELECTOR, ".async-button.publish.btn.btn-primary").click() self.teacher.sleep(1) # confirm publish self.teacher.find( By.XPATH, ".//*[@class='btn btn-primary' and contains(text(),'Publish')]" ).click() self.teacher.sleep(3) # get the exercise id exerciseid = self.teacher.find_all( By.CSS_SELECTOR, ".exercise-tag")[3].get_attribute('innerHTML')[4:] # go to search self.teacher.find(By.XPATH, ".//*[contains(text(),'Search')]").click() # search the exercise id self.teacher.find(By.CSS_SELECTOR, ".form-control") \ .send_keys(exerciseid) # click search self.teacher.find(By.CSS_SELECTOR, ".btn.btn-default.load").click() # confirm key term value is what was inputted originally keyterm = self.teacher.find(By.CSS_SELECTOR, "#key-term") \ .get_attribute('value') assert (keyterm == 'testing'), 'wrong term' # write something else for key term keyterm = self.teacher.find(By.CSS_SELECTOR, "#key-term") keyterm.send_keys(Keys.BACKSPACE * len('testing ')) self.teacher.sleep(.2) keyterm.send_keys('test edit') # confirm key term def value is what was inputted oirignally keytermdef = self.teacher.find(By.CSS_SELECTOR, '#key-term-def') \ .get_attribute('value') assert (keytermdef == 'ignore'), 'ignore it' # write something else for key term def keytermdef = self.teacher.find(By.CSS_SELECTOR, "#key-term-def") keytermdef.send_keys(Keys.BACKSPACE * len('ignore ')) self.teacher.sleep(0.2) keytermdef.send_keys('ignore edit') # fill in value for distractor self.teacher.find_all(By.CSS_SELECTOR, ".form-control")[2].send_keys('im a distractor') self.teacher.sleep(3) # save as draft self.teacher.find(By.CSS_SELECTOR, ".async-button.draft.btn.btn-info").click() self.teacher.sleep(1) # publish self.teacher.find(By.CSS_SELECTOR, ".async-button.publish.btn.btn-primary").click() # confirm publish self.teacher.find( By.XPATH, './/*[@class="btn btn-primary" and contains(text(),"Publish")]' ).click() self.teacher.sleep(2) # get new exercise id exerciseid = self.teacher.find_all( By.CSS_SELECTOR, ".exercise-tag")[3].get_attribute('innerHTML')[4:] # click search self.teacher.find(By.XPATH, ".//*[contains(text(),'Search')]").click() # search the exercise id self.teacher.find(By.CSS_SELECTOR, ".form-control") \ .send_keys(exerciseid) self.teacher.find(By.CSS_SELECTOR, ".btn.btn-default.load") \ .click() # verify that the value in key term is what was inputted previously keyterm = self.teacher.find(By.CSS_SELECTOR, "#key-term") \ .get_attribute('value') assert (keyterm == 'test edit'), 'test edited' self.ps.test_updates['passed'] = True @pytest.mark.skipif(str(162264) not in TESTS, reason='Excluded') def test_creating_multipart_question_162264(self): """ Go to exercises qa Log in as a content analyst Click "Write a new exercise" Check the box that says "Exercise contains multiple parts" Fill out the required fields Click "Publish" Expected result: ***The user gets a confirmation that says "Exercise [exercise ID] has published successfully"*** Corresponding test case: T2.11 044, 046 https://trello.com/c/L1RjXiSx/ 160-creating-multi-part-questions-without-detailed-solutions """ self.ps.test_updates['name'] = \ 'exercises_new_exercise_content_analyst_162264' + \ inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = \ ['exercises', 'new_exercise', 'content_analyst', '162264'] self.ps.test_updates['passed'] = False # logging in with these credentials self.teacher.login(url=os.getenv('EXERCISES_QA'), username=os.getenv('CONTENT_USER'), password=os.getenv('CONTENT_PASSWORD')) # click create a new question self.teacher.find(By.CSS_SELECTOR, "a[href*='new']") \ .click() # click "Exercise contains multiple parts" self.teacher.find(By.CSS_SELECTOR, '#mpq-toggle') \ .click() # write in something for question stem self.teacher.find(By.CSS_SELECTOR, '.question>div>textarea') \ .send_keys('test') # write in something for Distractor self.teacher.find(By.CSS_SELECTOR, '.correct-answer>textarea') \ .send_keys('ignore') # click tab "question 2" self.teacher.find(By.CSS_SELECTOR, '#exercise-parts-tab-question-1') \ .click() self.teacher.sleep(1) # write in something for question stem self.teacher.find_all(By.CSS_SELECTOR, '.question>div>textarea')[2].send_keys('test2') # write in something for Distractor self.teacher.find_all( By.CSS_SELECTOR, '.correct-answer>textarea')[2].send_keys('ignore2') # click save draft self.teacher.find(By.CSS_SELECTOR, '.async-button.draft.btn.btn-info').click() # click publish self.teacher.find(By.CSS_SELECTOR, '.async-button.publish.btn.btn-primary').click() self.teacher.sleep(1) # confirm publish self.teacher.find( By.XPATH, ".//*[@class='btn btn-primary' and contains(text(),'Publish')]" ).click() # confirm message appears self.teacher.find(By.CSS_SELECTOR, '.modal-body>b') self.ps.test_updates['passed'] = True