Example #1
0
 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)
Example #2
0
 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)
Example #3
0
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))
Example #4
0
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))