def setUp(self): super(ProgramManagementMixin, self).setUp() self.session = requests.Session() self.studio_home_page = StudioHomePage(self.browser) self.manage_program_page = StudioManageProgramPage(self.browser) self.program_token_page = StudioProgramIdTokenPage(self.browser)
class ProgramManagementMixin(StudioUserMixin): def setUp(self): super(ProgramManagementMixin, self).setUp() self.session = requests.Session() self.studio_home_page = StudioHomePage(self.browser) self.manage_program_page = StudioManageProgramPage(self.browser) self.program_token_page = StudioProgramIdTokenPage(self.browser) def _get_program_jwt_token(self): # Get the JWT token from the studio programs id_token page self.program_token_page.visit() token = self.program_token_page.get_token() # Once we get the JWT token, we should go back to the page we # came from to maintain the existing state of the test self.browser.back() return token def _get_program_id_from_url(self, url): program_id = url.split('/')[-1] return program_id def _get_current_program_id(self): self.assertTrue(self.manage_program_page.is_browser_on_page()) # Get the newly created program id from the current url return self._get_program_id_from_url(self.browser.current_url) def create_program(self, name, description, marketing_slug): self.studio_home_page.click_new_program() new_program_page = StudioNewProgramPage(self.browser) new_program_page.wait_for_page() # Add the unique program info suffix # to make sure we do not have collisions in db program_unique_suffix = uuid.uuid4() new_program_page.create_new_program( '{}_{}'.format(name, program_unique_suffix)[:255], '{} {}'.format(description, program_unique_suffix)[:255], '{}_{}'.format(marketing_slug, program_unique_suffix)[:255]) self.manage_program_page.wait_for_page() def _delete_program(self, program_id, jwt_token): """ With the JWT token, hit the program details URL with the patch to set the program status to "deleted". This is the delete program step """ url = '{0}/api/v1/'.format(PROGRAMS_URL_ROOT) delete_client = EdxRestApiClient(url, jwt=jwt_token) deleted_program = delete_client.programs(program_id).patch({'status': 'deleted'}) # tell the caller wither the delete is successful or not. return deleted_program['status'] == 'deleted' def delete_all_programs(self): jwt_token = self._get_program_jwt_token() # Make sure we are on the view programs page self.assertTrue(self.studio_home_page.is_browser_on_page()) # Get all the program links from the page, and delete programs one by one for program_link in self.studio_home_page.get_all_program_links(): program_id = self._get_program_id_from_url(program_link.get_attribute('href')) if not self._delete_program(program_id, jwt_token): log.warning('Set program %s to delete failed using jwt_token %s', program_id, jwt_token) return True def delete_current_program(self): program_id = self._get_current_program_id() jwt_token = self._get_program_jwt_token() self.assertTrue(self._delete_program(program_id, jwt_token))
class ProgramManagementMixin(StudioUserMixin): def setUp(self): super(ProgramManagementMixin, self).setUp() self.session = requests.Session() self.studio_home_page = StudioHomePage(self.browser) self.manage_program_page = StudioManageProgramPage(self.browser) self.program_token_page = StudioProgramIdTokenPage(self.browser) def _get_program_jwt_token(self): # Get the JWT token from the studio programs id_token page self.program_token_page.visit() token = self.program_token_page.get_token() # Once we get the JWT token, we should go back to the page we # came from to maintain the existing state of the test self.browser.back() return token def _get_program_id_from_url(self, url): program_id = url.split('/')[-1] return program_id def _get_current_program_id(self): self.assertTrue(self.manage_program_page.is_browser_on_page()) # Get the newly created program id from the current url return self._get_program_id_from_url(self.browser.current_url) def create_program(self, name, description, marketing_slug): self.studio_home_page.click_new_program() new_program_page = StudioNewProgramPage(self.browser) new_program_page.wait_for_page() # Add the unique program info suffix # to make sure we do not have collisions in db program_unique_suffix = uuid.uuid4() new_program_page.create_new_program( '{}_{}'.format(name, program_unique_suffix)[:255], '{} {}'.format(description, program_unique_suffix)[:255], '{}_{}'.format(marketing_slug, program_unique_suffix)[:255]) self.manage_program_page.wait_for_page() def _delete_program(self, program_id, jwt_token): """ With the JWT token, hit the program details URL with the patch to set the program status to "deleted". This is the delete program step """ url = '{0}/api/v1/'.format(PROGRAMS_URL_ROOT) delete_client = EdxRestApiClient(url, jwt=jwt_token) deleted_program = delete_client.programs(program_id).patch( {'status': 'deleted'}) # tell the caller wither the delete is successful or not. return deleted_program['status'] == 'deleted' def delete_all_programs(self): jwt_token = self._get_program_jwt_token() # Make sure we are on the view programs page self.assertTrue(self.studio_home_page.is_browser_on_page()) # Get all the program links from the page, and delete programs one by one for program_link in self.studio_home_page.get_all_program_links(): program_id = self._get_program_id_from_url( program_link.get_attribute('href')) if not self._delete_program(program_id, jwt_token): log.warning( 'Set program %s to delete failed using jwt_token %s', program_id, jwt_token) return True def delete_current_program(self): program_id = self._get_current_program_id() jwt_token = self._get_program_jwt_token() self.assertTrue(self._delete_program(program_id, jwt_token))