import sugartrail
import json

# test 1: network initialised without auth and without arguments:

def test_init_without_arguments(capsys):
    sugartrail.base.Network()
    captured = capsys.readouterr()
    assert captured.out == 'No input provided. Please provide either officer_id, company_id, address or file as input.\n'

# test 2: network initialised without auth and with arguments prints auth requirement:

def test_init_officer_without_auth(capsys):
    sugartrail.base.Network(officer_id = '_')
    captured = capsys.readouterr()
    assert captured.out == 'Authentication required\n'

def test_init_company_without_auth(capsys):
    sugartrail.base.Network(company_id = '_')
    captured = capsys.readouterr()
    assert captured.out == 'Authentication required\n'

def test_init_address_without_auth(capsys):
    sugartrail.base.Network(address = '_')
    captured = capsys.readouterr()
    assert captured.out == 'Authentication required\n'

# test 3: network initialised without auth and with arguments remains stateless:

def test_empty_officer_without_auth(capsys):
    network = sugartrail.base.Network(officer_id = '_')
    assert network._officer_id == None

def test_empty_company_without_auth(capsys):
    network = sugartrail.base.Network(company_id = '_')
    assert network._company_id == None

def test_empty_address_without_auth(capsys):
    network = sugartrail.base.Network(address = '_')
    assert network._address == None

# test 4: network initialised with 'file' arg without auth loads network:

def test_file_init_without_auth():
    network = sugartrail.base.Network(file ='./assets/networks/domain_corp_network.json')
    with open('./assets/networks/domain_corp_network.json') as f:
        network_json = json.load(f)
    for key in network.__dict__.keys():
        if key not in sugartrail.base.Network._unserialisable_attributes:
            assert network.__dict__[key] == network_json[key]

# test 5: network loads network from file without auth:

def test_file_load_without_auth():
    network = sugartrail.base.Network()
    network.load('./assets/networks/domain_corp_network.json')
    with open('./assets/networks/domain_corp_network.json') as f:
        network_json = json.load(f)
    for key in network.__dict__.keys():
        if key not in sugartrail.base.Network._unserialisable_attributes:
            assert network.__dict__[key] == network_json[key]
