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