Skip to content
This repository has been archived by the owner on Jan 4, 2021. It is now read-only.

Commit

Permalink
feat: implement state change and related permissions
Browse files Browse the repository at this point in the history
  • Loading branch information
spahan authored and morremeyer committed Dec 10, 2019
1 parent 7eb24cd commit 929e84f
Show file tree
Hide file tree
Showing 6 changed files with 334 additions and 129 deletions.
4 changes: 3 additions & 1 deletion squirrel/orders/forms.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
from django import forms
from django.forms import ModelChoiceField
from django.forms import ChoiceField, ModelChoiceField

from .models import Order, Product, Team, Vendor


class OrderForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
my_teams = kwargs.pop("teams")
my_states = kwargs.pop("states")
super(OrderForm, self).__init__(*args, **kwargs)

self.fields["team"] = ModelChoiceField(queryset=my_teams.order_by("name"))
self.fields["product"].queryset = self.fields["product"].queryset.order_by(
"name"
)
self.fields["event"].queryset = self.fields["event"].queryset.order_by("name")
self.fields["state"] = ChoiceField(choices=my_states)

class Meta:
model = Order
Expand Down
24 changes: 24 additions & 0 deletions squirrel/orders/migrations/0018_auto_20191209_0839.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 2.2.8 on 2019-12-09 08:39

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
("orders", "0017_auto_20191208_2048"),
]

operations = [
migrations.AlterModelOptions(
name="order",
options={
"permissions": [
("request_order", "Can request a order"),
("approve_order", "Can approve a order"),
("receive_order", "Can receive order"),
("complete_order", "Can compelete order"),
]
},
),
]
14 changes: 11 additions & 3 deletions squirrel/orders/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ def __str__(self):
class Team(models.Model):
"""A team or similar group that orders things"""

class Meta:
permissions = [("view_budget", "Can view budget")]

name = models.CharField(max_length=50, unique=True, default=None)
members = models.ManyToManyField(User, blank=True)

def __str__(self):
return self.name

class Meta:
permissions = [("view_budget", "Can view budget")]


class Vendor(models.Model):
"""A vendor"""
Expand Down Expand Up @@ -66,6 +66,14 @@ def save(self, *args, **kwargs):
class Order(models.Model):
"""A single order. Orders are always referenced to a team"""

class Meta:
permissions = [
("request_order", "Can request a order"),
("approve_order", "Can approve a order"),
("receive_order", "Can receive order"),
("complete_order", "Can compelete order"),
]

__old_state = None

def __init__(self, *args, **kwargs):
Expand Down
30 changes: 21 additions & 9 deletions squirrel/orders/tests/testForms.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.contrib.auth.models import Permission, User
from django.test import TestCase
from orders.forms import OrderForm, ProductForm
from orders.models import Event, Product, Team, Vendor
from orders.models import Event, Order, Product, Team, Vendor


class OrderFormTests(TestCase):
Expand Down Expand Up @@ -32,7 +32,7 @@ def setUp(self) -> None:

def test_sorted_teams(self):
"""Teams are sorted alphabetically"""
form = OrderForm(teams=Team.objects.all())
form = OrderForm(teams=Team.objects.all(), states=Order.STATE_CHOICES)

self.assertEqual(form.fields["team"].queryset[0], self.teamA)
self.assertEqual(form.fields["team"].queryset[1], self.teamB)
Expand All @@ -41,7 +41,7 @@ def test_sorted_teams(self):

def test_sorted_events(self):
"""Events are sorted alphabetically"""
form = OrderForm(teams=Team.objects.all())
form = OrderForm(teams=Team.objects.all(), states=Order.STATE_CHOICES)

self.assertEqual(form.fields["event"].queryset[0], self.eventA)
self.assertEqual(form.fields["event"].queryset[1], self.eventB)
Expand All @@ -50,7 +50,7 @@ def test_sorted_events(self):

def test_sorted_products(self):
"""Products are sorted alphabetically"""
form = OrderForm(teams=Team.objects.all())
form = OrderForm(teams=Team.objects.all(), states=Order.STATE_CHOICES)

self.assertEqual(form.fields["product"].queryset[0], self.productA)
self.assertEqual(form.fields["product"].queryset[1], self.productB)
Expand All @@ -64,10 +64,14 @@ def test_require_amount(self):
"state": "REQ",
"unit_price": 10.00,
}
form = OrderForm(data=form_data, teams=Team.objects.all())
form = OrderForm(
data=form_data, teams=Team.objects.all(), states=Order.STATE_CHOICES
)
self.assertFalse(form.is_valid())
form_data["amount"] = 1
form = OrderForm(data=form_data, teams=Team.objects.all())
form = OrderForm(
data=form_data, teams=Team.objects.all(), states=Order.STATE_CHOICES
)
self.assertTrue(form.is_valid())

def test_require_state(self):
Expand Down Expand Up @@ -115,7 +119,11 @@ def test_team_members_can_set_team(self):
"state": "REQ",
"unit_price": 10.00,
}
form = OrderForm(data=form_data, teams=Team.objects.filter(id=self.teamB.id))
form = OrderForm(
data=form_data,
teams=Team.objects.filter(id=self.teamB.id),
states=Order.STATE_CHOICES,
)
self.assertTrue(form.is_valid())

def test_non_team_members_can_not_set_team(self):
Expand All @@ -126,7 +134,9 @@ def test_non_team_members_can_not_set_team(self):
"state": "REQ",
"unit_price": 10.00,
}
form = OrderForm(data=form_data, teams=Team.objects.none())
form = OrderForm(
data=form_data, teams=Team.objects.none(), states=Order.STATE_CHOICES
)
self.assertFalse(form.is_valid())

def test_valid_permission_can_set_team(self):
Expand All @@ -137,7 +147,9 @@ def test_valid_permission_can_set_team(self):
"state": "REQ",
"unit_price": 10.00,
}
form = OrderForm(data=form_data, teams=Team.objects.all())
form = OrderForm(
data=form_data, teams=Team.objects.all(), states=Order.STATE_CHOICES
)
self.assertTrue(form.is_valid())


Expand Down
Loading

0 comments on commit 929e84f

Please sign in to comment.