Skip to content

Commit

Permalink
Merge pull request #11 from andela/story/166152331-add-and-view-meals
Browse files Browse the repository at this point in the history
166152331 Changes how user adds meals
  • Loading branch information
michael-basweti committed Jun 7, 2019
2 parents efadc7d + 52222ce commit 6df62f0
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 2 deletions.
32 changes: 30 additions & 2 deletions wger/nutrition/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with Workout Manager. If not, see <http://www.gnu.org/licenses/>.

from rest_framework import viewsets
from rest_framework import viewsets, status
from rest_framework.decorators import detail_route
from rest_framework.decorators import api_view
from rest_framework.response import Response
Expand Down Expand Up @@ -223,6 +223,20 @@ def perform_create(self, serializer):
'''
serializer.save(order=1)

def create(self, request):
plan_id = request.data.get('plan', '')
try:
NutritionPlan.objects.get(id=plan_id)
serializer = self.serializer_class(
data=request.data, context={'request': request}
)
serializer.is_valid(raise_exception=True)
except NutritionPlan.DoesNotExist:
return Response({"error": "NutritionPlan with provided id not found"},
status=status.HTTP_404_NOT_FOUND)
serializer.save(order=1)
return Response(serializer.data, status=status.HTTP_201_CREATED)

def get_owner_objects(self):
'''
Return objects to check for ownership permission
Expand Down Expand Up @@ -256,12 +270,26 @@ def get_queryset(self):
'''
return MealItem.objects.filter(meal__plan__user=self.request.user)

def perform_create(self, serializer):
def perform_create(self, serializer, **kwargs):
'''
Set the order
'''
serializer.save(order=1)

def create(self, request):
meal_id = request.data.get('meal', '')
try:
Meal.objects.get(id=meal_id)
serializer = self.serializer_class(
data=request.data, context={'request': request}
)
serializer.is_valid(raise_exception=True)
except Meal.DoesNotExist:
return Response({"error": "Meal with provided id not found"},
status=status.HTTP_404_NOT_FOUND)
serializer.save(order=1)
return Response(serializer.data, status=status.HTTP_201_CREATED)

def get_owner_objects(self):
'''
Return objects to check for ownership permission
Expand Down
19 changes: 19 additions & 0 deletions wger/nutrition/migrations/0002_mealitem_time.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 2.2.1 on 2019-06-06 12:39

from django.db import migrations
import wger.utils.fields


class Migration(migrations.Migration):

dependencies = [
('nutrition', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='mealitem',
name='time',
field=wger.utils.fields.Html5TimeField(blank=True, null=True, verbose_name='Time (approx)'),
),
]
3 changes: 3 additions & 0 deletions wger/nutrition/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -597,6 +597,9 @@ class MealItem(models.Model):
verbose_name=_('Amount'),
validators=[MinValueValidator(1),
MaxValueValidator(1000)])
time = Html5TimeField(null=True,
blank=True,
verbose_name=_('Time (approx)'))

def __str__(self):
'''
Expand Down
22 changes: 22 additions & 0 deletions wger/nutrition/tests/test_meal.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,25 @@ class MealApiTestCase(api_base_test.ApiBaseResourceTestCase):
data = {'time': datetime.time(9, 2),
'plan': 4,
'order': 1}


class MealApiEdgeTestCase(WorkoutManagerTestCase):
def create_nutritionplan(self):
self.client.post('/api/v2/nutritionplan/')

def test_create_meal_plan_does_not_exist(self):
self.user_login("test")
create_meal = self.client.post('/api/v2/meal/', {
"plan": 800
}, format='json')
self.assertEqual(create_meal.status_code, 404)

def test_create_meal_time_not_provided(self):
self.user_login("test")
self.create_nutritionplan()
create_meal = self.client.post(
'/api/v2/meal/', {
"plan": 1
}, format='json'
)
self.assertEqual(create_meal.status_code, 201)
44 changes: 44 additions & 0 deletions wger/nutrition/tests/test_meal_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@
from django.urls import reverse

from wger.core.tests import api_base_test
from wger.core.tests.base_testcase import WorkoutManagerTestCase
from wger.core.tests.base_testcase import WorkoutManagerAddTestCase
from wger.core.tests.base_testcase import WorkoutManagerEditTestCase
from wger.nutrition.models import MealItem
import json


class EditMealItemUnitTestCase(WorkoutManagerEditTestCase):
Expand Down Expand Up @@ -80,3 +82,45 @@ class MealItemApiTestCase(api_base_test.ApiBaseResourceTestCase):
data = {'meal': 2,
'amount': 100,
'ingredient': 1}


class MealItemApiEdgeTestCase(WorkoutManagerTestCase):
def create_meal(self):
response = self.client.post('/api/v2/meal/', {
"plan": 1
})
return json.loads(response.content)["id"]

def test_create_mealitem_meal_does_not_exist(self):
self.user_login("test")
create_mealitem = self.client.post('/api/v2/mealitem/', {
"amount": 800,
"ingredient": 34,
"meal": 190,
"time": "23:00:00"
}, format='json')
self.assertEqual(create_mealitem.status_code, 404)

def test_create_mealitem_ingredient_not_provided(self):
self.user_login("test")
self.create_meal()
create_mealitem = self.client.post(
'/api/v2/mealitem/', {
"amount": 800,
"meal": 1,
"time": "23:00:00"
}, format='json'
)
self.assertEqual(create_mealitem.status_code, 400)

def test_create_mealitem_amount_not_provided(self):
self.user_login("test")
self.create_meal()
create_mealitem = self.client.post(
'/api/v2/mealitem/', {
"ingredient": 34,
"meal": 1,
"time": "23:00:00"
}, format='json'
)
self.assertEqual(create_mealitem.status_code, 400)

0 comments on commit 6df62f0

Please sign in to comment.