diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py
index afd8eb12cd533ad3ffbd48241f15f25b7992b2c5..7ca214f06a6d1accecc34a19f8d736027658acff 100644
--- a/core/tests/test_accounts.py
+++ b/core/tests/test_accounts.py
@@ -1,16 +1,13 @@
 import requests_mock
 from rest_framework import status
-from rest_framework.test import APITestCase
+from rest_framework.test import APIClient, APITestCase
 from django.contrib.auth.models import User
-from core.models.accounts import Company
+from core.models.accounts import Company, Supervisor
 
 class LoginTests(APITestCase):
 
     @requests_mock.Mocker()
     def test_succesful_student_login_relogin(self, m):
-        """
-        Ensure we can login
-        """
 
         m.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', json={
                 "username": "dummy.mahasiswa",
@@ -64,13 +61,18 @@ class LoginTests(APITestCase):
 
     def test_success_company_login(self):
         new_user = User.objects.create_user('dummy.login.company', 'dummy.login.company@company.com', 'lalala123')
-        new_company = Company.objects.create(user=new_user, description="lalalala", verified=True, logo=None, alamat=None)
+        new_company = Company.objects.create(user=new_user, description="lalalala", verified=True, logo=None, address=None)
 
         url = '/api/login/'
         response = self.client.post(url, {'username': 'dummy.login.company', 'password': 'lalala123', 'login-type': 'company'}, format='json')
-        self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+    def test_bad_request_1(self):
+        url = '/api/login/'
+        response = self.client.post(url, {'username': 'lalala'}, format='json')
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
-    def test_bad_request(self):
+    def test_bad_request_2(self):
         url = '/api/login/'
-        response = self.client.post(url, {'uesrname': 'lalala'}, format='json')
-        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
\ No newline at end of file
+        response = self.client.post(url, {'username': 'lalala', 'password': 'lalalala', 'login-type' : 'lalala'}, format='json')
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py
index a8f718e1830b340043de1e009ecd99946a01369d..eeb7b4af1c94d3c879ed058dc6c61ea6e611b8cc 100644
--- a/core/tests/test_vacancies.py
+++ b/core/tests/test_vacancies.py
@@ -48,7 +48,7 @@ class ApplicationTests(APITestCase):
         student_id = response.data.get('student').get('id')
 
         new_user = User.objects.create_user('dummy.company', 'dummy.company@company.com', 'lalala123')
-        new_company = Company.objects.create(user=new_user, description="lalala",verified=True,logo=None,alamat=None)
+        new_company = Company.objects.create(user=new_user, description="lalala",verified=True,logo=None,address=None)
         new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), description="lalala", close_time=datetime.today())
 
         url = '/api/students/' + str(student_id) + '/applications/'
@@ -101,7 +101,7 @@ class BookmarkApplicationTests(APITestCase):
         student_id = response.data.get('student').get('id')
 
         new_user = User.objects.create_user('dummy.company', 'dummy.company@company.com', 'lalala123')
-        new_company = Company.objects.create(user=new_user, description="lalala",verified=True,logo=None,alamat=None)
+        new_company = Company.objects.create(user=new_user, description="lalala",verified=True,logo=None,address=None)
         new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), description="lalala", close_time=datetime.today())
 
         url = '/api/students/' + str(student_id) + '/bookmarked-vacancies/'
diff --git a/core/views/accounts.py b/core/views/accounts.py
index 3e2341c45a9f5a9a6bc1058a7abe50c3b3390c55..52f43fb071d0f262f5fdf522c0bb7aa54cb1168e 100644
--- a/core/views/accounts.py
+++ b/core/views/accounts.py
@@ -20,6 +20,9 @@ class UserViewSet(viewsets.ModelViewSet):
 
     @list_route(methods=['get'], permission_classes=[IsAuthenticated])
     def me(self, request):
+        """
+        Get current user's details
+        """
         user = self.request.user
         serializer = UserSerializer(user, context={"request": request})
         return Response(serializer.data)
@@ -45,23 +48,13 @@ class StudentViewSet(viewsets.ModelViewSet):
 class CompanyViewSet(viewsets.ModelViewSet):
     queryset = Company.objects.all()
     serializer_class = CompanySerializer
-    permission_classes = [IsAdminUser]
-
-    def get_permissions(self):
-        if self.action == "update":
-            return [IsAdminOrSelfOrReadOnly(), IsAdminOrCompany()]
-        return super(CompanyViewSet, self).get_permissions()
+    permission_classes = [IsAdminOrSelfOrReadOnly, IsAdminOrCompany]
 
 
 class SupervisorViewSet(viewsets.ModelViewSet):
     queryset = Supervisor.objects.all()
     serializer_class = SupervisorSerializer
-    permission_classes = [IsAdminUser]
-
-    def get_permissions(self):
-        if self.action == "update":
-            return [IsAdminOrSelfOrReadOnly(), IsAdminOrSupervisor()]
-        return super(SupervisorViewSet, self).get_permissions()
+    permission_classes = [IsAdminOrSelfOrReadOnly, IsAdminOrSupervisor]
 
 
 class LoginViewSet(viewsets.GenericViewSet):
@@ -71,14 +64,14 @@ class LoginViewSet(viewsets.GenericViewSet):
 
     def create(self, request):
         """
-        Authenticate user by logging in
+        Authentication for user by means of logging in
         ---
         parameters:
-        - name: body
-          description: JSON object containing three strings: username, password and login-type. login-type should be either 'sso-ui' or 'company'.
-          required: true
-          paramType: body
-          pytype: RequestSerializer
+            - name: body
+              description: JSON object containing three strings: username, password and login-type. login-type should be either 'sso-ui' or 'company'.
+              required: true
+              type: string
+              paramType: body
         """
         username = request.data.get('username')
         password = request.data.get('password')
diff --git a/core/views/vacancies.py b/core/views/vacancies.py
index ac3c2b41bceeaaae007d3dc561b096c9f134a1d7..51c69c94856a2738fad208b78583e7eccb8955c1 100644
--- a/core/views/vacancies.py
+++ b/core/views/vacancies.py
@@ -19,17 +19,35 @@ class ApplicationViewSet(viewsets.GenericViewSet):
     permission_classes = [IsAdminOrStudent]
 
     def list(self, request, student_id):
+        """
+        Get list of a student {student_id}'s application
+        ---
+        """
         student = get_object_or_404(Student.objects.all(), pk=student_id)
         vacancies = self.serializer_class(student.applied_vacancies, many=True, context={'request': request})
         return Response(vacancies.data)
 
     def create(self, request, student_id):
+        """
+        Create a new application for student {student_id}
+        ---
+        parameters:
+            - name: body
+              description: JSON object containing only one string: vacancy_id
+              required: true
+              type: string
+              paramType: body
+        """
         vacancy = get_object_or_404(Vacancy.objects.all(), pk=request.data['vacancy_id'])
         student = get_object_or_404(Student.objects.all(), pk=student_id)
         student.applied_vacancies.add(vacancy)
         return Response(self.serializer_class(student.applied_vacancies, many=True, context={'request': request}).data)
 
     def destroy(self, request, student_id, pk):
+        """
+        Remove a application {id} for student {student_id}
+        ---
+        """
         vacancy = get_object_or_404(Vacancy.objects.all(), pk=pk)
         student = get_object_or_404(Student.objects.all(), pk=student_id)
         student.applied_vacancies.remove(vacancy)
@@ -41,17 +59,35 @@ class BookmarkedVacancyByStudentViewSet(viewsets.GenericViewSet):
     permission_classes = [IsAdminOrStudent]
 
     def list(self, request, student_id):
+        """
+        Get list of a student {student_id}'s bookmarked vacancies
+        ---
+        """
         student = get_object_or_404(Student.objects.all(), pk=student_id)
         vacancies = self.serializer_class(student.bookmarked_vacancies, many=True, context={'request': request})
         return Response(vacancies.data)
 
     def create(self, request, student_id):
+        """
+        Bookmarks a vacancy for student {student_id}
+        ---
+        parameters:
+            - name: body
+              description: JSON object containing only one string: vacancy_id
+              required: true
+              type: string
+              paramType: body
+        """
         vacancy = get_object_or_404(Vacancy.objects.all(), pk=request.data['vacancy_id'])
         student = get_object_or_404(Student.objects.all(), pk=student_id)
         student.bookmarked_vacancies.add(vacancy)
         return Response(self.serializer_class(student.bookmarked_vacancies, many=True, context={'request': request}).data)
 
     def destroy(self, request, student_id, pk):
+        """
+        Remove bookmark {id} for student {student_id}
+        ---
+        """
         vacancy = get_object_or_404(Vacancy.objects.all(), pk=pk)
         student = get_object_or_404(Student.objects.all(), pk=student_id)
         student.bookmarked_vacancies.remove(vacancy)