from yaml import load, SafeLoader
from os import environ
from mookdns import MookDns

from vaultwarden import VaultWarden


def test_vaultwarden_login():
    conf_file = f'{environ["MACHINE_TEST_DIR"]}/vaultwarden.yml'
    with open(conf_file) as yaml:
        data = load(yaml, Loader=SafeLoader)
    with MookDns(data['revprox_ip']):
        vaultwarden = VaultWarden(data['url'], data['username'], data['uuid'], data['privkey'])
        if 'FIRST_RUN' in environ:
            vaultwarden.register(data['password'])
        vaultwarden.login(data['password'])
        vaultwarden.load_organizations()


def test_vaultwarden_collection():
    conf_file = f'{environ["MACHINE_TEST_DIR"]}/vaultwarden.yml'
    with open(conf_file) as yaml:
        data = load(yaml, Loader=SafeLoader)
    with MookDns(data['revprox_ip']):
        vaultwarden = VaultWarden(data['url'], data['username'], data['uuid'], data['privkey'])
        vaultwarden.login(data['password'])
        vaultwarden.load_organizations()
        if 'FIRST_RUN' in environ:
            organization_id = vaultwarden.create_organization(data['username'],
                                                              'test_organization',
                                                              )
            vaultwarden.create_collection(organization_id,
                                          'test_collection',
                                          )
    assert len(vaultwarden.vaultwarden_organizations) == 2
    for org in vaultwarden.vaultwarden_organizations:
        if org is not None:
            assert vaultwarden.vaultwarden_organizations[org]['name'] == 'test_organization'
            assert len(vaultwarden.vaultwarden_organizations[org]['collections']) == 2
            assert set(vaultwarden.vaultwarden_organizations[org]['collections']) == {'test_organization', 'test_collection'}