Exemplo n.º 1
0
    def test_certificates_listed(self):
        """
        Verify that the response contains accurate certificate data when certificates are available.
        """
        self.create_programs_config()
        self.create_credentials_config(is_learner_issuance_enabled=True)

        self.mock_programs_api(self.data)

        first_credential = credentials_factories.UserCredential(
            username=self.user.username,
            credential=credentials_factories.ProgramCredential(
                program_id=self.first_program['id']))
        second_credential = credentials_factories.UserCredential(
            username=self.user.username,
            credential=credentials_factories.ProgramCredential(
                program_id=self.second_program['id']))

        credentials_data = sorted([first_credential, second_credential],
                                  key=self.credential_sort_key)

        self.mock_credentials_api(credentials_data)

        response = self.client.get(self.url)
        actual = self.load_serialized_data(response, 'certificatesData')
        actual = sorted(actual, key=self.credential_sort_key)

        for index, actual_credential in enumerate(actual):
            expected_credential = credentials_data[index]

            self.assertEqual(
                # TODO: certificate_url is needlessly transformed to credential_url. (╯°□°)╯︵ ┻━┻
                # Clean this up!
                actual_credential['credential_url'],
                expected_credential['certificate_url'])
Exemplo n.º 2
0
 def _expected_program_credentials_data(self):
     """
     Dry method for getting expected program credentials response data.
     """
     return [
         factories.UserCredential(username='******',
                                  credential=factories.ProgramCredential(
                                      program_uuid=self.primary_uuid)),
         factories.UserCredential(username='******',
                                  credential=factories.ProgramCredential(
                                      program_uuid=self.alternate_uuid))
     ]
Exemplo n.º 3
0
 def _expected_progam_credentials_data(self):
     """
     Dry method for getting expected program credentials response data.
     """
     return [
         factories.UserCredential(id=1,
                                  username='******',
                                  credential=factories.ProgramCredential()),
         factories.UserCredential(id=2,
                                  username='******',
                                  credential=factories.ProgramCredential())
     ]
Exemplo n.º 4
0
 def _expected_progam_credentials_data(self):
     """
     Dry method for getting expected program credentials response data.
     """
     return [
         factories.UserCredential(
             id=1,
             username='******',
             credential=factories.ProgramCredential(),
             certificate_url=self.CREDENTIALS_API_RESPONSE['results'][0]
             ['certificate_url'],
         ),
         factories.UserCredential(
             id=2,
             username='******',
             credential=factories.ProgramCredential(),
             certificate_url=self.CREDENTIALS_API_RESPONSE['results'][1]
             ['certificate_url'],
         )
     ]
Exemplo n.º 5
0
    def test_get_programs_credentials(self):
        """ Verify that the program credentials data required for display can
        be retrieved.
        """
        # create credentials and program configuration
        self.create_credentials_config()

        # Mocking the API responses from programs and credentials
        primary_uuid, alternate_uuid = str(uuid.uuid4()), str(uuid.uuid4())
        credentials_api_response = {
            "next":
            None,
            "results": [
                factories.UserCredential(
                    username='******',
                    credential=factories.ProgramCredential(
                        program_uuid=primary_uuid)),
                factories.UserCredential(
                    username='******',
                    credential=factories.ProgramCredential(
                        program_uuid=alternate_uuid))
            ]
        }
        self.mock_credentials_api(self.user,
                                  data=credentials_api_response,
                                  reset_url=False)
        programs = [
            ProgramFactory(uuid=primary_uuid),
            ProgramFactory(uuid=alternate_uuid)
        ]

        with mock.patch(
                "openedx.core.djangoapps.credentials.utils.get_programs"
        ) as mock_get_programs:
            mock_get_programs.return_value = programs
            actual = get_programs_credentials(self.user)
            expected = self.expected_credentials_display_data(programs)

            # Checking result is as expected
            self.assertEqual(len(actual), 2)
            self.assertEqual(actual, expected)
Exemplo n.º 6
0
    def test_get_user_programs_credentials(self):
        """Verify program credentials data can be retrieved and parsed correctly."""
        # create credentials and program configuration
        self.create_credentials_config()

        # Mocking the API responses from programs and credentials
        primary_uuid, alternate_uuid = str(uuid.uuid4()), str(uuid.uuid4())
        credentials_api_response = {
            "next":
            None,
            "results": [
                factories.UserCredential(
                    username='******',
                    credential=factories.ProgramCredential(
                        program_uuid=primary_uuid)),
                factories.UserCredential(
                    username='******',
                    credential=factories.ProgramCredential(
                        program_uuid=alternate_uuid))
            ]
        }
        self.mock_credentials_api(self.user,
                                  data=credentials_api_response,
                                  reset_url=False)
        programs = [
            catalog_factories.Program(uuid=primary_uuid),
            catalog_factories.Program(uuid=alternate_uuid)
        ]

        with mock.patch(
                "openedx.core.djangoapps.credentials.utils.get_programs_for_credentials"
        ) as mock_get_programs:
            mock_get_programs.return_value = programs
            actual = get_user_program_credentials(self.user)

            # checking response from API is as expected
            self.assertEqual(len(actual), 2)
            self.assertEqual(actual, programs)
    def test_get_one(self, mock_get_edx_api_data):
        expected = factories.UserCredential()
        mock_get_edx_api_data.return_value = expected

        program_uuid = str(uuid.uuid4())
        actual = get_credentials(self.user, program_uuid=program_uuid)

        mock_get_edx_api_data.assert_called_once()
        call = mock_get_edx_api_data.mock_calls[0]
        __, __, kwargs = call

        querystring = {
            'username': self.user.username,
            'status': 'awarded',
            'program_uuid': program_uuid,
        }
        self.assertEqual(kwargs['querystring'], querystring)

        self.assertEqual(actual, expected)
Exemplo n.º 8
0
    def test_get_one(self, mock_get_edx_api_data):
        expected = factories.UserCredential()
        mock_get_edx_api_data.return_value = expected

        program_uuid = str(uuid.uuid4())
        actual = get_credentials(self.user, program_uuid=program_uuid)

        mock_get_edx_api_data.assert_called_once()
        call = mock_get_edx_api_data.mock_calls[0]
        __, __, kwargs = call

        querystring = {
            'username': self.user.username,
            'status': 'awarded',
            'only_visible': 'True',
            'program_uuid': program_uuid,
        }
        cache_key = f'{self.credentials_config.CACHE_KEY}.{self.user.username}.{program_uuid}'
        assert kwargs['querystring'] == querystring
        assert kwargs['cache_key'] == cache_key

        assert actual == expected
Exemplo n.º 9
0
class CredentialsDataMixin(object):
    """Mixin mocking Credentials API URLs and providing fake data for testing."""
    CREDENTIALS_API_RESPONSE = {
        "next":
        None,
        "results": [
            factories.UserCredential(id=1,
                                     username='******',
                                     credential=factories.ProgramCredential()),
            factories.UserCredential(id=2,
                                     username='******',
                                     credential=factories.ProgramCredential()),
            factories.UserCredential(id=3,
                                     status='revoked',
                                     username='******',
                                     credential=factories.ProgramCredential()),
            factories.UserCredential(id=4,
                                     username='******',
                                     credential=factories.CourseCredential(
                                         certificate_type='honor')),
            factories.UserCredential(id=5,
                                     username='******',
                                     credential=factories.CourseCredential(
                                         course_id='edx/test02/2015')),
            factories.UserCredential(id=6,
                                     username='******',
                                     credential=factories.CourseCredential(
                                         course_id='edx/test02/2015')),
        ]
    }

    CREDENTIALS_NEXT_API_RESPONSE = {
        "next":
        None,
        "results": [
            factories.UserCredential(id=7,
                                     username='******',
                                     credential=factories.ProgramCredential()),
            factories.UserCredential(id=8,
                                     username='******',
                                     credential=factories.ProgramCredential())
        ]
    }

    def mock_credentials_api(self,
                             user,
                             data=None,
                             status_code=200,
                             reset_url=True,
                             is_next_page=False):
        """Utility for mocking out Credentials API URLs."""
        self.assertTrue(
            httpretty.is_enabled(),
            msg='httpretty must be enabled to mock Credentials API calls.')
        internal_api_url = CredentialsApiConfig.current(
        ).internal_api_url.strip('/')

        url = internal_api_url + '/credentials/?status=awarded&username='******'/credentials/?page=2&status=awarded&username='******'next'] = next_page_url
            next_page_body = json.dumps(self.CREDENTIALS_NEXT_API_RESPONSE)
            httpretty.register_uri(httpretty.GET,
                                   next_page_url,
                                   body=body,
                                   content_type='application/json',
                                   status=status_code)
            httpretty.register_uri(httpretty.GET,
                                   url,
                                   body=next_page_body,
                                   content_type='application/json',
                                   status=status_code)
        else:
            httpretty.register_uri(httpretty.GET,
                                   url,
                                   body=body,
                                   content_type='application/json',
                                   status=status_code)