1
0
mirror of https://github.com/fspc/workstand.git synced 2025-02-23 09:13:23 -05:00

More endpoints.

This commit is contained in:
Drew Larson 2017-01-07 19:53:43 -06:00
parent ceeeeb9fb4
commit 3ef3723d01
2 changed files with 70 additions and 0 deletions

View File

@ -300,3 +300,47 @@ class TestGet(TestCase):
result = client.put('/api/v1/bikes/{bike_id}/purchase/'.format(bike_id=bike.id), data={'member': member.id}, format='json')
self.assertEqual(result.status_code, status.HTTP_400_BAD_REQUEST)
def test_scrap_transition(self):
data = {
"colour": "black",
"make": "Miyata",
"serial_number": "12345676",
"source": Bike.COS_BIKE_DIVERSION_PILOT,
"donated_by": "Greg",
"donated_at": "2017-01-01",
"size": Bike.SMALL,
"price": Decimal('68.00'),
"state": BikeState.ASSESSED,
"stolen": False,
"cpic_searched_at": timezone.now(),
"stripped": False
}
bike = Bike.objects.create(**data)
client = APIClient()
client.force_authenticate(user=self.user, token='blah')
result = client.put(f'/api/v1/bikes/{bike.id}/scrap/')
self.assertEqual(result.status_code, status.HTTP_200_OK)
def test_transfer_to_police_transition(self):
data = {
"colour": "black",
"make": "Miyata",
"serial_number": "12345676",
"source": Bike.COS_BIKE_DIVERSION_PILOT,
"donated_by": "Greg",
"donated_at": "2017-01-01",
"size": Bike.SMALL,
"price": Decimal('68.00'),
"state": BikeState.ASSESSED,
"stolen": False,
"cpic_searched_at": timezone.now(),
"stolen": True
}
bike = Bike.objects.create(**data)
client = APIClient()
client.force_authenticate(user=self.user, token='blah')
result = client.put(f'/api/v1/bikes/{bike.id}/stolen/')
self.assertEqual(result.status_code, status.HTTP_200_OK)

View File

@ -81,3 +81,29 @@ class BikeViewSet(viewsets.ModelViewSet):
serializer = BikeSerializer(bike, context={'request': request})
return Response(serializer.data, status=status.HTTP_200_OK)
@detail_route(methods=['put'])
def scrap(self, request, pk):
bike = get_object_or_404(Bike, pk=pk)
state = BikeState.SCRAPPED
if not can_proceed(bike.scrap):
raise ValidationError(detail=f'Transition from {bike.state} to {state}')
bike.scrap()
bike.save()
serializer = BikeSerializer(bike, context={'request': request})
return Response(serializer.data, status=status.HTTP_200_OK)
@detail_route(methods=['put'])
def stolen(self, request, pk):
bike = get_object_or_404(Bike, pk=pk)
state = BikeState.TRANSFERRED_TO_POLICE
if not can_proceed(bike.transfer_to_police):
raise ValidationError(detail=f'Transition from {bike.state} to {state}')
bike.transfer_to_police()
bike.save()
serializer = BikeSerializer(bike, context={'request': request})
return Response(serializer.data, status=status.HTTP_200_OK)