Exemplo n.º 1
0
def test_no_hint_without_pencil_marks(rf):
    sudoku = generators.random_sudoku(avg_rank=1)

    url = reverse("hint")
    serializer = serializers.SudokuSerializer(sudoku)
    request = rf.post(url, data=serializer.data, content_type="application/json")
    response = views.Hints.as_view()(request)

    assert response.status_code == 400
Exemplo n.º 2
0
def test_hint_for_solved_sudoku(rf):
    sudoku = solvers.backtrack(generators.random_sudoku(avg_rank=1))

    url = reverse("hint")
    serializer = serializers.SudokuSerializer(sudoku)
    request = rf.post(url, data=serializer.data, content_type="application/json")
    response = views.Hints.as_view()(request)

    content = json.loads(response.rendered_content)
    assert content["code"] == "puzzle_solved"
    assert response.status_code == 400
Exemplo n.º 3
0
def test_returns_initial_hint(rf):
    sudoku = generators.random_sudoku(avg_rank=1)

    url = f'{reverse("hint")}?with_pencil_marks=true'
    serializer = serializers.SudokuSerializer(sudoku)
    request = rf.post(url, data=serializer.data, content_type="application/json")
    response = views.Hints.as_view()(request)

    content = json.loads(response.rendered_content)
    assert content["combination"]["name"] == "Pencil Marking"
    assert response.status_code == 200
Exemplo n.º 4
0
def test_returns_hint_for_sudoku_with_pencil_marks(rf):
    sudoku = generators.random_sudoku(avg_rank=1)
    sudoku.update(techniques.BulkPencilMarking(sudoku).first().changes)

    url = reverse("hint")
    serializer = serializers.SudokuSerializer(sudoku)
    request = rf.post(url, data=serializer.data, content_type="application/json")
    response = views.Hints.as_view()(request)

    content = json.loads(response.rendered_content)
    assert content["combination"]["name"] == "Lone Single"
    assert response.status_code == 200
Exemplo n.º 5
0
def test_random_sudoku_rank_filter(rf, sudoku_factory):
    sudoku_factory.create(rank=50)
    sudoku_factory.create(rank=250)
    expected = sudoku_factory.create(rank=150)

    url = reverse("random-sudoku")

    request = rf.get(f"{url}?min_rank=100&max_rank=200")
    response = views.RandomSudoku.as_view()(request)

    content = json.loads(response.rendered_content)
    serializer = serializers.SudokuSerializer(data=content)
    sudoku = serializer.is_valid() and serializer.save()

    assert str(sudoku) == expected.puzzle
Exemplo n.º 6
0
def test_hint_for_invalid_sudoku(rf):
    sudoku = generators.random_sudoku(avg_rank=1)
    sudoku.update(techniques.BulkPencilMarking(sudoku).first().changes)
    sudoku.update(
        [
            Cell(position=Position(0, 0, 0), value=1),
            Cell(position=Position(0, 1, 0), value=1),
        ]
    )

    url = reverse("hint")
    serializer = serializers.SudokuSerializer(sudoku)
    request = rf.post(url, data=serializer.data, content_type="application/json")
    response = views.Hints.as_view()(request)

    content = json.loads(response.rendered_content)
    assert content["code"] == "invalid_puzzle"
    assert response.status_code == 400