Skip to content

Commit

Permalink
Send an email if a bounty is funded below a threshold
Browse files Browse the repository at this point in the history
  • Loading branch information
oddballbutler committed Jun 21, 2019
1 parent 653d229 commit 5801ca2
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 3 deletions.
19 changes: 18 additions & 1 deletion app/dashboard/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
)
from dashboard.notifications import (
maybe_market_to_email, maybe_market_to_github, maybe_market_to_slack, maybe_market_to_twitter,
maybe_market_to_user_discord, maybe_market_to_user_slack,
maybe_market_to_user_discord, maybe_market_to_user_slack, notify_of_lowball_bounty,
)
from dashboard.tokens import addr_to_token
from economy.utils import ConversionRateNotFoundError, convert_amount
Expand Down Expand Up @@ -801,6 +801,19 @@ def record_user_action(event_name, old_bounty, new_bounty):
})


def is_lowball_bounty(bounty_value_usdt):
"""Determine if a bounty value is less than a threshold
Args:
bounty_value_usdt (Decimal): The value of the bounty
Returns:
bool: True if bounty value is less than the threshold
"""
return bounty_value_usdt < 10.00


def process_bounty_changes(old_bounty, new_bounty):
"""Process Bounty changes.
Expand Down Expand Up @@ -853,6 +866,10 @@ def process_bounty_changes(old_bounty, new_bounty):
if new_bounty.fulfillments.exists():
profile_pairs = build_profile_pairs(new_bounty)

# Send an Email if this is a LowBall bounty
if is_lowball_bounty(new_bounty.value_in_usdt):
notify_of_lowball_bounty(new_bounty)

# marketing
if event_name != 'unknown_event':
print("============ posting ==============")
Expand Down
26 changes: 26 additions & 0 deletions app/dashboard/notifications.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from django.templatetags.static import static
from django.utils import timezone, translation
from django.utils.translation import gettext
from django.utils.translation import gettext_lazy as _

import requests
import twitter
Expand All @@ -42,6 +43,31 @@
logger = logging.getLogger(__name__)


def notify_of_lowball_bounty(bounty):
"""Send an email to [email protected] with the lowball bounty info
Args:
bounty (dashboard.models.Bounty): The lowball bounty object
"""
to_email = '[email protected]'
from_email = settings.CONTACT_EMAIL
cur_language = translation.get_language()
try:
setup_lang(to_email)
subject = _("Low Bounty Notification")
body = \
f"Bounty: {bounty}\n\n" \
f"url: {bounty.url}\n\n" \
f"Owner Name: {bounty.bounty_owner_name}\n\n" \
f"Owner Email: {bounty.bounty_owner_email}\n\n" \
f"Owner Address: {bounty.bounty_owner_address}\n\n" \
f"Owner Profile: {bounty.bounty_owner_profile}"
send_mail(from_email, to_email, subject, body, from_name=_("No Reply from Gitcoin.co"), categories=['admin'], )
finally:
translation.activate(cur_language)


def github_org_to_twitter_tags(github_org):
"""Build a string of github organization twitter tags.
Expand Down
6 changes: 5 additions & 1 deletion app/dashboard/tests/test_dashboard_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

import pytz
import requests_mock
from dashboard.helpers import amount, issue_details, normalize_url, process_bounty_details
from dashboard.helpers import amount, issue_details, normalize_url, process_bounty_details, is_lowball_bounty
from dashboard.models import Bounty
from economy.models import ConversionRate
from marketing.mails import featured_funded_bounty
Expand All @@ -52,6 +52,10 @@ def test_amount(self):
request = self.factory.get('/sync/get_amount', params)
assert amount(request).content == b'{"eth": 5.0, "usdt": 10.0}'

def test_lowball_bounty(self):
assert is_lowball_bounty(1.00) == True
assert is_lowball_bounty(15.00) == False

def test_normalize_url(self):
"""Test the dashboard helper normalize_url method."""
assert normalize_url('https://gitcoin.co/') == 'https://gitcoin.co'
12 changes: 11 additions & 1 deletion app/dashboard/tests/test_notifications.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,12 @@
"""
from datetime import datetime
from unittest.mock import patch

from dashboard.models import Bounty
from dashboard.notifications import amount_usdt_open_work, append_snooze_copy, build_github_notification
from dashboard.notifications import (
amount_usdt_open_work, append_snooze_copy, build_github_notification, notify_of_lowball_bounty,
)
from pytz import UTC
from test_plus.test import TestCase

Expand All @@ -38,7 +41,9 @@ def setUp(self):
github_url='https://github.com/gitcoinco/web/issues/11',
token_address='0x0',
issue_description='hello world',
bounty_owner_name="Fred",
bounty_owner_github_username='flintstone',
bounty_owner_email="[email protected]"
is_open=False,
accepted=True,
expires_date=datetime(2008, 11, 30, tzinfo=UTC),
Expand Down Expand Up @@ -87,6 +92,11 @@ def test_append_snooze_copy(self):
copy = f'\nFunders only: Snooze warnings for {copy}'
assert segments[i] == copy

@patch('marketing.mails.send_mail')
def test_notify_of_lowball_bounty(self):
notify_of_lowball_bounty(self.bounty)
assert mock_send_mail.call_count == 1

def tearDown(self):
"""Perform cleanup for the testcase."""
self.bounty.delete()

0 comments on commit 5801ca2

Please sign in to comment.