Ejemplo n.º 1
0
def bulkCreateInvites(data: List[InvitationRow], cohort = None)->List[Invitation]:
    res = {"messages":[],"data":{"updated":0,"added":0}}
    for entry in data:
        try:
            User.objects.get(username = entry.email)
        except User.DoesNotExist:
            pass
        else:
            res["messages"].append(f"User {entry.email} already exists")
            continue

        try:
            invitation = Invitation.objects.get(email=entry.email)
        except Invitation.DoesNotExist:
            invitation = Invitation(
                    email = entry.email
                )
            invitation.save()
            res["data"]["added"]+=1
        else:
            res["data"]["updated"]+=1

        invitation.metadata = {"position":entry.position,"affiliation":entry.affiliation}
            
        countries = []
        for cname in entry.countries:
            try:
                c = Country.objects.get(name=cname)
            except Country.DoesNotExist:
                res["messages"].append(f"Did not find country {cname} while creating invite for {entry.email}")
            else:
                countries.append(c)

        invitation.countries.set(countries)
    return res 
Ejemplo n.º 2
0
    def test_dispatch_and_register(self):
        """
        Long-form test that tests creating and sending an invite, and then
        registering a user by following the referral link in the invitation email.
        """
        countries = [
            Country(gwno=i, name=str(i), shape={}, simpleshape={})
            for i in range(5)
        ]
        for c in countries:
            c.save()

        i = Invitation(email="*****@*****.**")
        i.save()
        i.countries.set(countries)
        dispatchInvitation(i)

        m = mail.outbox[0]

        # Mailed flag
        self.assertTrue(i.mailed)

        # Email has proper title
        self.assertEqual(m.subject, settings.DEFAULT_EMAIL_TITLE)

        # Email contains ref. key
        self.assertIsNotNone(re.search(i.refkey, m.body))

        r = self.client.get(i.invitationLink(), follow=True)
        location, *_ = r.redirect_chain[-1]

        soup = BeautifulSoup(r.content, features="html.parser")

        regform = soup.find("form")
        usernameInput = regform.find("input", attrs={"name": "username"})

        # Email is in the username form
        self.assertEqual(usernameInput["value"], i.email)

        url = regform.action if regform.action else location
        method = regform.method if regform.method else "POST"

        getattr(self.client,
                method.lower())(url, {
                    "username": usernameInput["value"],
                    "password1": hashlib.md5(b"1234").hexdigest(),
                    "password2": hashlib.md5(b"1234").hexdigest()
                })

        # User was created
        try:
            u = User.objects.get(email=i.email)
        except User.DoesNotExist:
            self.fail("User was not created")

        # Make sure all countries were added
        self.assertEqual({c.pk
                          for c in countries},
                         {c.pk
                          for c in u.profile.countries.all()})
Ejemplo n.º 3
0
    def test_admin_dispatch(self):
        """
        Tests admin action to send email to selected invites
        """
        user = User.objects.create_superuser(username="******",
                                             email="*****@*****.**",
                                             password="******")
        self.client.login(username="******", password="******")

        invites = [Invitation(email=f"{i}@{i}.com") for i in range(5)]
        for i in invites:
            i.save()

        url = urls.reverse("admin:invitations_invitation_changelist")
        data = {
            'action': 'dispatch_invitation',
            '_selected_action': [i.pk for i in invites]
        }

        r = self.client.post(url, data, follow=True)
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(invites), len(mail.outbox))
Ejemplo n.º 4
0
def sendMail(email, user):
    if isValidEmail(email):
        if user.profile.remaining_invitations <= 0:
            return False
        token = uuid.uuid1().hex
        link = settings.WEB_URL + "/register?email=" + email + "&token=" + token + "&id=" + str(
            user.id)
        message = u'¡Nuestro usuario ' + user.first_name + u' ' + user.last_name + u' quiere trocar contigo! ¡Únete a esta gran comunidad que recicla e intercambia sin dinero! \n \n Sólo ingresa a \n' + link
        subject = user.first_name + u' te invitó Trueque'
        #        send_mail( subject, message, settings.EMAIL_HOST_USER, [email], fail_silently=False)
        print message
        inv = Invitation(id_sender=user,
                         email=email,
                         token=token,
                         pending=True)
        inv.save()
        profile = user.profile
        profile.remaining_invitations = profile.remaining_invitations - 1
        puntos = Point.objects.get(action="invitation_sent")
        profile.quds = profile.quds + puntos.qty
        profile.save()
        return True
Ejemplo n.º 5
0
    def test_rendered_email(self):
        et = EmailTemplate(active=True,
                           subject="An invitation",
                           message="""
# You are hereby invited to my survey

Please fill it out!

[here]({{link}})

Best regards
The Team
                """)
        et.save()
        inv = Invitation(email="*****@*****.**")
        dispatchInvitation(inv)
        self.assertEqual(len(mail.outbox), 1)
        m = mail.outbox[0]
        with open("/tmp/m.pckl", "wb") as f:
            pickle.dump(m, f)
        self.assertEqual(m.subject, et.subject)
        self.assertIsNotNone(re.search(inv.refkey, m.body))
        self.assertIsNotNone(
            re.search("You are hereby invited to my survey", m.body))