**Penjelasan:** pada potongan kode diatas, terdapat *decorator* yang diletakkan diatas *test case method*, yaitu `@patch('tutorial_7.views.send_mail')`, dimana *decorator* tersebut menandakan bahwa *test case method* dibawahnya akan melakukan *mocking* terhadap *method*`send_mail` yang terdapat di file `views.py` milik modul `tutorial_7`. Selanjutnya, *method* yang sudah dilakukan *mocking* tersebut disimpan dalam sebuah parameter yang bernama `mock_send_mail`. Dan dilakukan pengecekan apakah *method* tersebut terpanggil melalui POST request, dan pencocokan argumen-argumen yang diterima oleh *method* yang sudah dilakukan *mocking* tersebut.
**Penjelasan:** pada potongan kode diatas, terdapat *decorator* yang diletakkan diatas *test case method*, yaitu `@patch('tutorial_7.views.send_mail')`, dimana *decorator* tersebut menandakan bahwa *test case method* dibawahnya akan melakukan *mocking* terhadap *method*`send_mail` yang terdapat di file `views.py` milik modul `tutorial_7`. Selanjutnya, *method* yang sudah dilakukan *mocking* tersebut disimpan dalam sebuah parameter yang bernama `mock_send_mail`. Dan dilakukan pengecekan apakah *method* tersebut terpanggil melalui POST request, dan pencocokan argumen-argumen yang diterima oleh *method* yang sudah dilakukan *mocking* tersebut.
## Penjelasan Tutorial 9
Berdasarkan buku **Test-Driven Development with Python 2nd Edition, bab 20.1,** terdapat beberapa penjelasan mengenai *user authentication*, dimana dalam hal ini membuat *functional test* yang berfungsi untuk melakukan *testing* terhadap alur *login* terhadap *user* yang sudah terdaftar.
Sebenarnya, hal ini sudah pernah dilakukan dalam pengerjaan **Tutorial 7**, atau lebih tepatnya dalam **buku acuan bab 18.3**. Namun, terdapat beberapa perbedaan dalam implementasi tutorial ini dengan tutorial sebelumnya, yaitu:
- Pada Tutorial 7, dilakukan *functional testing* untuk alur *login* dengan memasukkan email secara manual kedalam *form* yang sudah dibuat di file HTML-nya, dan mengecek inbox untuk memastikan apakah telah dikirim email yang berisikan `uid` yang sudah dibuat. Alur berjalannya *functional testing* pada Tutorial 7 secara garis besar terbagi menjadi 3 bagian, yaitu **Pengisian form email, Pengecekan mailbox,** dan **Pengecekan link `uid` yang diberikan**.
- Pada Tutorial 9, dilakukan *functional testing* untuk alur *login* dengan membuat sebuah objek ***session*** baru yang berisikan informasi-informasi yang digunakan untuk *login*, yaitu email pengguna. Pembuatan objek *session* ini berlangsung secara *internal* di dalam modul `tutorial_7`, tanpa melibatkan interaksi dengan modul luar seperti *mailbox*. Berikut adalah potongan kode yang menjalankan fungsi tersebut.
**Penjelasan:** pada potongan kode diatas, dibentuk sebuah *instance* dari model `User` dengan *primary key* email yang menjadi parameter dari *method* tersebut. Selanjutnya, digunakan sebuah *library* bawaan Django yaitu `django.contrib.auth` yang menyediakan penyimpanan informasi *session*, dan dilakukan *assignment* untuk variabel `SESSION_KEY` dengan menggunakan *primary key* dari *instance* model `User` yang telah dibuat (email), dan selanjutnya *session* yang telah dibuat di-*save*, dan menjadi penanda adanya sebuah user yang sedang aktif (*logged in*).
Penggunaan *method*`create_pre_authenticated_session` ini memiliki beberapa kelebihan dibandingkan dengan implementasi pada Tutorial 7. Diantaranya, setiap *test case* tidak perlu melewati tahapan-tahapan mengirimkan email yang berisikan UID, yang mana memakan waktu dan tidak perlu melakukan interaksi dengan modul luar, cukup hanya di dalam modul `tutorial_7`.