Skip to content

Commit 414a381

Browse files
committed
allowing redirect by headers
1 parent d50f7e0 commit 414a381

File tree

6 files changed

+59
-10
lines changed

6 files changed

+59
-10
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.0.4 on 2020-04-22 00:49
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('redirector', '0002_auto_20200421_2144'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='redirect',
15+
name='use_javascript',
16+
field=models.BooleanField(default=False),
17+
),
18+
]

pythonpro/redirector/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class Redirect(models.Model):
88
updated = models.DateTimeField("Alterado em", auto_now=True)
99
slug = models.SlugField(primary_key=True)
1010
url = models.URLField(null=True, blank=True)
11+
use_javascript = models.BooleanField(default=False)
1112

1213

1314
class RedirectLink(models.Model):

pythonpro/redirector/tests/__init__.py

Whitespace-only changes.

pythonpro/redirector/tests.py renamed to pythonpro/redirector/tests/test_redirect_by_headers.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,13 @@
99

1010
@pytest.fixture
1111
def redirect(db):
12-
return mommy.make(Redirect)
12+
return mommy.make(Redirect, url='https://google.com')
1313

1414

1515
@pytest.fixture
1616
def resp(client, redirect):
1717
return client.get(reverse('redirector:redirect', kwargs={'slug': redirect.slug}), secure=True)
1818

1919

20-
def test_status_code(resp):
21-
assert resp.status_code == 200
22-
23-
24-
def test_redirect_js(resp, redirect):
25-
url = get_redirect_url(redirect)
26-
dj_assert_contains(resp, f'window.location.replace("{url}")')
20+
def test_status_code_should_return_302(resp):
21+
assert resp.status_code == 302
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import pytest
2+
from django.urls import reverse
3+
from model_mommy import mommy
4+
5+
from pythonpro.django_assertions import dj_assert_contains
6+
from pythonpro.redirector.models import Redirect
7+
from pythonpro.redirector.facade import get_redirect_url
8+
9+
10+
@pytest.fixture
11+
def redirect(db):
12+
return mommy.make(Redirect, url='https://google.com', use_javascript=True)
13+
14+
15+
def test_should_redirect_url_in_redirect_object(redirect):
16+
assert get_redirect_url(redirect) == redirect.url
17+
18+
19+
@pytest.fixture
20+
def resp(client, redirect):
21+
return client.get(reverse('redirector:redirect', kwargs={'slug': redirect.slug}), secure=True)
22+
23+
24+
def test_status_code_should_return_200(resp):
25+
assert resp.status_code == 200
26+
27+
28+
def test_should_redirect_js_contains_redirect_url(resp, redirect):
29+
dj_assert_contains(resp, f'window.location.replace("{redirect.url}")')
30+

pythonpro/redirector/views.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1-
from django.shortcuts import render
1+
from django.shortcuts import render, redirect as redirect_url
22

33
from pythonpro.redirector.models import Redirect
44
from pythonpro.redirector.facade import get_redirect_url
55

66

77
def redirect(request, slug: str):
88
redirect = Redirect.objects.get(slug=slug)
9-
ctx = {'url': get_redirect_url(redirect)}
9+
url = get_redirect_url(redirect)
10+
11+
if redirect.use_javascript is False:
12+
return redirect_url(url)
13+
14+
ctx = {'url': url}
1015
return render(request, 'redirector/redirect.html', ctx)

0 commit comments

Comments
 (0)