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