diff --git a/arkindex/dataimport/serializers/git.py b/arkindex/dataimport/serializers/git.py index 2180a984a976f43375f5f5d8eed9a2546c28b054..123a03d7a3b2ca31a3e091213a1beeb5563a56bc 100644 --- a/arkindex/dataimport/serializers/git.py +++ b/arkindex/dataimport/serializers/git.py @@ -68,6 +68,12 @@ class RepositorySerializer(serializers.ModelSerializer): Serialize a repository """ enabled = serializers.BooleanField(read_only=True) + gitlab_token = serializers.SerializerMethodField() + + def get_gitlab_token(self, repository): + if self.context['request'].user.is_internal: + return repository.credentials.token + return None class Meta: model = Repository @@ -76,6 +82,7 @@ class RepositorySerializer(serializers.ModelSerializer): 'url', 'enabled', 'corpus', + 'gitlab_token', ) extra_kwargs = { 'id': {'read_only': True}, diff --git a/arkindex/dataimport/tests/test_repos.py b/arkindex/dataimport/tests/test_repos.py index 951af071c13904770ce9ad7b8113275bf1b1f182..42d193ce6563f5fc25fd7133d26c104d54f5d29c 100644 --- a/arkindex/dataimport/tests/test_repos.py +++ b/arkindex/dataimport/tests/test_repos.py @@ -5,6 +5,7 @@ from ponos.models import Workflow from arkindex_common.enums import DataImportMode from arkindex.project.tests import FixtureTestCase from arkindex.dataimport.models import Repository, DataImport +from arkindex.users.models import User class TestRepositories(FixtureTestCase): @@ -61,6 +62,55 @@ class TestRepositories(FixtureTestCase): self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(Workflow.objects.count(), 0) + def test_repository_retrieve_requires_login(self): + response = self.client.get( + reverse('api:repository-retrieve', kwargs={'pk': str(self.repo.id)}) + ) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + + def test_repository_retrieve_wrong_id(self): + self.client.force_login(self.user) + response = self.client.get( + reverse('api:repository-retrieve', kwargs={'pk': '12341234-1234-1234-1234-123412341234'}) + ) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + self.assertEqual(response.json(), {'detail': 'Not found.'}) + + def test_repository_retrieve_external_user(self): + self.client.force_login(self.user) + self.assertFalse(self.user.is_internal) + response = self.client.get( + reverse('api:repository-retrieve', kwargs={'pk': str(self.repo.id)}) + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + self.assertDictEqual(data, { + 'id': str(self.repo.id), + 'corpus': str(self.repo.corpus.id), + 'enabled': True, + 'gitlab_token': None, + 'url': self.repo.url, + }) + + def test_repository_retrieve_internal_user(self): + internal_user = User.objects.create_internal_user('internal@test.com') + internal_user.verified_email = True + internal_user.save() + self.assertTrue(internal_user.is_internal) + self.client.force_login(internal_user) + response = self.client.get( + reverse('api:repository-retrieve', kwargs={'pk': str(self.repo.id)}) + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + self.assertDictEqual(data, { + 'id': str(self.repo.id), + 'corpus': str(self.repo.corpus.id), + 'enabled': True, + 'gitlab_token': 'oauth-token', + 'url': self.repo.url, + }) + def test_revision_retrieve_requires_login(self): response = self.client.get( reverse('api:revision-retrieve', kwargs={'pk': str(self.rev.id)}) @@ -82,9 +132,12 @@ class TestRepositories(FixtureTestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() - self.assertEqual(data['id'], str(self.rev.id)) - self.assertEqual(data['hash'], self.rev.hash) - self.assertEqual(data['author'], self.rev.author) - self.assertEqual(data['message'], self.rev.message) - self.assertEqual(data['commit_url'], self.rev.commit_url) - self.assertEqual(data['repo_id'], str(self.repo.id)) + del data['date'] + self.assertDictEqual(data, { + 'id': str(self.rev.id), + 'hash': self.rev.hash, + 'author': self.rev.author, + 'message': self.rev.message, + 'commit_url': self.rev.commit_url, + 'repo_id': str(self.repo.id), + })