diff --git a/frappe/app.py b/frappe/app.py index 5a94f37546..3218906938 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -64,7 +64,7 @@ def application(request): response = frappe.utils.response.download_private_file(request.path) elif frappe.local.request.method in ('GET', 'HEAD'): - response = frappe.website.render.render(request.path) + response = frappe.website.render.render() else: raise NotFound diff --git a/frappe/public/css/website.css b/frappe/public/css/website.css index c6e1bb83ed..c502edf42d 100644 --- a/frappe/public/css/website.css +++ b/frappe/public/css/website.css @@ -961,6 +961,7 @@ li .footer-child-item { } .comment-header { border-bottom: 1px solid #EBEFF2; + padding: 30px 0px 15px; } .item-search { border-bottom: 1px solid #d1d8dd; diff --git a/frappe/public/less/website.less b/frappe/public/less/website.less index b8afe7878d..d9bb5917ce 100644 --- a/frappe/public/less/website.less +++ b/frappe/public/less/website.less @@ -571,6 +571,7 @@ li .footer-child-item { .comment-header{ border-bottom: 1px solid @light-border-color; + padding: 30px 0px 15px; } .item-search { diff --git a/frappe/templates/includes/login/login.css b/frappe/templates/includes/login/login.css index ea1cf84f8b..3cf72a1753 100644 --- a/frappe/templates/includes/login/login.css +++ b/frappe/templates/includes/login/login.css @@ -1,3 +1,5 @@ +/* login-css */ + .page-sidebar, #wrap-footer, .page-header { display: none; } @@ -114,6 +116,6 @@ p{ .btn-login { text-transform: uppercase; letter-spacing: 0.5px; - font-weight: 400; + font-weight: 400; font-size: 14px; } \ No newline at end of file diff --git a/frappe/templates/includes/login/login.js b/frappe/templates/includes/login/login.js index 50cec4d10a..40b65bff55 100644 --- a/frappe/templates/includes/login/login.js +++ b/frappe/templates/includes/login/login.js @@ -1,5 +1,7 @@ -window.disable_signup = {{ disable_signup and "true" or "false" }}; +// login.js +// don't remove this line (used in test) +window.disable_signup = {{ disable_signup and "true" or "false" }}; window.login = {}; diff --git a/frappe/tests/test_website.py b/frappe/tests/test_website.py new file mode 100644 index 0000000000..c76cf21fe7 --- /dev/null +++ b/frappe/tests/test_website.py @@ -0,0 +1,25 @@ +from __future__ import unicode_literals + +import frappe, unittest +from werkzeug.wrappers import Request +from werkzeug.test import EnvironBuilder + +from frappe.website import render + +def set_request(**kwargs): + builder = EnvironBuilder(**kwargs) + frappe.local.request = Request(builder.get_environ()) + +class TestWebsite(unittest.TestCase): + + def test_page_load(self): + set_request(method='POST', path='login') + response = render.render() + + self.assertTrue(response.status_code, 200) + + html = response.get_data() + + self.assertTrue('/* login-css */' in html) + self.assertTrue('// login.js' in html) + self.assertTrue('' in html) diff --git a/frappe/website/doctype/blog_post/blog_post.py b/frappe/website/doctype/blog_post/blog_post.py index 0fef4935da..b4926cd57e 100644 --- a/frappe/website/doctype/blog_post/blog_post.py +++ b/frappe/website/doctype/blog_post/blog_post.py @@ -19,6 +19,11 @@ class BlogPost(WebsiteGenerator): page_title_field = "title" ) + def make_route(self): + if not self.route: + return 'blog/' + frappe.db.get_value('Blog Category', self.blog_category, + 'route') + '/' + self.scrub(self.title) + def get_feed(self): return self.title diff --git a/frappe/website/doctype/blog_post/test_blog_post.py b/frappe/website/doctype/blog_post/test_blog_post.py index 0ff58aa563..a6c1668045 100644 --- a/frappe/website/doctype/blog_post/test_blog_post.py +++ b/frappe/website/doctype/blog_post/test_blog_post.py @@ -4,6 +4,29 @@ from __future__ import unicode_literals import frappe import unittest +from frappe.tests.test_website import set_request +from frappe.website.render import render + class TestBlogPost(unittest.TestCase): - pass + def test_generator_view(self): + pages = frappe.get_all('Blog Post', fields=['name', 'route'], + filters={'published': 1, 'route': ('!=', '')}, limit =1) + + set_request(path=pages[0].route) + response = render() + + self.assertTrue(response.status_code, 200) + + html = response.get_data() + self.assertTrue('
' in html) + + def test_generator_not_found(self): + pages = frappe.get_all('Blog Post', fields=['name', 'route'], + filters={'published': 0}, limit =1) + + frappe.db.set_value('Blog Post', pages[0].name, 'route', 'test-route-000') + + set_request(path='test-route-000') + response = render() + self.assertTrue(response.status_code, 404) diff --git a/frappe/website/doctype/blog_post/test_records.json b/frappe/website/doctype/blog_post/test_records.json index 136a360306..0a08fd2711 100644 --- a/frappe/website/doctype/blog_post/test_records.json +++ b/frappe/website/doctype/blog_post/test_records.json @@ -5,7 +5,8 @@ "blogger": "_Test Blogger", "content": "Test Blog Content", "doctype": "Blog Post", - "title": "_Test Blog Post" + "title": "_Test Blog Post", + "published": 1 }, { "blog_category": "_Test Blog Category 1", @@ -13,7 +14,8 @@ "blogger": "_Test Blogger", "content": "Test Blog Content", "doctype": "Blog Post", - "title": "_Test Blog Post 1" + "title": "_Test Blog Post 1", + "published": 1 }, { "blog_category": "_Test Blog Category 1", @@ -21,6 +23,7 @@ "blogger": "_Test Blogger 1", "content": "Test Blog Content", "doctype": "Blog Post", - "title": "_Test Blog Post 2" + "title": "_Test Blog Post 2", + "published": 0 } ] diff --git a/frappe/website/render.py b/frappe/website/render.py index b8fab78920..26709d01b6 100644 --- a/frappe/website/render.py +++ b/frappe/website/render.py @@ -17,9 +17,9 @@ from frappe.translate import guess_language class PageNotFoundError(Exception): pass -def render(path, http_status_code=None): +def render(path=None, http_status_code=None): """render html page""" - path = resolve_path(path.strip("/ ")) + path = resolve_path(frappe.local.request.path.strip('/ ')) data = None # if in list of already known 404s, send it diff --git a/frappe/website/router.py b/frappe/website/router.py index 71c1636c34..7414f08d3b 100644 --- a/frappe/website/router.py +++ b/frappe/website/router.py @@ -18,6 +18,7 @@ def get_page_context(path): page_context = make_page_context(path) if can_cache(page_context.no_cache): page_context_cache[frappe.local.lang] = page_context + frappe.cache().hset("page_context", path, page_context_cache) return page_context diff --git a/frappe/website/website_generator.py b/frappe/website/website_generator.py index 4d6aca8cf2..cd67354fd8 100644 --- a/frappe/website/website_generator.py +++ b/frappe/website/website_generator.py @@ -18,7 +18,7 @@ class WebsiteGenerator(Document): def autoname(self): if not self.name and self.meta.autoname != "hash": - self.name = self.make_route() + self.name = self.scrub(self.get(self.website.page_title_field or "title")) def onload(self): self.get("__onload").update({ @@ -69,7 +69,6 @@ class WebsiteGenerator(Document): "ref_doctype":self.doctype, "idx": self.idx, "docname": self.name, - "route": route, "controller": get_module_name(self.doctype, self.meta.module), }) diff --git a/frappe/www/login.html b/frappe/www/login.html index 0da1fe3ac1..97149ec6d9 100644 --- a/frappe/www/login.html +++ b/frappe/www/login.html @@ -7,7 +7,7 @@ {% endblock %} {% block page_content %} - +