Fakultas Ilmu Komputer UI

Commit 217d80c7 authored by Ami's avatar Ami
Browse files

[RED] adding tests for dietela quiz formulas (items 16-22)

parent c1633f31
Pipeline #64659 failed with stage
in 4 minutes and 45 seconds
......@@ -114,3 +114,54 @@ class DietProfileChoices:
(12, "Penyintas Kanker"),
(13, "Penyakit Kronis Lainnya"),
)
# Choices 17-20 is for items 16-22, choice 8 is also needed
# Input 17
CHOICES_BREAKFAST = (
(1, "Tidak pernah makan pagi"),
(2, "Makanan yang ringan saja"),
(3, "Makanan yang sampai mengenyangkan perut"),
)
# Input 18
CHOICES_YOUR_CONDITION = (
(1, "Saya belum tertarik melakukan diet dan gaya hidup sehat dan tidak tahu kondisi gizi serta kesehatan saya"),
(2, "Saya belum tertarik melakukan diet dan gaya hidup sehat meskipun saya tahu kondisi gizi dan kesehatan saya"),
(3, "Saya mulai tertarik melakukan diet dan gaya hidup sehat meskipun saya tidak tahu kondisi gizi dan kesehatan saya"),
(4, "Saya mulai tertarik melakukan diet dan gaya hidup sehat dan tahu kondisi gizi dan kesehatan saya"),
(5, "Saya sudah tahu manfaat diet dan gaya hidup sehat namun belum tahu harus mulai menerapkannya dari mana"),
(6, "Saya sudah pernah merubah diet dan gaya hidup menjadi lebih sehat tetapi tidak bertahan lama (dilakukan kurang dari 6 bulan)"),
(7, "Saya sudah pernah berhasil menjalani diet dan gaya hidup sehat selama lebih dari 6 bulan dan ingin melakukannya lagi")
)
# Input 19
CHOICES_YOUR_PROBLEM = (
(1, "Turun berat badan dengan target yang realistis"),
(2, "Naik berat badan dengan target yang realistis"),
(3, "Berat badan yang bertahan permanen, menjaga agar berat badan tidak naik, anti yo-yo diet"),
(4, "Butuh pengaturan gizi Ibu Hamil"),
(5, "Butuh pengaturan gizi Ibu Menyusui"),
(6, "Menyiapkan tubuh untuk mencapai kesuburan dan persiapan kehamilan"),
(7, "Mengatur gula darah tinggi (Pre-diabetes), hiperlipidemia (kolesterol), hipertensi (tekanan darah tinggi)"),
(8, "Capai pola makan sehat dan tetap enjoy menikmati makanan yang disukai"),
(9, "Transisi vegan"),
(10, "Butuh pengaturan gizi pada anak-anak atau remaja"),
)
# Input 20
CHOICES_HEALTH_PROBLEM = (
(1, "Tidak ada yang perlu dikhawatirkan"),
(2, "Diabetes Tipe 2"),
(3, "Diabetes Tipe 1"),
(4, "PCOS (Polycystic Ovary Syndrome)"),
(5, "Kolesterol tinggi"),
(6, "Asam urat tinggi"),
(7, "Tekanan darah tinggi"),
(8, "Gula darah tinggi"),
(9, "Kanker"),
(10, "HIV/AIDS"),
(11, "Maag/GERD/Dispepsia/Gangguan lambung"),
(12, "Penyintas Kanker"),
(13, "Penyakit Kronis Lainnya"),
)
class BreakfastReponse:
NO_BREAKFAST = "Perut kosong di pagi hari bisa mengarahkan kepada 2 keadaan, antara membuat makan berlebihan di siang hari atau kurang asupan zat gizi per hari. Makan pagi bisa disesuaikan dengan pola bangun tidur kamu lho, cari deh solusi terbaik agar kamu bisa beraktifitas tanpa perut kosong."
MED_BREAKFAST = "Sudah bagus nih, bisa mengisi perut di pagi hari, eittts, tapi artinya kamu perlu melengkapi asupan energi di siang sampai malam hari karena makan paginya cuma sedikit, kamu perlu pengaturan lebih spesifik lagi agak asupan energi kamu seimbang."
HI_BREAKFAST = "Juara! Permulaan yang bagus untuk memenuhi kebutuhan energi seharian kamu. Jangan lupa jenis makanan yang kamu pilih saat sarapan harus seimbang juga komposisinya. Sudah ada buah dan sayur belum di sarapanmu? Masih banyak gorengan gak di sarapanmu?"
class PhysicalActivityResponse:
LEVEL1_ACTIVITY = "Hayooo kok duduk-duduk aja? Yuk ah mulai lakukan aktivitas fisik, dimulai dari aktivitas yang ringan seperti jalan kaki, jogging, senam, atau naik turun tangga 15 menit per hari. Tingkatkan perlahan hingga mencapai 30 menit per hari. Konsultasikan kebutuhan gizi harianmu kepada Dietela agar asupan makan kamu seimbang dengan energi yang kamu keluarkan setiap harinya"
LEVEL2_ACTIVITY = "Lumayan sudah banyak jalan, tapi boleh dong diselingi olahraga ringan seperti jogging, senam, atau naik turun tangga 15 menit per hari. Tingkatkan perlahan hingga mencapai 30 menit per hari. Konsultasikan kebutuhan gizi harianmu kepada dietela agar asupan makan kamu seimbang dengan energi yang kamu keluarkan setiap harinya"
LEVEL3_ACTIVITY = "Keren! Pertahankan olahraga rutin selama 150 menit per minggu atau minimal 30 menit per hari, tambahkan aktivitas penguatan otot sebanyak 2 kali per minggu selama 10-15 menit per hari. Konsultasikan kebutuhan gizi harianmu kepada dietela untuk pengaturan pola makan yang sesuai dengan aktivitas fisikmu."
LEVEL4_ACTIVITY = "Keren! Pertahankan durasi aktivitas fisik, tingkatkan intensitas gerakan secara bertahap, jangan lupa tambahkan aktivitas penguatan otot sebanyak 2 kali per minggu selama 10-15 menit per hari. Konsultasikan kebutuhan gizi harianmu kepada dietela untuk pengaturan pola makan yang sesuai dengan aktivitas fisikmu."
LEVEL5_ACTIVITY = "Wow! Sudah bagus banget nih, jangan lupa lakukan monitoring rutin terhadap komposisi tubuhmu. Jangan lupa juga untuk mencukupi kebutuhan cairan sebelum, saat, dan setelah olahraga. Konsultasikan kebutuhan gizi harianmu kepada dietela untuk pengaturan pola makan yang sesuai dengan aktivitas fisikmu."
class ProgramRecommendationResponse:
BABY_1 = "Body for Baby Program 1 Bulan"
BABY_3 = "Body for Baby Program 3 Bulan"
GOALS_1 = "Body Goals Program 1 Bulan"
GOALS_3 = "Body Goals Program 3 Bulan"
GOALS_6 = "Body Goals Program 6 Bulan"
BALANCED_1 = "Balanced Diet Program 1 Bulan"
BALANCED_3 = "Balanced Diet Program 3 Bulan"
BALANCED_6 = "Balanced Diet Program 6 Bulan"
TRIAL = "One week trial"
class CallToActionCopywritingResponse:
PRIORITY_1 = "Dari hasil mini asesmen kamu tadi, Dietela menyarankan kamu untuk menggunakan layanan ini untuk membantu (masalah yang mau diperbaiki/goals yang mau dicapai). Program dietela dirancang agar kamu bisa menemukan pola makan dan gaya hidup sehat yang cocok dengan gayamu."
PRIORITY_2 = "Belum yakin untuk ikut program dietela dengan komitmen waktu yang panjang? Yaudah yuk coba dulu layanan yang ini, kita lihat apakah selama waktu tersebut perubahan baik sudah mulai kamu rasakan dan yakin bisa melakukannya lebih lama lagi karena cocok & nyaman?"
......@@ -3,13 +3,18 @@ from rest_framework.test import APITestCase
from .models import DietProfile
from django.test import TestCase
from constants.body_mass import BodyMassConstants
from constants.quiz_response import *
from .formulas import (
body_mass_index,
nutrition_status,
ideal_weight_range,
basic_energy_needs,
physical_activity_percentage,
daily_energy_needs
daily_energy_needs,
recommendation_breakfast,
energy_needed_per_dine,
physical_activity_recommendation,
program_recommendation
)
# Create your tests here.
......@@ -104,3 +109,97 @@ class FormulaTest(TestCase):
self.assertEqual(daily_energy_needs(pregnant_trisemester_3, BodyMassConstants.NORMAL, basic_energy_needs, physical_activity_percentage), basic_energy_needs + (physical_activity_percentage * basic_energy_needs) + 452)
self.assertEqual(daily_energy_needs(giving_baby_milk_1, BodyMassConstants.NORMAL, basic_energy_needs, physical_activity_percentage), basic_energy_needs + (physical_activity_percentage * basic_energy_needs) + 330)
self.assertEqual(daily_energy_needs(giving_baby_milk_2, BodyMassConstants.NORMAL, basic_energy_needs, physical_activity_percentage), basic_energy_needs + (physical_activity_percentage * basic_energy_needs) + 400)
def test_recommendation_breakfast(self):
no_breakfast = 1
med_breakfast = 2
hi_breakfast = 3
self.assertEqual(recommendation_breakfast(1),BreakfastReponse.NO_BREAKFAST)
self.assertEqual(recommendation_breakfast(2),BreakfastReponse.MED_BREAKFAST)
self.assertEqual(recommendation_breakfast(3),BreakfastReponse.HI_BREAKFAST)
def test_energy_needed_per_dine(self):
daily_energy_needs = 450
no_breakfast = 1
med_breakfast = 2
hi_breakfast = 3
energy_needed_no_breakfast = energy_needed_per_dine(no_breakfast,daily_energy_needs)
energy_needed_med_breakfast = energy_needed_per_dine(med_breakfast,daily_energy_needs)
energy_needed_hi_breakfast = energy_needed_per_dine(hi_breakfast,daily_energy_needs)
self.assertEqual(energy_needed_no_breakfast.get("Breakfast"),(daily_energy_needs*0.1))
self.assertEqual(energy_needed_no_breakfast.get("Morning_Snack"),(daily_energy_needs*0.15))
self.assertEqual(energy_needed_no_breakfast.get("Lunch"),(daily_energy_needs*0.3))
self.assertEqual(energy_needed_no_breakfast.get("Afternoon_Snack"),(daily_energy_needs*0.15))
self.assertEqual(energy_needed_no_breakfast.get("Dinner"),(daily_energy_needs*0.3))
self.assertEqual(energy_needed_no_breakfast.get("Breakfast"),energy_needed_med_breakfast.get("Breakfast"))
self.assertEqual(energy_needed_no_breakfast.get("Morning_Snack"),energy_needed_med_breakfast.get("Morning_Snack"))
self.assertEqual(energy_needed_no_breakfast.get("Lunch"),energy_needed_med_breakfast.get("Lunch"))
self.assertEqual(energy_needed_no_breakfast.get("Afternoon_Snack"),energy_needed_med_breakfast.get("Afternoon_Snack"))
self.assertEqual(energy_needed_no_breakfast.get("Dinner"),energy_needed_med_breakfast.get("Dinner"))
self.assertEqual(energy_needed_hi_breakfast.get("Breakfast"),(daily_energy_needs*0.1))
self.assertEqual(energy_needed_hi_breakfast.get("Morning_Snack"),(daily_energy_needs*0.15))
self.assertEqual(energy_needed_hi_breakfast.get("Lunch"),(daily_energy_needs*0.3))
self.assertEqual(energy_needed_hi_breakfast.get("Afternoon_Snack"),(daily_energy_needs*0.15))
self.assertEqual(energy_needed_hi_breakfast.get("Dinner"),(daily_energy_needs*0.3))
def test_physical_activity_recommendation(self):
level1_activity = 1
level2_activity = 2
level3_activity = 3
level4_activity = 4
level5_activity = 5
self.assertEqual(physical_activity_recommendation(level1_activity),PhysicalActivityResponse.LEVEL1_ACTIVITY)
self.assertEqual(physical_activity_recommendation(level2_activity),PhysicalActivityResponse.LEVEL2_ACTIVITY)
self.assertEqual(physical_activity_recommendation(level3_activity),PhysicalActivityResponse.LEVEL3_ACTIVITY)
self.assertEqual(physical_activity_recommendation(level4_activity),PhysicalActivityResponse.LEVEL4_ACTIVITY)
self.assertEqual(physical_activity_recommendation(level5_activity),PhysicalActivityResponse.LEVEL5_ACTIVITY)
def test_program_recommendation(self):
client_type_1 = program_recommendation(10,7,5) # Score 22-30
client_type_2 = program_recommendation(30,7,30) # Score 31-69
client_type_3 = program_recommendation(10,50,15) # Score 70-79
client_type_4 = program_recommendation(30,55,5) # Score 80-99
client_type_5 = program_recommendation(30,55,30) # Score 100-119
client_type_6 = program_recommendation(30,115,5) # Score 120-150
client_type_7 = program_recommendation(30,115,10) # Score 151-159
client_type_8 = program_recommendation(30,115,30) # Score 160-179
client_type_9 = program_recommendation(200,115,30) # Score 180-345
self.assertEqual(client_type_1[0],ProgramRecommendationResponse.BABY_1)
self.assertEqual(client_type_1[1],ProgramRecommendationResponse.TRIAL)
self.assertEqual(client_type_2[0],ProgramRecommendationResponse.BABY_3)
self.assertEqual(client_type_2[1],ProgramRecommendationResponse.BABY_1)
self.assertEqual(client_type_3[0],ProgramRecommendationResponse.BABY_1)
self.assertEqual(client_type_3[1],ProgramRecommendationResponse.TRIAL)
self.assertEqual(client_type_4[0],ProgramRecommendationResponse.GOALS_3)
self.assertEqual(client_type_4[1],ProgramRecommendationResponse.GOALS_1)
self.assertEqual(client_type_5[0],ProgramRecommendationResponse.GOALS_6)
self.assertEqual(client_type_5[1],ProgramRecommendationResponse.GOALS_3)
self.assertEqual(client_type_6[0],ProgramRecommendationResponse.BALANCED_1)
self.assertEqual(client_type_6[1],ProgramRecommendationResponse.TRIAL)
self.assertEqual(client_type_7[0],ProgramRecommendationResponse.BALANCED_3)
self.assertEqual(client_type_7[1],ProgramRecommendationResponse.BALANCED_1)
self.assertEqual(client_type_8[0],ProgramRecommendationResponse.BALANCED_6)
self.assertEqual(client_type_8[1],ProgramRecommendationResponse.BALANCED_3)
self.assertEqual(client_type_9[0],ProgramRecommendationResponse.TRIAL)
self.assertEqual(client_type_9[1],None)
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