def test_deck_update(cards): deck = Deck(cards) index = 0 index_value = "int" update = {"index": index, "value": index_value} deck.update({"name": "ONE"}, update) card = next(deck.find({"name": "ONE"})) assert card[index] == index_value slice_ = slice(0, 2) slice_value = "sliceslice" update = {"index": slice_, "value": slice_value} deck.update({"name": "TWO"}, update) card = next(deck.find({"name": "TWO"})) assert card[:2] == ["slicesli", "ce"] assert card.get_large(slice_) == slice_value indexs =[-4, -3, -2, -1] indexs_values = [1001, 1002, 1003, 1004] update = {"index": indexs, "value": indexs_values} deck.update({"name": "THREE"}, update) card = next(deck.find({"name": "THREE"})) assert card[indexs] == indexs_values for notlisttype in (slice, int, str): with pytest.raises(TypeError): deck.update({}, {"index": notlisttype(), "value": list()}) deck_str = deck.dumps() # redo the update, but without using update func deck2 = Deck(cards) card = deck.find_one({"name": "ONE"}) card[index] = index_value card = deck.find_one({"name": "TWO"}) card[slice_] = slice_value card = deck.find_one({"name": "THREE"}) card[indexs] = indexs_values deck2_str = deck2.dumps() assert deck_str == deck2_str
def test_deck_init_iter(cards): deck = Deck(cards) assert len(deck) == len(cards) for i, card in enumerate(deck): assert card == cards[i]
def test_deck_extend(cards): deck = Deck() assert len(deck) == 0 deck.extend(cards) assert len(deck) == len(cards) for i, card in enumerate(deck): assert card == cards[i]
def test_deck_replace(cards): deck = Deck(cards) replacement = Card("UNO") deck.replace({"name": "ONE"}, replacement) assert not list(deck.find({"name": "ONE"})) assert list(deck.find({"name": "UNO"})) assert len(deck) == len(cards)
def test_deck_find_one(): deck = Deck() for _ in range(10): deck.append(Card("CLONE")) card = deck.find_one("CLONE") assert card.name == "CLONE" assert card == list(deck.find("CLONE"))[0]
def test_deck_append(cards): deck = Deck() assert len(deck) == 0 for card in cards: deck.append(card) assert len(deck) == len(cards) for i, card in enumerate(deck): assert card == cards[i]
def test_deck_find(cards): deck = Deck(cards) found = list(deck.find()) assert len(found) == len(cards) for name in ("ONE", "TWO", "THREE", "FOUR"): found = list(deck.find({"name": name})) found2 = list(deck.find(name)) assert len(found) == 1 assert len(found2) == 1
def test_deck_find_notexist(): deck = Deck() for _ in range(10): deck.append(Card("CLONE")) card = deck.find_one("UNIQUE") assert card is None cards = list(deck.find("UNIQUE")) assert not cards
def test_deck_sort_by_first_val(cards): deck = Deck(cards) deck_sort = deck.sorted(key=lambda card: card[0]) for i in range(len(deck)-1): c1 = deck_sort[i] c2 = deck_sort[i+1] assert c1[0] < c2[0] # modifying sorted deck has no effect on original deck deck_sort.delete() assert len(deck) == len(cards) assert len(deck_sort) == 0
def test_deck_sort_by_name_reverse(cards): deck = Deck(cards) deck_sort = deck.sorted(reverse=True) for i in range(len(deck)-1): c1 = deck_sort[i] c2 = deck_sort[i+1] assert c1.name > c2.name # modifying sorted deck has no effect on original deck deck_sort.delete() assert len(deck) == len(cards) assert len(deck_sort) == 0