def test_update_domain_name(self): account_name = 'MyVSTSAccount.visualstudio.com' account_uri = 'https://MyVSTSAccount.visualstudio.com/' self.assert_installation() model = Integration.objects.get(provider='vsts') model.metadata['domain_name'] = account_name model.save() integration = VstsIntegration(model, self.organization.id) integration.get_client() domain_name = integration.model.metadata['domain_name'] assert domain_name == account_uri assert Integration.objects.get(provider='vsts').metadata['domain_name'] == account_uri
def test_update_domain_name(self): account_name = 'MyVSTSAccount.visualstudio.com' account_uri = 'https://MyVSTSAccount.visualstudio.com/' self.assert_installation() model = Integration.objects.get(provider='vsts') model.metadata['domain_name'] = account_name model.save() integration = VstsIntegration(model, self.organization.id) integration.get_client() domain_name = integration.model.metadata['domain_name'] assert domain_name == account_uri assert Integration.objects.get(provider='vsts').metadata['domain_name'] == account_uri
def test_get_client(self): user = self.create_user() organization = self.create_organization() access_token = '1234567890' model = Integration.objects.create( provider='integrations:vsts', external_id='vsts_external_id', name='vsts_name', ) identity = Identity.objects.create(idp=IdentityProvider.objects.create( type='vsts', config={}), user=user, external_id='vsts_id', data={'access_token': access_token}) model.add_organization(organization.id, identity.id) integration = VstsIntegration(model, organization.id) client = integration.get_client() assert client.access_token == access_token
class VstsIntegrationTest(APITestCase): def setUp(self): user = self.create_user() organization = self.create_organization() project = self.create_project(organization=organization) self.access_token = '1234567890' model = Integration.objects.create( provider='integrations:vsts', external_id='vsts_external_id', name='vsts_name', metadata={'domain_name': 'instance.visualstudio.com'}) identity = Identity.objects.create( idp=IdentityProvider.objects.create(type='vsts', config={}), user=user, external_id='vsts_id', data={ 'access_token': self.access_token, }) self.org_integration = model.add_organization(organization.id, identity.id) self.project_integration = model.add_project(project.id) self.integration = VstsIntegration(model, organization.id, project.id) self.projects = [('eb6e4656-77fc-42a1-9181-4c6d8e9da5d1', 'ProjectB'), ('6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c', 'ProjectA')] responses.add( responses.GET, 'https://instance.visualstudio.com/DefaultCollection/_apis/projects', json={ 'value': [{ 'id': self.projects[0][0], 'name': self.projects[0][1], }, { 'id': self.projects[1][0], 'name': self.projects[1][1], }], 'count': 2 }, ) def test_get_client(self): client = self.integration.get_client() assert client.access_token == self.access_token @responses.activate def test_get_project_config(self): fields = self.integration.get_project_config() assert len(fields) == 1 project_field = fields[0] assert project_field['name'] == 'default_project' assert project_field['disabled'] is False assert project_field['choices'] == self.projects assert project_field['initial'] == ('', '') @responses.activate def test_get_project_config_initial(self): self.integration.project_integration.config = { 'default_project': self.projects[1][0] } self.integration.project_integration.save() fields = self.integration.get_project_config() assert len(fields) == 1 project_field = fields[0] assert project_field['name'] == 'default_project' assert project_field['disabled'] is False assert project_field['choices'] == self.projects assert project_field['initial'] == self.projects[1] def test_get_project_config_failed_api_call(self): fields = self.integration.get_project_config() assert len(fields) == 1 project_field = fields[0] assert project_field['name'] == 'default_project' assert project_field['disabled'] is True
class VstsIntegrationTest(APITestCase): def setUp(self): organization = self.create_organization() project = self.create_project(organization=organization) self.access_token = '1234567890' self.instance = 'instance.visualstudio.com' self.model = Integration.objects.create( provider='integrations:vsts', external_id='vsts_external_id', name='vsts_name', metadata={ 'domain_name': 'instance.visualstudio.com' } ) self.identity_provider = IdentityProvider.objects.create(type='vsts') self.identity = Identity.objects.create( idp=self.identity_provider, user=self.user, external_id='vsts_id', data={ 'access_token': self.access_token, 'refresh_token': 'qwertyuiop', 'expires': int(time()) - int(1234567890), } ) self.org_integration = self.model.add_organization(organization.id, self.identity.id) self.project_integration = self.model.add_project(project.id) self.integration = VstsIntegration(self.model, organization.id, project.id) self.projects = [ ('eb6e4656-77fc-42a1-9181-4c6d8e9da5d1', 'ProjectB'), ('6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c', 'ProjectA') ] self.project_result = { 'value': [ { 'id': self.projects[0][0], 'name': self.projects[0][1], }, { 'id': self.projects[1][0], 'name': self.projects[1][1], } ], 'count': 2 } responses.add( responses.GET, 'https://instance.visualstudio.com/DefaultCollection/_apis/projects', json=self.project_result, ) self.refresh_data = { 'access_token': 'access token for this user', 'token_type': 'type of token', 'expires_in': 123456789, 'refresh_token': 'new refresh token to use when the token has timed out', } responses.add( responses.POST, 'https://app.vssps.visualstudio.com/oauth2/token', json=self.refresh_data, ) def assert_identity_updated(self, new_identity, expected_data): assert new_identity.data['access_token'] == expected_data['access_token'] assert new_identity.data['token_type'] == expected_data['token_type'] assert new_identity.data['refresh_token'] == expected_data['refresh_token'] assert new_identity.data['expires'] >= time() def test_get_client(self): client = self.integration.get_client() assert client.identity.data['access_token'] == self.access_token @responses.activate def test_refreshes_expired_token(self): result = self.integration.get_client().get_projects(self.instance) assert len(responses.calls) == 2 default_identity = self.integration.default_identity self.assert_identity_updated(default_identity, self.refresh_data) identity = Identity.objects.get(id=self.identity.id) self.assert_identity_updated(identity, self.refresh_data) projects = result['value'] assert projects[0]['id'] == self.projects[0][0] and projects[0]['name'] == self.projects[0][1] assert projects[1]['id'] == self.projects[1][0] and projects[1]['name'] == self.projects[1][1] @responses.activate def test_get_organization_config(self): fields = self.integration.get_organization_config() assert len(fields) == 6 names = [ 'resolve_status', 'resolve_when', 'regression_status', 'sync_comments', 'sync_forward_assignment', 'sync_reverse_assignment'] assert [field['name'] for field in fields] == names
class VstsIntegrationTest(APITestCase): def setUp(self): self.organization = self.create_organization() project = self.create_project(organization=self.organization) self.access_token = '1234567890' self.instance = 'instance.visualstudio.com' self.model = Integration.objects.create( provider='integrations:vsts', external_id='vsts_external_id', name='vsts_name', metadata={'domain_name': 'instance.visualstudio.com'}) self.identity_provider = IdentityProvider.objects.create(type='vsts') self.identity = Identity.objects.create(idp=self.identity_provider, user=self.user, external_id='vsts_id', data={ 'access_token': self.access_token, 'refresh_token': 'qwertyuiop', 'expires': int(time()) - int(1234567890), }) self.org_integration = self.model.add_organization( self.organization.id, self.identity.id) self.project_integration = self.model.add_project(project.id) self.integration = VstsIntegration(self.model, self.organization.id, project.id) self.projects = [('eb6e4656-77fc-42a1-9181-4c6d8e9da5d1', 'ProjectB'), ('6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c', 'ProjectA')] self.project_result = { 'value': [{ 'id': self.projects[0][0], 'name': self.projects[0][1], }, { 'id': self.projects[1][0], 'name': self.projects[1][1], }], 'count': 2 } responses.add( responses.GET, 'https://instance.visualstudio.com/DefaultCollection/_apis/projects', json=self.project_result, ) self.refresh_data = { 'access_token': 'access token for this user', 'token_type': 'type of token', 'expires_in': 123456789, 'refresh_token': 'new refresh token to use when the token has timed out', } responses.add( responses.POST, 'https://app.vssps.visualstudio.com/oauth2/token', json=self.refresh_data, ) def assert_identity_updated(self, new_identity, expected_data): assert new_identity.data['access_token'] == expected_data[ 'access_token'] assert new_identity.data['token_type'] == expected_data['token_type'] assert new_identity.data['refresh_token'] == expected_data[ 'refresh_token'] assert new_identity.data['expires'] >= time() def test_get_client(self): client = self.integration.get_client() assert client.identity.data['access_token'] == self.access_token @responses.activate def test_refreshes_expired_token(self): result = self.integration.get_client().get_projects(self.instance) assert len(responses.calls) == 2 default_identity = self.integration.default_identity self.assert_identity_updated(default_identity, self.refresh_data) identity = Identity.objects.get(id=self.identity.id) self.assert_identity_updated(identity, self.refresh_data) projects = result['value'] assert projects[0]['id'] == self.projects[0][0] and projects[0][ 'name'] == self.projects[0][1] assert projects[1]['id'] == self.projects[1][0] and projects[1][ 'name'] == self.projects[1][1] @responses.activate def test_get_organization_config(self): fields = self.integration.get_organization_config() assert len(fields) == 6 names = [ 'resolve_status', 'resolve_when', 'regression_status', 'sync_comments', 'sync_forward_assignment', 'sync_reverse_assignment' ] assert [field['name'] for field in fields] == names def test_update_organization_config_remove_all(self): data = { 'sync_status_forward': {}, 'other_option': 'hello', } IntegrationExternalProject.objects.create( organization_integration_id=self.org_integration.id, external_id=1, resolved_status='ResolvedStatus1', unresolved_status='UnresolvedStatus1', ) IntegrationExternalProject.objects.create( organization_integration_id=self.org_integration.id, external_id=2, resolved_status='ResolvedStatus2', unresolved_status='UnresolvedStatus2', ) IntegrationExternalProject.objects.create( organization_integration_id=self.org_integration.id, external_id=3, resolved_status='ResolvedStatus3', unresolved_status='UnresolvedStatus3', ) self.integration.update_organization_config(data) external_projects = IntegrationExternalProject.objects.all( ).values_list('external_id', flat=True) assert list(external_projects) == [] config = OrganizationIntegration.objects.get( organization_id=self.org_integration.organization_id, integration_id=self.org_integration.integration_id).config assert config == { 'sync_status_forward': False, 'other_option': 'hello', } def test_update_organization_config(self): data = { 'sync_status_forward': { 1: { 'on_resolve': 'ResolvedStatus1', 'on_unresolve': 'UnresolvedStatus1', }, 2: { 'on_resolve': 'ResolvedStatus2', 'on_unresolve': 'UnresolvedStatus2', }, 4: { 'on_resolve': 'ResolvedStatus4', 'on_unresolve': 'UnresolvedStatus4', }, }, 'other_option': 'hello', } IntegrationExternalProject.objects.create( organization_integration_id=self.org_integration.id, external_id=1, resolved_status='UpdateMe', unresolved_status='UpdateMe', ) IntegrationExternalProject.objects.create( organization_integration_id=self.org_integration.id, external_id=2, resolved_status='ResolvedStatus2', unresolved_status='UnresolvedStatus2', ) IntegrationExternalProject.objects.create( organization_integration_id=self.org_integration.id, external_id=3, resolved_status='ResolvedStatus3', unresolved_status='UnresolvedStatus3', ) self.integration.update_organization_config(data) external_projects = IntegrationExternalProject.objects.all().order_by( 'external_id') assert external_projects[0].external_id == '1' assert external_projects[0].resolved_status == 'ResolvedStatus1' assert external_projects[0].unresolved_status == 'UnresolvedStatus1' assert external_projects[1].external_id == '2' assert external_projects[1].resolved_status == 'ResolvedStatus2' assert external_projects[1].unresolved_status == 'UnresolvedStatus2' assert external_projects[2].external_id == '4' assert external_projects[2].resolved_status == 'ResolvedStatus4' assert external_projects[2].unresolved_status == 'UnresolvedStatus4' config = OrganizationIntegration.objects.get( organization_id=self.org_integration.organization_id, integration_id=self.org_integration.integration_id).config assert config == { 'sync_status_forward': True, 'other_option': 'hello', }
class VstsIntegrationTest(APITestCase): def setUp(self): organization = self.create_organization() project = self.create_project(organization=organization) self.access_token = '1234567890' self.instance = 'instance.visualstudio.com' self.model = Integration.objects.create( provider='integrations:vsts', external_id='vsts_external_id', name='vsts_name', metadata={'domain_name': 'instance.visualstudio.com'}) self.identity_provider = IdentityProvider.objects.create(type='vsts') self.identity = Identity.objects.create(idp=self.identity_provider, user=self.user, external_id='vsts_id', data={ 'access_token': self.access_token, 'refresh_token': 'qwertyuiop', 'expires': int(time()) - int(1234567890), }) self.org_integration = self.model.add_organization( organization.id, self.identity.id) self.project_integration = self.model.add_project(project.id) self.integration = VstsIntegration(self.model, organization.id, project.id) self.projects = [('eb6e4656-77fc-42a1-9181-4c6d8e9da5d1', 'ProjectB'), ('6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c', 'ProjectA')] self.project_result = { 'value': [{ 'id': self.projects[0][0], 'name': self.projects[0][1], }, { 'id': self.projects[1][0], 'name': self.projects[1][1], }], 'count': 2 } responses.add( responses.GET, 'https://instance.visualstudio.com/DefaultCollection/_apis/projects', json=self.project_result, ) self.refresh_data = { 'access_token': 'access token for this user', 'token_type': 'type of token', 'expires_in': 123456789, 'refresh_token': 'new refresh token to use when the token has timed out', } responses.add( responses.POST, 'https://app.vssps.visualstudio.com/oauth2/token', json=self.refresh_data, ) def assert_identity_updated(self, new_identity, expected_data): assert new_identity.data['access_token'] == expected_data[ 'access_token'] assert new_identity.data['token_type'] == expected_data['token_type'] assert new_identity.data['refresh_token'] == expected_data[ 'refresh_token'] assert new_identity.data['expires'] >= time() def test_get_client(self): client = self.integration.get_client() assert client.identity.data['access_token'] == self.access_token @responses.activate def test_refreshes_expired_token(self): result = self.integration.get_client().get_projects(self.instance) assert len(responses.calls) == 2 default_identity = self.integration.default_identity self.assert_identity_updated(default_identity, self.refresh_data) identity = Identity.objects.get(id=self.identity.id) self.assert_identity_updated(identity, self.refresh_data) projects = result['value'] assert projects[0]['id'] == self.projects[0][0] and projects[0][ 'name'] == self.projects[0][1] assert projects[1]['id'] == self.projects[1][0] and projects[1][ 'name'] == self.projects[1][1] @responses.activate def test_get_project_config(self): fields = self.integration.get_project_config() assert len(fields) == 1 project_field = fields[0] assert project_field['name'] == 'default_project' assert project_field['disabled'] is False assert project_field['choices'] == self.projects assert project_field['initial'] == ('', '') @responses.activate def test_get_project_config_initial(self): self.integration.project_integration.config = { 'default_project': self.projects[1][0] } self.integration.project_integration.save() fields = self.integration.get_project_config() assert len(fields) == 1 project_field = fields[0] assert project_field['name'] == 'default_project' assert project_field['disabled'] is False assert project_field['choices'] == self.projects assert project_field['initial'] == self.projects[1] def test_get_project_config_failure(self): fields = self.integration.get_project_config() assert len(fields) == 1 project_field = fields[0] assert project_field['name'] == 'default_project' assert project_field['disabled'] is True assert project_field['choices'] == [] assert project_field['initial'] == ('', '')