def post(self, request, format='json'): serializer_class = LottoTicketSerializer request_serializer = serializer_class(data=request.data) if request_serializer.is_valid(): repository = LottoTicketRepository() try: ticket = repository.get_by_numbers(request.data['numbers']) except BobTicketBadRequestException: return Response({'reason': 'Retrieving data from bob has failed.'}, status=status.HTTP_400_BAD_REQUEST) ticket_data = { 'id': ticket.id, 'numbers': ticket.numbers, 'is_winner': ticket.is_winner, } return Response(ticket_data, status=status.HTTP_200_OK) else: return Response(request_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class LottoTicketRepositoryTestCase(TestCase): def setUp(self): self.repository = LottoTicketRepository() def tearDown(self): LottoTicket.objects.all().delete() def test_get_by_numbers_with_ticket_in_db(self): ticket = LottoTicket(is_winner=True, numbers=[1, 2]) ticket.save() self.assertEqual(self.repository.get_by_numbers([1, 2]), ticket) @patch("api.v0.ana.repositories.get_bob_ticket_by_numbers") def test_get_by_numbers_without_ticket_in_db(self, mocked_service): mocked_service.return_value = json.dumps({"is_winner": True, "numbers": [1, 2]}) self.assertEqual(0, LottoTicket.objects.count()) ticket = self.repository.get_by_numbers([1, 2]) self.assertEqual(1, LottoTicket.objects.count()) self.assertEqual(LottoTicket.objects.all()[0], ticket)
def setUp(self): self.repository = LottoTicketRepository()