From a5aebf0cbd066cf2080fd262ea1aa2084776ad4f Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@allmydata.com>
Date: Tue, 28 Oct 2008 21:54:46 -0700
Subject: [PATCH] web: test (and fix) PUT DIRURL t=uri, which replaces a
 directory in-place with some other cap

---
 src/allmydata/test/test_web.py | 16 ++++++++++++++++
 src/allmydata/web/directory.py |  2 +-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/allmydata/test/test_web.py b/src/allmydata/test/test_web.py
index 754fee3e..85732704 100644
--- a/src/allmydata/test/test_web.py
+++ b/src/allmydata/test/test_web.py
@@ -2162,6 +2162,22 @@ class Web(WebMixin, testutil.StallMixin, unittest.TestCase):
         # shorter than we expected.
         return d
 
+    def test_PUT_DIRURL_uri(self):
+        d = self.s.create_empty_dirnode()
+        def _made_dir(dn):
+            new_uri = dn.get_uri()
+            # replace /foo with a new (empty) directory
+            d = self.PUT(self.public_url + "/foo?t=uri", new_uri)
+            d.addCallback(lambda res:
+                          self.failUnlessEqual(res.strip(), new_uri))
+            d.addCallback(lambda res:
+                          self.failUnlessChildURIIs(self.public_root,
+                                                    u"foo",
+                                                    new_uri))
+            return d
+        d.addCallback(_made_dir)
+        return d
+
     def test_PUT_NEWFILEURL_uri(self):
         contents, n, new_uri = self.makefile(8)
         d = self.PUT(self.public_url + "/foo/new.txt?t=uri", new_uri)
diff --git a/src/allmydata/web/directory.py b/src/allmydata/web/directory.py
index 73ae13fa..04f3ae74 100644
--- a/src/allmydata/web/directory.py
+++ b/src/allmydata/web/directory.py
@@ -159,7 +159,7 @@ class DirectoryNodeHandler(RenderMixin, rend.Page, ReplaceMeMixin):
                 # they're trying to set_uri and that name is already occupied
                 # (by us).
                 raise ExistingChildError()
-            d = self.parentnode.replace_me_with_a_childcap(ctx, replace)
+            d = self.replace_me_with_a_childcap(ctx, replace)
             # TODO: results
             return d
 
-- 
2.45.2