Project

General

Profile

Download (2.49 KB) Statistics
| Branch: | Tag: | Revision:

root / tests / test_subscribers.py @ e01c978b

1
from __future__ import unicode_literals
2

    
3
import pytest
4
from webtest import Upload
5

    
6
from django.utils.text import slugify
7
from django.urls import reverse
8
from django.contrib.auth import get_user_model
9

    
10
from corbo.models import Category, Subscription
11

    
12
pytestmark = pytest.mark.django_db
13

    
14
CATEGORIES = (u'Alerts',)
15

    
16
CSV_CONTENT = """foo@example.net, Foo,
17
john.doe@example.net, John Doe,
18
bar@localhost, Bar,
19
"""
20

    
21

    
22
@pytest.fixture
23
def categories():
24
    categories = []
25
    for category in CATEGORIES:
26
        c, created = Category.objects.get_or_create(name=category, slug=slugify(category))
27
        categories.append(c)
28
    return categories
29

    
30
@pytest.fixture
31
def admin():
32
    User = get_user_model()
33
    admin = User.objects.create_superuser(username='admin',
34
                password='password', email='admin@example.net')
35
    return admin
36

    
37
def login(app, username='admin', password='password'):
38
    login_page = app.get('/login/')
39
    login_form = login_page.forms[0]
40
    login_form['username'] = username
41
    login_form['password'] = password
42
    resp = login_form.submit()
43
    assert resp.status_int == 302
44
    return app
45

    
46
def test_subscribe_from_csv(app, admin, categories):
47
    app = login(app)
48
    for c in categories:
49
        page = app.get(reverse('subscriptions-import', kwargs={'slug': c.slug}))
50
        form = page.form
51
        form['subscribers'] = Upload('users.csv', CSV_CONTENT.encode('utf-8'))
52
        res = form.submit()
53
        assert res.status_code == 302
54
        assert Subscription.objects.filter(category=c).count() == len(CSV_CONTENT.splitlines())
55

    
56
def test_subscribe_from_csv_with_empty_lines(app, admin, categories):
57
    app = login(app)
58
    content = CSV_CONTENT + '\n\n\n'
59
    for c in categories:
60
        page = app.get(reverse('subscriptions-import', kwargs={'slug': c.slug}))
61
        form = page.form
62
        form['subscribers'] = Upload('users.csv', content.encode('utf-8'))
63
        res = form.submit()
64
        assert res.status_code == 302
65
        assert Subscription.objects.filter(category=c).count() == len(CSV_CONTENT.splitlines())
66

    
67
def test_subscribe_with_invalid_email(app, admin, categories):
68
    app = login(app)
69
    content = CSV_CONTENT + '\nwrong, Wrong user,'
70
    for category in categories:
71
        page = app.get(reverse('subscriptions-import', kwargs={'slug': category.slug}))
72
        form = page.form
73
        form['subscribers'] = Upload('users.csv', content.encode('utf-8'))
74
        page = form.submit()
75
        assert page.status_code == 200
76
        page.mustcontain('Invalid email address at line')
(10-10/10)