def test_get_all_invites(self):
        # create a couple invitations and GET /invites should
        # return all the invitations in the system
        recipient1 = User(self.random_email())
        recipient1.invite()
        recipient2 = User(self.random_email())
        recipient2.invite()
        recipient3 = User(self.random_email())
        recipient3.invite()

        sender = User(self.random_email())
        sender.create()

        invite1 = Invite(sender.email, recipient1.email)
        invite1.create()
        invite2 = Invite(sender.email, recipient2.email)
        invite2.create()
        invite3 = Invite(sender.email, recipient3.email)
        invite3.create()

        res = Invites().get()
        self.assertEqual(len(res.json()['invites']), 3)
        self.assertEqual(res.json()['invites'][0]['recipient'], recipient1.email)
        self.assertEqual(res.json()['invites'][1]['recipient'], recipient2.email)
        self.assertEqual(res.json()['invites'][2]['recipient'], recipient3.email)
    def test_get_all_invites(self):
        # create a couple invitations and GET /invites should
        # return all the invitations in the system
        recipient1 = User(self.random_email())
        recipient1.invite()
        recipient2 = User(self.random_email())
        recipient2.invite()
        recipient3 = User(self.random_email())
        recipient3.invite()

        sender = User(self.random_email())
        sender.create()

        invite1 = Invite(sender.email, recipient1.email)
        invite1.create()
        invite2 = Invite(sender.email, recipient2.email)
        invite2.create()
        invite3 = Invite(sender.email, recipient3.email)
        invite3.create()

        res = Invites().get()
        self.assertEqual(len(res.json()['invites']), 3)
        self.assertEqual(res.json()['invites'][0]['recipient'],
                         recipient1.email)
        self.assertEqual(res.json()['invites'][1]['recipient'],
                         recipient2.email)
        self.assertEqual(res.json()['invites'][2]['recipient'],
                         recipient3.email)
    def test_get_invites_filter_by_sender_and_or_recipient(self):
        # recipient1 will be invited by sender1
        # recipient2 and 3 will be invited by sender23
        recipient1 = User(self.random_email())
        recipient1.invite()
        recipient2 = User(self.random_email())
        recipient2.invite()
        recipient3 = User(self.random_email())
        recipient3.invite()

        sender1 = User(self.random_email())
        sender1.create()
        sender23 = User(self.random_email())
        sender23.create()

        invite1 = Invite(sender1.email, recipient1.email)
        invite1.create()
        invite2 = Invite(sender23.email, recipient2.email)
        invite2.create()
        invite3 = Invite(sender23.email, recipient3.email)
        invite3.create()

        # recipient1 should be given filter=sender1
        res1 = Invites().get(sender=sender1.email)
        self.assertEqual(len(res1.json()['invites']), 1)
        self.assertEqual(res1.json()['invites'][0]['recipient'], recipient1.email)
        self.assertEqual(res1.json()['invites'][0]['sender'], sender1.email)

        # recipient2 and 3 are returned given filter=sender23
        res2 = Invites().get(sender=sender23.email)
        self.assertEqual(len(res2.json()['invites']), 2)
        self.assertEqual(res2.json()['invites'][0]['recipient'], recipient2.email)
        self.assertEqual(res2.json()['invites'][1]['recipient'], recipient3.email)

        # no recipient is returned given filter=unknwon
        res3 = Invites().get(sender="*****@*****.**")
        self.assertEqual(len(res3.json()['invites']), 0)

        # recipient1 is returned given filter recipient=recipient1
        res4 = Invites().get(recipient=recipient1.email)
        self.assertEqual(len(res4.json()['invites']), 1)
        self.assertEqual(res4.json()['invites'][0]['recipient'], recipient1.email)

        # recipient2 is returned given filter recipient=recipient2 and sender=sender23
        res5 = Invites().get(recipient=recipient2.email,
            sender=sender23.email)
        self.assertEqual(len(res5.json()['invites']), 1)
        self.assertEqual(res5.json()['invites'][0]['recipient'], recipient2.email)
    def test_get_invites_filter_by_sender_and_or_recipient(self):
        # recipient1 will be invited by sender1
        # recipient2 and 3 will be invited by sender23
        recipient1 = User(self.random_email())
        recipient1.invite()
        recipient2 = User(self.random_email())
        recipient2.invite()
        recipient3 = User(self.random_email())
        recipient3.invite()

        sender1 = User(self.random_email())
        sender1.create()
        sender23 = User(self.random_email())
        sender23.create()

        invite1 = Invite(sender1.email, recipient1.email)
        invite1.create()
        invite2 = Invite(sender23.email, recipient2.email)
        invite2.create()
        invite3 = Invite(sender23.email, recipient3.email)
        invite3.create()

        # recipient1 should be given filter=sender1
        res1 = Invites().get(sender=sender1.email)
        self.assertEqual(len(res1.json()['invites']), 1)
        self.assertEqual(res1.json()['invites'][0]['recipient'],
                         recipient1.email)
        self.assertEqual(res1.json()['invites'][0]['sender'], sender1.email)

        # recipient2 and 3 are returned given filter=sender23
        res2 = Invites().get(sender=sender23.email)
        self.assertEqual(len(res2.json()['invites']), 2)
        self.assertEqual(res2.json()['invites'][0]['recipient'],
                         recipient2.email)
        self.assertEqual(res2.json()['invites'][1]['recipient'],
                         recipient3.email)

        # no recipient is returned given filter=unknwon
        res3 = Invites().get(sender="*****@*****.**")
        self.assertEqual(len(res3.json()['invites']), 0)

        # recipient1 is returned given filter recipient=recipient1
        res4 = Invites().get(recipient=recipient1.email)
        self.assertEqual(len(res4.json()['invites']), 1)
        self.assertEqual(res4.json()['invites'][0]['recipient'],
                         recipient1.email)

        # recipient2 is returned given filter recipient=recipient2 and sender=sender23
        res5 = Invites().get(recipient=recipient2.email, sender=sender23.email)
        self.assertEqual(len(res5.json()['invites']), 1)
        self.assertEqual(res5.json()['invites'][0]['recipient'],
                         recipient2.email)