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()
Esempio n. 2
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
        )
Esempio n. 3
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)
Esempio n. 4
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)
        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))))
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)
Esempio n. 6
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()