def test_base_deck_from_json(self): deck = BaseDeck.generate_deck(card_cls=PlayingCard, card_config=self.card_config) deck_json = deck.to_json() new_deck = BaseDeck.from_json(card_cls=PlayingCard, deck_json=deck_json) self.assertEqual(new_deck.cards_remaining, 1) card = new_deck.draw_card() self.assertEqual(card.suit, 'SPADES') self.assertEqual(card.rank, 'ACE')
def test_base_deck_from_json(self): deck = BaseDeck.generate_deck( card_cls=PlayingCard, card_config=self.card_config) deck_json = deck.to_json() new_deck = BaseDeck.from_json(card_cls=PlayingCard, deck_json=deck_json) self.assertEqual(new_deck.cards_remaining, 1) card = new_deck.draw_card() self.assertEqual(card.suit, 'SPADES') self.assertEqual(card.rank, 'ACE')
def on_post(self, req, res): count = req.context["data"]["count"] api_key = req.context["api_key"] cards = list(PlayingCardWithImages.generate_cards(config=DEFAULT_CARDS_CONFIG)) deck = BaseDeck(cards=cards, count=count) deck.shuffle() sql_params = [api_key, deck.to_json()] self.cursor.callproc("sp_app_deck_insert", sql_params) result = self.cursor.fetchone() req.context["result"] = to_deck_response(id=result[0]["id"], deck=deck) res.status = falcon.HTTP_201
def test_base_deck_to_dict(self): deck = BaseDeck.generate_deck( card_cls=PlayingCard, card_config=self.card_config) deck_dict = deck.to_dict() self.assertEqual(deck_dict['cards_remaining'][0]['rank'], 'ACE') self.assertEqual(deck_dict['cards_remaining'][0]['suit'], 'SPADES')
def test_base_deck_to_json(self): deck = BaseDeck.generate_deck(card_cls=PlayingCard, card_config=self.card_config) deck_json = deck.to_json() deck_dict = json.loads(deck_json) self.assertEqual(deck_dict['cards_remaining'][0]['rank'], 'ACE') self.assertEqual(deck_dict['cards_remaining'][0]['suit'], 'SPADES')
def test_drawing_from_empty_base_deck(self): deck = BaseDeck.generate_deck(card_cls=PlayingCard, card_config=self.card_config) self.assertEqual(deck.cards_remaining, 1) self.assertEqual(deck.cards_removed, 0) deck.draw_card() self.assertRaises(NoCardsRemaining, deck.draw_card)
def test_drawing_from_empty_base_deck(self): deck = BaseDeck.generate_deck( card_cls=PlayingCard, card_config=self.card_config) self.assertEqual(deck.cards_remaining, 1) self.assertEqual(deck.cards_removed, 0) deck.draw_card() self.assertRaises(NoCardsRemaining, deck.draw_card)
def on_get(self, req, res, deck_id): api_key = req.context["api_key"] self.cursor.callproc("sp_app_deck_select", [deck_id, api_key]) result = self.cursor.fetchone() if not result: raise falcon.HTTPNotFound deck = BaseDeck.from_dict(card_cls=PlayingCardWithImages, deck_dict=result[0]["deck"]) req.context["result"] = to_deck_response(id=result[0]["id"], deck=deck) res.status = falcon.HTTP_200
def on_get(self, req, res): api_key = req.context["api_key"] self.cursor.callproc("sp_app_deck_list", [api_key]) result = self.cursor.fetchone() req.context["result"] = [] for r in result[1]: deck = BaseDeck.from_dict(card_cls=PlayingCardWithImages, deck_dict=r["deck"]) req.context["result"].append(to_deck_response(id=r["id"], deck=deck)) res.status = falcon.HTTP_200
def test_generate_base_deck(self): deck = BaseDeck.generate_deck(card_cls=PlayingCard, card_config=self.card_config) self.assertEqual(deck.cards_remaining, 1) self.assertEqual(deck.cards_removed, 0) card = deck.draw_card() self.assertTrue(isinstance(card, PlayingCard)) self.assertEqual(card.rank, 'ACE') self.assertEqual(card.suit, 'SPADES') self.assertEqual(deck.cards_remaining, 0) self.assertEqual(deck.cards_removed, 1) deck.shuffle() self.assertEqual(deck.cards_remaining, 1) self.assertEqual(deck.cards_removed, 0)
def test_generate_base_deck(self): deck = BaseDeck.generate_deck( card_cls=PlayingCard, card_config=self.card_config) self.assertEqual(deck.cards_remaining, 1) self.assertEqual(deck.cards_removed, 0) card = deck.draw_card() self.assertTrue(isinstance(card, PlayingCard)) self.assertEqual(card.rank, 'ACE') self.assertEqual(card.suit, 'SPADES') self.assertEqual(deck.cards_remaining, 0) self.assertEqual(deck.cards_removed, 1) deck.shuffle() self.assertEqual(deck.cards_remaining, 1) self.assertEqual(deck.cards_removed, 0)
def on_post(self, req, res, deck_id): api_key = req.context["api_key"] count = req.context["data"]["count"] self.cursor.callproc("sp_app_deck_select", [deck_id, api_key]) result = self.cursor.fetchone() if not result: raise falcon.HTTPNotFound deck = BaseDeck.from_dict(card_cls=PlayingCardWithImages, deck_dict=result[0]["deck"]) try: cards = [deck.draw_card() for _ in range(count)] except NoCardsRemaining: raise falcon.HTTPConflict(title="Conflict", description="Deck is empty") self.cursor.callproc("sp_app_deck_update", [deck_id, api_key, deck.to_json()]) req.context["result"] = { "deck": to_deck_response(id=result[0]["id"], deck=deck), "cards": [card.to_dict() for card in cards], } res.status = falcon.HTTP_200