Soks 0.0.7 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.txt +2 -0
- data/README.txt +3 -2
- data/TODO.txt +31 -0
- data/bin/soks-create-wiki.rb +0 -1
- data/lib/authenticators.rb +30 -4
- data/lib/helpers/counter-helpers.rb +132 -0
- data/lib/helpers/default-helpers.rb +170 -169
- data/lib/helpers/mail2wiki-helper.rb +18 -22
- data/lib/helpers/maintenance-helpers.rb +149 -0
- data/lib/helpers/rss2wiki-helper.rb +7 -8
- data/lib/soks-model.rb +82 -54
- data/lib/soks-servlet.rb +126 -108
- data/lib/soks-storage.rb +74 -11
- data/lib/soks-utils.rb +77 -3
- data/lib/soks-view.rb +169 -103
- data/lib/soks.rb +5 -23
- data/templates/default/attachment/newpage.js +4 -13
- data/templates/default/attachment/print_stylesheet.css +2 -7
- data/templates/default/caches/readme.txt +1 -0
- data/templates/default/content/Api%20for%20classes%20to%20modify%20the%20wiki.textile +2 -0
- data/templates/default/content/Author.textile +4 -1
- data/templates/default/content/Automatic%20Summaries.textile +16 -53
- data/templates/default/content/Automatic%20linking%20between%20pages.textile +3 -3
- data/templates/default/content/{bug%3A%20competing%20edits.textile → Bug%3A%20Competing%20edits.textile} +9 -0
- data/templates/default/content/Bug%3A%20Does%20not%20make%20use%20of%20if%2Dmodified%2Dsince%20r.textile +2 -0
- data/templates/default/content/Bug%3A%20E%2Dmail%20addresses%20with%20hyphens%20not%20recognised.textile +17 -0
- data/templates/default/content/Bug%3A%20Email%20adresses%20in%20page%20titles%20cause%20incorrec.textile +3 -0
- data/templates/default/content/Bug%3A%20GEM%20limits%20title%20lengths.textile +3 -1
- data/templates/default/content/Bug%3A%20Memory%20leak.textile +13 -0
- data/templates/default/content/Bug%3A%20Pages%20that%20link%20here%20may%20not%20appear%20on%20r.textile +13 -0
- data/templates/default/content/Bug%3A%20Textile%20mishandles%20paragraphs.textile +4 -0
- data/templates/default/content/Bug%3A%20Unanticipated%20Rollbacks.textile +2 -0
- data/templates/default/content/Bug%3A%20notextile%20does%20not%20prevent%20page%20inserts.textile +2 -0
- data/templates/default/content/Home%20Page.textile +3 -1
- data/templates/default/content/How%20to%20administrate%20this%20wiki.textile +23 -13
- data/templates/default/content/How%20to%20change%20the%20way%20this%20wiki%20looks.textile +3 -1
- data/templates/default/content/How%20to%20export%20a%20site%20from%20this%20wiki.textile +22 -0
- data/templates/default/content/How%20to%20get%20the%20latest%20Soks%20from%20cvs.textile +2 -0
- data/templates/default/content/How%20to%20hack%20soks.textile +2 -0
- data/templates/default/content/How%20to%20import%20a%20site%20from%20instiki.textile +2 -0
- data/templates/default/content/{How%20to%20import%20data%20to%20this%20wiki.textile → How%20to%20import%20data.textile} +3 -7
- data/templates/default/content/How%20to%20install%20Soks.textile +2 -0
- data/templates/default/content/How%20to%20password%20protect%20your%20wiki.textile +21 -11
- data/templates/default/content/How%20to%20report%20a%20bug.textile +2 -1
- data/templates/default/content/How%20to%20upgrade%20soks.textile +22 -0
- data/templates/default/content/How%20to%20use%20the%20keyboard%20shortcuts.textile +2 -2
- data/templates/default/content/How%20to%20use%20this%20wiki.textile +3 -1
- data/templates/default/content/List%20of%20changes.textile +84 -118
- data/templates/default/content/News%3A%20Version%201%2D0%2D0%20released.textile +19 -0
- data/templates/default/content/Pages%20to%20include%20in%20the%20distribution.textile +51 -0
- data/templates/default/content/Per%20Wiki%20Templates.textile +2 -0
- data/templates/default/content/Planned%20Features.textile +30 -9
- data/templates/default/content/README.textile +3 -2
- data/templates/default/content/RSS%20feed.textile +1 -1
- data/templates/default/content/Recent%20changes%20to%20this%20site.textile +283 -0
- data/templates/default/content/SOKS%20features.textile +3 -0
- data/templates/default/content/Site%20Index.textile +202 -0
- data/templates/default/content/Soks%20Licence.textile +2 -0
- data/templates/default/content/Tag%3A%20Include%20this%20page%20in%20the%20distribution.textile +6 -0
- data/templates/default/start.rb +67 -123
- data/templates/default/version.txt +1 -1
- data/templates/default/views/Page_edit.rhtml +7 -7
- data/templates/default/views/{Page_search_results.rhtml → Page_find.rhtml} +9 -3
- data/templates/default/views/Page_linksfromrss.rhtml +24 -0
- data/templates/default/views/Page_listrss.rhtml +46 -0
- data/templates/default/views/Page_meta.rhtml +1 -1
- data/templates/default/views/Page_revision.rhtml +39 -0
- data/templates/default/views/Page_revisions.rhtml +13 -5
- data/templates/default/views/Page_rss.rhtml +8 -8
- data/templates/default/views/Page_view.rhtml +3 -3
- data/templates/default/views/UploadPage_edit.rhtml +8 -8
- data/templates/default/views/frame.rhtml +8 -8
- data/templates/default/views/messages.yaml +1 -0
- data/test/html/2006Mar.html +66 -0
- data/test/html/poignant.html +36 -0
- data/test/html/poignant.textile +36 -0
- data/test/mock-objects.rb +69 -0
- data/test/stress_url_calls.rb +33 -0
- data/test/stress_urls.txt +68 -0
- data/test/test_counter-helper.rb +158 -0
- data/test/test_soks-helper-maintenance.rb +106 -0
- data/test/test_soks-helpers.rb +104 -0
- data/test/test_soks-model.rb +144 -0
- data/test/test_soks-servlet.rb +231 -0
- data/test/test_soks-storage.rb +70 -31
- data/test/test_soks-utils.rb +112 -13
- data/test/test_soks-view.rb +141 -3
- metadata +38 -27
- data/templates/default/content/A%20page%20with%20an%20umlaut%20%F6%20in%20its%20title.textile +0 -1
- data/templates/default/content/All%20News.textile +0 -26
- data/templates/default/content/Bil%20Kleb.textile +0 -1
- data/templates/default/content/Bil.textile +0 -1
- data/templates/default/content/Bill%20Wood.textile +0 -3
- data/templates/default/content/Bug%3A%20RSS%20feed%20does%20not%20validate.textile +0 -10
- data/templates/default/content/Bug%3A%20Type%20a%20title%20here.textile +0 -31
- data/templates/default/content/Instructions%20and%20Howtos.textile +0 -21
- data/templates/default/content/Latest%20News.textile +0 -26
- data/templates/default/content/New%20Recent%20Changes%20class.textile +0 -68
- data/templates/default/content/New%20page%20templates%20or%20categories%20code.textile +0 -68
- data/templates/default/content/News%3A%20Version%200%2E0%2E6%20Released.textile +0 -13
- data/templates/default/content/Recent%20Blog%20Entries.textile +0 -5
- data/templates/default/content/Recent%20Changes%20to%20This%20Site.textile +0 -286
- data/templates/default/content/Ruby.textile +0 -9
- data/templates/default/content/Skorgu.textile +0 -3
- data/templates/default/content/ctrl%2Dn.textile +0 -1
- data/templates/default/content/let%20me%20know.textile +0 -1
- data/templates/default/content/sandbox.textile +0 -20
- data/templates/default/content/tamc.textile +0 -1
- data/templates/default/content/tamc2.textile +0 -1
@@ -0,0 +1,158 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'mock-objects'
|
4
|
+
require 'generator'
|
5
|
+
require 'helpers/counter-helpers'
|
6
|
+
|
7
|
+
class TestViewCountHelper < Test::Unit::TestCase
|
8
|
+
include TearDownableWiki
|
9
|
+
|
10
|
+
def test_notification
|
11
|
+
results = []
|
12
|
+
@wiki.watch_for(:page_viewed) { |*results| }
|
13
|
+
@view.render( 'test-page','view','test-viewer')
|
14
|
+
wait_for_queue_to_empty
|
15
|
+
assert_equal( :page_viewed, results[0] )
|
16
|
+
assert_equal( 'test-page', results[1].name )
|
17
|
+
assert_equal( 'view', results[2] )
|
18
|
+
assert_equal( 'test-viewer', results[3] )
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_total_count
|
22
|
+
count = ViewCountHelper.new(@wiki).counts
|
23
|
+
@view.render( 'test-page','view','test-viewer')
|
24
|
+
@view.render( 'test-page','view','test-viewer')
|
25
|
+
@view.render( 'test-page','view','test-viewer')
|
26
|
+
wait_for_queue_to_empty
|
27
|
+
assert_equal( 3, count.total )
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_page_count
|
31
|
+
count = ViewCountHelper.new(@wiki, ['view'], 'Popular Pages', :test_event, 2 ).counts
|
32
|
+
@wiki.revise( 'count1','1','t1')
|
33
|
+
@wiki.revise( 'count2','2','t2')
|
34
|
+
@wiki.revise( 'count3','3','t3')
|
35
|
+
3.times { @view.render( 'count1' ) }
|
36
|
+
3.times { @view.render( 'count1', 'edit' ) }
|
37
|
+
2.times { @view.render( 'count2' ) }
|
38
|
+
1.times { @view.render( 'count3' ) }
|
39
|
+
wait_for_queue_to_empty
|
40
|
+
p1,p2,p3 = @wiki.page('count1'), @wiki.page('count2'), @wiki.page('count3')
|
41
|
+
assert_equal( 3, count[p1.name] )
|
42
|
+
assert_equal( 2, count[p2.name] )
|
43
|
+
assert_equal( 1, count[p3.name] )
|
44
|
+
assert_equal( 6, count.total )
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_page_render
|
48
|
+
start_time = Time.now
|
49
|
+
test_page_count
|
50
|
+
@wiki.notify( :test_event )
|
51
|
+
wait_for_queue_to_empty
|
52
|
+
desired_content = "h1. Popular Pages\n\n"
|
53
|
+
desired_content << "Count since #{start_time}. Updated on #{@wiki.page('Popular Pages').revised_on}\n\n"
|
54
|
+
desired_content << "| count1 | 3 |\n"
|
55
|
+
desired_content << "| count2 | 2 |\n"
|
56
|
+
desired_content << "| 1 others | 1 |\n"
|
57
|
+
desired_content << "| *Total* | *6* |\n"
|
58
|
+
assert_equal( desired_content, @wiki.page('Popular Pages').content)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
class TestViewerCountHelper < Test::Unit::TestCase
|
63
|
+
include TearDownableWiki
|
64
|
+
|
65
|
+
def test_notification
|
66
|
+
results = []
|
67
|
+
@wiki.watch_for(:page_viewed) { |*results| }
|
68
|
+
@view.render( 'test-page','view','test-viewer')
|
69
|
+
wait_for_queue_to_empty
|
70
|
+
assert_equal( :page_viewed, results[0] )
|
71
|
+
assert_equal( 'test-page', results[1].name )
|
72
|
+
assert_equal( 'view', results[2] )
|
73
|
+
assert_equal( 'test-viewer', results[3] )
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_total_count
|
77
|
+
count = ViewerCountHelper.new(@wiki).counts
|
78
|
+
@view.render( 'test-page','view','test-viewer')
|
79
|
+
@view.render( 'test-page','view','test-viewer')
|
80
|
+
@view.render( 'test-page','view','test-viewer')
|
81
|
+
wait_for_queue_to_empty
|
82
|
+
assert_equal( 3, count.total )
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_viewer_count
|
86
|
+
count = ViewerCountHelper.new(@wiki, ['view'], 'Popular Pages', :test_event, 2 ).counts
|
87
|
+
@wiki.revise( 'count1','1','t1')
|
88
|
+
@wiki.revise( 'count2','2','t2')
|
89
|
+
@wiki.revise( 'count3','3','t3')
|
90
|
+
3.times { @view.render( 'count1', 'view', "Author1" ) }
|
91
|
+
3.times { @view.render( 'count1', 'edit', "Author1" ) }
|
92
|
+
2.times { @view.render( 'count2', 'view', "Author2" ) }
|
93
|
+
1.times { @view.render( 'count3', 'view', "Author3" ) }
|
94
|
+
wait_for_queue_to_empty
|
95
|
+
assert_equal( 3, count['Author1'] )
|
96
|
+
assert_equal( 2, count['Author2'] )
|
97
|
+
assert_equal( 1, count['Author3'] )
|
98
|
+
assert_equal( 6, count.total )
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_page_render
|
102
|
+
start_time = Time.now
|
103
|
+
test_viewer_count
|
104
|
+
@wiki.notify( :test_event )
|
105
|
+
wait_for_queue_to_empty
|
106
|
+
desired_content = "h1. Popular Pages\n\n"
|
107
|
+
desired_content << "Count since #{start_time}. Updated on #{@wiki.page('Popular Pages').revised_on}\n\n"
|
108
|
+
desired_content << "| Author1 | 3 |\n"
|
109
|
+
desired_content << "| Author2 | 2 |\n"
|
110
|
+
desired_content << "| 1 others | 1 |\n"
|
111
|
+
desired_content << "| *Total* | *6* |\n"
|
112
|
+
assert_equal( desired_content, @wiki.page('Popular Pages').content)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
class TestAuthorCountHelper < Test::Unit::TestCase
|
118
|
+
include TearDownableWiki
|
119
|
+
|
120
|
+
|
121
|
+
def test_total_count
|
122
|
+
count = AuthorCountHelper.new(@wiki,'Principal Authors', :test_event, 2 ).counts
|
123
|
+
@wiki.revise( 'count1','1','t1')
|
124
|
+
@wiki.revise( 'count2','2','t2')
|
125
|
+
@wiki.revise( 'count3','3','t3')
|
126
|
+
wait_for_queue_to_empty
|
127
|
+
assert_equal( 3, count.total )
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_author_count
|
131
|
+
count = AuthorCountHelper.new(@wiki,'Principal Authors', :test_event, 2 ).counts
|
132
|
+
@wiki.revise( 'count1','1','t1')
|
133
|
+
@wiki.revise( 'count2','1','t1')
|
134
|
+
@wiki.revise( 'count2','2','t2')
|
135
|
+
@wiki.revise( 'count3','1','t1')
|
136
|
+
@wiki.revise( 'count3','2','t2')
|
137
|
+
@wiki.revise( 'count3','3','t3')
|
138
|
+
wait_for_queue_to_empty
|
139
|
+
assert_equal( 3, count['t1'] )
|
140
|
+
assert_equal( 2, count['t2'] )
|
141
|
+
assert_equal( 1, count['t3'] )
|
142
|
+
assert_equal( 6, count.total )
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_page_render
|
146
|
+
start_time = Time.now
|
147
|
+
test_author_count
|
148
|
+
@wiki.notify( :test_event )
|
149
|
+
wait_for_queue_to_empty
|
150
|
+
desired_content = "h1. Principal Authors\n\n"
|
151
|
+
desired_content << "Count since #{start_time}. Updated on #{@wiki.page('Popular Pages').revised_on}\n\n"
|
152
|
+
desired_content << "| t1 | 3 |\n"
|
153
|
+
desired_content << "| t2 | 2 |\n"
|
154
|
+
desired_content << "| 1 others | 1 |\n"
|
155
|
+
desired_content << "| *Total* | *6* |\n"
|
156
|
+
assert_equal( desired_content, @wiki.page('Principal Authors').content)
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'mock-objects'
|
3
|
+
require 'helpers/maintenance-helpers'
|
4
|
+
|
5
|
+
class TestDeleteOldPages < Test::Unit::TestCase
|
6
|
+
include TearDownableWiki
|
7
|
+
|
8
|
+
def setup
|
9
|
+
super
|
10
|
+
DeleteOldPagesHelper.new( @wiki, :an_event, 2 )
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_delete_old_pages
|
14
|
+
assert_equal([],files)
|
15
|
+
@wiki.revise( 'home page', 'hello world', 'tamc2')
|
16
|
+
assert_equal( true, @wiki.exists?('home page') )
|
17
|
+
assert_equal( false, @wiki.page('home page').deleted? )
|
18
|
+
assert_equal(['home%20page.textile','home%20page.yaml'],files)
|
19
|
+
|
20
|
+
@wiki.delete( 'home page', 'tamc2')
|
21
|
+
@wiki.notify(:an_event )
|
22
|
+
wait_for_queue_to_empty
|
23
|
+
|
24
|
+
# Should be too soon
|
25
|
+
assert_equal( false, @wiki.exists?('home page') )
|
26
|
+
assert_equal( true, @wiki.page('home page').deleted? )
|
27
|
+
assert_equal(['home%20page.textile','home%20page.yaml'],files)
|
28
|
+
|
29
|
+
sleep( 2 )
|
30
|
+
@wiki.notify(:an_event )
|
31
|
+
wait_for_queue_to_empty
|
32
|
+
|
33
|
+
# Should now have deleted
|
34
|
+
assert_equal( false, @wiki.exists?('home page') )
|
35
|
+
assert_equal( false, @wiki.page('home page').deleted? )
|
36
|
+
assert_equal([],files)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
class TestDeleteOldRevisions < Test::Unit::TestCase
|
42
|
+
include TearDownableWiki
|
43
|
+
|
44
|
+
def setup
|
45
|
+
super
|
46
|
+
DeleteOldRevisionsHelper.new( @wiki, :an_event, 2, 2)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_delete_old_revisions
|
50
|
+
1.upto(5) do |i|
|
51
|
+
@wiki.revise('revision delete test page',"#{i}","test author")
|
52
|
+
end
|
53
|
+
page = @wiki.page('revision delete test page')
|
54
|
+
assert_equal(5,page.revisions.size)
|
55
|
+
|
56
|
+
@wiki.notify(:an_event )
|
57
|
+
wait_for_queue_to_empty
|
58
|
+
|
59
|
+
# Should be too soon
|
60
|
+
assert_equal(5,page.revisions.size)
|
61
|
+
|
62
|
+
sleep( 2 )
|
63
|
+
@wiki.notify(:an_event )
|
64
|
+
wait_for_queue_to_empty
|
65
|
+
|
66
|
+
# Should now have turned last 3 revisions into one
|
67
|
+
assert_equal(3,page.revisions.size)
|
68
|
+
assert_equal('Automatic Revision Remover',page.revisions.first.author)
|
69
|
+
assert_equal('3',page.revisions.first.content)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class TestMergeOldRevisions < Test::Unit::TestCase
|
74
|
+
include TearDownableWiki
|
75
|
+
|
76
|
+
def setup
|
77
|
+
super
|
78
|
+
MergeOldRevisionsHelper.new( @wiki, :an_event, 2, 10)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_merge_old_revisions
|
82
|
+
1.upto(3) do |i|
|
83
|
+
@wiki.revise('revision merge test page',"#{i}","author1")
|
84
|
+
end
|
85
|
+
3.upto(5) do |i|
|
86
|
+
@wiki.revise('revision merge test page',"#{i}","author2")
|
87
|
+
end
|
88
|
+
page = @wiki.page('revision merge test page')
|
89
|
+
assert_equal(5,page.revisions.size)
|
90
|
+
|
91
|
+
@wiki.notify(:an_event )
|
92
|
+
wait_for_queue_to_empty
|
93
|
+
|
94
|
+
# Should be too soon
|
95
|
+
assert_equal(5,page.revisions.size)
|
96
|
+
|
97
|
+
sleep( 2 )
|
98
|
+
@wiki.notify(:an_event )
|
99
|
+
wait_for_queue_to_empty
|
100
|
+
|
101
|
+
# Should now have merged each author's revisions
|
102
|
+
assert_equal(2,page.revisions.size)
|
103
|
+
assert_equal('3',page.revision(0).content)
|
104
|
+
assert_equal('5',page.revision(1).content)
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'mock-objects'
|
4
|
+
require 'helpers/default-helpers'
|
5
|
+
require 'generator'
|
6
|
+
|
7
|
+
class TestRecentChanges < Test::Unit::TestCase
|
8
|
+
include TearDownableWiki
|
9
|
+
|
10
|
+
def test_detect_change
|
11
|
+
rc = AutomaticRecentChanges.new( @wiki)
|
12
|
+
@wiki.revise( 'testpage','B','normal person')
|
13
|
+
@wiki.revise( 'testpage2','A','normal person')
|
14
|
+
wait_for_queue_to_empty
|
15
|
+
assert_equal(2, rc.pages_in_summary.to_a.size)
|
16
|
+
assert_match( /normal person/i, rctextile )
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_merge_author_change
|
20
|
+
rc = AutomaticRecentChanges.new( @wiki)
|
21
|
+
@wiki.revise( 'testpage','B','normal person')
|
22
|
+
@wiki.revise( 'testpage','A','normal person')
|
23
|
+
wait_for_queue_to_empty
|
24
|
+
assert_equal(1, rc.pages_in_summary.to_a.size)
|
25
|
+
assert_match( /normal person/i, rctextile )
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_dont_merge_different_authors_change
|
29
|
+
@rc = AutomaticRecentChanges.new( @wiki)
|
30
|
+
@wiki.revise( 'testpage','B','p1')
|
31
|
+
@wiki.revise( 'testpage','A','p2')
|
32
|
+
wait_for_queue_to_empty
|
33
|
+
assert_equal(2, @rc.pages_in_summary.to_a.size)
|
34
|
+
assert_match( /p1/i, rctextile )
|
35
|
+
assert_match( /p2/i, rctextile )
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_exclude_helpers_initially
|
39
|
+
@wiki.revise( 'testpage','B','normal person')
|
40
|
+
@wiki.revise( 'testpage2','content moved from','AutomaticPageMover')
|
41
|
+
@wiki.revise( 'testpage2','A','normal person')
|
42
|
+
rc = AutomaticRecentChanges.new( @wiki)
|
43
|
+
assert_equal(['recent changes to this site','testpage','testpage2'],@wiki.map{|name,page| name }.sort)
|
44
|
+
assert_equal(2, rc.pages_in_summary.to_a.size)
|
45
|
+
assert_match( /normal person/i, rctextile )
|
46
|
+
assert_no_match( /AutomaticPageMover/i, rctextile )
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_exclude_helpers_later
|
50
|
+
rc = AutomaticRecentChanges.new( @wiki)
|
51
|
+
@wiki.revise( 'testpage','B','normal person')
|
52
|
+
@wiki.revise( 'testpage2','content moved from','AutomaticPageMover')
|
53
|
+
@wiki.revise( 'testpage2','A','normal person')
|
54
|
+
wait_for_queue_to_empty
|
55
|
+
assert_equal(['recent changes to this site','testpage','testpage2'],@wiki.map{|name,page| name }.sort)
|
56
|
+
assert_equal(2, rc.pages_in_summary.to_a.size)
|
57
|
+
assert_match( /normal person/i, rctextile )
|
58
|
+
assert_no_match( /AutomaticPageMover/i, rctextile )
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_change_in_page_capitalisation
|
62
|
+
rc = AutomaticRecentChanges.new( @wiki)
|
63
|
+
@wiki.revise( 'testpage','B','normal person')
|
64
|
+
wait_for_queue_to_empty
|
65
|
+
assert_match( /\[\[testpage\]\]/, rctextile )
|
66
|
+
assert_no_match( /\[\[TestPage\]\]/, rctextile )
|
67
|
+
@wiki.revise( 'TestPage','C','normal person')
|
68
|
+
wait_for_queue_to_empty
|
69
|
+
assert_match( /\[\[TestPage\]\]/, rctextile )
|
70
|
+
assert_equal( 1, count_matches( /\[\[TestPage\]\]/ ) )
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def count_matches( regexp )
|
76
|
+
count = 0
|
77
|
+
rctextile.gsub( regexp ) { |m| count += 1 }
|
78
|
+
count
|
79
|
+
end
|
80
|
+
|
81
|
+
def rctextile
|
82
|
+
@wiki.page("Recent Changes to This Site").textile
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class TestCalendar < Test::Unit::TestCase
|
87
|
+
include TearDownableWiki
|
88
|
+
|
89
|
+
def setup
|
90
|
+
super
|
91
|
+
AutomaticCalendar.new( @wiki )
|
92
|
+
AutomaticUpdateCrossLinks.new( @wiki, @view )
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_2006_Mar_html
|
96
|
+
wait_for_queue_to_empty
|
97
|
+
page = @wiki.page('2006 Mar')
|
98
|
+
desired_html = IO.readlines('test/html/2006Mar.html')
|
99
|
+
actual_html = @view.redcloth( page ).split("\n").map { |l| "#{l}\n" }
|
100
|
+
SyncEnumerator.new(desired_html,actual_html).each do |desired,actual|
|
101
|
+
assert_equal( desired, actual )
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'mock-objects'
|
3
|
+
require 'soks-model'
|
4
|
+
|
5
|
+
class TestRevision < Test::Unit::TestCase
|
6
|
+
include TearDownableWiki
|
7
|
+
|
8
|
+
def test_content
|
9
|
+
page = Page.new('test page')
|
10
|
+
page.revise('1','new author' )
|
11
|
+
revision = page.revisions.last
|
12
|
+
page.revise('2','new author' )
|
13
|
+
page.revise('3','new author' )
|
14
|
+
assert_equal('1', revision.content )
|
15
|
+
assert_equal('', revision.previous_content )
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_revision_after
|
19
|
+
1.upto(5) { |i| @wiki.revise 'revision test', "#{i}", 'tamc2' }
|
20
|
+
page = @wiki.page 'revision test'
|
21
|
+
assert_equal( page.revision(1), page.revision(0).following_revision)
|
22
|
+
assert_equal( page.revision(2), page.revision(1).following_revision )
|
23
|
+
assert_equal( nil, page.revision(4).following_revision )
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_revision_before
|
27
|
+
1.upto(5) { |i| @wiki.revise 'revision test', "#{i}", 'tamc2' }
|
28
|
+
page = @wiki.page 'revision test'
|
29
|
+
assert_equal( page.revision(0), page.revision(1).previous_revision)
|
30
|
+
assert_equal( page.revision(1), page.revision(2).previous_revision )
|
31
|
+
assert_equal( nil, page.revision(0).previous_revision )
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class TestPage < Test::Unit::TestCase
|
36
|
+
include TearDownableWiki
|
37
|
+
|
38
|
+
def test_empty
|
39
|
+
page = Page.empty('test page')
|
40
|
+
assert_equal( 'test page', page.name )
|
41
|
+
assert_equal( true, page.empty? )
|
42
|
+
assert_equal( false, page.deleted? )
|
43
|
+
assert_equal( "[[Create test page => /edit/test page ]]", page.textile )
|
44
|
+
assert_equal( "Type what you want here and click save", page.content )
|
45
|
+
assert_equal( 'NoOne', page.author )
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_new
|
49
|
+
page = Page.new('test page')
|
50
|
+
assert_equal( 'test page', page.name )
|
51
|
+
assert_equal( true, page.empty? )
|
52
|
+
assert_equal( false, page.deleted? )
|
53
|
+
assert_equal( "[[Create test page => /edit/test page ]]", page.textile )
|
54
|
+
assert_equal( '', page.content )
|
55
|
+
#assert_equal( '', page.author )
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_revision
|
59
|
+
page = Page.new('test page')
|
60
|
+
page.revise('new content','new author' )
|
61
|
+
assert_equal( 'test page', page.name )
|
62
|
+
assert_equal( false, page.empty? )
|
63
|
+
assert_equal( false, page.deleted? )
|
64
|
+
assert_equal( "new content", page.textile )
|
65
|
+
assert_equal( 'new content', page.content )
|
66
|
+
assert_equal( 'new author', page.author )
|
67
|
+
assert_equal( [[['+',0,'new content']]], page.changes )
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_rollback
|
71
|
+
page = Page.new('test page')
|
72
|
+
page.revise('1','new author' )
|
73
|
+
page.revise('2','new author' )
|
74
|
+
page.revise('3','new author' )
|
75
|
+
assert_equal( 3, page.revisions.size )
|
76
|
+
assert_equal( '3', page.content )
|
77
|
+
page.rollback( 0, 'rollbacker' )
|
78
|
+
assert_equal( 4, page.revisions.size )
|
79
|
+
assert_equal( '1', page.content )
|
80
|
+
assert_equal( 'rollbacker', page.author )
|
81
|
+
assert_equal( [[['-',0,'3'],['+',0,'1']]], page.changes )
|
82
|
+
page.rollback( -1, 'rollbacker' )
|
83
|
+
assert_equal( 5, page.revisions.size )
|
84
|
+
assert_equal( 'page deleted', page.content )
|
85
|
+
assert_equal( true, page.deleted? )
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
class TestWiki < Test::Unit::TestCase
|
90
|
+
include TearDownableWiki
|
91
|
+
|
92
|
+
def test_change_page_caps()
|
93
|
+
assert_equal([], files )
|
94
|
+
@wiki.revise( 'home page', 'hello world', 'tamc2' )
|
95
|
+
assert_equal( true, @wiki.exists?('home page') )
|
96
|
+
assert_equal(['home%20page.textile','home%20page.yaml'],files)
|
97
|
+
@wiki.revise( 'Home Page', 'hello world', 'tamc2' )
|
98
|
+
assert_equal( true, @wiki.exists?('home page') )
|
99
|
+
assert_equal(['Home%20Page.textile','Home%20Page.yaml'],files)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_page_delete_by_revising
|
103
|
+
assert_equal([],files)
|
104
|
+
@wiki.revise( 'home page', 'hello world', 'tamc2')
|
105
|
+
assert_equal( true, @wiki.exists?('home page') )
|
106
|
+
assert_equal( false, @wiki.page('home page').deleted? )
|
107
|
+
assert_equal(['home%20page.textile','home%20page.yaml'],files)
|
108
|
+
@wiki.revise( 'home page', $MESSAGES[:page_deleted], 'tamc2')
|
109
|
+
assert_equal( false, @wiki.exists?('home page') )
|
110
|
+
assert_equal( true, @wiki.page('home page').deleted? )
|
111
|
+
assert_equal(['home%20page.textile','home%20page.yaml'],files)
|
112
|
+
assert_equal( $MESSAGES[:page_deleted], @wiki.page('home page').content )
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
def test_page_delete_by_method
|
117
|
+
assert_equal([],files)
|
118
|
+
@wiki.revise( 'home page', 'hello world', 'tamc2')
|
119
|
+
assert_equal( true, @wiki.exists?('home page') )
|
120
|
+
assert_equal( false, @wiki.page('home page').deleted? )
|
121
|
+
assert_equal(['home%20page.textile','home%20page.yaml'],files)
|
122
|
+
@wiki.delete( 'home page', 'tamc2')
|
123
|
+
assert_equal( false, @wiki.exists?('home page') )
|
124
|
+
assert_equal( true, @wiki.page('home page').deleted? )
|
125
|
+
assert_equal(['home%20page.textile','home%20page.yaml'],files)
|
126
|
+
assert_equal( $MESSAGES[:page_deleted], @wiki.page('home page').content )
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_page_delete_permanently
|
130
|
+
assert_equal([],files)
|
131
|
+
@wiki.revise( 'home page', 'hello world', 'tamc2')
|
132
|
+
assert_equal( true, @wiki.exists?('home page') )
|
133
|
+
assert_equal( false, @wiki.page('home page').deleted? )
|
134
|
+
assert_equal(['home%20page.textile','home%20page.yaml'],files)
|
135
|
+
|
136
|
+
assert_raise( RuntimeError ) { @wiki.wipe_from_disk( 'Home Page' ) }
|
137
|
+
|
138
|
+
@wiki.delete( 'Home Page', 'tamc2' )
|
139
|
+
@wiki.wipe_from_disk( 'Home Page' )
|
140
|
+
assert_equal( false, @wiki.exists?('home page') )
|
141
|
+
assert_equal( false, @wiki.page('home page').deleted? )
|
142
|
+
assert_equal([],files)
|
143
|
+
end
|
144
|
+
end
|