def test_saving_and_retreiving_messages(self): invitation = Invitation() invitation.save() first_message = Message() first_message.text = 'The first (ever) message' first_message.invitation = invitation first_message.save() second_message = Message() second_message.text = 'Message the second' second_message.invitation = invitation second_message.save() saved_invitation = Invitation.objects.first() self.assertEqual(saved_invitation, invitation) saved_messages = Message.objects.all() self.assertEqual(saved_messages.count(), 2) first_saved_message = saved_messages[0] second_saved_message = saved_messages[1] self.assertEqual(first_saved_message.text, 'The first (ever) message') self.assertEqual(first_saved_message.invitation, invitation) self.assertEqual(second_saved_message.text, 'Message the second') self.assertEqual(second_saved_message.invitation, invitation)
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
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()})
def dispatchInvitation(invitation: Invitation) -> bool: """ Sends an email to an invitee """ try: assert not invitation.mailed and not invitation.fulfilled except AssertionError: logger.warning(f"Invitation for {invitation.email} was not sent: " "Already fulfilled!") return False if invitation.refkey is None: invitation.refkey = referralKeygen(invitation.email) invitation.save() if invitation.customemail and invitation.customsig: et = EmailTemplate( subject=settings.DEFAULT_EMAIL_TITLE, headline="Conflict Cartographer", message=invitation.customemail, signature=invitation.customsig, ) else: try: et = EmailTemplate.objects.get(active=True, email_type="inv") except EmailTemplate.DoesNotExist: et = EmailTemplate.objects.create( active=True, subject=settings.DEFAULT_EMAIL_TITLE, email_type="inv") html = renderEmailTemplate(et, {"link": invitation.invitationLink()}) plaintext = re.sub("\[[^\)]+", invitation.invitationLink(), et.message) call = { "subject": et.subject, "message": plaintext, "html_message": html, "from_email": settings.EMAIL_FROM_ADDRESS, "recipient_list": [invitation.email] } try: mail.send_mail(**call) except ConnectionRefusedError: logger.error("Failed to send email to %s, connection refused!", invitation.email) return False else: logger.info("Sent email to %s", invitation.email) invitation.mailed = True invitation.save() return True
def invitations_save(request): if request.method == 'POST': datos = json.loads(request.body.decode()) invitacion = Invitation(username=request.user,invitacion=datos['data']['invitacion']) print(datos['data']['invitados'][0]['email']) invitacion.save() contenido = "Tu amigo "+request.user.first_name+" "+request.user.last_name+" te ha invitado a jugar la quiniela del mundial" contenido+= "en http://www.futbolgamb.com no dejes de entrar y divertirte tratando de asertar los resultados de los partidos y compitiendo contra otros" correos = [] for email in datos['data']['invitados']: correos.append(email['email']) send_mail('Invitaciones para futbolgamb', contenido, '*****@*****.**',correos, fail_silently=False) #return Response(position) #jsonResponse = serializers.serialize("json", position) return HttpResponse(json.dumps({"success" : "true"}), content_type="application/json",status=200)
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