From 6b51841ec8748084f885f2370623ad47d71a193c Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@allmydata.com>
Date: Tue, 20 May 2008 11:33:14 -0700
Subject: [PATCH] web: even more test coverage

---
 src/allmydata/test/test_web.py | 49 ++++++++++++++++++++++++++++++++++
 src/allmydata/web/filenode.py  |  2 +-
 2 files changed, 50 insertions(+), 1 deletion(-)

diff --git a/src/allmydata/test/test_web.py b/src/allmydata/test/test_web.py
index a78b339e..a07457b8 100644
--- a/src/allmydata/test/test_web.py
+++ b/src/allmydata/test/test_web.py
@@ -521,6 +521,28 @@ class Web(WebMixin, unittest.TestCase):
                              self.GET, base)
         return d
 
+    def test_GET_FILE_URI(self):
+        base = "/uri/%s" % urllib.quote(self._bar_txt_uri)
+        d = self.GET(base)
+        d.addCallback(self.failUnlessIsBarDotTxt)
+        return d
+
+    def test_GET_FILE_URI_badchild(self):
+        base = "/uri/%s/boguschild" % urllib.quote(self._bar_txt_uri)
+        errmsg = "Files have no children, certainly not named 'boguschild'"
+        d = self.shouldFail2(error.Error, "test_GET_FILE_URI_badchild",
+                             "400 Bad Request", errmsg,
+                             self.GET, base)
+        return d
+
+    def test_PUT_FILE_URI_badchild(self):
+        base = "/uri/%s/boguschild" % urllib.quote(self._bar_txt_uri)
+        errmsg = "Cannot create directory 'boguschild', because its parent is a file, not a directory"
+        d = self.shouldFail2(error.Error, "test_GET_FILE_URI_badchild",
+                             "400 Bad Request", errmsg,
+                             self.PUT, base, "")
+        return d
+
     def test_GET_FILEURL_save(self):
         d = self.GET(self.public_url + "/foo/bar.txt?filename=bar.txt&save=true")
         # TODO: look at the headers, expect a Content-Disposition: attachment
@@ -1092,6 +1114,17 @@ class Web(WebMixin, unittest.TestCase):
             self.failUnlessEqual(new_json[1]["ro_uri"], ro_uri)
         d.addCallback(_check_page_json)
 
+        # and look at t=uri and t=readonly-uri
+        d.addCallback(lambda res:
+                      self.GET(self.public_url + "/foo/new.txt?t=uri"))
+        d.addCallback(lambda res: self.failUnlessEqual(res, self._mutable_uri))
+        d.addCallback(lambda res:
+                      self.GET(self.public_url + "/foo/new.txt?t=readonly-uri"))
+        def _check_ro_uri(res):
+            ro_uri = unicode(self._mutable_node.get_readonly().to_string())
+            self.failUnlessEqual(res, ro_uri)
+        d.addCallback(_check_ro_uri)
+
         d.addErrback(self.dump_error)
         return d
 
@@ -1185,6 +1218,22 @@ class Web(WebMixin, unittest.TestCase):
                                                   u"sub"]))
         return d
 
+    def test_POST_FILEURL_check(self):
+        d = self.POST(self.public_url + "/foo/bar.txt", t="check")
+        def _check(res):
+            # this currently just returns "None". You'd only really use it
+            # with a when_done= redirect.
+            self.failUnlessEqual(res, "None")
+        d.addCallback(_check)
+        return d
+
+    def test_POST_FILEURL_bad_t(self):
+        d = self.shouldFail2(error.Error, "POST_bad_t", "400 Bad Request",
+                             "POST to file: bad t=bogus",
+                             self.POST, self.public_url + "/foo/bar.txt",
+                             t="bogus")
+        return d
+
     def test_POST_mkdir(self): # return value?
         d = self.POST(self.public_url + "/foo", t="mkdir", name="newdir")
         d.addCallback(lambda res: self._foo_node.get(u"newdir"))
diff --git a/src/allmydata/web/filenode.py b/src/allmydata/web/filenode.py
index 6d09e13e..751e097b 100644
--- a/src/allmydata/web/filenode.py
+++ b/src/allmydata/web/filenode.py
@@ -368,7 +368,7 @@ def FileURI(ctx, filenode):
 def FileReadOnlyURI(ctx, filenode):
     if filenode.is_readonly():
         return text_plain(filenode.get_uri(), ctx)
-    return text_plain(filenode.get_readonly().get_uri(), ctx)
+    return text_plain(filenode.get_readonly_uri(), ctx)
 
 class FileNodeDownloadHandler(FileNodeHandler):
     def childFactory(self, ctx, name):
-- 
2.45.2