def test_group_query_by_user(app):
    """."""
    with app.app_context():
        from invenio_groups.models import Group, Membership, \
            GroupAdmin, MembershipState
        from invenio_accounts.models import User

        u1 = User(email="[email protected]", password="******")
        u2 = User(email="[email protected]", password="******")
        u3 = User(email="[email protected]", password="******")
        db.session.add(u1)
        db.session.add(u2)
        db.session.add(u3)
        db.session.commit()
        g1 = Group.create(name="test1", admins=[u1])
        g2 = Group.create(name="test2", admins=[u1])

        g1.add_member(u2, state=MembershipState.PENDING_ADMIN)
        g1.add_member(u3, state=MembershipState.ACTIVE)
        g2.add_member(u2, state=MembershipState.ACTIVE)

        assert Group.query.count() == 2
        assert GroupAdmin.query.count() == 2
        assert Membership.query.count() == 3
        assert Group.query_by_user(u1).count() == 2
        assert Group.query_by_user(u1, with_pending=True).count() == 2
        assert Group.query_by_user(u2).count() == 1
        assert Group.query_by_user(u2, with_pending=True).count() == 2
        assert Group.query_by_user(u3).count() == 1
        assert Group.query_by_user(u3, with_pending=True).count() == 1
        assert 1 == Group.query_by_user(
            u3, with_pending=True, eager=[Group.members]).count()