git-remote-mediawiki (t9363): test 'File:' import and export
Signed-off-by: Pavel Volek <Pavel.Volek@ensimag.imag.fr> Signed-off-by: NGUYEN Kim Thuat <Kim-Thuat.Nguyen@ensimag.imag.fr> Signed-off-by: ROUCHER IGLESIAS Javier <roucherj@ensimag.imag.fr> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
NGUYEN Kim Thuat committed
Jul 6, 2012 at 12:03 UTC
64137fd1cfb46db999f9e4740d7a0983da6264fb
1 file changed
+198
contrib/mw-to-git/t/t9363-mw-to-git-export-import.sh
new
+198
@@ -0,0 +1,198 @@
1
+#!/bin/sh
2
+#
3
+# Copyright (C) 2012
4
+# Charles Roussel <charles.roussel@ensimag.imag.fr>
5
+# Simon Cathebras <simon.cathebras@ensimag.imag.fr>
6
+# Julien Khayat <julien.khayat@ensimag.imag.fr>
7
+# Guillaume Sasdy <guillaume.sasdy@ensimag.imag.fr>
8
+# Simon Perrat <simon.perrat@ensimag.imag.fr>
9
+#
10
+# License: GPL v2 or later
11
+
12
+# tests for git-remote-mediawiki
13
+
14
+test_description='Test the Git Mediawiki remote helper: git push and git pull simple test cases'
15
+
16
+. ./test-gitmw-lib.sh
17
+. $TEST_DIRECTORY/test-lib.sh
18
+
19
+
20
+test_check_precond
21
+
22
+
23
+test_git_reimport () {
24
+ git -c remote.origin.dumbPush=true push &&
25
+ git -c remote.origin.mediaImport=true pull --rebase
26
+}
27
+
28
+# Don't bother with permissions, be administrator by default
29
+test_expect_success 'setup config' '
30
+ git config --global remote.origin.mwLogin WikiAdmin &&
31
+ git config --global remote.origin.mwPassword AdminPass &&
32
+ test_might_fail git config --global --unset remote.origin.mediaImport
33
+'
34
+
35
+test_expect_success 'git push can upload media (File:) files' '
36
+ wiki_reset &&
37
+ git clone mediawiki::'"$WIKI_URL"' mw_dir &&
38
+ (
39
+ cd mw_dir &&
40
+ echo "hello world" >Foo.txt &&
41
+ git add Foo.txt &&
42
+ git commit -m "add a text file" &&
43
+ git push &&
44
+ "$PERL_PATH" -e "print STDOUT \"binary content: \".chr(255);" >Foo.txt &&
45
+ git add Foo.txt &&
46
+ git commit -m "add a text file with binary content" &&
47
+ git push
48
+ )
49
+'
50
+
51
+test_expect_success 'git clone works on previously created wiki with media files' '
52
+ test_when_finished "rm -rf mw_dir mw_dir_clone" &&
53
+ git clone -c remote.origin.mediaimport=true \
54
+ mediawiki::'"$WIKI_URL"' mw_dir_clone &&
55
+ test_cmp mw_dir_clone/Foo.txt mw_dir/Foo.txt &&
56
+ (cd mw_dir_clone && git checkout HEAD^) &&
57
+ (cd mw_dir && git checkout HEAD^) &&
58
+ test_cmp mw_dir_clone/Foo.txt mw_dir/Foo.txt
59
+'
60
+
61
+test_expect_success 'git push & pull work with locally renamed media files' '
62
+ wiki_reset &&
63
+ git clone mediawiki::'"$WIKI_URL"' mw_dir &&
64
+ test_when_finished "rm -fr mw_dir" &&
65
+ (
66
+ cd mw_dir &&
67
+ echo "A File" >Foo.txt &&
68
+ git add Foo.txt &&
69
+ git commit -m "add a file" &&
70
+ git mv Foo.txt Bar.txt &&
71
+ git commit -m "Rename a file" &&
72
+ test_git_reimport &&
73
+ echo "A File" >expect &&
74
+ test_cmp expect Bar.txt &&
75
+ test_path_is_missing Foo.txt
76
+ )
77
+'
78
+
79
+test_expect_success 'git push can propagate local page deletion' '
80
+ wiki_reset &&
81
+ git clone mediawiki::'"$WIKI_URL"' mw_dir &&
82
+ test_when_finished "rm -fr mw_dir" &&
83
+ (
84
+ cd mw_dir &&
85
+ test_path_is_missing Foo.mw &&
86
+ echo "hello world" >Foo.mw &&
87
+ git add Foo.mw &&
88
+ git commit -m "Add the page Foo" &&
89
+ git push &&
90
+ rm -f Foo.mw &&
91
+ git commit -am "Delete the page Foo" &&
92
+ test_git_reimport &&
93
+ test_path_is_missing Foo.mw
94
+ )
95
+'
96
+
97
+test_expect_success 'git push can propagate local media file deletion' '
98
+ wiki_reset &&
99
+ git clone mediawiki::'"$WIKI_URL"' mw_dir &&
100
+ test_when_finished "rm -fr mw_dir" &&
101
+ (
102
+ cd mw_dir &&
103
+ echo "hello world" >Foo.txt &&
104
+ git add Foo.txt &&
105
+ git commit -m "Add the text file Foo" &&
106
+ git rm Foo.txt &&
107
+ git commit -m "Delete the file Foo" &&
108
+ test_git_reimport &&
109
+ test_path_is_missing Foo.txt
110
+ )
111
+'
112
+
113
+# test failure: the file is correctly uploaded, and then deleted but
114
+# as no page link to it, the import (which looks at page revisions)
115
+# doesn't notice the file deletion on the wiki. We fetch the list of
116
+# files from the wiki, but as the file is deleted, it doesn't appear.
117
+test_expect_failure 'git pull correctly imports media file deletion when no page link to it' '
118
+ wiki_reset &&
119
+ git clone mediawiki::'"$WIKI_URL"' mw_dir &&
120
+ test_when_finished "rm -fr mw_dir" &&
121
+ (
122
+ cd mw_dir &&
123
+ echo "hello world" >Foo.txt &&
124
+ git add Foo.txt &&
125
+ git commit -m "Add the text file Foo" &&
126
+ git push &&
127
+ git rm Foo.txt &&
128
+ git commit -m "Delete the file Foo" &&
129
+ test_git_reimport &&
130
+ test_path_is_missing Foo.txt
131
+ )
132
+'
133
+
134
+test_expect_success 'git push properly warns about insufficient permissions' '
135
+ wiki_reset &&
136
+ git clone mediawiki::'"$WIKI_URL"' mw_dir &&
137
+ test_when_finished "rm -fr mw_dir" &&
138
+ (
139
+ cd mw_dir &&
140
+ echo "A File" >foo.forbidden &&
141
+ git add foo.forbidden &&
142
+ git commit -m "add a file" &&
143
+ git push 2>actual &&
144
+ test_i18ngrep "foo.forbidden is not a permitted file" actual
145
+ )
146
+'
147
+
148
+test_expect_success 'setup a repository with media files' '
149
+ wiki_reset &&
150
+ wiki_editpage testpage "I am linking a file [[File:File.txt]]" false &&
151
+ echo "File content" >File.txt &&
152
+ wiki_upload_file File.txt &&
153
+ echo "Another file content" >AnotherFile.txt &&
154
+ wiki_upload_file AnotherFile.txt
155
+'
156
+
157
+test_expect_success 'git clone works with one specific page cloned and mediaimport=true' '
158
+ git clone -c remote.origin.pages=testpage \
159
+ -c remote.origin.mediaimport=true \
160
+ mediawiki::'"$WIKI_URL"' mw_dir_15 &&
161
+ test_when_finished "rm -rf mw_dir_15" &&
162
+ test_contains_N_files mw_dir_15 3 &&
163
+ test_path_is_file mw_dir_15/Testpage.mw &&
164
+ test_path_is_file mw_dir_15/File:File.txt.mw &&
165
+ test_path_is_file mw_dir_15/File.txt &&
166
+ test_path_is_missing mw_dir_15/Main_Page.mw &&
167
+ test_path_is_missing mw_dir_15/File:AnotherFile.txt.mw &&
168
+ test_path_is_missing mw_dir_15/AnothetFile.txt &&
169
+ wiki_check_content mw_dir_15/Testpage.mw Testpage &&
170
+ test_cmp mw_dir_15/File.txt File.txt
171
+'
172
+
173
+test_expect_success 'git clone works with one specific page cloned and mediaimport=false' '
174
+ test_when_finished "rm -rf mw_dir_16" &&
175
+ git clone -c remote.origin.pages=testpage \
176
+ mediawiki::'"$WIKI_URL"' mw_dir_16 &&
177
+ test_contains_N_files mw_dir_16 1 &&
178
+ test_path_is_file mw_dir_16/Testpage.mw &&
179
+ test_path_is_missing mw_dir_16/File:File.txt.mw &&
180
+ test_path_is_missing mw_dir_16/File.txt &&
181
+ test_path_is_missing mw_dir_16/Main_Page.mw &&
182
+ wiki_check_content mw_dir_16/Testpage.mw Testpage
183
+'
184
+
185
+# should behave like mediaimport=false
186
+test_expect_success 'git clone works with one specific page cloned and mediaimport unset' '
187
+ test_when_finished "rm -fr mw_dir_17" &&
188
+ git clone -c remote.origin.pages=testpage \
189
+ mediawiki::'"$WIKI_URL"' mw_dir_17 &&
190
+ test_contains_N_files mw_dir_17 1 &&
191
+ test_path_is_file mw_dir_17/Testpage.mw &&
192
+ test_path_is_missing mw_dir_17/File:File.txt.mw &&
193
+ test_path_is_missing mw_dir_17/File.txt &&
194
+ test_path_is_missing mw_dir_17/Main_Page.mw &&
195
+ wiki_check_content mw_dir_17/Testpage.mw Testpage
196
+'
197
+
198
+test_done