Fakultas Ilmu Komputer UI

Commit 3d942762 authored by Rayza Arasj Mahardhika's avatar Rayza Arasj Mahardhika
Browse files

done exercise 8

parent 6d774870
Pipeline #25839 failed with stage
in 1 minute and 7 seconds
......@@ -110,4 +110,20 @@ Dengan test tersebut jumlah mutant yang survived berkurang menjadi 44 karena ter
## Exercise - 7 : Spiking & De-Spiking
Setelah saya melakukan subbab 18.1-18.5, pengertian mengenai Spiking yang saya dapat adalah, Spiking itu sendiri adalah suatu cara agar kita dapat melakukan proof of concept terhadap ide fitur yang kita miliki tanpa menmbuat test terlebih dahulu. Memang code akan tidak ditest namun code yang dibuat ini memang tidak dibuat untuk ditest/karena test namun code dibuat agar ide fitur yang kita miliki dapat terrealisasikan. Sedangkan De-Spiking adalah proses dimana kita membuang semua code spiking kita (karena concept ide kita sudah proven), lalu mengerjakan kembali fitur tersebut dengan menggunakan prinsip TDD dengan benar.
## Exercise - 8 : Mocking
\ No newline at end of file
## Exercise - 8 : Mocking
Setelah melakukan subbab 19.1-19.5, saya mengambil pengertian mengenai perbedaan manual mocking dan mocking menggunakan mock library adalah dengan menggunakan mock library, mocking akan sangat lebih mudah. Hal ini dikarenakan dengan manual mock kita harus membuat fungsi palsu telebih dahulu sesuai dengan parameter yang ada, serta harus mengganti fungsi yang ingin dimock dengan fungsi tersebut serta mengembalikannya ke keadaan semula agar tidak merusak test lain.
Dengan menggunakan mock, program dapat menjadi tightly coupled karena dengan mock kita akan melakukan test terhadap menggunakan mock, test akan lebih condong melihat bagaimana code berajalan dibandingkan dengan hanya melihat apa yang terjadi dengan code yang ada. Contoh mock yang digunakan:
```
@patch('accounts.views.send_mail')
def test_sends_mail_to_address_from_post(self, mock_send_mail):
self.client.post('/accounts/send_login_email', data={
'email': 'edith@example.com'
})
self.assertEqual(mock_send_mail.called, True)
(subject, body, from_email, to_list), kwargs = mock_send_mail.call_args
self.assertEqual(subject, 'Your login link for Superlists')
self.assertEqual(from_email, 'noreply@superlists')
self.assertEqual(to_list, ['edith@example.com'])
```
\ No newline at end of file
......@@ -9,6 +9,7 @@ class AuthenticateTest(TestCase):
def test_returns_None_if_no_such_token(self):
result = PasswordlessAuthenticationBackend().authenticate(
None,
'no-such-token'
)
self.assertIsNone(result)
......@@ -17,7 +18,7 @@ class AuthenticateTest(TestCase):
def test_returns_new_user_with_correct_email_if_token_exists(self):
email = 'edith@example.com'
token = Token.objects.create(email=email)
user = PasswordlessAuthenticationBackend().authenticate(token.uid)
user = PasswordlessAuthenticationBackend().authenticate(None, token.uid)
new_user = User.objects.get(email=email)
self.assertEqual(user, new_user)
......@@ -26,7 +27,7 @@ class AuthenticateTest(TestCase):
email = 'edith@example.com'
existing_user = User.objects.create(email=email)
token = Token.objects.create(email=email)
user = PasswordlessAuthenticationBackend().authenticate(token.uid)
user = PasswordlessAuthenticationBackend().authenticate(None, token.uid)
self.assertEqual(user, existing_user)
class GetUserTest(TestCase):
......
from django.urls import path
from accounts.views import send_login_email, login
from django.contrib.auth.views import LogoutView
urlpatterns = [
path('send_login_email', send_login_email, name='send_login_email'),
path('login', login, name='login'),
path('logout', LogoutView.as_view(next_page='/'), name='logout'),
]
......@@ -12,7 +12,6 @@ SUBJECT = 'Your login link for Superlists'
class LoginTest(FunctionalTest):
# @skip
def test_can_get_email_link_to_log_in(self):
# Edith goes to the awesome superlists site
# and notices a "Log in" section in the navbar for the first time
......@@ -49,4 +48,14 @@ class LoginTest(FunctionalTest):
lambda: self.browser.find_element_by_link_text('Log out')
)
navbar = self.browser.find_element_by_css_selector('.navbar')
self.assertIn(TEST_EMAIL, navbar.text)
\ No newline at end of file
self.assertIn(TEST_EMAIL, navbar.text)
# Now she logs out
self.browser.find_element_by_link_text('Log out').click()
# She is logged out
self.wait_for(
lambda: self.browser.find_element_by_name('email')
)
navbar = self.browser.find_element_by_css_selector('.navbar')
self.assertNotIn(TEST_EMAIL, navbar.text)
......@@ -19,7 +19,7 @@
{% if user.email %}
<ul class="nav navbar-nav navbar-right">
<li class="navbar-text">Logged in as {{ user.email }}</li>
<li><a href="#">Log out</a></li>
<li><a href="{% url 'logout' %}">Log out</a></li>
</ul>
{% else %}
<form class="navbar-form navbar-right"
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment