Simplified the URL and view code for the personal meetecho access API endpoint, and added test code.

- Legacy-Id: 17642
This commit is contained in:
Henrik Levkowetz 2020-04-15 17:19:54 +00:00
parent e01d41169a
commit eedd48d455
3 changed files with 25 additions and 11 deletions

View file

@ -179,6 +179,25 @@ class CustomApiTestCase(TestCase):
self.assertEqual(data['user']['email'], secretariat.user.email)
def test_api_v2_person_access_meetecho(self):
url = urlreverse('ietf.api.views.person_access_meetecho')
person = PersonFactory()
apikey = PersonalApiKey.objects.create(endpoint=url, person=person)
# error cases
r = self.client.get(url, {'apikey': apikey.hash()})
self.assertContains(r, "Too long since last regular login", status_code=400)
person.user.last_login = timezone.now()
person.user.save()
# working case
r = self.client.get(url, {'apikey': apikey.hash()})
self.assertEqual(r.status_code, 200)
data = r.json()
self.assertEqual(data['name'], person.name)
self.assertEqual(data['email'], person.email().address)
class TastypieApiTestCase(ResourceTestCaseMixin, TestCase):
def __init__(self, *args, **kwargs):
self.apps = {}

View file

@ -25,7 +25,7 @@ urlpatterns = [
# For mailarchive use, requires secretariat role
url(r'^v2/person/person', api_views.ApiV2PersonExportView.as_view()),
# For meetecho access
url(r'^v2/person/access/meetecho', api_views.PersonAccessMeetechoView.as_view()),
url(r'^person/access/meetecho', api_views.person_access_meetecho),
]
# Additional (standard) Tastypie endpoints

View file

@ -95,13 +95,8 @@ class ApiV2PersonExportView(DetailView, JsonExportMixin):
return self.json_view(request, filter=querydict.dict(), expand=expand)
@method_decorator((csrf_exempt, require_api_key), name='dispatch')
class PersonAccessMeetechoView(DetailView, JsonExportMixin):
model = Person
def err(self, code, text):
return HttpResponse(text, status=code, content_type='text/plain')
def get(self, request):
person = get_object_or_404(self.model, user=request.user)
return HttpResponse(json.dumps({ 'name' : person.name, 'email': person.email().address, }), content_type='application/json')
@require_api_key
@csrf_exempt
def person_access_meetecho(request):
person = get_object_or_404(Person, user=request.user)
return HttpResponse(json.dumps({ 'name' : person.name, 'email': person.email().address, }), content_type='application/json')