import os
import sys

root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))))
sys.path.append(root)

# ----------------------------------------------------------------------------

# PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code

# ----------------------------------------------------------------------------
# -*- coding: utf-8 -*-

from ccxt.test.exchange.base import test_position  # noqa E402
from ccxt.test.exchange.base import test_shared_methods  # noqa E402

async def test_watch_positions(exchange, skipped_properties, symbol):
    method = 'watchPositions'
    now = exchange.milliseconds()
    ends = now + 15000
    while now < ends:
        response = None
        success = True
        try:
            response = await exchange.watch_positions([symbol])
        except Exception as e:
            if not test_shared_methods.is_temporary_failure(e):
                raise e
            now = exchange.milliseconds()
            # continue;
            success = False
        if success:
            test_shared_methods.assert_non_emtpy_array(exchange, skipped_properties, method, response, symbol)
            now = exchange.milliseconds()
            for i in range(0, len(response)):
                test_position(exchange, skipped_properties, method, response[i], None, now)
            test_shared_methods.assert_timestamp_order(exchange, method, symbol, response)
        #
        # Test with specific symbol
        #
        positions_for_symbols = None
        success2 = True
        try:
            positions_for_symbols = await exchange.watch_positions([symbol])
        except Exception as e:
            if not test_shared_methods.is_temporary_failure(e):
                raise e
            now = exchange.milliseconds()
            # continue;
            success2 = False
        if success2:
            assert isinstance(positions_for_symbols, list), exchange.id + ' ' + method + ' must return an array, returned ' + exchange.json(positions_for_symbols)
            # max theoretical 4 positions: two for one-way-mode and two for two-way mode
            assert len(positions_for_symbols) <= 4, exchange.id + ' ' + method + ' positions length for particular symbol should be less than 4, returned ' + exchange.json(positions_for_symbols)
            now = exchange.milliseconds()
            for i in range(0, len(positions_for_symbols)):
                test_position(exchange, skipped_properties, method, positions_for_symbols[i], symbol, now)
            test_shared_methods.assert_timestamp_order(exchange, method, symbol, positions_for_symbols)
    return True
