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'])
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)) ]
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()) ]
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'], ) ]
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)
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)
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
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)