Example #1
0
def test_check_damaged_ship(board):
    add_battleship(board, 1, 1, vertical=False)
    instance = Fleet.objects.first()
    instance.hit = True
    instance.save()
    qs = Fleet.objects.all()
    assert False is is_dead(qs)
Example #2
0
def test_submarine_overlap_battle_ship(board):
    """
    X : submarine
    Y : battleship
    Alignment: XYYYY
    :param board:
    :return:
    """
    add_submarine(board, 5, 5, vertical=False)
    with pytest.raises(NearShipException):
        add_battleship(board, 5, 6, vertical=False)
Example #3
0
def test_miss_battleship(board):
    add_battleship(board, 1, 1, vertical=False)
    url = reverse('api:missile-list')
    data = {
        'board': board.id,
        'x_axis': 2,
        'y_axis': 2,
    }
    client = APIClient()
    res = client.post(url, data=data, format='json')
    msg = {'message': 'Miss'}
    assert status.HTTP_201_CREATED == res.status_code
    assert msg == res.data
Example #4
0
def test_add_near_cruiser_battleship(board):
    add_battleship(board, 5, 5, vertical=False)
    client = APIClient()
    url = reverse('api:fleet-list')
    data = {
        'board': board.id,
        'fleet_type': Fleet.FleetType.cruiser,
        'vertical': False,
        'x_axis': 4,
        'y_axis': 4,
    }
    res = client.post(url, data=data, type='json')
    msg = {'message': 'Too near!'}
    assert status.HTTP_400_BAD_REQUEST == res.status_code
    assert msg == res.data
    assert 4 == Fleet.objects.filter(y_axis=5).count()
Example #5
0
def test_sunk_battleship(board):
    add_battleship(board, 1, 1, vertical=False)
    Missile.objects.bulk_create([
        Missile(board=board, x_axis=2, y_axis=1),
        Missile(board=board, x_axis=3, y_axis=1),
        Missile(board=board, x_axis=4, y_axis=1),
    ])
    Fleet.objects.update(hit=True)
    instance = Fleet.objects.get(x_axis=1, y_axis=1)
    instance.hit = False
    instance.save()

    url = reverse('api:missile-list')
    data = {
        'board': board.id,
        'x_axis': 1,
        'y_axis': 1,
    }
    client = APIClient()
    res = client.post(url, data=data, format='json')
    msg = {'message': 'Win ! You completed the game in 4 moves. You missed 0'}
    assert status.HTTP_201_CREATED == res.status_code
    assert msg == res.data
Example #6
0
 def create(self, validated_data):
     # Add battleship
     if validated_data.get('fleet_type') == Fleet.FleetType.battleship:
         objs = add_battleship(validated_data.get('board'),
                               validated_data.get('x_axis'),
                               validated_data.get('y_axis'),
                               validated_data.get('vertical'))
     elif validated_data.get('fleet_type') == Fleet.FleetType.cruiser:
         objs = add_cruiser(validated_data.get('board'),
                            validated_data.get('x_axis'),
                            validated_data.get('y_axis'),
                            validated_data.get('vertical'))
     elif validated_data.get('fleet_type') == Fleet.FleetType.destroyer:
         objs = add_destroyer(validated_data.get('board'),
                              validated_data.get('x_axis'),
                              validated_data.get('y_axis'),
                              validated_data.get('vertical'))
     else:  # validated_data.get('fleet_type') == Fleet.FleetType.submarine:
         # With choices. I am sure it will be submarine
         objs = add_submarine(validated_data.get('board'),
                              validated_data.get('x_axis'),
                              validated_data.get('y_axis'),
                              validated_data.get('vertical'))
     return objs[0]
Example #7
0
def test_check_dead_ship(board):
    add_battleship(board, 1, 1, vertical=False)
    Fleet.objects.update(hit=True)
    qs = Fleet.objects.all()
    assert True is is_dead(qs)
Example #8
0
def test_place_battleship_left_top_corner_vertical(board):
    add_battleship(board, 1, 1, vertical=True)
    assert 4 == Fleet.objects.filter(fleet_type=Fleet.FleetType.battleship,
                                     x_axis=1,
                                     occupied=True).count()
Example #9
0
def test_place_battleship_at_right_bottom_horizontal(board):
    with pytest.raises(OutOceanException):
        add_battleship(board, 10, 10, vertical=False)
    assert 0 == Fleet.objects.count()
Example #10
0
def test_place_battleship_left_bottom_horizontal(board):
    add_battleship(board, 1, 10, vertical=False)
    assert 4 == Fleet.objects.filter(fleet_type=Fleet.FleetType.battleship,
                                     y_axis=10,
                                     occupied=True).count()
Example #11
0
def test_place_battleship_left_bottom_vertical(board):
    """Expect raises an Exception"""
    with pytest.raises(OutOceanException):
        add_battleship(board, 1, 10, vertical=True)
    assert 0 == Fleet.objects.count()
Example #12
0
def test_battleships_cross_each_others_at_mid(board):
    add_battleship(board, 5, 5, vertical=False)
    # Handle at database layer
    with pytest.raises(IntegrityError):
        add_battleship(board, 6, 3, vertical=True)
Example #13
0
def test_battleship_horizontal_then_submarine_right_mid(board):
    add_battleship(board, 5, 5, vertical=False)
    with pytest.raises(NearShipException):
        add_submarine(board, 5 + settings.BATTLESHIP_SIZE, 5, vertical=False)
Example #14
0
def test_battleship_horizontal_then_submarine_down_right(board):
    add_battleship(board, 5, 5, vertical=False)
    with pytest.raises(NearShipException):
        add_submarine(board, 5, 6, vertical=False)