浏览代码

[tests] added basic tests for page and generator

version-14
Rushabh Mehta 9 年前
父节点
当前提交
5e3bcbe01f
共有 14 个文件被更改,包括 76 次插入12 次删除
  1. +1
    -1
      frappe/app.py
  2. +1
    -0
      frappe/public/css/website.css
  3. +1
    -0
      frappe/public/less/website.less
  4. +3
    -1
      frappe/templates/includes/login/login.css
  5. +3
    -1
      frappe/templates/includes/login/login.js
  6. +25
    -0
      frappe/tests/test_website.py
  7. +5
    -0
      frappe/website/doctype/blog_post/blog_post.py
  8. +24
    -1
      frappe/website/doctype/blog_post/test_blog_post.py
  9. +6
    -3
      frappe/website/doctype/blog_post/test_records.json
  10. +2
    -2
      frappe/website/render.py
  11. +1
    -0
      frappe/website/router.py
  12. +1
    -2
      frappe/website/website_generator.py
  13. +1
    -1
      frappe/www/login.html
  14. +2
    -0
      frappe/www/login.py

+ 1
- 1
frappe/app.py 查看文件

@@ -64,7 +64,7 @@ def application(request):
response = frappe.utils.response.download_private_file(request.path) response = frappe.utils.response.download_private_file(request.path)


elif frappe.local.request.method in ('GET', 'HEAD'): elif frappe.local.request.method in ('GET', 'HEAD'):
response = frappe.website.render.render(request.path)
response = frappe.website.render.render()


else: else:
raise NotFound raise NotFound


+ 1
- 0
frappe/public/css/website.css 查看文件

@@ -961,6 +961,7 @@ li .footer-child-item {
} }
.comment-header { .comment-header {
border-bottom: 1px solid #EBEFF2; border-bottom: 1px solid #EBEFF2;
padding: 30px 0px 15px;
} }
.item-search { .item-search {
border-bottom: 1px solid #d1d8dd; border-bottom: 1px solid #d1d8dd;


+ 1
- 0
frappe/public/less/website.less 查看文件

@@ -571,6 +571,7 @@ li .footer-child-item {


.comment-header{ .comment-header{
border-bottom: 1px solid @light-border-color; border-bottom: 1px solid @light-border-color;
padding: 30px 0px 15px;
} }


.item-search { .item-search {


+ 3
- 1
frappe/templates/includes/login/login.css 查看文件

@@ -1,3 +1,5 @@
/* login-css */

.page-sidebar, #wrap-footer, .page-header { .page-sidebar, #wrap-footer, .page-header {
display: none; display: none;
} }
@@ -114,6 +116,6 @@ p{
.btn-login { .btn-login {
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.5px; letter-spacing: 0.5px;
font-weight: 400;
font-weight: 400;
font-size: 14px; font-size: 14px;
} }

+ 3
- 1
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 = {}; window.login = {};




+ 25
- 0
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('<!-- login.html -->' in html)

+ 5
- 0
frappe/website/doctype/blog_post/blog_post.py 查看文件

@@ -19,6 +19,11 @@ class BlogPost(WebsiteGenerator):
page_title_field = "title" 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): def get_feed(self):
return self.title return self.title




+ 24
- 1
frappe/website/doctype/blog_post/test_blog_post.py 查看文件

@@ -4,6 +4,29 @@ from __future__ import unicode_literals
import frappe import frappe
import unittest import unittest


from frappe.tests.test_website import set_request
from frappe.website.render import render

class TestBlogPost(unittest.TestCase): 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('<article class="blog-content" itemscope itemtype="http://schema.org/BlogPosting">' 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)

+ 6
- 3
frappe/website/doctype/blog_post/test_records.json 查看文件

@@ -5,7 +5,8 @@
"blogger": "_Test Blogger", "blogger": "_Test Blogger",
"content": "Test Blog Content", "content": "Test Blog Content",
"doctype": "Blog Post", "doctype": "Blog Post",
"title": "_Test Blog Post"
"title": "_Test Blog Post",
"published": 1
}, },
{ {
"blog_category": "_Test Blog Category 1", "blog_category": "_Test Blog Category 1",
@@ -13,7 +14,8 @@
"blogger": "_Test Blogger", "blogger": "_Test Blogger",
"content": "Test Blog Content", "content": "Test Blog Content",
"doctype": "Blog Post", "doctype": "Blog Post",
"title": "_Test Blog Post 1"
"title": "_Test Blog Post 1",
"published": 1
}, },
{ {
"blog_category": "_Test Blog Category 1", "blog_category": "_Test Blog Category 1",
@@ -21,6 +23,7 @@
"blogger": "_Test Blogger 1", "blogger": "_Test Blogger 1",
"content": "Test Blog Content", "content": "Test Blog Content",
"doctype": "Blog Post", "doctype": "Blog Post",
"title": "_Test Blog Post 2"
"title": "_Test Blog Post 2",
"published": 0
} }
] ]

+ 2
- 2
frappe/website/render.py 查看文件

@@ -17,9 +17,9 @@ from frappe.translate import guess_language


class PageNotFoundError(Exception): pass class PageNotFoundError(Exception): pass


def render(path, http_status_code=None):
def render(path=None, http_status_code=None):
"""render html page""" """render html page"""
path = resolve_path(path.strip("/ "))
path = resolve_path(frappe.local.request.path.strip('/ '))
data = None data = None


# if in list of already known 404s, send it # if in list of already known 404s, send it


+ 1
- 0
frappe/website/router.py 查看文件

@@ -18,6 +18,7 @@ def get_page_context(path):
page_context = make_page_context(path) page_context = make_page_context(path)
if can_cache(page_context.no_cache): if can_cache(page_context.no_cache):
page_context_cache[frappe.local.lang] = page_context page_context_cache[frappe.local.lang] = page_context

frappe.cache().hset("page_context", path, page_context_cache) frappe.cache().hset("page_context", path, page_context_cache)


return page_context return page_context


+ 1
- 2
frappe/website/website_generator.py 查看文件

@@ -18,7 +18,7 @@ class WebsiteGenerator(Document):


def autoname(self): def autoname(self):
if not self.name and self.meta.autoname != "hash": 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): def onload(self):
self.get("__onload").update({ self.get("__onload").update({
@@ -69,7 +69,6 @@ class WebsiteGenerator(Document):
"ref_doctype":self.doctype, "ref_doctype":self.doctype,
"idx": self.idx, "idx": self.idx,
"docname": self.name, "docname": self.name,
"route": route,
"controller": get_module_name(self.doctype, self.meta.module), "controller": get_module_name(self.doctype, self.meta.module),
}) })




+ 1
- 1
frappe/www/login.html 查看文件

@@ -7,7 +7,7 @@
{% endblock %} {% endblock %}


{% block page_content %} {% block page_content %}
<!-- no-header -->
<!-- {{ for_test }} -->


<div class="login-content"> <div class="login-content">
<form class="form-signin form-login" role="form"> <form class="form-signin form-login" role="form">


+ 2
- 0
frappe/www/login.py 查看文件

@@ -17,6 +17,8 @@ def get_context(context):
raise frappe.Redirect raise frappe.Redirect


# get settings from site config # get settings from site config
context.no_header = True
context.for_test = 'login.html'
context["title"] = "Login" context["title"] = "Login"
context["disable_signup"] = frappe.utils.cint(frappe.db.get_value("Website Settings", "Website Settings", "disable_signup")) context["disable_signup"] = frappe.utils.cint(frappe.db.get_value("Website Settings", "Website Settings", "disable_signup"))




正在加载...
取消
保存