def test_remove_group_owner(ldap_connection, group):
    """removes any owners of the given group.

    Args:
        ldap_connection:
            obj: A bound mock mock_ldap_connection

        group:
            obj: dict:
                common_name:
                    str: A common name of a group AD object.
                name:
                    str: A name of a group AD object.
    """
    group_distinct_name = (
        "CN=%s,OU=Roles,OU=Security,OU=Groups,DC=AD2012,DC=LAB" %
        group["common_name"])
    clear_role_owners(ldap_connection, group["common_name"])
    update_when_changed(ldap_connection, group_distinct_name)
    fake_group = get_fake_group(ldap_connection, group["common_name"])
    put_in_inbound_queue(fake_group, "group")
    # wait for the fake group to be ingested by rbac_ledger_sync
    time.sleep(3)
    role_id = get_role_id_from_cn(group["common_name"])
    role_owners = get_role_owners(role_id)
    assert len(role_owners) is 0
def is_user_the_role_owner(role_common_name, user_common_name):
    """Checks to see if a given user is an owner of the given role/group in
    rethinkDB.

    Args:
        user_common_name:
            str: string containing the common name of an AD user object.

        role_common_name:
            str: string containing the common name of an AD role/group object.

    Returns:
        bool:
            True: if the user is an owner of the given group.

            False: if the user is not an owner of the given group.
    """
    role_id = get_role_id_from_cn(role_common_name)
    user_distinct_name = ("CN=%s,OU=Users,OU=Accounts,DC=AD2012,DC=LAB" %
                          user_common_name)
    next_id = get_user_next_id(remote_id=user_distinct_name)
    role_owners = get_role_owners(role_id)
    user_is_role_owner = False
    if len(role_owners) is 1:
        if role_owners[0]["related_id"] == next_id:
            user_is_role_owner = True
    return user_is_role_owner
def test_delete_user(ldap_connection):
    """Deletes a AD user in NEXT

    Args:
        ldap_connection:
            obj: A bound mock mock_ldap_connection
    """
    # Create fake user and attach as owner to a role
    create_fake_user(ldap_connection, "jchan20", "Jackie Chan", "Jackie")
    user_remote_id = "CN=jchan20,OU=Users,OU=Accounts,DC=AD2012,DC=LAB"
    create_fake_group(ldap_connection, "jchan_role", "jchan_role",
                      user_remote_id)
    group_distinct_name = (
        "CN=jchan_role,OU=Roles,OU=Security,OU=Groups,DC=AD2012,DC=LAB")
    addMembersToGroups.ad_add_members_to_groups(ldap_connection,
                                                user_remote_id,
                                                group_distinct_name,
                                                fix=True)
    fake_user = get_fake_user(ldap_connection, "jchan20")
    put_in_inbound_queue(fake_user, "user")
    fake_group = get_fake_group(ldap_connection, "jchan_role")
    put_in_inbound_queue(fake_group, "group")
    time.sleep(3)

    # See if owner and role are in the system
    email = "*****@*****.**"
    assert is_user_in_db(email) is True
    assert is_group_in_db("jchan_role") is True

    # See if all LDAP user has entries in the following
    # off chain tables: user_mapping and metadata
    user = get_user_in_db_by_email(email)
    next_id = user[0]["next_id"]
    assert get_user_mapping_entry(next_id)
    assert get_user_metadata_entry(next_id)

    # See that the owner is assigned to correct role
    role = get_role("jchan_role")
    owners = get_role_owners(role[0]["role_id"])
    members = get_role_members(role[0]["role_id"])
    assert owners[0]["related_id"] == next_id
    assert members[0]["related_id"] == next_id

    # Create a NEXT role with LDAP user as an admin and
    # check for LDAP user's entry in auth table
    next_role_id = create_next_role_ldap(user=user[0], role_name="managers")
    admins = get_role_admins(next_role_id)
    assert admins[0]["related_id"] == next_id
    assert get_auth_entry(next_id)

    # Create a NEXT pack with LDAP user as an owner
    next_pack_id = create_pack_ldap(user=user[0],
                                    pack_name="technology department")
    assert check_user_is_pack_owner(next_pack_id, next_id)

    # Delete user and verify LDAP user and related off chain
    # table entries have been deleted, role still exists
    # and role relationships have been deleted
    insert_deleted_entries([user_remote_id], "user_deleted")
    time.sleep(3)

    assert get_deleted_user_entries(next_id) == []
    assert get_pack_owners_by_user(next_id) == []
    assert is_group_in_db("jchan_role") is True
    assert get_role_owners(role[0]["role_id"]) == []
    assert get_role_admins(next_role_id) == []
    assert get_role_members(role[0]["role_id"]) == []

    delete_role_by_name("managers")
    delete_pack_by_name("technology department")