import json
from io import BytesIO

import pytest
from flask_wtf.csrf import generate_csrf

from ereuse_devicehub.client import UserClient, UserClientFlask
from ereuse_devicehub.resources.action.models import Snapshot
from ereuse_devicehub.resources.device.models import Computer
from tests import conftest


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_form(user3: UserClientFlask):
    uri = '/inventory/upload-snapshot/'
    file_name = 'system_uuid1.json'
    user3.get(uri)

    snapshot = conftest.file_json(file_name)
    b_snapshot = bytes(json.dumps(snapshot), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")

    db_snapthot = Snapshot.query.one()
    device = db_snapthot.device
    assert device.hid == 'laptop-toshiba-satellite_l655-2b335208q-00:26:6c:ae:ee:78'
    assert str(device.system_uuid) == 'f0dc6a7f-c23f-e011-b5d0-00266caeee78'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_api(user: UserClient):
    file_name = 'system_uuid1.json'
    snapshot_11 = conftest.file_json(file_name)
    user.post(snapshot_11, res=Snapshot)

    db_snapthot = Snapshot.query.one()
    device = db_snapthot.device
    assert device.hid == 'laptop-toshiba-satellite_l655-2b335208q-00:26:6c:ae:ee:78'
    assert str(device.system_uuid) == 'f0dc6a7f-c23f-e011-b5d0-00266caeee78'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wbLite_form(user3: UserClientFlask):
    uri = '/inventory/upload-snapshot/'
    file_name = 'system_uuid2.json'
    user3.get(uri)

    snapshot = conftest.file_json(file_name)
    b_snapshot = bytes(json.dumps(snapshot), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")

    db_snapthot = Snapshot.query.one()
    device = db_snapthot.device
    assert device.hid == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
    assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wbLite_api(user: UserClient):
    snapshot_lite = conftest.file_json('system_uuid2.json')

    user.post(snapshot_lite, uri="/api/inventory/")

    db_snapthot = Snapshot.query.one()
    device = db_snapthot.device
    assert device.hid == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
    assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_to_wb11_with_uuid_api(user: UserClient):

    # insert computer with wb11 with hid and without uuid, (old version)
    snapshot_11 = conftest.file_json('system_uuid3.json')
    user.post(snapshot_11, res=Snapshot)

    db_snapthot = Snapshot.query.one()
    device = db_snapthot.device
    assert Computer.query.count() == 2
    assert device.hid == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
    assert device.system_uuid is None

    # insert the same computer with wb11 with hid and with uuid, (new version)
    snapshot_lite = conftest.file_json('system_uuid2.json')
    snapshot_11['debug'] = {'lshw': snapshot_lite['data']['lshw']}
    snapshot_11['uuid'] = '0973fda0-589a-11eb-ae93-0242ac130003'
    user.post(snapshot_11, res=Snapshot)

    assert (
        snapshot_11['debug']['lshw']['configuration']['uuid']
        == '364ee69c-9c82-9cb1-2111-88ae1da6f3d0'
    )
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_with_uuid_to_wb11_api(user: UserClient):

    # insert computer with wb11 with hid and without uuid, (old version)
    snapshot_11 = conftest.file_json('system_uuid3.json')
    snapshot_lite = conftest.file_json('system_uuid2.json')
    snapshot_11['debug'] = {'lshw': snapshot_lite['data']['lshw']}
    snapshot_11['uuid'] = '0973fda0-589a-11eb-ae93-0242ac130003'
    user.post(snapshot_11, res=Snapshot)

    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'

    # insert the same computer with wb11 with hid and with uuid, (new version)
    snapshot_11 = conftest.file_json('system_uuid3.json')
    assert 'debug' not in snapshot_11
    user.post(snapshot_11, res=Snapshot)

    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_with_uuid_to_wb11_without_hid_api(user: UserClient):

    # insert computer with wb11 with hid and without uuid, (old version)
    snapshot_11 = conftest.file_json('system_uuid3.json')
    snapshot_lite = conftest.file_json('system_uuid2.json')
    snapshot_11['debug'] = {'lshw': snapshot_lite['data']['lshw']}
    snapshot_11['uuid'] = '0973fda0-589a-11eb-ae93-0242ac130003'
    user.post(snapshot_11, res=Snapshot)

    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'

    # insert the same computer with wb11 with hid and with uuid, (new version)
    snapshot_11 = conftest.file_json('system_uuid3.json')
    components = [x for x in snapshot_11['components'] if x['type'] != 'NetworkAdapter']
    snapshot_11['components'] = components
    snapshot_11['debug'] = {'lshw': snapshot_lite['data']['lshw']}
    user.post(snapshot_11, res=Snapshot)

    assert Computer.query.count() == 2


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_to_wb11_with_uuid_form(user3: UserClientFlask):

    # insert computer with wb11 with hid and without uuid, (old version)
    uri = '/inventory/upload-snapshot/'
    user3.get(uri)

    file_name = 'system_uuid3.json'
    snapshot = conftest.file_json(file_name)
    b_snapshot = bytes(json.dumps(snapshot), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")

    db_snapthot = Snapshot.query.one()
    device = db_snapthot.device
    assert Computer.query.count() == 2
    assert device.hid == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
    assert device.system_uuid is None

    # insert the same computer with wb11 with hid and with uuid, (new version)
    snapshot_lite = conftest.file_json('system_uuid2.json')
    snapshot['debug'] = {'lshw': snapshot_lite['data']['lshw']}
    snapshot['uuid'] = '0973fda0-589a-11eb-ae93-0242ac130003'
    b_snapshot = bytes(json.dumps(snapshot), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")

    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_with_uuid_to_wb11_form(user3: UserClientFlask):

    # insert computer with wb11 with hid and without uuid, (old version)
    uri = '/inventory/upload-snapshot/'
    user3.get(uri)

    file_name = 'system_uuid3.json'
    snapshot_lite = conftest.file_json('system_uuid2.json')
    snapshot = conftest.file_json(file_name)
    snapshot['debug'] = {'lshw': snapshot_lite['data']['lshw']}
    snapshot['uuid'] = '0973fda0-589a-11eb-ae93-0242ac130003'
    b_snapshot = bytes(json.dumps(snapshot), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")

    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'

    # insert the same computer with wb11 with hid and with uuid, (new version)
    snapshot = conftest.file_json('system_uuid3.json')
    assert 'debug' not in snapshot
    b_snapshot = bytes(json.dumps(snapshot), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")

    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_with_uuid_to_wb11_without_hid_form(user3: UserClientFlask):

    uri = '/inventory/upload-snapshot/'
    user3.get(uri)

    # insert computer with wb11 with hid and without uuid, (old version)
    snapshot_lite = conftest.file_json('system_uuid2.json')
    file_name = 'system_uuid3.json'
    snapshot_11 = conftest.file_json(file_name)
    snapshot_11['debug'] = {'lshw': snapshot_lite['data']['lshw']}
    snapshot_11['uuid'] = '0973fda0-589a-11eb-ae93-0242ac130003'
    b_snapshot = bytes(json.dumps(snapshot_11), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")

    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'

    # insert the same computer with wb11 with hid and with uuid, (new version)
    snapshot_11 = conftest.file_json('system_uuid3.json')
    components = [x for x in snapshot_11['components'] if x['type'] != 'NetworkAdapter']
    snapshot_11['components'] = components
    snapshot_11['debug'] = {'lshw': snapshot_lite['data']['lshw']}
    b_snapshot = bytes(json.dumps(snapshot_11), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")

    assert Computer.query.count() == 2


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_to_wblite_api(user: UserClient):

    # insert computer with wb11 with hid and without uuid, (old version)
    snapshot_11 = conftest.file_json('system_uuid3.json')
    user.post(snapshot_11, res=Snapshot)
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert device.system_uuid is None

    snapshot_lite = conftest.file_json('system_uuid2.json')
    user.post(snapshot_lite, uri="/api/inventory/")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wblite_to_wb11_api(user: UserClient):

    snapshot_lite = conftest.file_json('system_uuid2.json')
    user.post(snapshot_lite, uri="/api/inventory/")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'

    snapshot_11 = conftest.file_json('system_uuid3.json')
    user.post(snapshot_11, res=Snapshot)
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_to_wblite_form(user3: UserClientFlask):

    uri = '/inventory/upload-snapshot/'
    user3.get(uri)

    file_name = 'system_uuid3.json'
    snapshot_11 = conftest.file_json(file_name)
    b_snapshot = bytes(json.dumps(snapshot_11), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert device.system_uuid is None

    file_name = 'system_uuid2.json'
    snapshot_lite = conftest.file_json(file_name)
    b_snapshot = bytes(json.dumps(snapshot_lite), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wblite_to_wb11_form(user3: UserClientFlask):

    uri = '/inventory/upload-snapshot/'
    user3.get(uri)

    file_name = 'system_uuid2.json'
    snapshot_lite = conftest.file_json(file_name)
    b_snapshot = bytes(json.dumps(snapshot_lite), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'

    file_name = 'system_uuid3.json'
    snapshot_11 = conftest.file_json(file_name)
    b_snapshot = bytes(json.dumps(snapshot_11), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wblite_to_wblite_api(user: UserClient):

    snapshot_lite = conftest.file_json('system_uuid2.json')
    user.post(snapshot_lite, uri="/api/inventory/")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'

    snapshot_lite = conftest.file_json('system_uuid2.json')
    snapshot_lite['uuid'] = '0973fda0-589a-11eb-ae93-0242ac130003'
    user.post(snapshot_lite, uri="/api/inventory/")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wblite_to_wblite_form(user3: UserClientFlask):

    uri = '/inventory/upload-snapshot/'
    user3.get(uri)

    file_name = 'system_uuid2.json'
    snapshot_lite = conftest.file_json(file_name)
    b_snapshot = bytes(json.dumps(snapshot_lite), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'

    file_name = 'system_uuid2.json'
    snapshot_lite = conftest.file_json(file_name)
    snapshot_lite['uuid'] = '0973fda0-589a-11eb-ae93-0242ac130003'
    b_snapshot = bytes(json.dumps(snapshot_lite), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_to_wb11_duplicity_api(user: UserClient):

    # insert computer with wb11 with hid and without uuid, (old version)
    snapshot_11 = conftest.file_json('system_uuid3.json')
    user.post(snapshot_11, res=Snapshot)
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert device.system_uuid is None

    snapshot_11 = conftest.file_json('system_uuid3.json')
    snapshot_11['uuid'] = '0973fda0-589a-11eb-ae93-0242ac130003'
    components = [x for x in snapshot_11['components'] if x['type'] != 'NetworkAdapter']
    snapshot_11['components'] = components
    user.post(snapshot_11, res=Snapshot)
    assert Computer.query.count() == 4
    for c in Computer.query.all():
        assert 'laptop-acer-aohappy-lusea0d010038879a01601' in c.hid
        assert c.system_uuid is None


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_to_wb11_duplicity_form(user3: UserClientFlask):

    uri = '/inventory/upload-snapshot/'
    user3.get(uri)

    file_name = 'system_uuid3.json'
    snapshot_11 = conftest.file_json(file_name)
    b_snapshot = bytes(json.dumps(snapshot_11), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert device.system_uuid is None

    snapshot_11 = conftest.file_json('system_uuid3.json')
    snapshot_11['uuid'] = '0973fda0-589a-11eb-ae93-0242ac130003'
    components = [x for x in snapshot_11['components'] if x['type'] != 'NetworkAdapter']
    snapshot_11['components'] = components

    b_snapshot = bytes(json.dumps(snapshot_11), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")

    assert Computer.query.count() == 4
    for device in Computer.query.all():
        if device.binding:
            assert 'laptop-acer-aohappy-lusea0d010038879a01601' in device.hid
            assert device.system_uuid is None


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_smbios_2_5_api(user: UserClient):

    # insert computer with wb11 with hid and without uuid, (old version)
    snapshot_11 = conftest.file_json('system_uuid4.json')
    user.post(snapshot_11, res=Snapshot)
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert device.system_uuid is None


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wb11_smbios_2_5_form(user3: UserClientFlask):

    uri = '/inventory/upload-snapshot/'
    user3.get(uri)

    file_name = 'system_uuid4.json'
    snapshot_11 = conftest.file_json(file_name)
    b_snapshot = bytes(json.dumps(snapshot_11), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
            assert device.system_uuid is None


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wblite_smbios_2_5_api(user: UserClient):

    # insert computer with wb11 with hid and without uuid, (old version)
    snapshot_lite = conftest.file_json('system_uuid2.json')
    snapshot_lite['data']['lshw']['capabilities']['smbios-3.0'] = 'SMBIOS version 2.5'
    user.post(snapshot_lite, uri="/api/inventory/")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
        assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'


@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_wblite_smbios_2_5_form(user3: UserClientFlask):

    uri = '/inventory/upload-snapshot/'
    user3.get(uri)

    file_name = 'system_uuid2.json'
    snapshot_lite = conftest.file_json(file_name)
    snapshot_lite['data']['lshw']['capabilities']['smbios-3.0'] = 'SMBIOS version 2.5'
    b_snapshot = bytes(json.dumps(snapshot_lite), 'utf-8')
    file_snap = (BytesIO(b_snapshot), file_name)

    data = {
        'snapshot': file_snap,
        'csrf_token': generate_csrf(),
    }
    user3.post(uri, data=data, content_type="multipart/form-data")
    assert Computer.query.count() == 2
    for device in Computer.query.all():
        if device.binding:
            assert (
                device.hid
                == 'laptop-acer-aohappy-lusea0d010038879a01601-88:ae:1d:a6:f3:d0'
            )
        assert str(device.system_uuid) == '9ce64e36-829c-b19c-2111-88ae1da6f3d0'
