def test_delete_not_used_invitation(self):
        recipient = User(self.random_email())
        recipient.invite()
        sender = User(self.random_email())
        sender.create()

        invite = Invite(sender.email, recipient.email)
        res1 = invite.create()
        invite_id = res1.json()["invite"]["id"]

        # create a group in minion that includes the recipient (bug#175)
        group = Group(self.group_name, users=[recipient.email])
        group.create()

        # ensure now the recipient is part of the new group
        res2 = recipient.get()
        self.assertEqual(res2.json()['user']['groups'], [group.group_name])
        # also, this user is still marked as "invited"
        self.assertEqual(res2.json()['user']['status'], 'invited')

        # admin deletes this invitation off minion
        res3 = invite.delete(invite_id)
        self.assertEqual(res3.json()["success"], True)

        # since invitation is gone, user should be gone too
        res4 = recipient.get()
        self.assertEqual(res4.json()['success'], False)
        self.assertEqual(res4.json()['reason'], 'no-such-user')

        # recipient is also gone from any group association
        res5 = group.get()
        self.assertEqual(res5.json()['group']['users'], [])
    def test_delete_not_used_invitation(self):
        recipient = User(self.random_email())
        recipient.invite()
        sender = User(self.random_email())
        sender.create()

        invite = Invite(sender.email, recipient.email)
        res1 = invite.create()
        invite_id = res1.json()["invite"]["id"]

        # create a group in minion that includes the recipient (bug#175)
        group = Group(self.group_name, users=[recipient.email])
        group.create()

        # ensure now the recipient is part of the new group
        res2 = recipient.get()
        self.assertEqual(res2.json()['user']['groups'], [group.group_name])
        # also, this user is still marked as "invited"
        self.assertEqual(res2.json()['user']['status'], 'invited')

        # admin deletes this invitation off minion
        res3 = invite.delete(invite_id)
        self.assertEqual(res3.json()["success"], True)

        # since invitation is gone, user should be gone too
        res4 = recipient.get()
        self.assertEqual(res4.json()['success'], False)
        self.assertEqual(res4.json()['reason'], 'no-such-user')

        # recipient is also gone from any group association
        res5 = group.get()
        self.assertEqual(res5.json()['group']['users'], [])
    def test_delete_invite_does_not_delete_accepted_user(self):
        # Delete recipient's invite does not delete the user if
        # recipient has already accepted the invitation.
        recipient = User(self.random_email())
        recipient.invite()
        sender = User(self.random_email())
        sender.create()

        invite = Invite(sender.email, recipient.email)

        res1 = invite.create()
        invite_id = res1.json()["invite"]["id"]

        # accept the invitation with the same invitation email
        res2 = invite.update(invite_id, "accept", login=recipient.email)
        self.assertEqual(res2.json()["success"], True)

        # upon invitation acceptance, user status changed to active
        res3 = recipient.get()        
        self.assertEqual(res3.json()['user']['email'], recipient.email)
        self.assertEqual(res3.json()['user']['status'], 'active')

        # now admin chooses to delete the invitation
        res4 = invite.delete(invite_id)
        self.assertEqual(res4.json()["success"], True)

        # check invitation is gone
        res5 = invite.get(invite_id)
        self.assertEqual(res5.json()['success'], False)
        self.assertEqual(res5.json()['reason'], 'invitation-does-not-exist')

        # yet, the user is still present
        res6 = recipient.get()
        self.assertEqual(res6.json()['success'], True)
        self.assertEqual(res6.json()['user']['email'], recipient.email)
        self.assertEqual(res6.json()['user']['status'], 'active')
    def test_delete_invite_does_not_delete_accepted_user(self):
        # Delete recipient's invite does not delete the user if
        # recipient has already accepted the invitation.
        recipient = User(self.random_email())
        recipient.invite()
        sender = User(self.random_email())
        sender.create()

        invite = Invite(sender.email, recipient.email)

        res1 = invite.create()
        invite_id = res1.json()["invite"]["id"]

        # accept the invitation with the same invitation email
        res2 = invite.update(invite_id, "accept", login=recipient.email)
        self.assertEqual(res2.json()["success"], True)

        # upon invitation acceptance, user status changed to active
        res3 = recipient.get()
        self.assertEqual(res3.json()['user']['email'], recipient.email)
        self.assertEqual(res3.json()['user']['status'], 'active')

        # now admin chooses to delete the invitation
        res4 = invite.delete(invite_id)
        self.assertEqual(res4.json()["success"], True)

        # check invitation is gone
        res5 = invite.get(invite_id)
        self.assertEqual(res5.json()['success'], False)
        self.assertEqual(res5.json()['reason'], 'invitation-does-not-exist')

        # yet, the user is still present
        res6 = recipient.get()
        self.assertEqual(res6.json()['success'], True)
        self.assertEqual(res6.json()['user']['email'], recipient.email)
        self.assertEqual(res6.json()['user']['status'], 'active')