forked from github/kensanata.oddmuse
Drafts are saved using the username as filename. This must also be encoded and decoded correctly. Because of NFC and NFD issues on Mac HFS, an appropriate normalization was added to mac.pl. As the username is also part of the cookie, this showed that the Cookie content wasn't being encoded correctly, so that was fixed, too.
84 lines
3.1 KiB
Perl
84 lines
3.1 KiB
Perl
# Copyright (C) 2006, 2012 Alex Schroeder <alex@gnu.org>
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify it under
|
|
# the terms of the GNU General Public License as published by the Free Software
|
|
# Foundation; either version 3 of the License, or (at your option) any later
|
|
# version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along with
|
|
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
require 't/test.pl';
|
|
package OddMuse;
|
|
use Test::More tests => 26;
|
|
use utf8;
|
|
|
|
clear_pages();
|
|
|
|
# No draft button by default
|
|
test_page_negative(get_page('action=edit id=HomePage'),
|
|
'Save Draft');
|
|
|
|
# Adding the module adds button to edit page; no draft saved
|
|
add_module('drafts.pl');
|
|
$page = get_page('action=edit id=HomePage');
|
|
test_page($page, 'Save Draft');
|
|
test_page_negative($page, 'action=draft');
|
|
|
|
# Saving draft uses 204 No Content status
|
|
test_page(get_page('title=HomePage text=foo username=Alex Draft=1'),
|
|
'Status: 204');
|
|
|
|
# Visiting the main page now shows a draft available, if the username
|
|
# matches
|
|
test_page_negative(get_page('FooBar'), 'action=draft', 'Recover Draft');
|
|
test_page(get_page('action=browse id=FooBar username=Alex'),
|
|
'action=draft', 'Recover Draft');
|
|
|
|
# No username, no draft
|
|
test_page(get_page('action=draft'), 'No draft available to recover',
|
|
'Status: 404');
|
|
|
|
# Recover draft shows original content with username
|
|
test_page(get_page('action=draft username=Alex'), 'Preview', 'foo', 'HomePage');
|
|
|
|
# Another recover draft shows nothing
|
|
test_page(get_page('action=draft username=Alex'), 'No draft available to recover',
|
|
'Status: 404');
|
|
|
|
# Saving second draft
|
|
get_page('title=HomePage text=foo username=Alex Draft=1');
|
|
get_page('title=HomePage text=foo username=.berta Draft=1');
|
|
|
|
# Ordinary maintenance deletes nothing
|
|
$page = get_page('action=maintain');
|
|
test_page($page, 'was kept');
|
|
test_page_negative($page, 'was deleted');
|
|
|
|
# Date back one file
|
|
utime($Now-1300000, $Now-1300000, "$DraftDir/.berta");
|
|
# Second maintenance requires admin password and deletes one draft
|
|
$page = get_page('action=maintain pwd=foo');
|
|
test_page($page, 'Alex was last modified [^<>]* and was kept');
|
|
test_page($page, '.berta was last modified [^<>]* and was deleted');
|
|
ok(-f "$DraftDir/Alex", "$DraftDir/Alex is still there");
|
|
ok(! -f "$DraftDir/.berta", "$DraftDir/.berta is gone");
|
|
|
|
# Date back the other file
|
|
utime($Now-1300000, $Now-1300000, "$DraftDir/Alex");
|
|
|
|
# Second maintenance requires admin password and deletes one draft
|
|
test_page(get_page('action=maintain pwd=foo'), 'Alex was last modified [^<>]* ago and was deleted');
|
|
ok(! -f "$DraftDir/.berta", "$DraftDir/Alex is gone");
|
|
|
|
# Testing UTF-8
|
|
# Saving draft uses 204 No Content status
|
|
test_page(get_page('title=HomePage text=foo username=Schröder Draft=1'),
|
|
'Status: 204', 'username%251eSchr%C3%B6der');
|
|
test_page(get_page('action=maintain pwd=foo'),
|
|
'Schröder was last modified [^<>]* and was kept');
|