Ejemplo n.º 1
0
    def test_put(self):
        # create some cards and discard them
        client = Client()
        cards = [{'rank': "Ace", 'suit': "Spades"},
                 {'rank': 2, 'suit': "Diamonds"}]
        url = reverse('api:deck_discard', args=(self.id,))
        response = client.put(url, data=json.dumps(cards),
                              content_type='application/json')

        self.assertEqual(response.status_code, 200)

        deck = Deck.get(self.id)
        decoded_cards = [Card("Ace", "Spades"), Card(2, "Diamonds")]

        for card in decoded_cards:
            self.assertIn(card, deck.pile.piles['discard'])

        # make sure data gets put into the endpoint
        url = reverse('api:deck_discard', args=(self.id,))
        response = client.put(url, content_type='application/json')

        self.assertEqual(response.status_code, 409)

        # make sure data that IS put it is valid
        url = reverse('api:deck_discard', args=(self.id,))
        data = [{'foo': 42, 'bar': 'baz'}]
        response = client.put(url, data=json.dumps(data),
                              content_type='application/json')
        self.assertEqual(response.status_code, 409)
        deck = Deck.get(self.id)
Ejemplo n.º 2
0
def draw(request, key=None):
    success = True
    card_count = int(_get_request_var(request, 'count'))
    if not key:
        deck = Deck()
        deck.deck_count = int(_get_request_var(request, 'deck_count'))
        deck.open_new()
        random.shuffle(deck.stack)
        deck.save()
    else:
        try:
            deck = Deck.objects.get(key=key)
        except Deck.DoesNotExist:
            response = HttpResponse(json.dumps({'success':False,'error':'Deck ID does not exist.'}), content_type="application/json", status=404)
            response['Access-Control-Allow-Origin'] = '*'
            return response
    if card_count > len(deck.stack):
        success = False
    cards = deck.stack[0:card_count]
    deck.stack = deck.stack[card_count:]
    deck.save()

    a = []
    for card in cards:
        a.append(card_to_dict(card))
    if not success:
        resp = {'success':success, 'deck_id':deck.key, 'cards':a, 'remaining':len(deck.stack), 'error':'Not enough cards remaining to draw '+str(card_count)+' additional'}
    else:
        resp = {'success':success, 'deck_id':deck.key, 'cards':a, 'remaining':len(deck.stack)}

    response = HttpResponse(json.dumps(resp), content_type="application/json")
    response['Access-Control-Allow-Origin'] = '*'
    return response
Ejemplo n.º 3
0
def draw(request, key=None):
    success = True
    card_count = int(_get_request_var(request, 'count'))
    if not key:
        deck = Deck()
        deck.deck_count = int(_get_request_var(request, 'deck_count'))
        deck.open_new()
        random.shuffle(deck.stack)
        deck.shuffled = True
        deck.save()
    else:
        try:
            deck = Deck.objects.get(key=key)
        except Deck.DoesNotExist:
            response = HttpResponse(json.dumps({'success':False,'error':'Deck ID does not exist.'}), content_type="application/json", status=404)
            response['Access-Control-Allow-Origin'] = '*'
            return response
    if card_count > len(deck.stack):
        success = False
    cards = deck.stack[0:card_count]
    deck.stack = deck.stack[card_count:]
    deck.save()

    a = []
    for card in cards:
        a.append(card_to_dict(card))
    if not success:
        resp = {'success':success, 'deck_id':deck.key, 'cards':a, 'remaining':len(deck.stack), 'error':'Not enough cards remaining to draw '+str(card_count)+' additional'}
    else:
        resp = {'success':success, 'deck_id':deck.key, 'cards':a, 'remaining':len(deck.stack)}

    response = HttpResponse(json.dumps(resp), content_type="application/json")
    response['Access-Control-Allow-Origin'] = '*'
    return response
Ejemplo n.º 4
0
def new_deck(request, key='', shuffle=False):
    deck_count = int(_get_request_var(request, 'deck_count'))
    deck_cards = _get_request_var(request, 'cards', None)
    if deck_count > 20:
        response = HttpResponse(json.dumps({'success':False,'error':'The max number of Decks is 20.'}), content_type="application/json")
        response['Access-Control-Allow-Origin'] = '*'
        return response
    if key:
        try:
            deck = Deck.objects.get(key=key)
        except Deck.DoesNotExist:
            response = HttpResponse(json.dumps({'success':False,'error':'Deck ID does not exist.'}), content_type="application/json", status=404)
            response['Access-Control-Allow-Origin'] = '*'
            return response
    else:
        deck = Deck()
        deck.deck_count = deck_count
    deck.open_new(deck_cards)
    deck.shuffled = False
    if shuffle:
        random.shuffle(deck.stack)
        deck.shuffled = True
    deck.save() #save the deck_count.

    resp = {'success':True, 'deck_id':deck.key, 'remaining':len(deck.stack), 'shuffled':deck.shuffled}

    response = HttpResponse(json.dumps(resp), content_type="application/json")
    response['Access-Control-Allow-Origin'] = '*'
    return response
Ejemplo n.º 5
0
def shuffle(request, key=''):
    deck_count = int(_get_request_var(request, 'deck_count'))
    if deck_count > 20:
        return HttpResponse(json.dumps({'success':False,'error':'The max number of Decks is 20.'}), content_type="application/json")
    if key:
        deck = Deck.objects.get(key=key)
    else:
        deck = Deck()
        deck.deck_count = deck_count
    deck.shuffle()
    resp = {'success':True, 'deck_id':deck.key, 'remaining':len(deck.stack)}
    return HttpResponse(json.dumps(resp), content_type="application/json")
Ejemplo n.º 6
0
def new_deck(request, key='', shuffle=False):
    deck_count = int(_get_request_var(request, 'deck_count'))
    deck_cards = _get_request_var(request, 'cards', None)
    if deck_count > 20:
        response = HttpResponse(json.dumps({'success':False,'error':'The max number of Decks is 20.'}), content_type="application/json")
        response['Access-Control-Allow-Origin'] = '*'
        return response
    if key:
        try:
            deck = Deck.objects.get(key=key)
        except Deck.DoesNotExist:
            response = HttpResponse(json.dumps({'success':False,'error':'Deck ID does not exist.'}), content_type="application/json", status=404)
            response['Access-Control-Allow-Origin'] = '*'
            return response
    else:
        deck = Deck()
        deck.deck_count = deck_count
    deck.open_new(deck_cards)
    deck.shuffled = False
    if shuffle:
        random.shuffle(deck.stack)
        deck.shuffled = True
    deck.save() #save the deck_count.

    resp = {'success':True, 'deck_id':deck.key, 'remaining':len(deck.stack), 'shuffled':deck.shuffled}

    response = HttpResponse(json.dumps(resp), content_type="application/json")
    response['Access-Control-Allow-Origin'] = '*'
    return response
Ejemplo n.º 7
0
def shuffle(request, key=''):
    deck_count = int(_get_request_var(request, 'deck_count'))
    if deck_count > 20:
        return HttpResponse(json.dumps({
            'success':
            False,
            'error':
            'The max number of Decks is 20.'
        }),
                            content_type="application/json")
    if key:
        deck = Deck.objects.get(key=key)
    else:
        deck = Deck()
        deck.deck_count = deck_count
    deck.shuffle()
    resp = {'success': True, 'deck_id': deck.key, 'remaining': len(deck.stack)}
    return HttpResponse(json.dumps(resp), content_type="application/json")
Ejemplo n.º 8
0
def new_deck(request, key='', shuffle=False):
    deck_count = int(_get_request_var(request, 'deck_count'))
    deck_cards = _get_request_var(request, 'cards', None)
    jokers_enabled = get_jokers_enabled(request)
    if deck_count > 20:
        response = HttpResponse(json.dumps({
            'success':
            False,
            'error':
            'The max number of Decks is 20.'
        }),
                                content_type="application/json")
        response['Access-Control-Allow-Origin'] = '*'
        return response
    if key:  #we are shuffling an existing deck
        print("we are here 1")
        try:
            deck = Deck.objects.get(key=key)
            deck.piles = {}
            if jokers_enabled is None:
                jokers_enabled = deck.include_jokers
        except Deck.DoesNotExist:
            print("we are here 3")
            return deck_id_does_not_exist()
    else:  #creating a new deck
        deck = Deck()
        deck.deck_count = deck_count
    deck.open_new(deck_cards, jokers_enabled)
    deck.shuffled = False
    if shuffle:
        random.shuffle(deck.stack)
        deck.shuffled = True
    deck.save()  # save the deck_count.

    resp = {
        'success': True,
        'deck_id': deck.key,
        'remaining': len(deck.stack),
        'shuffled': deck.shuffled
    }

    response = HttpResponse(json.dumps(resp), content_type="application/json")
    response['Access-Control-Allow-Origin'] = '*'
    return response
Ejemplo n.º 9
0
def deck(request, 
          template_name="deck/index.html"
          ):
    if request.method == 'POST':
        form = DeckForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            slug = slugify(name)
            user = request.user
            format = form.cleaned_data['format']
            type = form.cleaned_data['type']
            packs = form.cleaned_data['packs']
            deck_list = form.cleaned_data['deck_list']
            deck = Deck(name = name,
                        slug=slug,
                        user=user,
                        format = format,
                        type = type,
                        packs = packs,
                        deck_list = deck_list
                        )
            deck.save()
            return HttpResponseRedirect('/deck/')
    else:
        form = DeckForm()
    
    decks = Deck.objects.filter(is_active=True).order_by('-tourney_wins')
    inactive_decks = Deck.objects.filter(is_active=False).order_by('-tourney_wins')
    users = User.objects.all()
    user = request.user
    if user in users:
        username = request.user.username
        user_decks = Deck.objects.filter(user=user)
    
    return render(request,
                  template_name, 
                  locals(), 
                  context_instance=RequestContext(request))
Ejemplo n.º 10
0
    def test_put_with_named_pile(self):
        # create some cards and discard them
        client = Client()
        cards = [{'rank': "Ace", 'suit': "Spades"},
                 {'rank': 2, 'suit': "Diamonds"}]
        url = reverse('api:deck_discard', args=(self.id,)) + '?into=my+pile'
        response = client.put(url, data=json.dumps(cards),
                              content_type='application/json')

        self.assertEqual(response.status_code, 200)

        deck = Deck.get(self.id)
        decoded_cards = [Card("Ace", "Spades"), Card(2, "Diamonds")]

        for card in decoded_cards:
            self.assertIn(card, deck.pile.piles['my pile'])
Ejemplo n.º 11
0
    def test_post_with_shuffle(self):
        client = Client()

        # if the deck is not shuffled, we should expect a Queen of Spades
        url = reverse('api:deck_create') + '?shuffle=False'
        response = client.post(url)

        self.assertEqual(response.status_code, 201)

        id = json.loads(response.content).get('id')
        deck = Deck.get(id)
        card = deck.draw()

        self.assertEqual(card, Card("Queen", "Spades"))

        # if the shuffle param is not "true" or "false", return an error
        url = reverse('api:deck_create') + '?shuffle=42'
        response = client.post(url)

        self.assertEqual(response.status_code, 409)