]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
fix the overwrite button and add unit test for it
authorZooko O'Whielacronx <zooko@zooko.com>
Sat, 15 Dec 2007 00:52:05 +0000 (17:52 -0700)
committerZooko O'Whielacronx <zooko@zooko.com>
Sat, 15 Dec 2007 00:52:05 +0000 (17:52 -0700)
src/allmydata/test/test_web.py
src/allmydata/webish.py

index 5a677157a06b7eebc578c3f5e45c9e662b7b7247..45163c0400097eafc6c77deb78cfd208176fb4c2 100644 (file)
@@ -169,7 +169,7 @@ class WebMixin(object):
         url = self.webish_url + urlpath
         return client.getPage(url, method="DELETE")
 
-    def POST(self, urlpath, **fields):
+    def POST(self, urlpath, followRedirect=False, **fields):
         url = self.webish_url + urlpath
         sepbase = "boogabooga"
         sep = "--" + sepbase
@@ -194,7 +194,7 @@ class WebMixin(object):
         headers = {"content-type": "multipart/form-data; boundary=%s" % sepbase,
                    }
         return client.getPage(url, method="POST", postdata=body,
-                              headers=headers, followRedirect=False)
+                              headers=headers, followRedirect=followRedirect)
 
     def shouldFail(self, res, expected_failure, which,
                    substring=None, response_substring=None):
@@ -955,24 +955,6 @@ class Web(WebMixin, unittest.TestCase):
             self.failUnlessEqual(self._mutable_uri, newnode.get_uri())
         d.addCallback(_got2)
 
-        # also test t=overwrite while we're here
-        EVEN_NEWER_CONTENTS = NEWER_CONTENTS + "even newer\n"
-        d.addCallback(lambda res:
-                      self.POST(self.public_url + "/foo/new.txt",
-                                t="overwrite",
-                                file=("new.txt", EVEN_NEWER_CONTENTS)))
-        d.addCallback(self.failUnlessURIMatchesChild, fn, "new.txt")
-        d.addCallback(lambda res:
-                      self.failUnlessChildContentsAre(fn, "new.txt",
-                                                      EVEN_NEWER_CONTENTS))
-        d.addCallback(lambda res: self._foo_node.get("new.txt"))
-        def _got3(newnode):
-            self.failUnless(IMutableFileNode.providedBy(newnode))
-            self.failUnless(newnode.is_mutable())
-            self.failIf(newnode.is_readonly())
-            self.failUnlessEqual(self._mutable_uri, newnode.get_uri())
-        d.addCallback(_got3)
-
         # finally list the directory, since mutable files are displayed
         # differently
 
@@ -983,8 +965,35 @@ class Web(WebMixin, unittest.TestCase):
             # TODO: assert more about the contents
             self.failUnless("Overwrite" in res)
             self.failUnless("Choose new file:" in res)
+            return res
         d.addCallback(_check_page)
 
+        # test that clicking on the "overwrite" button works
+        EVEN_NEWER_CONTENTS = NEWER_CONTENTS + "even newer\n"
+        OVERWRITE_FORM_RE=re.compile('<form action="(.*)" method="post" enctype="multipart/form-data"><fieldset><input type="hidden" name="t" value="overwrite" /><input type="hidden" name="name" value="(.*)" /><input type="hidden" name="when_done" value="(.*)" /><legend class="freeform-form-label">Overwrite</legend>Choose new file: <input type="file" class="freeform-input-file" name="file" /> <input type="submit" value="Overwrite" /></fieldset></form>', re.I)
+        def _parse_overwrite_form_and_submit(res):
+            mo = OVERWRITE_FORM_RE.search(res)
+            self.failUnless(mo)
+            formaction=mo.group(1)
+            formname=mo.group(2)
+            formwhendone=mo.group(3)
+
+            if formaction == ".":
+                formaction = self.public_url + "/foo"
+            return self.POST(formaction, t="overwrite", name=formname, when_done=formwhendone, file=("new.txt", EVEN_NEWER_CONTENTS), followRedirect=False)
+        d.addCallback(_parse_overwrite_form_and_submit)
+        d.addBoth(self.shouldRedirect, urllib.quote(self.public_url + "/foo/"))
+        d.addCallback(lambda res:
+                      self.failUnlessChildContentsAre(fn, "new.txt",
+                                                      EVEN_NEWER_CONTENTS))
+        d.addCallback(lambda res: self._foo_node.get("new.txt"))
+        def _got3(newnode):
+            self.failUnless(IMutableFileNode.providedBy(newnode))
+            self.failUnless(newnode.is_mutable())
+            self.failIf(newnode.is_readonly())
+            self.failUnlessEqual(self._mutable_uri, newnode.get_uri())
+        d.addCallback(_got3)
+
         return d
 
     def test_POST_upload_replace(self):
index 88a6c26600ba9d4da51656b301ab8afc343bce49..dfa28a536f7cffd216c5a87abc4bd009c58c07f7 100644 (file)
@@ -336,7 +336,8 @@ class Directory(rend.Page):
     def build_overwrite(self, ctx, data):
         name, target = data
         if IMutableFileNode.providedBy(target) and not target.is_readonly():
-            overwrite = T.form(action=".", method="post",
+            action="/uri/" + urllib.quote(target.get_uri())
+            overwrite = T.form(action=action, method="post",
                                enctype="multipart/form-data")[
                 T.fieldset[
                 T.input(type="hidden", name="t", value="overwrite"),