Skip to content

Commit

Permalink
Merge 29f59c2 into 53d40a0
Browse files Browse the repository at this point in the history
  • Loading branch information
mldzs committed Mar 19, 2021
2 parents 53d40a0 + 29f59c2 commit 728bb62
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ python-slugify = "~=4.0.0"
openpyxl = "~=3.0.3"
pillow = "~=7.1.2"
kombu = "~=4.6.7"
importlib-metadata = "~=1.6.1"
importlib-metadata = "~=3.7.2"
psycopg2-binary = "~=2.7.7"
matplot = "~=0.1.9"
django-redis = "~=4.12.1"
Expand Down
26 changes: 26 additions & 0 deletions bothub/api/v2/repository/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,32 @@ def automatic_evaluate(self, request, **kwargs):
) # pragma: no cover
return Response(request.json()) # pragma: no cover

@action(
detail=True,
methods=["GET"],
url_name="check-can-repository-automatic-evaluate",
lookup_fields=["uuid"],
)
def check_can_automatic_evaluate(self, request, **kwargs):
"""
Check if repository can run automatic evaluate.
"""
repository = self.get_object()
user_authorization = repository.get_user_authorization(request.user)
if not user_authorization.can_write:
raise PermissionDenied()

language = request.query_params.get("language")
if not language:
raise ValidationError(_("Need to pass 'language' in query params"))

try:
repository.validate_if_can_run_automatic_evaluate(language=language)
response = {"can_run_evaluate_automatic": True, "messages": []}
except DjangoValidationError as e:
response = {"can_run_evaluate_automatic": False, "messages": e}
return Response(response) # pragma: no cover


@method_decorator(
name="list",
Expand Down
70 changes: 70 additions & 0 deletions bothub/api/v2/tests/test_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -2353,3 +2353,73 @@ def test_invalid_data(self):
data = {"repository_version": self.repository_version.pk}
response, content_data = self.request(self.repository, data, self.owner_token)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)


class CheckCanEvaluateAutomaticTestCase(TestCase):
def setUp(self):
self.factory = RequestFactory()

self.owner, self.owner_token = create_user_and_token("owner")
self.user, self.user_token = create_user_and_token()

self.repository = Repository.objects.create(
owner=self.owner,
name="Testing",
slug="test",
language=languages.LANGUAGE_EN,
)

self.repository_version = RepositoryVersion.objects.create(
repository=self.repository, name="test"
)

def request(self, repository, data={}, token=None):
authorization_header = {"HTTP_AUTHORIZATION": "Token {}".format(token.key)}

request = self.factory.get(
"/v2/repository/repository-details/{}/check_can_automatic_evaluate/".format(
str(repository.uuid)
),
data,
**authorization_header,
)

response = RepositoryViewSet.as_view({"get": "check_can_automatic_evaluate"})(
request, uuid=repository.uuid
)

response.render()
content_data = json.loads(response.content)
return (response, content_data)

def test_permission_denied(self):
response, content_data = self.request(self.repository, {}, self.user_token)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

def test_invalid_data(self):
data = {}
response, content_data = self.request(self.repository, data, self.owner_token)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

def test_cant_evaluate_automatic(self):
data = {"language": self.repository.language}
response, content_data = self.request(self.repository, data, self.owner_token)
self.assertFalse(content_data.get("can_run_evaluate_automatic"))
self.assertEqual(len(content_data.get("messages")), 1)

def test_can_evaluate_automatic(self):
for i in range(0, 2):
intent_ = RepositoryIntent.objects.create(
text=f"test-{i}",
repository_version=self.repository.current_version().repository_version,
)
for j in range(0, 20):
RepositoryExample.objects.create(
repository_version_language=self.repository.current_version(),
text=f"hi-{j}",
intent=intent_,
)
data = {"language": self.repository.language}
response, content_data = self.request(self.repository, data, self.owner_token)
self.assertTrue(content_data.get("can_run_evaluate_automatic"))
self.assertEqual(len(content_data.get("messages")), 0)

0 comments on commit 728bb62

Please sign in to comment.