diff --git a/app/templates/req_materi.html b/app/templates/req_materi.html
index d0375d7169835ed89a4ac7a793783478a80bd35b..f4d071bab3f96663ae5575ecc911a502a5ad77ff 100644
--- a/app/templates/req_materi.html
+++ b/app/templates/req_materi.html
@@ -108,7 +108,7 @@ $('#btn_req_submit').click(function () {
     
     $.ajax({
         type: 'POST',
-        url: "{% url 'post-req-materi' %}",
+        url: "{% url 'req-materi' %}",
         data: {
             'title': title.value,
         },
diff --git a/app/tests.py b/app/tests.py
index c298f5f420f4dcf817749f7d3ef209dd2a6c0a57..cf10ccb5d164c1d92f729043d5e99b362acc0390 100644
--- a/app/tests.py
+++ b/app/tests.py
@@ -15,12 +15,11 @@ from administration.utils import id_generator
 from app.forms import SuntingProfilForm
 from app.views import UploadMateriView, add_rating_materi
 from authentication.models import User
-from .models import Category, Comment, Materi, Like, Rating
+from .models import Category, Comment, Materi, Like, Rating, ReqMaterial
 from .views import (DaftarKatalog, DashboardKontributorView, DetailMateri,
                     ProfilKontributorView, SuksesLoginAdminView,
                     SuksesLoginKontributorView, SuntingProfilView,
-                    ProfilAdminView, PostsView, SuntingProfilAdminView, 
-                    RevisiMateriView, KatalogPerKontributorView)
+                    ProfilAdminView, PostsView, SuntingProfilAdminView, RevisiMateriView, ReqMateriView, KatalogPerKontributorView)
 from app.forms import SuntingProfilForm
 from app.utils.fileManagementUtil import get_random_filename, remove_image_exifdata
 
@@ -52,12 +51,12 @@ class DaftarKatalogTest(TestCase):
 class DaftarKatalogPerKontributorTest(TestCase):
     def setUp(self):
         self.client = Client()
-    
+
         self.contributor_credential = {
                 "email": "kontributor@gov.id",
                 "password": "passwordtest"
             }
-        
+
         self.contributor_credential_2 = {
                 "email": "kontributor2@gov.id",
                 "password": "passwordtest"
@@ -67,7 +66,7 @@ class DaftarKatalogPerKontributorTest(TestCase):
             **self.contributor_credential, name="Kontributor 1", is_contributor=True)
         self.contributor2 = get_user_model().objects.create_user(
             **self.contributor_credential_2, name="Kontributor 2", is_contributor=True)
-        
+
         self.cover = SimpleUploadedFile(
             "Cherprang_Areekul40_nJM9dGt.jpg", b"Test file")
         self.content = SimpleUploadedFile("Bahan_PA_RKK.pdf", b"Test file")
@@ -81,16 +80,16 @@ class DaftarKatalogPerKontributorTest(TestCase):
         Materi(title="Materi 3", author="Agas", uploader=self.contributor2,
                publisher="Kelas SC", descriptions="Deskripsi Materi 3",
                status="APPROVE", cover=self.cover, content=self.content).save()
-        
+
         self.url = f"/profil/{self.contributor.email}/"
-        
+
     def test_katalog_per_kontributor_url_exist(self):
         response = self.client.get(self.url)
         self.assertEqual(response.status_code, 200)
 
     def test_katalog_per_kontributor_using_katalog_kontri_template(self):
         response = self.client.get(self.url)
-        self.assertTemplateUsed(response, "app/katalog_kontri.html")    
+        self.assertTemplateUsed(response, "app/katalog_kontri.html")
 
     def test_katalog_per_kontributor_using_katalog_per_kontributor_func(self):
         found = resolve(self.url)
@@ -98,10 +97,10 @@ class DaftarKatalogPerKontributorTest(TestCase):
 
     def test_katalog_per_kontributor_show_daftar_materi_kontributor(self):
         response = self.client.get(self.url)
-        
-        list_materi = Materi.objects.filter(uploader=self.contributor)        
+
+        list_materi = Materi.objects.filter(uploader=self.contributor)
         data = response.context_data['materi_list']
-        self.assertEqual(len(list_materi), len(data))    
+        self.assertEqual(len(list_materi), len(data))
 
 
 class DetailMateriTest(TestCase):
@@ -1319,3 +1318,74 @@ class fileManagementUtilTest(TestCase):
 
             self.assertTrue(len(sanitized_img) < len(self.file_content))
             self.assertTrue(b'<exif:' not in sanitized_img)
+
+class RequestMateriTest(TestCase):
+    def setUp(self):
+        self.client = Client()
+        self.admin_credential = {
+            "email": "admin@gov.id",
+            "password": "passwordtest"
+        }
+        self.contributor_credential = {
+            "email": "kontributor@gov.id",
+            "password": "passwordtest"
+        }
+        self.anonymous_credential = {
+            "email": "anonymous@gov.id",
+            "password": "passwordtest"
+        }
+        self.admin = get_user_model().objects.create_user(
+            **self.admin_credential, name="Admin", is_admin=True)
+        self.contributor = get_user_model().objects.create_user(
+            **self.contributor_credential, name="Kontributor", is_contributor=True)
+        self.anonymous = get_user_model().objects.create_user(
+            **self.anonymous_credential, name="Anonymous"
+        )
+        self.url = "/req-materi/"
+        self.template_name = "req_materi.html"
+
+    def test_req_materi_url_resolves_to_get_req_materi_view(self):
+        found = resolve(self.url)
+        self.assertEqual(found.func.__name__, ReqMateriView.as_view().__name__)
+
+    def test_uses_req_material_template(self):
+        self.client.login(**self.contributor_credential)
+        response = self.client.get(self.url)
+        self.assertTemplateUsed(response, self.template_name)
+        self.client.logout()
+
+    def test_redirect_to_login_page_is_not_authenticated(self):
+        response = self.client.get(self.url)
+
+        self.assertEqual(response.status_code, 302)
+        self.assertEqual(response['location'], '/login/')
+
+    def test_saving_and_retrieving_material_requests(self):
+        first_material_request = ReqMaterial(title="Material 1").save()
+        second_material_request = ReqMaterial(title="Material 2").save()
+        saved_material_request = ReqMaterial.objects.all()
+        self.assertEqual(saved_material_request.count(), 2)
+
+    def test_can_save_a_POST_request_and_return_correct_response_message(self):
+        self.client.login(**self.contributor_credential)
+
+        response = self.client.post(self.url,
+                         data={
+                             'title': 'Requested Material'
+                         })
+        self.assertEqual(ReqMaterial.objects.count(), 1)
+
+        new_material_request = ReqMaterial.objects.first()
+        self.assertEqual(new_material_request.title, 'Requested Material')
+
+        self.assertIn('Permintaan materi berhasil dikirimkan', response.content.decode())
+        self.client.logout()
+
+    def test_given_no_title_should_not_save_request_and_return_correct_response_message(self):
+        self.client.login(**self.contributor_credential)
+
+        response = self.client.post(self.url)
+        self.assertEqual(ReqMaterial.objects.count(), 0)
+
+        self.assertIn('Missing parameter', response.content.decode())
+        self.client.logout()
diff --git a/app/urls.py b/app/urls.py
index ac2c7682946dd6e6bb6eb4c7a500fb9c2c8f414e..a63a2aabfc996ec656e35b5a86e242018275b464 100644
--- a/app/urls.py
+++ b/app/urls.py
@@ -28,7 +28,6 @@ urlpatterns = [
     path("posts/", PostsView.as_view(), name='posts'),
     path("sunting-admin/", SuntingProfilAdminView.as_view(), name="sunting-admin"),
     path("req-materi/", ReqMateriView.as_view(), name="req-materi"),
-    path("post-req-materi/", views.post_req_materi, name="post-req-materi"),
     path("profil/<str:email>/", KatalogPerKontributorView.as_view(),
          name="katalog-per-kontributor"),
     path("materi/rate/", views.add_rating_materi, name="rate-materi"),
diff --git a/app/views.py b/app/views.py
index 31dbbbcada3a5dd3783cc813a6538b52d90336c4..9e77e36dfe695f149f4c6509cc0fd29b95b899b1 100644
--- a/app/views.py
+++ b/app/views.py
@@ -486,9 +486,6 @@ class ReqMateriView(TemplateView):
     def dispatch(self, request, *args, **kwargs):
         if request.user.is_authenticated == False:
             return HttpResponseRedirect("/login/")
-            #raise PermissionDenied(request)
-        # else if not request.user.is_admin:
-        #     raise PermissionDenied(request)
         return super(ReqMateriView, self).dispatch(request, *args, **kwargs)
 
     def get_context_data(self, **kwargs):
@@ -498,39 +495,14 @@ class ReqMateriView(TemplateView):
 
     def get(self, request, *args, **kwargs):
         context = self.get_context_data(**kwargs)
-
-        current_user = self.request.user
-        context["user"] = current_user
-
-        context["form"] = SuntingProfilForm(instance=current_user)
         return self.render_to_response(context)
 
     def post(self, request, *args, **kwargs):
-        if request.user.is_authenticated == False:
-            raise PermissionDenied(request)
-
-        current_user = self.request.user
-        form = SuntingProfilForm(
-            request.POST, request.FILES, instance=current_user)
-        if form.is_valid():
-            current_user.default_profile_picture = True
-            form.save()
-            return HttpResponseRedirect("/profil-admin/")
-        else:
-            context = self.get_context_data(**kwargs)
-            context["form"] = form
-            return self.render_to_response(context)
-
-def post_req_materi(request):
-    if request.method == 'POST':
-        #return JsonResponse({"success": True, "msg": "Permintaan materi berhasil dikirimkan"})
         title = request.POST.get('title', None)
         if title is None:
             return JsonResponse({"success": False, "msg": "Missing parameter"})
         ReqMaterial(title=title).save()
         return JsonResponse({"success": True, "msg": "Permintaan materi berhasil dikirimkan"})
-    else:
-        return JsonResponse({"success": False, "msg": "Unsuported method"})
 
 
 class SuksesLoginKontributorView(TemplateView):