Projet

Général

Profil

Télécharger (4,12 ko) Statistiques
| Branche: | Tag: | Révision:

root / tests / test_user_pages.py @ a9ee9454

1
import os
2
import shutil
3
import StringIO
4
import time
5

    
6
import pytest
7

    
8
from quixote import cleanup, get_publisher
9
from wcs.qommon import errors, sessions
10
from wcs.qommon.ident.password_accounts import PasswordAccount
11
from wcs.qommon.http_request import HTTPRequest
12
from wcs.qommon.template import get_current_theme
13
from wcs.categories import Category
14
from wcs.roles import Role
15
from wcs.workflows import Workflow
16
from wcs.formdef import FormDef
17
from wcs import fields
18

    
19
from utilities import get_app, login, create_temporary_pub
20

    
21
def setup_module(module):
22
    cleanup()
23

    
24
    global pub
25

    
26
    pub = create_temporary_pub()
27

    
28
    req = HTTPRequest(None, {'SCRIPT_NAME': '/', 'SERVER_NAME': 'example.net'})
29
    pub.set_app_dir(req)
30
    pub.cfg['identification'] = {'methods': ['password']}
31
    pub.write_cfg()
32

    
33
def create_user():
34
    if pub.user_class.has_key('user'):
35
        return
36
    user1 = pub.user_class(name='user')
37
    user1.id = 'admin'
38
    user1.is_admin = False
39
    user1.store()
40

    
41
    account1 = PasswordAccount(id='user')
42
    account1.set_password('user')
43
    account1.user_id = user1.id
44
    account1.store()
45

    
46
    pub.cfg['identification'] = {'methods': ['password']}
47
    pub.write_cfg()
48

    
49
    return user1
50

    
51
def create_formdef():
52
    FormDef.wipe()
53
    formdef = FormDef()
54
    formdef.name = 'test'
55
    formdef.fields = []
56
    formdef.store()
57
    return formdef
58

    
59
def teardown_module(module):
60
    shutil.rmtree(pub.APP_DIR)
61

    
62
def test_with_user():
63
    user = create_user()
64
    app = login(get_app(pub), username='user', password='user')
65
    resp = app.get('/', status=200)
66
    resp = app.get('/myspace/', status=200)
67

    
68
def test_myspace_with_user_forms():
69
    user = create_user()
70
    formdef = create_formdef()
71

    
72
    cat = Category(name='cat')
73
    cat.store()
74
    formdef.category_id = cat.id
75
    formdef.enable_tracking_codes = True
76

    
77
    wf = Workflow(name='status')
78
    st1 = wf.add_status('Status1', 'st1')
79
    wf.store()
80
    formdef.workflow_id = wf.id
81
    formdef.store()
82

    
83
    formdef.data_class().wipe()
84
    formdata = formdef.data_class()()
85
    formdata.user_id = user.id
86
    formdata.status = 'wf-st1'
87
    formdata.data = {}
88
    formdata.store()
89
    draft = formdef.data_class()()
90
    draft.user_id = user.id
91
    draft.status = 'draft'
92
    draft.data = {}
93
    draft.store()
94

    
95
    app = login(get_app(pub), username='user', password='user')
96
    resp = app.get('/myspace/')
97
    assert formdata.id != draft.id
98
    assert '<a href="test/%s/"' % formdata.id in resp
99
    assert '<a href="test/%s"' % draft.id in resp
100
    resp = app.get('/test/%s' % formdata.id)
101
    resp.status_int = 200
102
    resp = app.get('/test/%s' % draft.id, status=302)
103
    resp = resp.follow(status=302)
104
    resp.location.startswith('http://example.net/test/?mt=')
105
    resp = resp.follow(status=302)
106
    resp.location.startswith('http://example.net/cat/test/?mt=')
107
    resp = resp.follow(status=200)
108

    
109
    # disable formdef: formdatas are still visible and accessible, drafts are not
110
    formdef.disabled = True
111
    formdef.store()
112
    resp = app.get('/myspace/')
113
    assert formdata.id != draft.id
114
    assert '<a href="test/%s/"' % formdata.id in resp
115
    assert not '<a href="test/%s"' % draft.id in resp
116
    resp = app.get('/cat/test/%s' % formdata.id)
117
    resp.status_int = 200
118
    resp = app.get('/cat/test/%s' % draft.id, status=302)
119
    resp = resp.follow(status=302)
120
    resp.location.startswith('http://example.net/test/?mt=')
121
    resp = resp.follow(status=403)
122

    
123
def test_form_category_redirection():
124
    Category.wipe()
125
    cat = Category(name='baz')
126
    cat.store()
127

    
128
    FormDef.wipe()
129
    formdef = FormDef()
130
    formdef.name = 'foobar'
131
    formdef.category_id = cat.id
132
    formdef.fields = []
133
    formdef.store()
134

    
135
    # check we get a redirection to /category/formdef/
136
    resp = get_app(pub).get('/foobar/')
137
    assert resp.location.endswith('/baz/foobar/')
138

    
139
def test_form_and_category_same_slug():
140
    Category.wipe()
141
    cat = Category(name='foobar')
142
    cat.store()
143

    
144
    FormDef.wipe()
145
    formdef = FormDef()
146
    formdef.name = 'foobar'
147
    formdef.category_id = cat.id
148
    formdef.fields = []
149
    formdef.store()
150

    
151
    # check we get to the form, not the category
152
    resp = get_app(pub).get('/foobar/')
153
    assert resp.form
(4-4/5)