def test_song_id_does_not_exist(self): raise SkipTest("Twisted using deferToThread seems to break the test db connection that django establishes. However, with the real django db connection this works fine...") r = web.Song(1) request = DummyRequest([""]) d = request.notifyFinish() d.addCallback(self._assert_song_does_not_exist, request) result = r.render_GET(request) self.assertEqual(result, server.NOT_DONE_YET) return d
def test_withRequest(self): """ When an XML-RPC method is called and the implementation is decorated with L{withRequest}, the request object is passed as the first argument. """ request = DummyRequest('/RPC2') request.method = "POST" request.content = StringIO(xmlrpclib.dumps(("foo",), 'withRequest')) def valid(n, request): data = xmlrpclib.loads(request.written[0]) self.assertEqual(data, (('POST foo',), None)) d = request.notifyFinish().addCallback(valid, request) self.resource.render_POST(request) return d
def test_withRequest(self): """ When an XML-RPC method is called and the implementation is decorated with L{withRequest}, the request object is passed as the first argument. """ request = DummyRequest('/RPC2') request.method = "POST" request.content = StringIO(xmlrpclib.dumps(("foo",), 'withRequest')) def valid(n, request): data = xmlrpclib.loads(request.written[0]) self.assertEqual(data, (('POST foo',), None)) d = request.notifyFinish().addCallback(valid, request) self.resource.render_POST(request) return d
def test_render_GET(self): """Render SimpleStats main page.""" datastore = DataStore() resource = Index(datastore) request = DummyRequest(['foo']) d = request.notifyFinish() result = resource.render_GET(request) self.assertEqual(result, server.NOT_DONE_YET) yield d element = ChartDataElement(datastore) expected = yield flattenString(request, element) self.assertIn(expected, ''.join(request.written))
def test_download_render_POST(self): """Download JSON data file.""" datastore = DataStore() datastore.add_value("var1", 1, 1) datastore.add_value("var2", 2, 2) resource = Index(datastore) request = DummyRequest(['foo']) request.args = {'download': 'download'} d = request.notifyFinish() result = resource.render_POST(request) self.assertEqual(result, server.NOT_DONE_YET) yield d expected = '["var1", 1, 1]\n["var2", 2, 2]' self.assertEqual(expected, ''.join(request.written))
def test_data_render_POST(self): """Main page rendering with data.""" datastore = DataStore() datastore.add_value("var1", 1, 1) datastore.add_value("var2", 2, 2) resource = Index(datastore) request = DummyRequest(['foo']) d = request.notifyFinish() result = resource.render_GET(request) self.assertEqual(result, server.NOT_DONE_YET) yield d element = ChartDataElement(datastore) expected = yield flattenString(request, element) self.assertIn(expected, ''.join(request.written))
def test_upload_render_POST(self): """Upload JSON data file.""" datastore = DataStore() resource = Index(datastore) request = DummyRequest(['foo']) request.args = {'data_file': ['["var1", 1, 1]\n["var2", 2, 2]'], 'upload': 'upload'} def fake_redirect(path): request.redirect_to = path request.redirect = fake_redirect d = request.notifyFinish() result = resource.render_POST(request) self.assertEqual(result, server.NOT_DONE_YET) yield d self.assertEqual(request.redirect_to, '/')
class RenderElementTests(TestCase): """ Test L{renderElement} """ def setUp(self): """ Set up a common L{DummyRequest} and L{FakeSite}. """ self.request = DummyRequest([""]) self.request.site = FakeSite() def test_simpleRender(self): """ L{renderElement} returns NOT_DONE_YET and eventually writes the rendered L{Element} to the request before finishing the request. """ element = TestElement() d = self.request.notifyFinish() def check(_): self.assertEqual( b"".join(self.request.written), b"<!DOCTYPE html>\n" b"<p>Hello, world.</p>") self.assertTrue(self.request.finished) d.addCallback(check) self.assertIdentical(NOT_DONE_YET, renderElement(self.request, element)) return d def test_simpleFailure(self): """ L{renderElement} handles failures by writing a minimal error message to the request and finishing it. """ element = FailingElement() d = self.request.notifyFinish() def check(_): flushed = self.flushLoggedErrors(FlattenerError) self.assertEqual(len(flushed), 1) self.assertEqual( b"".join(self.request.written), (b'<!DOCTYPE html>\n' b'<div style="font-size:800%;' b'background-color:#FFF;' b'color:#F00' b'">An error occurred while rendering the response.</div>')) self.assertTrue(self.request.finished) d.addCallback(check) self.assertIdentical(NOT_DONE_YET, renderElement(self.request, element)) return d def test_simpleFailureWithTraceback(self): """ L{renderElement} will render a traceback when rendering of the element fails and our site is configured to display tracebacks. """ logObserver = EventLoggingObserver.createWithCleanup( self, globalLogPublisher ) self.request.site.displayTracebacks = True element = FailingElement() d = self.request.notifyFinish() def check(_): self.assertEquals(1, len(logObserver)) f = logObserver[0]["log_failure"] self.assertIsInstance(f.value, FlattenerError) flushed = self.flushLoggedErrors(FlattenerError) self.assertEqual(len(flushed), 1) self.assertEqual( b"".join(self.request.written), b"<!DOCTYPE html>\n<p>I failed.</p>") self.assertTrue(self.request.finished) d.addCallback(check) renderElement(self.request, element, _failElement=TestFailureElement) return d def test_nonDefaultDoctype(self): """ L{renderElement} will write the doctype string specified by the doctype keyword argument. """ element = TestElement() d = self.request.notifyFinish() def check(_): self.assertEqual( b"".join(self.request.written), (b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"' b' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n' b'<p>Hello, world.</p>')) d.addCallback(check) renderElement( self.request, element, doctype=( b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"' b' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">')) return d def test_noneDoctype(self): """ L{renderElement} will not write out a doctype if the doctype keyword argument is L{None}. """ element = TestElement() d = self.request.notifyFinish() def check(_): self.assertEqual( b"".join(self.request.written), b'<p>Hello, world.</p>') d.addCallback(check) renderElement(self.request, element, doctype=None) return d
class TestRenderElement(TestCase): """ Test L{renderElement} """ def setUp(self): """ Set up a common L{DummyRequest} and L{FakeSite}. """ self.request = DummyRequest([""]) self.request.site = FakeSite() def test_simpleRender(self): """ L{renderElement} returns NOT_DONE_YET and eventually writes the rendered L{Element} to the request before finishing the request. """ element = TestElement() d = self.request.notifyFinish() def check(_): self.assertEqual( "".join(self.request.written), "<!DOCTYPE html>\n" "<p>Hello, world.</p>") self.assertTrue(self.request.finished) d.addCallback(check) self.assertIdentical(NOT_DONE_YET, renderElement(self.request, element)) return d def test_simpleFailure(self): """ L{renderElement} handles failures by writing a minimal error message to the request and finishing it. """ element = FailingElement() d = self.request.notifyFinish() def check(_): flushed = self.flushLoggedErrors(FlattenerError) self.assertEqual(len(flushed), 1) self.assertEqual( "".join(self.request.written), ('<!DOCTYPE html>\n' '<div style="font-size:800%;' 'background-color:#FFF;' 'color:#F00' '">An error occurred while rendering the response.</div>')) self.assertTrue(self.request.finished) d.addCallback(check) self.assertIdentical(NOT_DONE_YET, renderElement(self.request, element)) return d def test_simpleFailureWithTraceback(self): """ L{renderElement} will render a traceback when rendering of the element fails and our site is configured to display tracebacks. """ self.request.site.displayTracebacks = True element = FailingElement() d = self.request.notifyFinish() def check(_): flushed = self.flushLoggedErrors(FlattenerError) self.assertEqual(len(flushed), 1) self.assertEqual( "".join(self.request.written), "<!DOCTYPE html>\n<p>I failed.</p>") self.assertTrue(self.request.finished) d.addCallback(check) renderElement(self.request, element, _failElement=TestFailureElement) return d def test_nonDefaultDoctype(self): """ L{renderElement} will write the doctype string specified by the doctype keyword argument. """ element = TestElement() d = self.request.notifyFinish() def check(_): self.assertEqual( "".join(self.request.written), ('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"' ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n' '<p>Hello, world.</p>')) d.addCallback(check) renderElement( self.request, element, doctype=( '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"' ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">')) return d def test_noneDoctype(self): """ L{renderElement} will not write out a doctype if the doctype keyword argument is C{None}. """ element = TestElement() d = self.request.notifyFinish() def check(_): self.assertEqual( "".join(self.request.written), '<p>Hello, world.</p>') d.addCallback(check) renderElement(self.request, element, doctype=None) return d