Skip to content

Commit db24f35

Browse files
moacirmodarenzon
authored andcommitted
creating source field and implementing his fill by utm_source parameter. resolves #1268
1 parent 6dffd61 commit db24f35

File tree

7 files changed

+30
-17
lines changed

7 files changed

+30
-17
lines changed

pythonpro/core/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class UserAdmin(RolePermissionsUserAdminMixin, admin.ModelAdmin):
2929
add_form_template = 'admin/auth/user/add_form.html'
3030
change_user_password_template = None
3131
fieldsets = (
32-
(None, {'fields': ('first_name', 'email', 'password')}),
32+
(None, {'fields': ('first_name', 'email', 'password', 'source')}),
3333
(_('Permissions'), {
3434
'fields': ('is_active', 'is_staff', 'is_superuser',
3535
'groups', 'user_permissions')

pythonpro/core/forms.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,10 @@ class Meta:
4545
help_text=_("Enter the same password as before, for verification."),
4646
)
4747

48-
def save(self, commit=True):
48+
def save(self, commit=True, source=None):
4949
user = super().save(commit=False)
5050
user.set_password(User.objects.make_random_password(30))
51+
user.source = source
5152
if commit:
5253
user.save()
5354
return user
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 2.2.2 on 2019-06-24 19:12
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('core', '0005_auto_20180603_2026'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='user',
15+
name='source',
16+
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='source'),
17+
),
18+
]

pythonpro/core/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class User(AbstractBaseUser, PermissionsMixin):
3333
),
3434
)
3535
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
36+
source = models.CharField(_('source'), max_length=255, null=True, blank=True)
3637

3738
objects = UserManager()
3839

pythonpro/core/templates/core/lead_form.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<form method="post" action="{% url 'core:lead_form' %}">
1+
<form method="post" action="{% url 'core:lead_form' %}{% if request.GET.utm_source %}?utm_source={{ request.GET.utm_source }}{% endif %}">
22
{% csrf_token %}
33
<div class="form-group">
44
<label for="{{ form.first_name.id_for_label }}">{{ form.first_name.label_tag }}</label>

pythonpro/core/tests/test_lead_landing_page.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from unittest.mock import Mock, call
1+
from unittest.mock import Mock
22

33
import pytest
44
from django.urls import reverse
@@ -21,14 +21,9 @@ def create_lead_mock(mocker):
2121

2222

2323
@pytest.fixture
24-
def tag_as_mock(mocker):
25-
return mocker.patch('pythonpro.core.views.facade.tag_as')
26-
27-
28-
@pytest.fixture
29-
def resp_lead_creation(client, db, fake: Faker, create_lead_mock, tag_as_mock):
24+
def resp_lead_creation(client, db, fake: Faker, create_lead_mock):
3025
client.post(
31-
reverse('core:lead_form') + '?mc_source=facebook',
26+
reverse('core:lead_form') + '?utm_source=facebook',
3227
data={
3328
'first_name': fake.name(),
3429
'email': fake.email(),
@@ -51,6 +46,6 @@ def test_user_created_as_lead_on_mailchimp(resp_lead_creation, django_user_model
5146
create_lead_mock.assert_called_once_with(user.first_name, user.email)
5247

5348

54-
def test_user_source_marked_on_mailchimp(resp_lead_creation, django_user_model, tag_as_mock: Mock):
49+
def test_user_source_was_saved_from_url(resp_lead_creation, django_user_model, create_lead_mock: Mock):
5550
user = django_user_model.objects.first()
56-
assert call(user.email, 'source:facebook') == tag_as_mock.call_args
51+
assert user.source == 'facebook'

pythonpro/core/views.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,9 @@ def lead_form(request):
106106
return render(request, 'core/lead_form_errors.html', context={'form': form})
107107
form = UserSignupForm(request.POST)
108108
if form.is_valid():
109-
user = form.save()
109+
source = request.GET.get('utm_source')
110+
user = form.save(source=source)
110111
assign_role(user, 'lead')
111112
facade.create_or_update_lead(user.first_name, user.email)
112-
mc_source = request.GET.get('mc_source')
113-
if mc_source:
114-
facade.tag_as(user.email, "source:{}".format(mc_source))
115113
return redirect(reverse('core:thanks'))
116114
return render(request, 'core/lead_form_errors.html', context={'form': form})

0 commit comments

Comments
 (0)