

Set up a fake session:

    >>> self.portal.REQUEST.SESSION = {}


Lets get the invitation storage:

    >>> from ftw.participation.interfaces import IInvitationStorage
    >>> from ftw.participation.invitation import Invitation
    >>> storage = IInvitationStorage(self.portal)
    >>> storage
    <ftw.participation.storage.InvitationStorage object at ...>


List current invitations:

    >>> storage.invitations
    {}


Create a new invitaiton for self.folder:

    >>> inv1 = Invitation(target=self.folder, email='foo@bar.com', inviter='admin',
    ...                   roles=['Reader'])
    >>> inv1
    <ftw.participation.invitation.Invitation object at ...>
    >>> inv1.get_target() == self.folder
    True
    >>> inv1.email
    'foo@bar.com'
    >>> inv1.inviter
    'admin'
    >>> inv1.roles
    ['Reader']


Lets create another invitation for later use:

    >>> inv2 = Invitation(self.folder, 'another@user.com', inviter='admin',
    ...                   roles=['Reader', 'Contributor'])


Try to add inv1 to the storage. This should fail (False) since it was
already added from the Constructor of the Invitation:

    >>> storage.add_invitation(inv1)
    False

If we remove it we should be able to add it again:

    >>> inv1.iid in storage.get_used_iids()
    True
    >>> storage.remove_invitation(inv1)
    True
    >>> inv1.iid in storage.get_used_iids()
    False
    >>> storage.add_invitation(inv1)


We should get both invitations when we ask for them:

    >>> storage.get_invitations_for_email(email='anotused@email.com')
    []
    >>> storage.get_invitations_for_email('foo@bar.com') == [inv1]
    True
    >>> storage.get_invitations_for_email('another@user.com') == [inv2]
    True

    >>> storage.get_invitations_invited_by('hans')
    []
    >>> storage.get_invitations_invited_by('admin') == [inv1, inv2]
    True


Some more tests:

    >>> inv1 == storage.get_invitation_by_iid(inv1.iid)
    True
    >>> inv2 == storage.get_invitation_by_iid(inv2.iid)
    True


Session stuff:

    >>> storage.get_pending_session_invitations()
    []

    >>> storage.set_invitation_pending_for_session(inv1)
    >>> storage.get_pending_session_invitations() == [inv1.iid]
    True

    >>> storage.assign_pending_session_invitations(inv2.email)

    >>> inv1.email == inv2.email
    True

    >>> set(storage.get_invitations_for_email(inv1.email)) == set((inv1, inv2))
    True
