aboutsummaryrefslogtreecommitdiff
path: root/tests/integration/test_register.py
blob: af1e31348c452346056ba9c566ba61553226979d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import re

import fietsboek.email
from fietsboek import models

VERIFICATION_LINK_PATTERN = re.compile("http://example.com(/token/[A-Za-z0-9-]+)")


def test_registration_working(testapp, dbsession, route_path, monkeypatch):
    """Ensures that a user can register, including using the verification link."""
    mails = []
    def send_message(server_url, username, password, message):
        mails.append(message)

    monkeypatch.setattr(fietsboek.email, "send_message", send_message)

    registration = testapp.get(route_path('create-account'))
    form = registration.form
    form['email'] = 'foo-new@bar.com'
    form['name'] = 'The new Foo'
    form['password'] = 'foobarpassword'
    form['repeat-password'] = 'foobarpassword'
    response = form.submit().maybe_follow()

    assert b'A confirmation link has been sent' in response.body
    assert len(mails) == 1

    user = dbsession.execute(models.User.query_by_email('foo-new@bar.com')).scalar_one()
    assert not user.is_verified

    body = mails[0].get_body().get_content()
    token_path = VERIFICATION_LINK_PATTERN.search(body).group(1)
    testapp.get(token_path)

    assert user.is_verified


def test_registration_short_password(testapp, route_path):
    """Ensures that passwords that are too short are rejected."""
    registration = testapp.get(route_path('create-account'))
    form = registration.form
    form['email'] = 'foo-new@bar.com'
    form['name'] = 'The new Foo'
    form['password'] = 'foo'
    form['repeat-password'] = 'foo'
    response = form.submit().maybe_follow()

    assert re.search(
        b'<div class="alert alert-primary" role="alert">\\s*Password not long enough\\s*</div>',
        response.body,
    )


def test_registration_password_mismatch(testapp, route_path):
    """Ensures that passwords that do not match are rejected."""
    registration = testapp.get(route_path('create-account'))
    form = registration.form
    form['email'] = 'foo-new@bar.com'
    form['name'] = 'The new Foo'
    form['password'] = 'foobarfoobar'
    form['repeat-password'] = 'foobarfoo'
    response = form.submit().maybe_follow()

    assert re.search(
        b'<div class="alert alert-primary" role="alert">\\s*'
        b'Passwords don&#39;t match\\s*</div>',
        response.body,
    )