tracking code: don't break on anonymous access after evolutions done as user
This commit is contained in:
parent
01a4b964aa
commit
7d2bfa77e0
|
@ -309,6 +309,84 @@ def test_form_tracking_code():
|
|||
resp = resp.forms[0].submit()
|
||||
assert formdef.data_class().get(formdata_id).evolution[-1].comment == 'hello world'
|
||||
|
||||
|
||||
def test_form_tracking_code_as_user():
|
||||
user = create_user()
|
||||
formdef = create_formdef()
|
||||
formdef.data_class().wipe()
|
||||
formdef.fields = [fields.StringField(id='0', label='string')]
|
||||
formdef.enable_tracking_codes = True
|
||||
formdef.store()
|
||||
|
||||
resp = login(get_app(pub), username='foo', password='foo').get('/test/')
|
||||
assert '<h3>Tracking code</h3>' in resp.body
|
||||
resp.forms[0]['f0'] = 'foobar'
|
||||
resp = resp.forms[0].submit('submit')
|
||||
tracking_code = None
|
||||
for a_tag in resp.html.findAll('a'):
|
||||
if 'code/' in a_tag['href']:
|
||||
tracking_code = a_tag.text
|
||||
break
|
||||
assert tracking_code is not None
|
||||
|
||||
assert formdef.data_class().count() == 1
|
||||
assert formdef.data_class().select()[0].is_draft()
|
||||
assert formdef.data_class().select()[0].tracking_code == tracking_code
|
||||
assert formdef.data_class().select()[0].data['0'] == 'foobar'
|
||||
|
||||
# check we can load the formdata as a draft
|
||||
resp = login(get_app(pub), username='foo', password='foo').get('/')
|
||||
resp.forms[0]['code'] = tracking_code
|
||||
resp = resp.forms[0].submit()
|
||||
assert resp.location == 'http://example.net/code/%s/load' % tracking_code
|
||||
resp = resp.follow()
|
||||
assert resp.location == 'http://example.net/test/1'
|
||||
resp = resp.follow()
|
||||
assert resp.location.startswith('http://example.net/test/?mt=')
|
||||
resp = resp.follow()
|
||||
resp = resp.forms[0].submit('previous')
|
||||
assert resp.forms[0]['f0'].value == 'foobar'
|
||||
|
||||
# check submitted form keeps the tracking code
|
||||
resp.forms[0]['f0'] = 'barfoo'
|
||||
resp = resp.forms[0].submit('submit') # -> confirmation page
|
||||
resp = resp.forms[0].submit('submit') # -> done
|
||||
resp = resp.follow()
|
||||
assert 'barfoo' in resp.body
|
||||
assert formdef.data_class().count() == 1 # check the draft one has been removed
|
||||
assert formdef.data_class().select()[0].tracking_code == tracking_code
|
||||
assert formdef.data_class().select()[0].user_id == user.id
|
||||
assert formdef.data_class().select()[0].status == 'wf-new'
|
||||
assert formdef.data_class().select()[0].data['0'] == 'barfoo'
|
||||
formdata_id = formdef.data_class().select()[0].id
|
||||
|
||||
# check we can still go back to it
|
||||
resp = login(get_app(pub), username='foo', password='foo').get('/')
|
||||
resp.forms[0]['code'] = tracking_code
|
||||
resp = resp.forms[0].submit()
|
||||
assert resp.location == 'http://example.net/code/%s/load' % tracking_code
|
||||
resp = resp.follow()
|
||||
assert resp.location == 'http://example.net/test/%s' % formdata_id
|
||||
resp = resp.follow()
|
||||
resp = resp.follow()
|
||||
assert 'form_comment' in resp.body # makes sure user is treated as submitter
|
||||
resp.forms[0]['comment'] = 'hello world'
|
||||
resp = resp.forms[0].submit()
|
||||
assert formdef.data_class().get(formdata_id).evolution[-1].comment == 'hello world'
|
||||
|
||||
# and check we can also get back to it as anonymous
|
||||
app = get_app(pub)
|
||||
resp = app.get('/')
|
||||
resp.forms[0]['code'] = tracking_code
|
||||
resp = resp.forms[0].submit()
|
||||
assert resp.location == 'http://example.net/code/%s/load' % tracking_code
|
||||
resp = resp.follow()
|
||||
assert resp.location == 'http://example.net/test/%s' % formdata_id
|
||||
resp = resp.follow()
|
||||
resp = resp.follow()
|
||||
assert 'form_comment' in resp.body # makes sure user is treated as submitter
|
||||
|
||||
|
||||
def test_form_tracking_code_email():
|
||||
formdef = create_formdef()
|
||||
formdef.data_class().wipe()
|
||||
|
|
|
@ -236,7 +236,7 @@ class FormStatusPage(Directory):
|
|||
evo_author = None
|
||||
if evo.who == '_submitter':
|
||||
evo_author = _('Original Submitter')
|
||||
if self.filled.is_submitter(get_request().user):
|
||||
if get_request().user and self.filled.is_submitter(get_request().user):
|
||||
evo_author = get_request().user.display_name
|
||||
elif self.filled.user_id:
|
||||
try:
|
||||
|
|
Loading…
Reference in New Issue