Fakultas Ilmu Komputer UI

Commit 1fa91823 authored by Luthfi Dzaky Saifuddin's avatar Luthfi Dzaky Saifuddin
Browse files

pass functional test and add section in readme md

parent 70ac3962
Pipeline #23140 passed with stages
in 9 minutes
...@@ -60,3 +60,23 @@ Ada perubahan pada `functional_test` dimana saya harus memakai ...@@ -60,3 +60,23 @@ Ada perubahan pada `functional_test` dimana saya harus memakai
`StaticLiveServerTestCase` untuk mengetes layout karena ketika saya menggunakan `StaticLiveServerTestCase` untuk mengetes layout karena ketika saya menggunakan
`LiveServerTestCase` style yang saya gunakan tidak tampil. Namun, penggunaannya tetap sama. `LiveServerTestCase` style yang saya gunakan tidak tampil. Namun, penggunaannya tetap sama.
## Tutorial 5
Red-Green-Refactor merupakan bentuk implementasi dari TDD. `RED` dikatakan sebagai
fase dimana kita membuat test-test yang memungkinkan dari semua use case, dikatakan RED
karena pada fase ini akan membuat semua test fail/pipeline fail karena kita
belum membuat implementasi dari program tersebut. Kemudian `GREEN` merupakan fase
dimana kita mengimplementasi program dengan memenuhi keseluruhan test yang dibuat.
Hal tersebut akan membuat test kita berhasil atau pipeline kita sudah menunjukkan
success. Kemudian `REFACTOR` merupakan fase dimana kita melakukan refaktorisasi
terhadap implementasi yang ada, seperti contohnya menghapus duplikasi kode, penamaan variabel,
simplifikasi fungsi dan lain-lain. Hal tersebut membuat program yang kita buat
akan lebih mudah terhindar dari bug atau `code smell` dimana hal tersebut merupakan
salah satu penanda bahwa kita menerapkan `clean code` atau tidak.
Kemudian, mengenai `Test Organization`, `Test Organization` merupakan
bentuk pengorganisasian test berdasarkan tanggung jawab aktivitas apa yang dilakukan.
Seperti pada `functional test` membagi pada 3 aktivitas berbeda dan `test lists` membagi
pada 2 aktivitas berbeda, yaitu aktivitas yang berkaitan dengan `views` dan berkaitan
dengan `models`. Hal tersebut memberikan keuntungan ketika program yang kita buat
memuat banyak aktivitas sehingga untuk mencari test atau membuat test terkait aktivitas tersebut
tidak hanya berada di 1 file yang bisa mengakibatkan file tersebut menjadi panjang.
\ No newline at end of file
...@@ -6,7 +6,8 @@ ...@@ -6,7 +6,8 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="/static/base.css" rel="stylesheet">
<link href="/static/base.css" rel="stylesheet">
{% load sass_tags %} {% load sass_tags %}
<link href="{% sass_src 'home1.scss' %}" rel="stylesheet" type="text/css"/> <link href="{% sass_src 'home1.scss' %}" rel="stylesheet" type="text/css"/>
</head> </head>
...@@ -28,38 +29,50 @@ ...@@ -28,38 +29,50 @@
<button>Contact</button> <button>Contact</button>
</p> </p>
</div> </div>
<div class="container">
<h3 id="comment-todo" class="text-center"> <div class="container">
{% if list.item_set.count >= 5 %} <h3 id="comment-todo" class="text-center">
oh tidak {% if list.item_set.count >= 5 %}
{% elif list.item_set.count < 5 %} oh tidak
sibuk tapi santai {% elif list.item_set.count < 5 %}
{% else %} sibuk tapi santai
yey, waktunya berlibur {% else %}
{% endif %} yey, waktunya berlibur
</h3> {% endif %}
<div class="row"> </h3>
<div class="row">
<div class="col-md-6 col-md-offset-3 jumbotron"> <div class="col-md-6 col-md-offset-3 jumbotron">
<div class="text-center"> <div class="text-center">
<h1>{% block header_text %}{% endblock %}</h1> <h1>{% block header_text %}{% endblock %}</h1>
<form method="POST" action="{% block form_action %}{% endblock %}"> <form method="POST" action="{% block form_action %}{% endblock %}">
<input name="item_text" id="id_new_item" <input name="item_text" id="id_new_item"
class="form-control input-lg" class="form-control input-lg"
placeholder="Enter a to-do item" /> placeholder="Enter a to-do item"/>
{% csrf_token %} {% csrf_token %}
</form> {% if error.text != '' %}
</div> <div>
<p class="alert-danger has-error">{{ error }}</p>
</div>
{% endif %}
</form>
</div>
</div> </div>
</div> </div>
<div class="row">
<div class="col-md-6 col-md-offset-3"> <div class="row">
​{% block table %}
​{% endblock %} <div class="col-md-6 col-md-offset-3">
</div> ​{% block table %}
</div> ​{% endblock %}
</div>
</div>
</div>
</div>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -3,20 +3,27 @@ from django.http import HttpResponse ...@@ -3,20 +3,27 @@ from django.http import HttpResponse
from lists.models import Item, List from lists.models import Item, List
# Create your views here. # Create your views here.
def home_page(request): def home_page(request, error=''):
items = Item.objects.all() items = Item.objects.all()
return render(request, 'homepage.html', {'items': items}) return render(request, 'homepage.html', {'items': items,
'error': error})
def view_list(request, list_id): def view_list(request, list_id, error=''):
list_ = List.objects.get(id=list_id) list_ = List.objects.get(id=list_id)
return render(request, 'list.html', {'list': list_}) return render(request, 'list.html', {'list': list_, 'error': error})
def new_list(request): def new_list(request):
if len(request.POST['item_text']) == 0:
error = "You can't have an empty list item"
return home_page(request, error)
list_ = List.objects.create() list_ = List.objects.create()
Item.objects.create(text=request.POST['item_text'], list=list_) Item.objects.create(text=request.POST['item_text'], list=list_)
return redirect(f'/lists/{list_.id}/') return redirect(f'/lists/{list_.id}/')
def add_item(request, list_id): def add_item(request, list_id):
list_ = List.objects.get(id=list_id) list_ = List.objects.get(id=list_id)
if len(request.POST['item_text']) == 0:
error = "You can't have an empty list item"
return view_list(request, list_id, error)
Item.objects.create(text=request.POST['item_text'], list=list_) Item.objects.create(text=request.POST['item_text'], list=list_)
return redirect(f'/lists/{list_.id}/') return redirect(f'/lists/{list_.id}/')
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