def test_verify_invite(self, mock_invoke_lambda): test_org_uuid = uuid4().hex owner_username = "******" org_repo.add_organization( DomainOrganization( test_org_uuid, "org_id", "org_dummy", "ORGANIZATION", ORIGIN, "description", "short_description", "https://test.io", ORG_CONTACTS, {}, "ipfs_hash", "123456879", [], [], [], []), owner_username, OrganizationStatus.PUBLISHED.value) member_username = "******" member_invite_code = uuid4().hex org_repo.add_item( OrganizationMember( username=member_username, org_uuid=test_org_uuid, role=Role.MEMBER.value, address="0x123", status=OrganizationMemberStatus.PENDING.value, transaction_hash="0x123", invite_code=member_invite_code, invited_on=datetime.utcnow(), updated_on=datetime.utcnow() ) ) self.assertEqual(OrganizationPublisherService(None, member_username).verify_invite(member_invite_code), "OK") self.assertEqual(OrganizationPublisherService(None, member_username).verify_invite("1234"), "NOT_FOUND")
def add_member(self, org_member): member_db_models = [] current_time = datetime.utcnow() for member in org_member: member_db_models.append( OrganizationMember(org_uuid=member.org_uuid, role=member.role, status=member.status, address=member.address, transaction_hash=member.transaction_hash, username=member.username, invite_code=member.invite_code, updated_on=member.updated_on, invited_on=member.invited_on, created_on=current_time)) self.add_all_items(member_db_models)
def test_publish_members(self): test_org_uuid = uuid4().hex owner_username = "******" org_repo.add_organization( DomainOrganization( test_org_uuid, "org_id", "org_dummy", "ORGANIZATION", ORIGIN, "description", "short_description", "https://test.io", ORG_CONTACTS, {}, "ipfs_hash", "123456879", [], [], [], []), owner_username, OrganizationStatus.PUBLISHED.value) new_org_members = [ { "username": "******", "address": "0x123" }, { "username": "******", "address": "0x234" }, { "username": "******", "address": "0x345" } ] org_repo.add_all_items( [ OrganizationMember( username=member["username"], org_uuid=test_org_uuid, role=Role.MEMBER.value, address=member["address"], status=OrganizationMemberStatus.ACCEPTED.value, transaction_hash="0x123", invite_code=uuid4().hex, invited_on=datetime.utcnow(), updated_on=datetime.utcnow() ) for member in new_org_members ] ) OrganizationPublisherService(test_org_uuid, owner_username).publish_members("0x123", new_org_members) org_members = org_repo.session.query(OrganizationMember).filter(OrganizationMember.org_uuid == test_org_uuid)\ .filter(OrganizationMember.status == OrganizationMemberStatus.PUBLISH_IN_PROGRESS.value).all() if len(org_members) == 3: assert True else: assert False
def test_update_service_transaction_status(self, mock_blockchain_utils): mock_blockchain_utils.return_value = Mock( get_transaction_receipt_from_blockchain=Mock(return_value=Mock(status=0))) test_org_uuid = uuid4().hex test_service_uuid = uuid4().hex test_org_id = "org_id" username = "******" current_time = datetime.now() org_state = OrganizationState( org_uuid=test_org_uuid, state=OrganizationStatus.PUBLISH_IN_PROGRESS.value, transaction_hash="0x123", test_transaction_hash="0x456", wallet_address="0x987", created_by=username, created_on=current_time, updated_by=username, updated_on=current_time, reviewed_by="admin", reviewed_on=current_time) group = Group( name="default_group", id="group_id", org_uuid=test_org_uuid, payment_address="0x123", payment_config={ "payment_expiration_threshold": 40320, "payment_channel_storage_type": "etcd", "payment_channel_storage_client": { "connection_timeout": "5s", "request_timeout": "3s", "endpoints": ["http://127.0.0.1:2379"]}}, status="0") organization = Organization( uuid=test_org_uuid, name="test_org", org_id=test_org_id, org_type="organization", origin="PUBLISHER_PORTAL", description="this is long description", short_description="this is short description", url="https://dummy.com", duns_no="123456789", contacts=[], assets={"hero_image": {"url": "some_url", "ipfs_hash": "Q123"}}, metadata_ipfs_uri="Q3E12", org_state=[org_state], groups=[group]) owner = OrganizationMember( invite_code="123", org_uuid=test_org_uuid, role=Role.OWNER.value, username=username, status=OrganizationMemberStatus.ACCEPTED.value, address="0x123", created_on=current_time, updated_on=current_time, invited_on=current_time) org_repo.add_item(organization) org_repo.add_item(owner) service_state = ServiceState(org_uuid=test_org_uuid, service_uuid=test_service_uuid, state=ServiceStatus.PUBLISH_IN_PROGRESS.value, created_on=current_time, created_by=username, updated_by=username, updated_on=current_time) service = Service(org_uuid=test_org_uuid, uuid=test_service_uuid, display_name="123", service_id="test_service", created_on=current_time, service_state=service_state) service_repo.add_item(service) ServiceTransactionStatus().update_transaction_status() service_state_db = service_repo.session.query(ServiceState)\ .filter(ServiceState.service_uuid == test_service_uuid).first() if service_state_db is None: assert False self.assertEqual(ServiceStatus.FAILED.value, service_state_db.state)
def test_register_member(self): test_org_uuid = uuid4().hex owner_username = "******" org_repo.add_organization( DomainOrganization(test_org_uuid, "org_id", "org_dummy", "ORGANIZATION", ORIGIN, "description", "short_description", "https://test.io", ORG_CONTACTS, {}, "ipfs_hash", "123456879", [], [], [], []), owner_username, OrganizationStatus.PUBLISHED.value) member_username = "******" member_invite_code = uuid4().hex org_repo.add_item( OrganizationMember(username=member_username, org_uuid=test_org_uuid, role=Role.MEMBER.value, address="", status=OrganizationMemberStatus.PENDING.value, transaction_hash="0x123", invite_code=member_invite_code, invited_on=datetime.utcnow(), updated_on=datetime.utcnow())) member_wallet_address = "0x962FD47b5afBc8D03025cE52155890667E58dEBA" self.assertRaises( Exception, OrganizationPublisherService(test_org_uuid, member_username).register_member, "1234", "0x9876") OrganizationPublisherService(test_org_uuid, member_username)\ .register_member(member_invite_code, member_wallet_address) members = org_repo.session.query(OrganizationMember).filter(OrganizationMember.org_uuid == test_org_uuid)\ .filter(OrganizationMember.username == member_username) \ .all() if len(members) == 1: org_member = members[0] if org_member.status == OrganizationMemberStatus.ACCEPTED.value \ and org_member.address == member_wallet_address: assert True else: assert False else: assert False
def test_organization_create_event(self, mock_get_org_details_from_blockchain, mock_blockchain_util, mock_read_bytesio_from_ipfs, mock_ipfs_read, mock_s3_push, mock_ipfs_write): test_org_uuid = uuid4().hex test_org_id = "org_id" username = "******" current_time = datetime.now() org_state = OrganizationState( org_uuid=test_org_uuid, state=OrganizationStatus.PUBLISH_IN_PROGRESS.value, transaction_hash="0x123", test_transaction_hash="0x456", wallet_address="0x987", created_by=username, created_on=current_time, updated_by=username, updated_on=current_time, reviewed_by="admin", reviewed_on=current_time) group = Group(name="default_group", id="group_id", org_uuid=test_org_uuid, payment_address="0x123", payment_config={ "payment_expiration_threshold": 40320, "payment_channel_storage_type": "etcd", "payment_channel_storage_client": { "connection_timeout": "5s", "request_timeout": "3s", "endpoints": ["http://127.0.0.1:2379"] } }, status="0") organization = Organization( uuid=test_org_uuid, name="test_org", org_id=test_org_id, org_type="organization", origin="PUBLISHER_PORTAL", description="this is long description", short_description="this is short description", url="https://dummy.com", duns_no="123456789", contacts=[], assets={"hero_image": { "url": "some_url", "ipfs_hash": "Q123" }}, metadata_ipfs_uri="Q3E12", org_state=[org_state], groups=[group]) owner = OrganizationMember( invite_code="123", org_uuid=test_org_uuid, role=Role.OWNER.value, username=username, status=OrganizationMemberStatus.ACCEPTED.value, address="0x123", created_on=current_time, updated_on=current_time, invited_on=current_time) self.org_repo.add_item(organization) self.org_repo.add_item(owner) mock_read_bytesio_from_ipfs.return_value = "" mock_s3_push.return_value = "http://test-s3-push" ipfs_mock_value = { "org_name": "test_org", "org_id": "org_id", "metadata_ipfs_hash": "Q3E12", "org_type": "organization", "contacts": [], "description": { "description": "this is long description", "short_description": "this is short description", "url": "https://dummy.com" }, "assets": { 'hero_image': 'Q123' }, "groups": [{ "group_name": "default_group", "group_id": "group_id", "payment": { "payment_address": "0x123", "payment_expiration_threshold": 40320, "payment_channel_storage_type": "etcd", "payment_channel_storage_client": { "connection_timeout": "5s", "request_timeout": "3s", "endpoints": ["http://127.0.0.1:2379"] } } }] } mock_ipfs_read.return_value = ipfs_mock_value mock_get_org_details_from_blockchain.return_value = "org_id", ipfs_mock_value, "Q3E12", "0x123", "0x123", [] org_event_consumer = OrganizationCreatedAndModifiedEventConsumer( "wss://ropsten.infura.io/ws", "http://ipfs.singularitynet.io", 80, self.org_repo) org_event_consumer.on_event({}) published_org = self.org_repo.get_organization(org_id=test_org_id) org_owner = self.org_repo.session.query(OrganizationMember).filter( OrganizationMember.org_uuid == test_org_uuid).filter( OrganizationMember.role == Role.OWNER.value).all() if len(org_owner) != 1: assert False self.assertEqual(org_owner[0].address, "0x123") self.assertEqual(org_owner[0].username, username) assert published_org.name == "test_org" assert published_org.id == "org_id" assert published_org.org_type == "organization" assert published_org.metadata_ipfs_uri == "Q3E12" assert published_org.groups[0].group_id == "group_id" assert published_org.groups[0].name == "default_group" assert published_org.groups[0].payment_address == "0x123" assert published_org.duns_no == '123456789' assert published_org.org_state.state == "PUBLISHED"
def test_organization_owner_change_event( self, mock_get_org_details_from_blockchain, mock_blockchain_util, mock_read_bytesio_from_ipfs, mock_ipfs_read, mock_s3_push, mock_ipfs_write): username = "******" test_org_uuid = uuid4().hex test_org_id = "org_id" username = "******" current_time = datetime.now() org_state = OrganizationState( org_uuid=test_org_uuid, state=OrganizationStatus.PUBLISH_IN_PROGRESS.value, transaction_hash="0x123", test_transaction_hash="0x456", wallet_address="0x987", created_by=username, created_on=current_time, updated_by=username, updated_on=current_time, reviewed_by="admin", reviewed_on=current_time) group = Group(name="default_group", id="group_id", org_uuid=test_org_uuid, payment_address="0x123", payment_config={ "payment_expiration_threshold": 40320, "payment_channel_storage_type": "etcd", "payment_channel_storage_client": { "connection_timeout": "5s", "request_timeout": "3s", "endpoints": ["http://127.0.0.1:2379"] } }, status="0") organization = Organization( uuid=test_org_uuid, name="test_org", org_id=test_org_id, org_type="organization", origin="PUBLISHER_PORTAL", description="this is long description", short_description="this is short description", url="https://dummy.com", duns_no="123456789", contacts=[], assets={"hero_image": { "url": "some_url", "ipfs_hash": "Q123" }}, metadata_ipfs_uri="Q3E12", org_state=[org_state], groups=[group]) owner = OrganizationMember( invite_code="123", org_uuid=test_org_uuid, role=Role.OWNER.value, username=username, status=OrganizationMemberStatus.PUBLISHED.value, address="0x123", created_on=current_time, updated_on=current_time, invited_on=current_time) self.org_repo.add_item(organization) self.org_repo.add_item(owner) event = { "data": { 'row_id': 2, 'block_no': 6243627, 'event': 'OrganizationCreated', 'json_str': "{'orgId': b'org_id\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'}", 'processed': b'\x00', 'transactionHash': "b'y4\\xa4$By/mZ\\x17\\x1d\\xf2\\x18\\xb6aa\\x02\\x1c\\x88P\\x85\\x18w\\x19\\xc9\\x91\\xecX\\xd7E\\x98!'", 'logIndex': '1', 'error_code': 1, 'error_msg': '', 'row_updated': datetime(2019, 10, 21, 9, 44, 9), 'row_created': datetime(2019, 10, 21, 9, 44, 9) }, "name": "OrganizationCreated" } mock_read_bytesio_from_ipfs.return_value = "" mock_s3_push.return_value = "http://test-s3-push" ipfs_mock_value = { "org_name": "test_org", "org_id": "org_id", "org_type": "organization", "contacts": [], "description": { "description": "this is long description", "short_description": "this is short description", "url": "https://dummy.com" }, "assets": { 'hero_image': 'Q123' }, "groups": [{ "group_name": "default_group", "group_id": "group_id", "payment": { "payment_address": "0x123", "payment_expiration_threshold": 40320, "payment_channel_storage_type": "etcd", "payment_channel_storage_client": { "connection_timeout": "5s", "request_timeout": "3s", "endpoints": ["http://127.0.0.1:2379"] } } }] } self.org_repo.session.commit() mock_ipfs_read.return_value = ipfs_mock_value mock_get_org_details_from_blockchain.return_value = "org_id", ipfs_mock_value, "Q3E12", "79345c7861342442792f6d5a5c7831375c7831645c7866325c7831385c78623661615c7830325c7831635c783838505c7838355c783138775c7831395c7863395c7839315c786563585c786437455c78393821", "0x1234", [] org_event_consumer = OrganizationCreatedAndModifiedEventConsumer( "wss://ropsten.infura.io/ws", "http://ipfs.singularitynet.io", 80, self.org_repo) org_event_consumer.on_event({}) published_org = self.org_repo.get_organization(org_id=test_org_id) owner = self.org_repo.session.query(OrganizationMember).filter( OrganizationMember.org_uuid == test_org_uuid).filter( OrganizationMember.role == Role.OWNER.value).all() if len(owner) != 1: assert False self.assertEqual(owner[0].address, "0x1234") self.assertEqual(owner[0].username, "") assert published_org.name == "test_org" assert published_org.id == "org_id" assert published_org.org_type == "organization" assert published_org.metadata_ipfs_uri == "Q3E12" assert published_org.groups[0].group_id == "group_id" assert published_org.groups[0].name == "default_group" assert published_org.groups[0].payment_address == "0x123" assert published_org.duns_no == '123456789' assert published_org.org_state.state == "PUBLISHED"
def test_publish_organization_after_published(self, mock_boto, mock_ipfs): test_org_uuid = uuid4().hex test_org_id = "org_id" username = "******" current_time = datetime.now() org_state = OrganizationState( org_uuid=test_org_uuid, state=OrganizationStatus.APPROVED.value, transaction_hash="0x123", test_transaction_hash="0x456", wallet_address="0x987", created_by=username, created_on=current_time, updated_by=username, updated_on=current_time, reviewed_by="admin", reviewed_on=current_time) group = Group( name="default_group", id="group_id", org_uuid=test_org_uuid, payment_address="0x123", payment_config={ "payment_expiration_threshold": 40320, "payment_channel_storage_type": "etcd", "payment_channel_storage_client": { "connection_timeout": "5s", "request_timeout": "3s", "endpoints": ["http://127.0.0.1:2379"]}}, status="0") org_address = [OrganizationAddress( org_uuid=test_org_uuid, address_type=OrganizationAddressType.HEAD_QUARTER_ADDRESS.value, street_address="F102", apartment="ABC Apartment", city="TestCity", pincode="123456", state="state", country="TestCountry"), OrganizationAddress( org_uuid=test_org_uuid, address_type=OrganizationAddressType.MAIL_ADDRESS.value, street_address="F102", apartment="ABC Apartment", city="TestCity", pincode="123456", state="state", country="TestCountry") ] organization = Organization( uuid=test_org_uuid, name="test_org", org_id=test_org_id, org_type="organization", origin=ORIGIN, description="this is long description", short_description="this is short description", url="https://dummy.com", duns_no="123456789", contacts=[], assets={"hero_image": {"url": "some_url", "ipfs_hash": "Q123"}}, metadata_ipfs_uri="Q3E12", org_state=[org_state], groups=[group], addresses=org_address) owner = OrganizationMember( invite_code="123", org_uuid=test_org_uuid, role=Role.OWNER.value, username=username, status=OrganizationMemberStatus.ACCEPTED.value, address="0x123", created_on=current_time, updated_on=current_time, invited_on=current_time) org_repo.add_item(organization) org_repo.add_item(owner) event = { "pathParameters": {"org_uuid": test_org_uuid}, "requestContext": {"authorizer": {"claims": {"email": username}}}, "queryStringParameters": {"action": "DRAFT"}, "body": json.dumps({ "org_id": test_org_id, "org_uuid": test_org_uuid, "org_name": "test_org", "org_type": "organization", "metadata_ipfs_uri": "", "duns_no": "123456789", "origin": ORIGIN, "description": "this is long description", "short_description": "this is short description", "url": "https://dummy.com", "contacts": [], "assets": {"hero_image": {"url": "https://my_image", "ipfs_hash": ""}}, "org_address": ORG_ADDRESS, "groups": [{ "name": "default", "id": "group_id", "payment_address": "0x123", "payment_config": { "payment_expiration_threshold": 40320, "payment_channel_storage_type": "etcd", "payment_channel_storage_client": { "connection_timeout": "1s", "request_timeout": "1s", "endpoints": [ "123" ] } } }], "state": {} }) } update_org(event, None) updated_org = org_repo.get_org_for_org_id(test_org_id) owner = org_repo.session.query(OrganizationMember).filter( OrganizationMember.org_uuid == test_org_uuid).filter(OrganizationMember.role == Role.OWNER.value).all() if len(owner) != 1: assert False assert updated_org.name == "test_org" assert updated_org.id == "org_id" assert updated_org.org_type == "organization" assert updated_org.metadata_ipfs_uri == "" assert updated_org.groups[0].group_id == "group_id" assert updated_org.groups[0].name == "default" assert updated_org.groups[0].payment_address == "0x123" assert updated_org.duns_no == '123456789' assert updated_org.org_state.state == OrganizationStatus.APPROVED.value
def add_organization(self, organization, username, state, address="", test_transaction_hash=None): current_time = datetime.utcnow() org_addresses_domain_entity = organization.addresses group_domain_entity = organization.groups groups = [ Group(name=group.name, id=group.group_id, org_uuid=organization.uuid, payment_address=group.payment_address, payment_config=group.payment_config, status=group.status) for group in group_domain_entity ] addresses = [ OrganizationAddress(org_uuid=organization.uuid, address_type=address.address_type, street_address=address.street_address, apartment=address.apartment, city=address.city, pincode=address.pincode, state=address.state, country=address.country, created_on=current_time, updated_on=current_time) for address in org_addresses_domain_entity ] org_state = [ OrganizationState(org_uuid=organization.uuid, state=state, transaction_hash="", wallet_address="", created_by=username, created_on=current_time, test_transaction_hash=test_transaction_hash, updated_by=username, updated_on=current_time, reviewed_by="") ] self.add_item( Organization(uuid=organization.uuid, name=organization.name, org_id=organization.id, org_type=organization.org_type, origin=organization.origin, description=organization.description, short_description=organization.short_description, url=organization.url, duns_no=organization.duns_no, contacts=organization.contacts, assets=organization.assets, metadata_ipfs_uri=organization.metadata_ipfs_uri, org_state=org_state, groups=groups, addresses=addresses)) self.add_item( OrganizationMember(invite_code=uuid4().hex, org_uuid=organization.uuid, role=Role.OWNER.value, username=username, address=address, status=OrganizationMemberStatus.ACCEPTED.value, transaction_hash="", invited_on=current_time, created_on=current_time, updated_on=current_time))