def setUp(self):
        super(TestLearnerInfoSerializer, self).setUp()
        self.user = factories.UserFactory()
        self.enterprise_customer_user = factories.EnterpriseCustomerUserFactory(
            user_id=self.user.id)
        # pylint: disable=invalid-name
        self.enterprise_customer_identity_provider = factories.EnterpriseCustomerIdentityProviderFactory(
            enterprise_customer=self.enterprise_customer_user.
            enterprise_customer)

        self.expected_data = {
            'enterprise_sso_uid':
            TEST_ENTERPRISE_SSO_UID,
            'lms_user_id':
            self.user.id,
            'enterprise_user_id':
            self.enterprise_customer_user.id,
            'user_username':
            self.user.username,
            'user_account_creation_date':
            self.user.date_joined.strftime("%Y-%m-%dT%H:%M:%SZ"),
            'user_country_code':
            'PK',
            'user_email':
            self.user.email
        }
Esempio n. 2
0
    def test_update_course_ddt(self, course, provider_id, global_context,
                               expected_course):
        """
        Test update_course method of EnterpriseCatalogCoursesReadOnlySerializer.

        Verify that update_course for EnterpriseCatalogCoursesReadOnlySerializer returns
        successfully without errors.
        """
        enterprise_customer_id = 'd2fb4cb0-b538-4934-1926-684d48ff5865'
        ecu = factories.EnterpriseCustomerUserFactory(
            enterprise_customer__uuid=enterprise_customer_id,
            user_id=self.user.id,
        )
        factories.EnterpriseCustomerIdentityProviderFactory(
            enterprise_customer=ecu.enterprise_customer,
            provider_id=provider_id,
        )

        with mock.patch('enterprise.utils.reverse',
                        return_value='course_modes/choose/'):
            updated_course = self.serializer.update_course(
                course, 1, ecu.enterprise_customer, global_context)

            # Make sure global context passed in to update_course is added to the course.
            for key, value in six.iteritems(global_context):
                assert key in updated_course
                assert updated_course[key] == value

            assert expected_course == updated_course
 def setUp(self):
     self.user = factories.UserFactory(username='******', id=1)
     self.course_id = 'course-v1:edX+DemoX+DemoCourse'
     self.course_key = 'edX+DemoX'
     self.enterprise_customer = factories.EnterpriseCustomerFactory()
     self.enterprise_customer_user = factories.EnterpriseCustomerUserFactory(
         user_id=self.user.id,
         enterprise_customer=self.enterprise_customer,
     )
     self.data_sharing_consent = factories.DataSharingConsentFactory(
         username=self.user.username,
         course_id=self.course_id,
         enterprise_customer=self.enterprise_customer,
         granted=True,
     )
     self.config = factories.SAPSuccessFactorsEnterpriseCustomerConfigurationFactory(
         enterprise_customer=self.enterprise_customer,
         sapsf_base_url='enterprise.successfactors.com',
         key='key',
         secret='secret',
         active=True,
     )
     self.idp = factories.EnterpriseCustomerIdentityProviderFactory(
         enterprise_customer=self.enterprise_customer
     )
     tpa_client_mock = mock.patch('enterprise.models.ThirdPartyAuthApiClient')
     self.tpa_client = tpa_client_mock.start().return_value
     # Default remote ID
     self.tpa_client.get_remote_id.return_value = 'fake-remote-id'
     self.addCleanup(tpa_client_mock.stop)
     self.exporter = self.config.get_learner_data_exporter('dummy-user')
     assert isinstance(self.exporter, LearnerExporter)
     super(TestLearnerExporter, self).setUp()
Esempio n. 4
0
    def test_enterprise_catalog_courses(self, url, provider_id,
                                        enterprise_customer,
                                        mocked_catalog_courses, expected):
        """
        Make sure enterprise catalog view returns correct data.

        Arguments:
            mocked_catalog_courses: This is used to mock catalog courses returned by catalog api.
            expected: This is the expected catalog courses from enterprise api.
        """
        # Populate database
        ecu = factories.EnterpriseCustomerUserFactory(
            user_id=self.user.id,
            enterprise_customer__uuid=enterprise_customer,
        )

        factories.EnterpriseCustomerIdentityProviderFactory(
            enterprise_customer=ecu.enterprise_customer,
            provider_id=provider_id,
        )

        with mock.patch('enterprise.api.v1.views.CourseCatalogApiClient'
                        ) as mock_catalog_api_client:
            mock_catalog_api_client.return_value = mock.Mock(
                get_paginated_catalog_courses=mock.Mock(
                    return_value=mocked_catalog_courses), )
            response = self.client.get(url)
            response = self.load_json(response.content)

            assert response == expected
Esempio n. 5
0
 def setUp(self):
     self.user = factories.UserFactory(username='******',
                                       id=1,
                                       email='*****@*****.**')
     self.course_id = 'course-v1:edX+DemoX+DemoCourse'
     self.enterprise_customer = factories.EnterpriseCustomerFactory()
     self.enterprise_customer_user = factories.EnterpriseCustomerUserFactory(
         user_id=self.user.id,
         enterprise_customer=self.enterprise_customer,
     )
     self.data_sharing_consent = factories.DataSharingConsentFactory(
         username=self.user.username,
         course_id=self.course_id,
         enterprise_customer=self.enterprise_customer,
         granted=True,
     )
     self.config = factories.DegreedEnterpriseCustomerConfigurationFactory(
         enterprise_customer=self.enterprise_customer,
         active=True,
     )
     self.idp = factories.EnterpriseCustomerIdentityProviderFactory(
         enterprise_customer=self.enterprise_customer)
     tpa_client_mock = mock.patch(
         'enterprise.models.ThirdPartyAuthApiClient')
     self.tpa_client = tpa_client_mock.start()
     self.tpa_client.return_value.get_remote_id.return_value = 'fake-remote-id'
     self.addCleanup(tpa_client_mock.stop)
     super(TestDegreedLearnerExporter, self).setUp()
Esempio n. 6
0
 def setUp(self):
     self.api_user = factories.UserFactory(username='******', id=1)
     self.user1 = factories.UserFactory(id=2, email='*****@*****.**')
     self.user2 = factories.UserFactory(id=3, email='*****@*****.**')
     self.course_id = COURSE_ID
     self.enterprise_customer = factories.EnterpriseCustomerFactory(
         name='Spaghetti Enterprise')
     self.identity_provider = FakerFactory.create().slug()  # pylint: disable=no-member
     factories.EnterpriseCustomerIdentityProviderFactory(
         provider_id=self.identity_provider,
         enterprise_customer=self.enterprise_customer,
     )
     self.enterprise_customer_user1 = factories.EnterpriseCustomerUserFactory(
         user_id=self.user1.id,
         enterprise_customer=self.enterprise_customer,
     )
     self.enterprise_customer_user2 = factories.EnterpriseCustomerUserFactory(
         user_id=self.user2.id,
         enterprise_customer=self.enterprise_customer,
     )
     self.enrollment = factories.EnterpriseCourseEnrollmentFactory(
         id=2,
         enterprise_customer_user=self.enterprise_customer_user1,
         course_id=self.course_id,
     )
     self.enrollment = factories.EnterpriseCourseEnrollmentFactory(
         id=3,
         enterprise_customer_user=self.enterprise_customer_user2,
         course_id=self.course_id,
     )
     self.consent1 = factories.DataSharingConsentFactory(
         username=self.user1.username,
         course_id=self.course_id,
         enterprise_customer=self.enterprise_customer,
     )
     self.consent2 = factories.DataSharingConsentFactory(
         username=self.user2.username,
         course_id=self.course_id,
         enterprise_customer=self.enterprise_customer,
     )
     self.degreed = factories.DegreedEnterpriseCustomerConfigurationFactory(
         enterprise_customer=self.enterprise_customer,
         key='key',
         secret='secret',
         degreed_company_id='Degreed Company',
         active=True,
         degreed_base_url='https://www.degreed.com/',
     )
     self.degreed_global_configuration = factories.DegreedGlobalConfigurationFactory(
         oauth_api_path='oauth/token', )
     self.sapsf = factories.SAPSuccessFactorsEnterpriseCustomerConfigurationFactory(
         enterprise_customer=self.enterprise_customer,
         sapsf_base_url='http://enterprise.successfactors.com/',
         key='key',
         secret='secret',
         active=True,
     )
     self.sapsf_global_configuration = factories.SAPSuccessFactorsGlobalConfigurationFactory(
     )
     super(TestTransmitLearnerData, self).setUp()
Esempio n. 7
0
    def test_update_course_runs(
        self,
        course_run,
        catalog_id,
        provider_id,
        enterprise_customer_uuid,
        expected_fields,
        expected_urls,
        mock_config_helpers,
    ):
        """
        Test update_course_runs method of EnterpriseCatalogCoursesReadOnlySerializer.

        Verify that update_course for EnterpriseCatalogCoursesReadOnlySerializer returns
        successfully without errors.
        """
        # Populate database.
        mock_config_helpers.get_value.return_value = 'http://testserver/'
        ec_identity_provider = factories.EnterpriseCustomerIdentityProviderFactory(
            enterprise_customer__uuid=enterprise_customer_uuid,
            provider_id=provider_id,
        )
        course_run_url = 'course_modes/choose/course-v1:edX+DemoX+1T2017/'

        with mock.patch('enterprise.utils.reverse',
                        return_value=course_run_url):
            updated_course_runs = self.serializer.update_course_runs(
                course_runs=[course_run],
                catalog_id=catalog_id,
                enterprise_customer=ec_identity_provider.enterprise_customer,
            )

            assert len(updated_course_runs) == 1
            updated_course_run = updated_course_runs[0]

            # Make sure all of the expected fields are present in data returned.
            # This statement will also assert that all of the expected fields have same value.
            for key, value in six.iteritems(expected_fields):
                assert key in updated_course_run
                assert value == updated_course_run[key]

            # Make sure all expected urls are present in data returned.
            for key, value in six.iteritems(expected_urls):
                assert key in updated_course_run
                self.assert_url(value, updated_course_run[key])
Esempio n. 8
0
    def setUp(self):
        """
        Perform operations common for all tests.

        Populate data base for api testing.
        """
        super(TestEnterpriseCatalogCoursesSerializer, self).setUp()
        faker = FakerFactory.create()

        self.provider_id = faker.slug()

        self.user = factories.UserFactory()
        self.ecu = factories.EnterpriseCustomerUserFactory(
            user_id=self.user.id, )
        factories.EnterpriseCustomerIdentityProviderFactory(
            enterprise_customer=self.ecu.enterprise_customer,
            provider_id=self.provider_id,
        )

        # Create and authenticate a request
        self.request = APIRequestFactory().get(reverse('catalogs-list'))
        self.request.user = self.user

        # instance is none as models for this serializer do not exist in enterprise.
        self.instance = None
        self.data = {
            'count':
            1,
            'next':
            None,
            'previous':
            None,
            'results': [{
                'owners': [{
                    'description': None,
                    'tags': [],
                    'name': '',
                    'homepage_url': None,
                    'key': 'edX',
                    'certificate_logo_image_url': None,
                    'marketing_url': None,
                    'logo_image_url': None,
                    'uuid': 'aa4aaad0-2ff0-44ce-95e5-1121d02f3b27'
                }],
                'uuid':
                'd2fb4cb0-b538-4934-ba60-684d48ff5865',
                'title':
                'edX Demonstration Course',
                'prerequisites': [],
                'image':
                None,
                'expected_learning_items': [],
                'sponsors': [],
                'modified':
                '2017-03-03T07:34:19.322916Z',
                'full_description':
                None,
                'subjects': [],
                'video':
                None,
                'key':
                'edX+DemoX',
                'short_description':
                None,
                'marketing_url':
                'http://testserver/course/course-v1:edX+DemoX+1T2017/',
                'level_type':
                None,
                'course_runs': [{
                    'key':
                    'course-v1:edX+DemoX+1T2017',
                    'uuid':
                    '57432370-0a6e-4d95-90fe-77b4fe64de2b',
                    'title':
                    'edX Demonstration Course',
                    'image': {
                        'width': None,
                        'src':
                        'http://testserver/image/promoted/screen_shot_2016-12-27_at_9.30.00_am.png',
                        'description': None,
                        'height': None
                    },
                    'short_description':
                    'edX Demonstration Course',
                    'marketing_url':
                    'http://testserver/course/course-edx-d103?utm_medium=affiliate_partner',
                    'start':
                    '2016-12-28T05:00:00Z',
                    'end':
                    '2018-12-28T00:00:00Z',
                    'enrollment_start':
                    None,
                    'enrollment_end':
                    None,
                    'pacing_type':
                    'instructor_paced',
                    'type':
                    'audit',
                    'course':
                    'edx+D103',
                    'full_description':
                    'edx demo course',
                    'announcement':
                    None,
                    'video':
                    None,
                    'seats': [{
                        'type': 'audit',
                        'price': '0.00',
                        'currency': 'USD',
                        'upgrade_deadline': None,
                        'credit_provider': None,
                        'credit_hours': None,
                        'sku': '2ADB190'
                    }],
                    'content_language':
                    'en-us',
                    'transcript_languages': [],
                    'instructors': [],
                    'staff': [],
                    'min_effort':
                    None,
                    'max_effort':
                    None,
                    'modified':
                    '2017-03-08T05:46:52.682549Z',
                    'level_type':
                    'Introductory',
                    'availability':
                    'Current',
                    'mobile_available':
                    False,
                    'hidden':
                    False,
                    'reporting_type':
                    'mooc'
                }]
            }]
        }

        self.validated_data = self.data
        self.serializer = EnterpriseCatalogCoursesReadOnlySerializer(self.data)