Ejemplo n.º 1
0
class WebUsersSyncTest(TestCase):

    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.api_object = EWSApi(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)
        self.api_object.prepare_commtrack_config()
        self.api_object.create_or_edit_roles()
        for user in WebUser.by_domain(TEST_DOMAIN):
            user.delete()

    def test_create_webuser(self):
        with open(os.path.join(self.datapath, 'sample_webusers.json')) as f:
            webuser = EWSUser(json.loads(f.read())[0])

        self.assertEqual(0, len(WebUser.by_domain(TEST_DOMAIN)))
        ewsghana_webuser = self.api_object.web_user_sync(webuser)
        self.assertEqual(webuser.email, ewsghana_webuser.username)
        self.assertEqual(webuser.password, ewsghana_webuser.password)
        self.assertEqual(webuser.first_name, ewsghana_webuser.first_name)
        self.assertEqual(webuser.last_name, ewsghana_webuser.last_name)
        self.assertEqual(webuser.is_active, ewsghana_webuser.is_active)
        self.assertEqual(False, ewsghana_webuser.is_superuser)
        self.assertEqual(False, ewsghana_webuser.is_staff)
        domain_name = ewsghana_webuser.get_domains()[0]
        self.assertEqual(TEST_DOMAIN, domain_name)
        self.assertEqual(UserRole.get_read_only_role_by_domain(TEST_DOMAIN)._id,
                         ewsghana_webuser.get_domain_membership(TEST_DOMAIN).role_id)

    def test_create_facility_manager(self):
        with open(os.path.join(self.datapath, 'sample_webusers.json')) as f:
            webuser = EWSUser(json.loads(f.read())[1])

        self.assertEqual(0, len(WebUser.by_domain(TEST_DOMAIN)))
        self.api_object.web_user_sync(webuser)
        web_users = list(WebUser.by_domain(TEST_DOMAIN))
        self.assertEqual(1, len(web_users))
        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        facility_manager_role = UserRole.by_domain_and_name(TEST_DOMAIN, 'Facility manager')[0]
        dm = web_users[0].get_domain_membership(TEST_DOMAIN)
        self.assertEqual(facility_manager_role.get_id, dm.role_id)
Ejemplo n.º 2
0
class SMSUsersSyncTest(TestCase):

    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.api_object = EWSApi(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)
        self.api_object.prepare_commtrack_config()
        self.api_object.create_or_edit_roles()
        for user in CommCareUser.by_domain(TEST_DOMAIN):
            user.delete()

        for verified_number in VerifiedNumber.by_domain(TEST_DOMAIN):
            verified_number.delete()

    def test_create_smsuser(self):
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])

        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertIsNotNone(ewsghana_smsuser.get_id)
        username_part = "%s%d" % (ewsghana_smsuser.name.strip().replace(' ', '.').lower(), smsuser.id)
        username = "******" % (username_part, TEST_DOMAIN)
        self.assertEqual(username, ewsghana_smsuser.username)
        self.assertEqual(smsuser.is_active, str(ewsghana_smsuser.is_active))
        self.assertEqual(False, ewsghana_smsuser.is_superuser)
        self.assertEqual(False, ewsghana_smsuser.is_staff)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '2222222222')
        domain_name = ewsghana_smsuser.get_domains()[0]
        self.assertEqual(TEST_DOMAIN, domain_name)
        self.assertIsInstance(ewsghana_smsuser.user_data['role'], list)
        self.assertEqual(len(ewsghana_smsuser.user_data['role']), 1)
        self.assertEqual(ewsghana_smsuser.user_data['role'][0], 'Other')

    def test_edit_smsuser(self):
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])

        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        user_id = ewsghana_smsuser.get_id
        self.assertIsNotNone(user_id)
        smsuser.phone_numbers = ['111111111']
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertEqual(user_id, ewsghana_smsuser.get_id)
        self.assertEqual(ewsghana_smsuser.default_phone_number, '111111111')
        self.assertListEqual(ewsghana_smsuser.phone_numbers, ['111111111'])
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '111111111')

    def test_edit_phone_number1(self):
        """
        When phone number is deleted on EWS side it also should be deleted in HQ
        :return:
        """
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])

        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        smsuser.phone_numbers = []
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertIsNone(ewsghana_smsuser.default_phone_number)
        self.assertListEqual(ewsghana_smsuser.phone_numbers, [])
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNone(verified_number)

    def test_edit_phone_number2(self):
        """
        When phone number is added on EWS side it also should be added in HQ
        """
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])
        smsuser.phone_numbers = []
        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNone(verified_number)
        smsuser.phone_numbers = ['111111111']
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertIsNotNone(ewsghana_smsuser.default_phone_number)
        self.assertListEqual(ewsghana_smsuser.phone_numbers, ['111111111'])
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '111111111')

    def test_edit_phone_number3(self):
        """
        When phone number is edited on EWS side it also should be edited in HQ
        """
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])
        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '2222222222')
        smsuser.phone_numbers = ['111111111']
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertIsNotNone(ewsghana_smsuser.default_phone_number)
        self.assertListEqual(ewsghana_smsuser.phone_numbers, ['111111111'])
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '111111111')

    def test_edit_phone_number4(self):
        """
            Number shouldn't be changed when is not edited on EWS side.
        """
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])
        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '2222222222')
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '2222222222')
Ejemplo n.º 3
0
class SMSUsersSyncTest(TestCase):
    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.api_object = EWSApi(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)
        self.api_object.prepare_commtrack_config()
        self.api_object.create_or_edit_roles()
        for user in CommCareUser.by_domain(TEST_DOMAIN):
            user.delete()

        for verified_number in VerifiedNumber.by_domain(TEST_DOMAIN):
            verified_number.delete()

    def test_create_smsuser(self):
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])

        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertIsNotNone(ewsghana_smsuser.get_id)
        username_part = "%s%d" % (ewsghana_smsuser.name.strip().replace(
            ' ', '.').lower(), smsuser.id)
        username = "******" % (username_part, TEST_DOMAIN)
        self.assertEqual(username, ewsghana_smsuser.username)
        self.assertEqual(smsuser.is_active, str(ewsghana_smsuser.is_active))
        self.assertEqual(False, ewsghana_smsuser.is_superuser)
        self.assertEqual(False, ewsghana_smsuser.is_staff)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '2222222222')
        domain_name = ewsghana_smsuser.get_domains()[0]
        self.assertEqual(TEST_DOMAIN, domain_name)
        self.assertIsInstance(ewsghana_smsuser.user_data['role'], list)
        self.assertEqual(len(ewsghana_smsuser.user_data['role']), 1)
        self.assertEqual(ewsghana_smsuser.user_data['role'][0], 'Other')

    def test_edit_smsuser(self):
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])

        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        user_id = ewsghana_smsuser.get_id
        self.assertIsNotNone(user_id)
        smsuser.phone_numbers = ['111111111']
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertEqual(user_id, ewsghana_smsuser.get_id)
        self.assertEqual(ewsghana_smsuser.default_phone_number, '111111111')
        self.assertListEqual(ewsghana_smsuser.phone_numbers, ['111111111'])
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '111111111')

    def test_edit_phone_number1(self):
        """
        When phone number is deleted on EWS side it also should be deleted in HQ
        :return:
        """
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])

        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        smsuser.phone_numbers = []
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertIsNone(ewsghana_smsuser.default_phone_number)
        self.assertListEqual(ewsghana_smsuser.phone_numbers, [])
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNone(verified_number)

    def test_edit_phone_number2(self):
        """
        When phone number is added on EWS side it also should be added in HQ
        """
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])
        smsuser.phone_numbers = []
        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNone(verified_number)
        smsuser.phone_numbers = ['111111111']
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertIsNotNone(ewsghana_smsuser.default_phone_number)
        self.assertListEqual(ewsghana_smsuser.phone_numbers, ['111111111'])
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '111111111')

    def test_edit_phone_number3(self):
        """
        When phone number is edited on EWS side it also should be edited in HQ
        """
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])
        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '2222222222')
        smsuser.phone_numbers = ['111111111']
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertIsNotNone(ewsghana_smsuser.default_phone_number)
        self.assertListEqual(ewsghana_smsuser.phone_numbers, ['111111111'])
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '111111111')

    def test_edit_phone_number4(self):
        """
            Number shouldn't be changed when is not edited on EWS side.
        """
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[0])
        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '2222222222')
        ewsghana_smsuser = self.api_object.sms_user_sync(smsuser)
        verified_number = ewsghana_smsuser.get_verified_number()
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.phone_number, '2222222222')