示例#1
0
    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()