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)
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
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
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
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")
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")
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
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))
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'])
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)