def test_init(self, ticket_numbers): # ensure _check is called with pytest.raises(AssertionError, match="Number of rows not equal to 3"): Cells._check([]) # ensure Cell::__init__ is called with pytest.raises(AssertionError, match="Number less than 1"): _numbers = [ [ 0, 10, 20, 30, 40, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER ], [ 2, 11, 21, 31, 41, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER ], [ 3, 12, 22, 32, 42, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER ], ] Cells(_numbers) try: cells = Cells(ticket_numbers) for i, row in enumerate(ticket_numbers): for j, column in enumerate(row): assert column == cells._cells[i][j].get_number() except AssertionError: pytest.fail("Unexpected AssertionError!")
def test_find_row_and_column(self, ticket_numbers): cells = Cells(ticket_numbers) cells.find_row_and_column(1) == (1, 1) cells.find_row_and_column(43) == (3, 5) with pytest.raises(NoSuchNumber): cells.find_row_and_column(100)
def test_iter(self, ticket_numbers): cells = Cells(ticket_numbers) expected = [ Cell(1), Cell(11), Cell(21), Cell(31), Cell(41), Cell("*"), Cell("*"), Cell("*"), Cell("*"), Cell(2), Cell(12), Cell(22), Cell(32), Cell(42), Cell("*"), Cell("*"), Cell("*"), Cell("*"), Cell(3), Cell(13), Cell(23), Cell(33), Cell(43), Cell("*"), Cell("*"), Cell("*"), Cell("*"), ] assert list(cells) == expected
def test_сell_at(self, ticket_numbers): cells = Cells(ticket_numbers) with pytest.raises(AssertionError, match="Incorrect row or column"): cells.cell_at(0, 1) cells.cell_at(1, 1) == Cell(1)
def test_contains(self, ticket_numbers): cells = Cells(ticket_numbers) assert (33 in cells) is True assert (100 in cells) is False
def test_str(self, ticket_numbers, stringified_ticket_numbers): assert str(Cells(ticket_numbers)) == stringified_ticket_numbers
def test_eq(self, ticket_numbers, other_ticket_numbers): assert Ticket(ticket_numbers) != Cells(ticket_numbers) assert Ticket(ticket_numbers) != Ticket(other_ticket_numbers) assert Ticket(ticket_numbers) == Ticket(ticket_numbers)
def test_init(self, ticket_numbers): assert Ticket()._cells is not None assert Ticket()._cells != ticket_numbers assert Ticket(ticket_numbers)._cells == Cells(ticket_numbers)
def test_eq(self, ticket_numbers, other_ticket_numbers): assert Cells(ticket_numbers) != Cell(MIN_NUMBER) assert Cells(ticket_numbers) != Cells(other_ticket_numbers) assert Cells(ticket_numbers) == Cells(ticket_numbers)
def test_check(self, ticket_numbers): with pytest.raises(AssertionError, match="Number of rows not equal to 3"): Cells._check([]) with pytest.raises(AssertionError, match="Number of columns not equal to 9"): Cells._check([[], [], []]) with pytest.raises( AssertionError, match="Incorrect column for 10: must be 1 instead of 0"): _numbers = [ [ 10, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, ], [], [], ] Cells._check(_numbers) with pytest.raises( AssertionError, match="Incorrect column for 90: must be 8 instead of 7"): _numbers = [ [ NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, 90, NO_NUMBER, ], [], [], ] Cells._check(_numbers) with pytest.raises(AssertionError, match="Must be 5 numbers per row"): _numbers = [ [ NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, ], [], [], ] Cells._check(_numbers) with pytest.raises(AssertionError, match="Must be 5 numbers per row"): _numbers = [ [ 1, 10, 20, 30, 40, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER ], [ 2, 11, 21, 31, 41, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER ], [ 3, 12, 22, 32, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER, NO_NUMBER ], ] Cells._check(_numbers) try: Cells._check(ticket_numbers) except AssertionError: pytest.fail("Unexpected AssertionError!")