Ejemplo n.º 1
0
class ProductSyncTest(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)
        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)))
        ewsghana_product = self.api_object.product_sync(product)
        self.assertEqual(product.sms_code, ewsghana_product.code.lower())
        self.assertEqual(product.name, ewsghana_product.name)
        self.assertEqual(product.description, ewsghana_product.description)
        self.assertEqual(product.units, str(ewsghana_product.unit))
        self.assertIsNotNone(ewsghana_product.program_id)
        program = Program.get(ewsghana_product.program_id)
        self.assertEqual(product.program.name, program.name)
        self.assertEqual(product.program.code, program.code)
Ejemplo n.º 2
0
class TestStockDataSync(TestCase):
    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.stock_api_object = MockEWSStockDataSynchronization(
            TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)
        self.api_object = EWSApi(TEST_DOMAIN, self.endpoint)
        self.api_object.prepare_commtrack_config()
        config = EWSGhanaConfig()
        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='Hospital',
                      domain=TEST_DOMAIN)

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

        l1.save()
        l2.save()

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

        l1.save()
        l2.save()

        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))

    def test_stock_data_migration(self):
        stock_data_task(self.stock_api_object)
        self.assertEqual(
            StockTransaction.objects.filter(
                report__domain=TEST_DOMAIN).count(), 11)
        self.assertEqual(StockState.objects.all().count(), 8)
        self.assertEqual(
            StockTransaction.objects.filter(subtype='inferred').count(), 1)
        self.assertEqual(StockReport.objects.all().count(), 1)

    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(
            StockTransaction.objects.filter(
                report__domain=TEST_DOMAIN).count(), 11)
        self.assertEqual(StockState.objects.all().count(), 8)
        self.assertEqual(
            StockTransaction.objects.filter(subtype='inferred').count(), 0)
        self.assertEqual(StockReport.objects.all().count(), 1)

    def tearDown(self):
        Domain.get_by_name(TEST_DOMAIN).delete()
Ejemplo n.º 3
0
class TestStockDataSync(TestCase):

    def setUp(self):
        self.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy')
        self.stock_api_object = MockEWSStockDataSynchronization(TEST_DOMAIN, self.endpoint)
        self.datapath = os.path.join(os.path.dirname(__file__), 'data')
        initial_bootstrap(TEST_DOMAIN)
        self.api_object = EWSApi(TEST_DOMAIN, self.endpoint)
        self.api_object.prepare_commtrack_config()
        config = EWSGhanaConfig()
        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='Hospital',
            domain=TEST_DOMAIN
        )

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

        l1.save()
        l2.save()

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

        l1.save()
        l2.save()

        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))

    def test_stock_data_migration(self):
        stock_data_task(self.stock_api_object)
        self.assertEqual(StockTransaction.objects.filter(report__domain=TEST_DOMAIN).count(), 11)
        self.assertEqual(StockState.objects.all().count(), 8)
        self.assertEqual(StockTransaction.objects.filter(subtype='inferred').count(), 1)
        self.assertEqual(StockReport.objects.all().count(), 1)

    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(StockTransaction.objects.filter(report__domain=TEST_DOMAIN).count(), 11)
        self.assertEqual(StockState.objects.all().count(), 8)
        self.assertEqual(StockTransaction.objects.filter(subtype='inferred').count(), 0)
        self.assertEqual(StockReport.objects.all().count(), 1)

    def tearDown(self):
        Domain.get_by_name(TEST_DOMAIN).delete()
Ejemplo n.º 4
0
class LocationSyncTest(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()
        for location in CouchLocation.by_domain(TEST_DOMAIN):
            location.delete()

        for sql_location in SQLLocation.objects.all():
            sql_location.delete()

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

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

        sql_location = ewsghana_location.sql_location
        self.assertEqual(ewsghana_location.get_id, sql_location.location_id)
        self.assertIsNotNone(sql_location.id)
        self.assertIsNone(ewsghana_location.linked_supply_point())
        self.assertIsNone(sql_location.supply_point_id)

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

        with open(os.path.join(self.datapath, 'sample_products.json')) as f:
            for p in json.loads(f.read()):
                self.api_object.product_sync(Product(p))
        self.assertEqual(8, SQLProduct.objects.filter(domain=TEST_DOMAIN).count())
        ewsghana_location = self.api_object.location_sync(location)
        self.assertEqual(ewsghana_location.name, location.supply_points[0].name)
        self.assertEqual(ewsghana_location.site_code, location.supply_points[0].code)
        self.assertEqual("Hospital", ewsghana_location.location_type)
        self.assertEqual(ewsghana_location.longitude, float(location.longitude))
        self.assertEqual(ewsghana_location.latitude, float(location.latitude))
        self.assertFalse(ewsghana_location.is_archived)

        sql_location = ewsghana_location.sql_location
        self.assertEqual(ewsghana_location.get_id, sql_location.location_id)
        self.assertEqual(int(sql_location.parent.external_id), location.parent_id)
        self.assertIsNotNone(sql_location.id)
        self.assertIsNotNone(sql_location.supply_point_id)
        supply_point = SupplyPointCase.get_by_location_id(TEST_DOMAIN, sql_location.location_id)
        self.assertIsNotNone(supply_point)
        self.assertEqual(location.supply_points[0].id, int(supply_point.external_id))
        self.assertEqual(location.supply_points[0].name, supply_point.name)
        self.assertListEqual(location.supply_points[0].products,
                             [product.code for product in ewsghana_location.sql_location.products])

    def test_create_region_with_two_supply_points(self):
        with open(os.path.join(self.datapath, 'sample_locations.json')) as f:
            location = Location(json.loads(f.read())[4])

        ewsghana_location = self.api_object.location_sync(location)
        self.assertEqual(2, SQLLocation.objects.filter(
            domain=TEST_DOMAIN,
            location_type__administrative=False).count()
        )
        self.assertIsNone(ewsghana_location.linked_supply_point())
        self.assertIsNone(ewsghana_location.sql_location.supply_point_id)
        self.assertEqual(location.name, ewsghana_location.sql_location.name)
        self.assertEqual(location.code, ewsghana_location.sql_location.site_code)
        self.assertFalse(ewsghana_location.is_archived)

    def test_facility_without_supply_point(self):
        with open(os.path.join(self.datapath, 'sample_locations.json')) as f:
            location = Location(json.loads(f.read())[5])

        ewsghana_location = self.api_object.location_sync(location)
        self.assertEqual(1, SQLLocation.objects.filter(
            domain=TEST_DOMAIN,
            location_type__administrative=False).count()
        )
        self.assertIsNotNone(ewsghana_location.linked_supply_point())
        self.assertIsNotNone(ewsghana_location.sql_location.supply_point_id)
        self.assertEqual(ewsghana_location.name, location.name)
        self.assertEqual(ewsghana_location.site_code, location.code)
        self.assertTrue(ewsghana_location.is_archived)

    def test_facility_with_inactive_and_active_supply_point(self):
        with open(os.path.join(self.datapath, 'sample_locations.json')) as f:
            location = Location(json.loads(f.read())[6])

        ewsghana_location = self.api_object.location_sync(location)
        self.assertEqual("tsactive", ewsghana_location.site_code)
        self.assertEqual("Active Test hospital", ewsghana_location.name)
        self.assertFalse(ewsghana_location.is_archived)