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)
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)
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
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()
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
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]
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)
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()
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()
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()
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()
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)
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)
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)