Fakultas Ilmu Komputer UI

Commit 02842153 authored by Yumna Pratista Tastaftian's avatar Yumna Pratista Tastaftian
Browse files

Testinggoat/ex8

parent efa00ed2
This diff is collapsed.
# 1606836976-practice
HEROKU LINK : www.homepageyumna.herokuapp.com
1. Exercise 3 - Lab 6 (obey the testing goat)
Proses test isolation yang dilakukan :
* Pada exercise ini saya mengimplementasikan isolation test terutama pada functional test agar saat menjalankan test tersebut tidak mempengaruhi database aslinya.
* Hal ini dilakukan dengan cara mengimplementasikan LiveServerTestCase pada functional_test.
* Berikut ini adalah yang dilakukan oleh LiveServerTestCase :
1. Memiliki atribut live_server_url, yaitu url yang akan dikunjungi saat menjalankan functional_test
2. Menggunakan selenium dalam membuka web dengan url live_server_url
3. LiveServerTestCase akan membangun Django Server sehingga bisa membuka dan mengakses database yang terisolasi dari web aslinya
4. selenium akan membuka django server tersebut, melakukan fungsi sesuai dengan yang dispesifikasi pada functional_test dan menutupnya kembali setelah fungsi tersebut selesai di jalankan
* Perbedaan desain lama dan desain baru dari program yang dibentuk
1. Yang paling dominan dalam perubahan ini adalah implementasi dari LiveTesterTestCase
2. Yang berbeda dari desain lama adalah pemanggilan dan pengaksesan seleniumnya pada functional_test, dimana pada desain yang lama selenium memanggil web real dari web ini sehingga saat functional test berjalan pun web sebenernya juga berubah.
3. Untuk yang desain baru, disini dipanggil live_server_url pada saat menjalankan functional_test yang nantinya akan membentuk Django Server sendiri sehingga tidak menggunakan database dan web asli dari url yang sebenarnya.
4. time_sleep yang digunakan pun dirubah
3. Exercise 5
* Proses refactoring :
Refactoring sangat dibutuhkan dalam segala medan pemrograman, sesuai dengan teori yang ada dari buku, maka dengan bentuk TDD kita boleh membuat test passed terlebih dahulu saja, namun nantinya tetap harus direfactor untuk menjaga clean code.
Contoh yang ada pada exercise ini adalah dimana ada beberapa test yang ditulis berkali-kali sehingga program pun menjalankannya lebih dari sekali, sehingga hal tersebut harus dikurangi dengan cara menghapusnya agar hanya dijalankan sebanyak sekali.
* Proses managing test/test organization :
Managing test/test organization ini diperlukan untuk merapihkan dan memiliki tujuan untuk meningkatkan clean code, serta kita juga dapat lebih mudah dalam memilih test apa saja yang mau dijalankan karena setiap file test akan mengurus test pada dirinya sendiri saja.
# 1606836976-practice
HEROKU LINK : www.homepageyumna.herokuapp.com
1. Exercise 3 - Lab 6 (obey the testing goat)
Proses test isolation yang dilakukan :
* Pada exercise ini saya mengimplementasikan isolation test terutama pada functional test agar saat menjalankan test tersebut tidak mempengaruhi database aslinya.
* Hal ini dilakukan dengan cara mengimplementasikan LiveServerTestCase pada functional_test.
* Berikut ini adalah yang dilakukan oleh LiveServerTestCase :
1. Memiliki atribut live_server_url, yaitu url yang akan dikunjungi saat menjalankan functional_test
2. Menggunakan selenium dalam membuka web dengan url live_server_url
3. LiveServerTestCase akan membangun Django Server sehingga bisa membuka dan mengakses database yang terisolasi dari web aslinya
4. selenium akan membuka django server tersebut, melakukan fungsi sesuai dengan yang dispesifikasi pada functional_test dan menutupnya kembali setelah fungsi tersebut selesai di jalankan
* Perbedaan desain lama dan desain baru dari program yang dibentuk
1. Yang paling dominan dalam perubahan ini adalah implementasi dari LiveTesterTestCase
2. Yang berbeda dari desain lama adalah pemanggilan dan pengaksesan seleniumnya pada functional_test, dimana pada desain yang lama selenium memanggil web real dari web ini sehingga saat functional test berjalan pun web sebenernya juga berubah.
3. Untuk yang desain baru, disini dipanggil live_server_url pada saat menjalankan functional_test yang nantinya akan membentuk Django Server sendiri sehingga tidak menggunakan database dan web asli dari url yang sebenarnya.
4. time_sleep yang digunakan pun dirubah
3. Exercise 5
* Proses refactoring :
Refactoring sangat dibutuhkan dalam segala medan pemrograman, sesuai dengan teori yang ada dari buku, maka dengan bentuk TDD kita boleh membuat test passed terlebih dahulu saja, namun nantinya tetap harus direfactor untuk menjaga clean code.
Contoh yang ada pada exercise ini adalah dimana ada beberapa test yang ditulis berkali-kali sehingga program pun menjalankannya lebih dari sekali, sehingga hal tersebut harus dikurangi dengan cara menghapusnya agar hanya dijalankan sebanyak sekali.
* Proses managing test/test organization :
Managing test/test organization ini diperlukan untuk merapihkan dan memiliki tujuan untuk meningkatkan clean code, serta kita juga dapat lebih mudah dalam memilih test apa saja yang mau dijalankan karena setiap file test akan mengurus test pada dirinya sendiri saja.
from django.contrib import admin
# Register your models here.
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class AccountsConfig(AppConfig):
name = 'accounts'
from django.apps import AppConfig
class AccountsConfig(AppConfig):
name = 'accounts'
import sys
from accounts.models import ListUser, Token
class PasswordlessAuthenticationBackend(object):
def authenticate(self,request, uid):
print('uid', uid, file=sys.stderr)
if not Token.objects.filter(uid=uid).exists():
print('no token found', file=sys.stderr)
return None
token = Token.objects.get(uid=uid)
print('got token', file=sys.stderr)
try:
user = ListUser.objects.get(email=token.email)
print('got user', file=sys.stderr)
return user
except ListUser.DoesNotExist:
print('new user', file=sys.stderr)
return ListUser.objects.create(email=token.email)
def get_user(self, email):
return ListUser.objects.get(email=email)
\ No newline at end of file
import sys
from accounts.models import Token, User
class PasswordlessAuthenticationBackend(object):
def authenticate(self, request, uid):
print(uid + " authenticate")
try:
print(uid + " USER EXISTS")
token = Token.objects.get(uid=uid)
return User.objects.get(email=token.email)
except User.DoesNotExist:
print(uid + " USER NOT EXISTS")
return User.objects.create(email=token.email)
except Token.DoesNotExist:
print(uid + " TOKEN NOT EXISTS")
return None
def get_user(self, email):
try:
return User.objects.get(email=email)
except User.DoesNotExist:
return None
# Generated by Django 2.2.1 on 2019-11-14 06:15
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('email', models.EmailField(max_length=254, primary_key=True, serialize=False)),
],
),
migrations.CreateModel(
name='Token',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.EmailField(max_length=254)),
('uid', models.CharField(default=uuid.uuid4, max_length=40)),
],
),
]
# Generated by Django 2.2.1 on 2019-11-14 06:15
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('email', models.EmailField(max_length=254, primary_key=True, serialize=False)),
],
),
migrations.CreateModel(
name='Token',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.EmailField(max_length=254)),
('uid', models.CharField(default=uuid.uuid4, max_length=40)),
],
),
]
from django.db import models
import uuid
class User(models.Model):
email = models.EmailField(primary_key = True)
REQUIRED_FIELDS = []
USERNAME_FIELD = 'email'
is_anonymous = False
is_authenticated = True
class Token(models.Model):
email = models.EmailField()
uid = models.CharField(max_length = 40, default=uuid.uuid4)
from django.db import models
import uuid
from django.contrib import auth
auth.signals.user_logged_in.disconnect(auth.models.update_last_login)
class User(models.Model):
email = models.EmailField(primary_key = True)
REQUIRED_FIELDS = []
USERNAME_FIELD = 'email'
is_anonymous = False
is_authenticated = True
class Token(models.Model):
email = models.EmailField()
uid = models.CharField(max_length = 40, default=uuid.uuid4)
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