Example #1
0
 def setUp(self):
     self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
     self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
     self.datapath = os.path.join(os.path.dirname(__file__), 'data')
     initial_bootstrap(TEST_DOMAIN)
     for product in Prod.by_domain(TEST_DOMAIN):
         product.delete()
class TestStockTransactionSync(TestCase):
    def setUp(self):
        self.endpoint = MockEndpoint("http://test-api.com/", "dummy", "dummy")
        self.stock_api_object = MockILSStockDataSynchronization(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), "data")
        initial_bootstrap(TEST_DOMAIN)
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.api_object.prepare_commtrack_config()
        config = ILSGatewayConfig()
        config.domain = TEST_DOMAIN
        config.enabled = True
        config.all_stock_data = True
        config.password = "******"
        config.username = "******"
        config.url = "http://test-api.com/"
        config.save()
        l1 = Location(name="Test location 1", external_id="3445", location_type="FACILITY", domain=TEST_DOMAIN)

        l2 = Location(name="Test location 2", external_id="4407", location_type="FACILITY", domain=TEST_DOMAIN)

        l1.save()
        l2.save()

        SupplyPointCase.create_from_location(TEST_DOMAIN, l1)
        SupplyPointCase.create_from_location(TEST_DOMAIN, l2)

        with open(os.path.join(self.datapath, "sample_products.json")) as f:
            for product_json in json.loads(f.read()):
                self.api_object.product_sync(Product(product_json))

        StockTransaction.objects.all().delete()

    def test_stock_data_migration(self):
        stock_data_task(self.stock_api_object)
        self.assertEqual(SupplyPointStatus.objects.all().count(), 5)
        self.assertEqual(SupplyPointStatus.objects.all().values_list("location_id", flat=True).distinct().count(), 2)
        self.assertEqual(StockTransaction.objects.filter(report__domain=TEST_DOMAIN).count(), 16)
        self.assertEqual(DeliveryGroupReport.objects.all().count(), 4)
        self.assertEqual(DeliveryGroupReport.objects.all().values_list("location_id", flat=True).distinct().count(), 2)
        self.assertEqual(StockState.objects.all().count(), 6)
        self.assertEqual(StockReport.objects.all().count(), 2)

    def test_stock_data_migration2(self):
        StockDataCheckpoint.objects.create(
            domain=TEST_DOMAIN, api="", limit=1000, offset=0, date=datetime.datetime(2015, 7, 1)
        )
        stock_data_task(self.stock_api_object)
        self.assertEqual(SupplyPointStatus.objects.all().count(), 5)
        self.assertEqual(SupplyPointStatus.objects.all().values_list("location_id", flat=True).distinct().count(), 2)
        self.assertEqual(StockTransaction.objects.filter(report__domain=TEST_DOMAIN).count(), 15)
        self.assertEqual(DeliveryGroupReport.objects.all().count(), 4)
        self.assertEqual(DeliveryGroupReport.objects.all().values_list("location_id", flat=True).distinct().count(), 2)
        self.assertEqual(StockState.objects.all().count(), 6)
        self.assertEqual(StockReport.objects.all().count(), 2)

    def tearDown(self):
        Domain.get_by_name(TEST_DOMAIN).delete()
Example #3
0
 def setUp(self):
     self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
     self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
     self.datapath = os.path.join(os.path.dirname(__file__), 'data')
     domain = initial_bootstrap(TEST_DOMAIN)
     CommtrackConfig(domain=domain.name).save()
     self.api_object.prepare_commtrack_config()
     for location in Location.by_domain(TEST_DOMAIN):
         location.delete()
 def setUp(self):
     self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
     self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
     self.datapath = os.path.join(os.path.dirname(__file__), 'data')
     initial_bootstrap(TEST_DOMAIN)
     for location in Location.by_domain(TEST_DOMAIN):
         location.delete()
    def setUp(self):
        self.endpoint = MockEndpoint("http://test-api.com/", "dummy", "dummy")
        self.stock_api_object = MockILSStockDataSynchronization(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), "data")
        initial_bootstrap(TEST_DOMAIN)
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.api_object.prepare_commtrack_config()
        config = ILSGatewayConfig()
        config.domain = TEST_DOMAIN
        config.enabled = True
        config.all_stock_data = True
        config.password = "******"
        config.username = "******"
        config.url = "http://test-api.com/"
        config.save()
        l1 = Location(name="Test location 1", external_id="3445", location_type="FACILITY", domain=TEST_DOMAIN)

        l2 = Location(name="Test location 2", external_id="4407", location_type="FACILITY", domain=TEST_DOMAIN)

        l1.save()
        l2.save()

        SupplyPointCase.create_from_location(TEST_DOMAIN, l1)
        SupplyPointCase.create_from_location(TEST_DOMAIN, l2)

        with open(os.path.join(self.datapath, "sample_products.json")) as f:
            for product_json in json.loads(f.read()):
                self.api_object.product_sync(Product(product_json))

        StockTransaction.objects.all().delete()
class ProductSyncTest(TestCase):
    def setUp(self):
        self.endpoint = MockEndpoint("http://test-api.com/", "dummy", "dummy")
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), "data")
        initial_bootstrap(TEST_DOMAIN)
        for product in Prod.by_domain(TEST_DOMAIN):
            product.delete()

    def test_create_product(self):
        with open(os.path.join(self.datapath, "sample_products.json")) as f:
            product = Product(json.loads(f.read())[0])
        self.assertEqual(0, len(Prod.by_domain(TEST_DOMAIN)))
        ilsgateway_product = self.api_object.product_sync(product)
        self.assertEqual(product.sms_code, ilsgateway_product.code.lower())
        self.assertEqual(product.name, ilsgateway_product.name)
        self.assertEqual(product.description, ilsgateway_product.description)
        self.assertEqual(product.units, str(ilsgateway_product.unit))

    def test_products_migration(self):
        checkpoint = MigrationCheckpoint(
            domain=TEST_DOMAIN, start_date=datetime.utcnow(), date=datetime.utcnow(), api="product", limit=100, offset=0
        )
        product_api = ApiSyncObject("product", self.endpoint.get_products, self.api_object.product_sync)
        synchronization(product_api, checkpoint, None, 100, 0)
        self.assertEqual("product", checkpoint.api)
        self.assertEqual(100, checkpoint.limit)
        self.assertEqual(0, checkpoint.offset)
        self.assertEqual(6, len(list(Prod.by_domain(TEST_DOMAIN))))
 def setUp(self):
     self.endpoint = MockEndpoint("http://test-api.com/", "dummy", "dummy")
     self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
     self.datapath = os.path.join(os.path.dirname(__file__), "data")
     initial_bootstrap(TEST_DOMAIN)
     for product in Prod.by_domain(TEST_DOMAIN):
         product.delete()
 def setUp(self):
     self.endpoint = MockEndpoint("http://test-api.com/", "dummy", "dummy")
     self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
     self.datapath = os.path.join(os.path.dirname(__file__), "data")
     domain = initial_bootstrap(TEST_DOMAIN)
     CommtrackConfig(domain=domain.name).save()
     self.api_object.prepare_commtrack_config()
     for location in Location.by_domain(TEST_DOMAIN):
         location.delete()
Example #9
0
    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.stock_api_object = MockILSStockDataSynchronization(
            TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.api_object.prepare_commtrack_config()
        config = ILSGatewayConfig()
        config.domain = TEST_DOMAIN
        config.enabled = True
        config.all_stock_data = True
        config.password = '******'
        config.username = '******'
        config.url = 'http://test-api.com/'
        config.save()
        l1 = Location(name='Test location 1',
                      external_id='3445',
                      location_type='FACILITY',
                      domain=TEST_DOMAIN)

        l2 = Location(name='Test location 2',
                      external_id='4407',
                      location_type='FACILITY',
                      domain=TEST_DOMAIN)

        l1.save()
        l2.save()

        SupplyPointCase.create_from_location(TEST_DOMAIN, l1)
        SupplyPointCase.create_from_location(TEST_DOMAIN, l2)

        with open(os.path.join(self.datapath, 'sample_products.json')) as f:
            for product_json in json.loads(f.read()):
                self.api_object.product_sync(Product(product_json))

        StockTransaction.objects.all().delete()
Example #10
0
class SMSUsersSyncTest(TestCase):

    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)

        for user in CommCareUser.by_domain(TEST_DOMAIN):
            user.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)))
        ilsgateway_smsuser = self.api_object.sms_user_sync(smsuser)
        first_name, last_name = ilsgateway_smsuser.name.split(' ', 1)
        username_part = "%s%d" % (ilsgateway_smsuser.name.strip().replace(' ', '.').lower(), smsuser.id)
        username = "******" % (username_part, TEST_DOMAIN)

        self.assertEqual(username, ilsgateway_smsuser.username)
        self.assertEqual(first_name, ilsgateway_smsuser.first_name)
        self.assertEqual(last_name, ilsgateway_smsuser.last_name)
        self.assertEqual(smsuser.is_active, str(ilsgateway_smsuser.is_active))
        self.assertEqual(TEST_DOMAIN, ilsgateway_smsuser.get_domains()[0])
        self.assertEqual(smsuser.phone_numbers[0], ilsgateway_smsuser.default_phone_number)

    def test_smsusers_migration(self):
        checkpoint = MigrationCheckpoint(
            domain=TEST_DOMAIN,
            start_date=datetime.utcnow(),
            date=datetime.utcnow(),
            api='product',
            limit=100,
            offset=0
        )
        sms_user_api = ApiSyncObject(
            'smsuser',
            self.endpoint.get_smsusers,
            self.api_object.sms_user_sync
        )
        synchronization(sms_user_api, checkpoint, None, 100, 0)
        self.assertEqual('smsuser', checkpoint.api)
        self.assertEqual(100, checkpoint.limit)
        self.assertEqual(0, checkpoint.offset)
        self.assertEqual(6, len(CommCareUser.by_domain(TEST_DOMAIN)))
class WebUsersSyncTest(TestCase):

    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)

        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 = ILSUser(json.loads(f.read())[0])

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

    def test_webusers_migration(self):
        checkpoint = MigrationCheckpoint(
            domain=TEST_DOMAIN,
            start_date=datetime.utcnow(),
            date=datetime.utcnow(),
            api='product',
            limit=100,
            offset=0
        )
        synchronization('webuser',
                        self.endpoint.get_webusers,
                        self.api_object.web_user_sync, checkpoint, None, 100, 0)
        self.assertEqual('webuser', checkpoint.api)
        self.assertEqual(100, checkpoint.limit)
        self.assertEqual(0, checkpoint.offset)
        self.assertEqual(5, len(list(WebUser.by_domain(TEST_DOMAIN))))
Example #12
0
class WebUsersSyncTest(TestCase):
    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)

        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 = ILSUser(json.loads(f.read())[0])

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

    def test_webusers_migration(self):
        checkpoint = MigrationCheckpoint(domain=TEST_DOMAIN,
                                         start_date=datetime.utcnow(),
                                         date=datetime.utcnow(),
                                         api='product',
                                         limit=100,
                                         offset=0)
        location_api = ApiSyncObject('webuser', self.endpoint.get_webusers,
                                     self.api_object.web_user_sync)
        synchronization(location_api, checkpoint, None, 100, 0)
        self.assertEqual('webuser', checkpoint.api)
        self.assertEqual(100, checkpoint.limit)
        self.assertEqual(0, checkpoint.offset)
        self.assertEqual(5, len(list(WebUser.by_domain(TEST_DOMAIN))))
    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)
        config = ILSGatewayConfig(
            domain=TEST_DOMAIN, enabled=True, all_stock_data=True, password='******', username='******',
            url='http//test-api.com/'
        )
        config.save()

        with open(os.path.join(self.datapath, 'sample_locations.json')) as f:
            location = Loc(**json.loads(f.read())[1])
        self.api_object.prepare_commtrack_config()
        self.api_object.location_sync(location)

        for user in WebUser.by_domain(TEST_DOMAIN):
            user.delete()
Example #14
0
class ProductSyncTest(TestCase):

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

    def test_create_product(self):
        with open(os.path.join(self.datapath, 'sample_products.json')) as f:
            product = Product(json.loads(f.read())[0])
        self.assertEqual(0, len(Prod.by_domain(TEST_DOMAIN)))
        ilsgateway_product = self.api_object.product_sync(product)
        self.assertEqual(product.sms_code, ilsgateway_product.code.lower())
        self.assertEqual(product.name, ilsgateway_product.name)
        self.assertEqual(product.description, ilsgateway_product.description)
        self.assertEqual(product.units, str(ilsgateway_product.unit))

    def test_products_migration(self):
        checkpoint = MigrationCheckpoint(
            domain=TEST_DOMAIN,
            start_date=datetime.utcnow(),
            date=datetime.utcnow(),
            api='product',
            limit=100,
            offset=0
        )
        product_api = ApiSyncObject(
            'product',
            self.endpoint.get_products,
            self.api_object.product_sync
        )
        synchronization(product_api, checkpoint, None, 100, 0)
        self.assertEqual('product', checkpoint.api)
        self.assertEqual(100, checkpoint.limit)
        self.assertEqual(0, checkpoint.offset)
        self.assertEqual(6, len(list(Prod.by_domain(TEST_DOMAIN))))
Example #15
0
class LocationSyncTest(TestCase):

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

    def test_create_location(self):
        with open(os.path.join(self.datapath, 'sample_locations.json')) as f:
            location = Loc(**json.loads(f.read())[1])

        ilsgateway_location = self.api_object.location_sync(location)
        self.assertEqual(ilsgateway_location.name, location.name)
        self.assertEqual(ilsgateway_location.location_type, location.type)
        self.assertEqual(ilsgateway_location.longitude, float(location.longitude))
        self.assertEqual(ilsgateway_location.latitude, float(location.latitude))
        self.assertEqual(ilsgateway_location.parent, location.parent_id)

    def test_locations_migration(self):
        checkpoint = MigrationCheckpoint(
            domain=TEST_DOMAIN,
            start_date=datetime.now(),
            date=datetime.now(),
            api='product',
            limit=100,
            offset=0
        )
        synchronization('location_facility',
                        self.endpoint.get_locations,
                        self.api_object.location_sync, checkpoint, None, 100, 0, filters=dict(type='facility'))
        self.assertEqual('location_facility', checkpoint.api)
        self.assertEqual(100, checkpoint.limit)
        self.assertEqual(0, checkpoint.offset)
        self.assertEqual(4, len(list(Location.by_domain(TEST_DOMAIN))))
class SMSUsersSyncTest(TestCase):

    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)

        for user in CommCareUser.by_domain(TEST_DOMAIN):
            user.delete()

    def tearDown(self):
        for vn in VerifiedNumber.by_domain(TEST_DOMAIN):
            vn.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)))
        ilsgateway_smsuser = self.api_object.sms_user_sync(smsuser)
        first_name, last_name = ilsgateway_smsuser.name.split(' ', 1)
        username_part = "%s%d" % (ilsgateway_smsuser.name.strip().replace(' ', '.').lower(), smsuser.id)
        username = "******" % (username_part, TEST_DOMAIN)

        self.assertEqual(username, ilsgateway_smsuser.username)
        self.assertEqual(first_name, ilsgateway_smsuser.first_name)
        self.assertEqual(last_name, ilsgateway_smsuser.last_name)
        self.assertEqual(smsuser.is_active, ilsgateway_smsuser.is_active)
        self.assertEqual(TEST_DOMAIN, ilsgateway_smsuser.get_domains()[0])
        self.assertEqual(ilsgateway_smsuser.default_phone_number, '4224242442')
        verified_number = VerifiedNumber.by_phone(ilsgateway_smsuser.default_phone_number)
        self.assertIsNotNone(verified_number)
        self.assertIsNone(verified_number.backend_id)

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

        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ilsgateway_smsuser = self.api_object.sms_user_sync(smsuser)
        first_name, last_name = ilsgateway_smsuser.name.split(' ', 1)
        username_part = "%s%d" % (ilsgateway_smsuser.name.strip().replace(' ', '.').lower(), smsuser.id)
        username = "******" % (username_part, TEST_DOMAIN)

        self.assertEqual(username, ilsgateway_smsuser.username)
        self.assertEqual(first_name, ilsgateway_smsuser.first_name)
        self.assertEqual(last_name, ilsgateway_smsuser.last_name)
        self.assertEqual(smsuser.is_active, ilsgateway_smsuser.is_active)
        self.assertEqual(TEST_DOMAIN, ilsgateway_smsuser.get_domains()[0])
        self.assertEqual(ilsgateway_smsuser.default_phone_number, '222')
        verified_number = VerifiedNumber.by_phone(ilsgateway_smsuser.default_phone_number)
        self.assertIsNotNone(verified_number)
        self.assertEqual(verified_number.backend_id, 'MOBILE_BACKEND_TEST')

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

        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ilsgateway_smsuser = self.api_object.sms_user_sync(smsuser)

        self.assertListEqual(ilsgateway_smsuser.phone_numbers, ['2222', '3333'])

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

        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        ilsgateway_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertListEqual(ilsgateway_smsuser.phone_numbers, ['2222', '3333'])
        vn1 = VerifiedNumber.by_phone('2222')
        vn2 = VerifiedNumber.by_phone('3333')
        self.assertIsNotNone(vn1)
        self.assertIsNotNone(vn2)

        smsuser.phone_numbers = smsuser.phone_numbers[:1]
        ilsgateway_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertListEqual(ilsgateway_smsuser.phone_numbers, ['2222'])
        vn1 = VerifiedNumber.by_phone('2222')
        vn2 = VerifiedNumber.by_phone('3333')
        self.assertIsNotNone(vn1)
        self.assertIsNone(vn2)

        smsuser.phone_numbers = []
        ilsgateway_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertListEqual(ilsgateway_smsuser.phone_numbers, [])
        vn1 = VerifiedNumber.by_phone('2222')
        vn2 = VerifiedNumber.by_phone('3333')
        self.assertIsNone(vn1)
        self.assertIsNone(vn2)

    def test_user_deactivation(self):
        with open(os.path.join(self.datapath, 'sample_smsusers.json')) as f:
            smsuser = SMSUser(json.loads(f.read())[2])
        ilsgateway_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertIsNotNone(ilsgateway_smsuser.get_id)
        self.assertEqual(len(CommCareUser.by_domain(TEST_DOMAIN)), 1)

        smsuser.is_active = False
        ilsgateway_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertIsNotNone(ilsgateway_smsuser)
        self.assertEqual(len(CommCareUser.by_domain(TEST_DOMAIN)), 0)

        smsuser.is_active = True
        ilsgateway_smsuser = self.api_object.sms_user_sync(smsuser)
        self.assertIsNotNone(ilsgateway_smsuser)
        self.assertEqual(len(CommCareUser.by_domain(TEST_DOMAIN)), 1)

    def test_smsusers_migration(self):
        checkpoint = MigrationCheckpoint(
            domain=TEST_DOMAIN,
            start_date=datetime.utcnow(),
            date=datetime.utcnow(),
            api='product',
            limit=100,
            offset=0
        )
        sms_user_api = ApiSyncObject(
            'smsuser',
            self.endpoint.get_smsusers,
            self.api_object.sms_user_sync
        )
        synchronization(sms_user_api, checkpoint, None, 100, 0)
        self.assertEqual('smsuser', checkpoint.api)
        self.assertEqual(100, checkpoint.limit)
        self.assertEqual(0, checkpoint.offset)
        self.assertEqual(6, len(CommCareUser.by_domain(TEST_DOMAIN)))
Example #17
0
class TestStockTransactionSync(TestCase):
    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.stock_api_object = MockILSStockDataSynchronization(
            TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.api_object.prepare_commtrack_config()
        config = ILSGatewayConfig()
        config.domain = TEST_DOMAIN
        config.enabled = True
        config.all_stock_data = True
        config.password = '******'
        config.username = '******'
        config.url = 'http://test-api.com/'
        config.save()
        l1 = Location(name='Test location 1',
                      external_id='3445',
                      location_type='FACILITY',
                      domain=TEST_DOMAIN)

        l2 = Location(name='Test location 2',
                      external_id='4407',
                      location_type='FACILITY',
                      domain=TEST_DOMAIN)

        l1.save()
        l2.save()

        SupplyPointCase.create_from_location(TEST_DOMAIN, l1)
        SupplyPointCase.create_from_location(TEST_DOMAIN, l2)

        with open(os.path.join(self.datapath, 'sample_products.json')) as f:
            for product_json in json.loads(f.read()):
                self.api_object.product_sync(Product(product_json))

        StockTransaction.objects.all().delete()

    def test_stock_data_migration(self):
        stock_data_task(self.stock_api_object)
        self.assertEqual(SupplyPointStatus.objects.all().count(), 5)
        self.assertEqual(
            StockTransaction.objects.filter(
                report__domain=TEST_DOMAIN).count(), 16)
        self.assertEqual(DeliveryGroupReport.objects.all().count(), 4)
        self.assertEqual(StockState.objects.all().count(), 6)
        self.assertEqual(StockReport.objects.all().count(), 2)

    def test_stock_data_migration2(self):
        StockDataCheckpoint.objects.create(domain=TEST_DOMAIN,
                                           api='',
                                           limit=1000,
                                           offset=0,
                                           date=datetime.datetime(2015, 7, 1))
        stock_data_task(self.stock_api_object)
        self.assertEqual(SupplyPointStatus.objects.all().count(), 5)
        self.assertEqual(
            StockTransaction.objects.filter(
                report__domain=TEST_DOMAIN).count(), 15)
        self.assertEqual(DeliveryGroupReport.objects.all().count(), 4)
        self.assertEqual(StockState.objects.all().count(), 6)
        self.assertEqual(StockReport.objects.all().count(), 2)

    def tearDown(self):
        Domain.get_by_name(TEST_DOMAIN).delete()
Example #18
0
def ils_resync_web_users(request, domain):
    config = ILSGatewayConfig.for_domain(domain)
    endpoint = ILSGatewayEndpoint.from_config(config)
    resync_web_users.delay(ILSGatewayAPI(domain=domain, endpoint=endpoint))
    return HttpResponse('OK')
Example #19
0
class LocationSyncTest(TestCase):

    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        domain = initial_bootstrap(TEST_DOMAIN)
        CommtrackConfig(domain=domain.name).save()
        self.api_object.prepare_commtrack_config()
        for location in Location.by_domain(TEST_DOMAIN):
            location.delete()

    def test_create_facility_location(self):
        with open(os.path.join(self.datapath, 'sample_locations.json')) as f:
            location = Loc(**json.loads(f.read())[0])

        ilsgateway_location = self.api_object.location_sync(location)
        self.assertEqual(ilsgateway_location.name, location.name)
        self.assertEqual(ilsgateway_location.location_type, location.type)
        self.assertEqual(ilsgateway_location.longitude, float(location.longitude))
        self.assertEqual(ilsgateway_location.latitude, float(location.latitude))
        self.assertEqual(int(ilsgateway_location.parent.sql_location.external_id), location.parent_id)
        self.assertIsNotNone(ilsgateway_location.linked_supply_point())
        self.assertIsNotNone(ilsgateway_location.sql_location.supply_point_id)

    def test_create_non_facility_location(self):
        with open(os.path.join(self.datapath, 'sample_locations.json')) as f:
            location = Loc(**json.loads(f.read())[1])

        ilsgateway_location = self.api_object.location_sync(location)
        self.assertEqual(ilsgateway_location.name, location.name)
        self.assertEqual(ilsgateway_location.location_type, location.type)
        self.assertEqual(ilsgateway_location.longitude, float(location.longitude))
        self.assertEqual(ilsgateway_location.latitude, float(location.latitude))
        self.assertIsNone(ilsgateway_location.parent)
        self.assertIsNone(ilsgateway_location.linked_supply_point())
        self.assertIsNone(ilsgateway_location.sql_location.supply_point_id)

    def test_locations_migration(self):
        checkpoint = MigrationCheckpoint(
            domain=TEST_DOMAIN,
            start_date=datetime.utcnow(),
            date=datetime.utcnow(),
            api='product',
            limit=100,
            offset=0
        )
        location_api = ApiSyncObject(
            'location_facility',
            self.endpoint.get_locations,
            self.api_object.location_sync,
            filters=dict(type='facility')
        )
        synchronization(location_api, checkpoint, None, 100, 0)
        self.assertEqual('location_facility', checkpoint.api)
        self.assertEqual(100, checkpoint.limit)
        self.assertEqual(0, checkpoint.offset)
        self.assertEqual(5, len(list(Location.by_domain(TEST_DOMAIN))))
        self.assertEqual(5, SQLLocation.objects.filter(domain=TEST_DOMAIN).count())
        sql_location = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='DM520053')
        self.assertEqual('FACILITY', sql_location.location_type.name)
        self.assertIsNotNone(sql_location.supply_point_id)

        sql_location2 = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='region-dodoma')
        self.assertEqual('REGION', sql_location2.location_type.name)
        self.assertIsNone(sql_location2.supply_point_id)

    def test_create_excluded_location(self):
        with open(os.path.join(self.datapath, 'sample_locations.json')) as f:
            locations = [Loc(loc) for loc in json.loads(f.read())[4:]]
        ilsgateway_location = self.api_object.location_sync(locations[0])
        self.assertIsNone(ilsgateway_location)

        self.assertEqual(
            SQLLocation.objects.filter(domain=TEST_DOMAIN, site_code=locations[0].code).count(), 0
        )

        ilsgateway_location = self.api_object.location_sync(locations[1])
        self.assertIsNone(ilsgateway_location)

        self.assertEqual(
            SQLLocation.objects.filter(domain=TEST_DOMAIN, site_code=locations[1].code).count(), 0
        )

        ilsgateway_location = self.api_object.location_sync(locations[2])
        self.assertIsNone(ilsgateway_location)

        self.assertEqual(
            SQLLocation.objects.filter(domain=TEST_DOMAIN, site_code=locations[2].code).count(), 0
        )
class LocationSyncTest(TestCase):

    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        domain = initial_bootstrap(TEST_DOMAIN)
        CommtrackConfig(domain=domain.name).save()
        self.api_object.prepare_commtrack_config()
        for location in Location.by_domain(TEST_DOMAIN):
            location.delete()

    def test_create_facility_location(self):
        with open(os.path.join(self.datapath, 'sample_locations.json')) as f:
            location = Loc(**json.loads(f.read())[0])

        ilsgateway_location = self.api_object.location_sync(location)
        self.assertEqual(ilsgateway_location.name, location.name)
        self.assertEqual(ilsgateway_location.location_type, location.type)
        self.assertEqual(ilsgateway_location.longitude, float(location.longitude))
        self.assertEqual(ilsgateway_location.latitude, float(location.latitude))
        self.assertEqual(int(ilsgateway_location.parent.sql_location.external_id), location.parent_id)
        self.assertIsNotNone(ilsgateway_location.linked_supply_point())
        self.assertIsNotNone(ilsgateway_location.sql_location.supply_point_id)

    def test_create_non_facility_location(self):
        with open(os.path.join(self.datapath, 'sample_locations.json')) as f:
            location = Loc(**json.loads(f.read())[1])

        ilsgateway_location = self.api_object.location_sync(location)
        self.assertEqual(ilsgateway_location.name, location.name)
        self.assertEqual(ilsgateway_location.location_type, location.type)
        self.assertEqual(ilsgateway_location.longitude, float(location.longitude))
        self.assertEqual(ilsgateway_location.latitude, float(location.latitude))
        self.assertIsNone(ilsgateway_location.parent)
        self.assertIsNone(ilsgateway_location.linked_supply_point())
        self.assertIsNone(ilsgateway_location.sql_location.supply_point_id)

    def test_locations_migration(self):
        checkpoint = MigrationCheckpoint(
            domain=TEST_DOMAIN,
            start_date=datetime.utcnow(),
            date=datetime.utcnow(),
            api='product',
            limit=100,
            offset=0
        )
        synchronization('location_facility',
                        self.endpoint.get_locations,
                        self.api_object.location_sync, checkpoint, None, 100, 0, filters=dict(type='facility'))
        self.assertEqual('location_facility', checkpoint.api)
        self.assertEqual(100, checkpoint.limit)
        self.assertEqual(0, checkpoint.offset)
        self.assertEqual(4, len(list(Location.by_domain(TEST_DOMAIN))))
        self.assertEqual(4, SQLLocation.objects.filter(domain=TEST_DOMAIN).count())
        sql_location = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='DM520053')
        self.assertEqual('FACILITY', sql_location.location_type.name)
        self.assertIsNotNone(sql_location.supply_point_id)

        sql_location2 = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='region-dodoma')
        self.assertEqual('REGION', sql_location2.location_type.name)
        self.assertIsNone(sql_location2.supply_point_id)
class WebUsersSyncTest(TestCase):

    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)
        config = ILSGatewayConfig(
            domain=TEST_DOMAIN, enabled=True, all_stock_data=True, password='******', username='******',
            url='http//test-api.com/'
        )
        config.save()

        with open(os.path.join(self.datapath, 'sample_locations.json')) as f:
            location = Loc(**json.loads(f.read())[1])
        self.api_object.prepare_commtrack_config()
        self.api_object.location_sync(location)

        for user in WebUser.by_domain(TEST_DOMAIN):
            user.delete()

    def tearDown(self):
        for location in Location.by_domain(TEST_DOMAIN):
            location.delete()

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

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

        sql_ils = ILSGatewayWebUser.objects.get(external_id=webuser.id)
        self.assertEqual(sql_ils.email, ilsgateway_webuser.email)

    def test_edit_webuser_email(self):
        with open(os.path.join(self.datapath, 'sample_webusers.json')) as f:
            webuser = ILSUser(json.loads(f.read())[0])
        self.assertEqual(len(WebUser.by_domain(TEST_DOMAIN)), 0)

        ils_webuser = self.api_object.web_user_sync(webuser)
        self.assertEqual(len(WebUser.by_domain(TEST_DOMAIN)), 1)

        webuser.email = '*****@*****.**'
        ils_webuser2 = self.api_object.web_user_sync(webuser)
        ils_webuser = WebUser.get(docid=ils_webuser.get_id)

        self.assertEqual(len(WebUser.by_domain(TEST_DOMAIN)), 1)
        self.assertIsNone(ils_webuser.get_domain_membership(TEST_DOMAIN))
        self.assertEqual(ils_webuser2.username, '*****@*****.**')

    def test_webusers_migration(self):
        checkpoint = MigrationCheckpoint(
            domain=TEST_DOMAIN,
            start_date=datetime.utcnow(),
            date=datetime.utcnow(),
            api='product',
            limit=100,
            offset=0
        )
        location_api = ApiSyncObject(
            'webuser',
            self.endpoint.get_webusers,
            self.api_object.web_user_sync
        )
        synchronization(location_api, checkpoint, None, 100, 0)
        self.assertEqual('webuser', checkpoint.api)
        self.assertEqual(100, checkpoint.limit)
        self.assertEqual(0, checkpoint.offset)
        self.assertEqual(5, len(list(WebUser.by_domain(TEST_DOMAIN))))
Example #22
0
def ils_bootstrap_domain_test_task(domain, endpoint):
    from custom.logistics.commtrack import bootstrap_domain
    from custom.ilsgateway.api import ILSGatewayAPI
    return bootstrap_domain(ILSGatewayAPI(domain, endpoint))
Example #23
0
class LocationSyncTest(TestCase):
    def setUp(self):
        self.endpoint = MockEndpoint("http://test-api.com/", "dummy", "dummy")
        self.api_object = ILSGatewayAPI(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), "data")
        domain = initial_bootstrap(TEST_DOMAIN)
        CommtrackConfig(domain=domain.name).save()
        self.api_object.prepare_commtrack_config()
        for location in Location.by_domain(TEST_DOMAIN):
            location.delete()

    def test_create_facility_location(self):
        with open(os.path.join(self.datapath, "sample_locations.json")) as f:
            location = Loc(**json.loads(f.read())[0])

        ilsgateway_location = self.api_object.location_sync(location)
        self.assertEqual(ilsgateway_location.name, location.name)
        self.assertEqual(ilsgateway_location.location_type, location.type)
        self.assertEqual(ilsgateway_location.longitude, float(location.longitude))
        self.assertEqual(ilsgateway_location.latitude, float(location.latitude))
        self.assertEqual(int(ilsgateway_location.parent.sql_location.external_id), location.parent_id)
        self.assertIsNotNone(ilsgateway_location.linked_supply_point())
        self.assertIsNotNone(ilsgateway_location.sql_location.supply_point_id)

    def test_create_non_facility_location(self):
        with open(os.path.join(self.datapath, "sample_locations.json")) as f:
            location = Loc(**json.loads(f.read())[1])

        ilsgateway_location = self.api_object.location_sync(location)
        self.assertEqual(ilsgateway_location.name, location.name)
        self.assertEqual(ilsgateway_location.location_type, location.type)
        self.assertEqual(ilsgateway_location.longitude, float(location.longitude))
        self.assertEqual(ilsgateway_location.latitude, float(location.latitude))
        self.assertIsNone(ilsgateway_location.parent)
        self.assertIsNone(ilsgateway_location.linked_supply_point())
        self.assertIsNone(ilsgateway_location.sql_location.supply_point_id)

    def test_locations_migration(self):
        checkpoint = MigrationCheckpoint(
            domain=TEST_DOMAIN, start_date=datetime.utcnow(), date=datetime.utcnow(), api="product", limit=100, offset=0
        )
        location_api = ApiSyncObject(
            "location_facility",
            self.endpoint.get_locations,
            self.api_object.location_sync,
            filters=dict(type="facility"),
        )
        synchronization(location_api, checkpoint, None, 100, 0)
        self.assertEqual("location_facility", checkpoint.api)
        self.assertEqual(100, checkpoint.limit)
        self.assertEqual(0, checkpoint.offset)
        self.assertEqual(5, len(list(Location.by_domain(TEST_DOMAIN))))
        self.assertEqual(5, SQLLocation.objects.filter(domain=TEST_DOMAIN).count())
        sql_location = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code="DM520053")
        self.assertEqual("FACILITY", sql_location.location_type.name)
        self.assertIsNotNone(sql_location.supply_point_id)

        sql_location2 = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code="region-dodoma")
        self.assertEqual("REGION", sql_location2.location_type.name)
        self.assertIsNone(sql_location2.supply_point_id)

    def test_create_excluded_location(self):
        with open(os.path.join(self.datapath, "sample_locations.json")) as f:
            locations = [Loc(loc) for loc in json.loads(f.read())[4:]]
        ilsgateway_location = self.api_object.location_sync(locations[0])
        self.assertIsNone(ilsgateway_location)

        self.assertEqual(SQLLocation.objects.filter(domain=TEST_DOMAIN, site_code=locations[0].code).count(), 0)

        ilsgateway_location = self.api_object.location_sync(locations[1])
        self.assertIsNone(ilsgateway_location)

        self.assertEqual(SQLLocation.objects.filter(domain=TEST_DOMAIN, site_code=locations[1].code).count(), 0)

        ilsgateway_location = self.api_object.location_sync(locations[2])
        self.assertIsNone(ilsgateway_location)

        self.assertEqual(SQLLocation.objects.filter(domain=TEST_DOMAIN, site_code=locations[2].code).count(), 0)