Browse Source

Merge pull request #11189 from scmmishra/blog-route-fix

version-14
Aditya Hase 4 years ago
committed by GitHub
parent
commit
3c65a9ef04
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 82 additions and 52 deletions
  1. +1
    -2
      frappe/core/doctype/user_permission/test_user_permission.py
  2. +1
    -0
      frappe/patches.txt
  3. +8
    -0
      frappe/patches/v13_0/set_route_for_blog_category.py
  4. +2
    -1
      frappe/search/full_text_search.py
  5. +3
    -2
      frappe/tests/test_form_load.py
  6. +17
    -17
      frappe/tests/test_permissions.py
  7. +6
    -12
      frappe/website/doctype/blog_category/blog_category.json
  8. +4
    -5
      frappe/website/doctype/blog_category/blog_category.py
  9. +3
    -1
      frappe/website/doctype/blog_category/test_blog_category.py
  10. +0
    -3
      frappe/website/doctype/blog_category/test_records.json
  11. +1
    -1
      frappe/website/doctype/blog_post/templates/blog_post.html
  12. +31
    -3
      frappe/website/doctype/blog_post/test_blog_post.py
  13. +5
    -5
      frappe/website/doctype/blog_post/test_records.json

+ 1
- 2
frappe/core/doctype/user_permission/test_user_permission.py View File

@@ -26,8 +26,7 @@ class TestUserPermission(unittest.TestCase):
user = create_user('test_user_perm1@example.com', 'Website Manager')
for category in ['general', 'public']:
if not frappe.db.exists('Blog Category', category):
frappe.get_doc({'doctype': 'Blog Category',
'category_name': category, 'title': category}).insert()
frappe.get_doc({'doctype': 'Blog Category', 'title': category}).insert()

param = get_params(user, 'Blog Category', 'general', is_default=1)
add_user_permissions(param)


+ 1
- 0
frappe/patches.txt View File

@@ -305,6 +305,7 @@ frappe.patches.v12_0.fix_email_id_formatting
frappe.patches.v13_0.add_toggle_width_in_navbar_settings
frappe.patches.v13_0.rename_notification_fields
frappe.patches.v13_0.remove_duplicate_navbar_items
frappe.patches.v13_0.set_route_for_blog_category
frappe.patches.v13_0.enable_custom_script
frappe.patches.v13_0.update_newsletter_content_type
frappe.patches.v13_0.delete_event_producer_and_consumer_keys

+ 8
- 0
frappe/patches/v13_0/set_route_for_blog_category.py View File

@@ -0,0 +1,8 @@
import frappe

def execute():
categories = frappe.get_list("Blog Category")
for category in categories:
doc = frappe.get_doc("Blog Category", category["name"])
doc.set_route()
doc.save()

+ 2
- 1
frappe/search/full_text_search.py View File

@@ -46,7 +46,8 @@ class FullTextSearch:
doc_name (str): name of the document to be updated
"""
document = self.get_document_to_index(doc_name)
self.update_index(document)
if document:
self.update_index(document)

def remove_document_from_index(self, doc_name):
"""Remove document from search index


+ 3
- 2
frappe/tests/test_form_load.py View File

@@ -24,7 +24,7 @@ class TestFormLoad(unittest.TestCase):
def test_fieldlevel_permissions_in_load(self):
blog = frappe.get_doc({
"doctype": "Blog Post",
"blog_category": "_Test Blog Category 1",
"blog_category": "-test-blog-category-1",
"blog_intro": "Test Blog Intro",
"blogger": "_Test Blogger 1",
"content": "Test Blog Content",
@@ -40,7 +40,7 @@ class TestFormLoad(unittest.TestCase):
user.remove_roles(*user_roles)
user.add_roles('Blogger')

make_property_setter('Blog Post', 'published', 'permlevel', 1, 'Int')
blog_post_property_setter = make_property_setter('Blog Post', 'published', 'permlevel', 1, 'Int')
reset('Blog Post')
add('Blog Post', 'Website Manager', 1)
update('Blog Post', 'Website Manager', 1, 'write', 1)
@@ -80,6 +80,7 @@ class TestFormLoad(unittest.TestCase):
user.add_roles(*user_roles)

blog_doc.delete()
frappe.delete_doc(blog_post_property_setter.doctype, blog_post_property_setter.name)

def test_fieldlevel_permissions_in_load_for_child_table(self):
contact = frappe.new_doc('Contact')


+ 17
- 17
frappe/tests/test_permissions.py View File

@@ -59,7 +59,7 @@ class TestPermissions(unittest.TestCase):
self.assertTrue(post.has_permission("read"))

def test_user_permissions_in_doc(self):
add_user_permission("Blog Category", "_Test Blog Category 1",
add_user_permission("Blog Category", "-test-blog-category-1",
"test2@example.com")

frappe.set_user("test2@example.com")
@@ -73,7 +73,7 @@ class TestPermissions(unittest.TestCase):
self.assertTrue(get_doc_permissions(post1).get("read"))

def test_user_permissions_in_report(self):
add_user_permission("Blog Category", "_Test Blog Category 1", "test2@example.com")
add_user_permission("Blog Category", "-test-blog-category-1", "test2@example.com")

frappe.set_user("test2@example.com")
names = [d.name for d in frappe.get_list("Blog Post", fields=["name", "blog_category"])]
@@ -86,23 +86,23 @@ class TestPermissions(unittest.TestCase):
self.assertFalse(doc.get("blog_category"))

# Fetch default based on single user permission
add_user_permission("Blog Category", "_Test Blog Category 1", "test2@example.com")
add_user_permission("Blog Category", "-test-blog-category-1", "test2@example.com")

frappe.set_user("test2@example.com")
doc = frappe.new_doc("Blog Post")
self.assertEqual(doc.get("blog_category"), "_Test Blog Category 1")
self.assertEqual(doc.get("blog_category"), "-test-blog-category-1")

# Don't fetch default if user permissions is more than 1
add_user_permission("Blog Category", "_Test Blog Category", "test2@example.com", ignore_permissions=True)
add_user_permission("Blog Category", "-test-blog-category", "test2@example.com", ignore_permissions=True)
frappe.clear_cache()
doc = frappe.new_doc("Blog Post")
self.assertFalse(doc.get("blog_category"))

# Fetch user permission set as default from multiple user permission
add_user_permission("Blog Category", "_Test Blog Category 2", "test2@example.com", ignore_permissions=True, is_default=1)
add_user_permission("Blog Category", "-test-blog-category-2", "test2@example.com", ignore_permissions=True, is_default=1)
frappe.clear_cache()
doc = frappe.new_doc("Blog Post")
self.assertEqual(doc.get("blog_category"), "_Test Blog Category 2")
self.assertEqual(doc.get("blog_category"), "-test-blog-category-2")

def test_user_link_match_doc(self):
blogger = frappe.get_doc("Blogger", "_Test Blogger 1")
@@ -215,7 +215,7 @@ class TestPermissions(unittest.TestCase):
frappe.clear_cache(doctype='DocType')

def test_user_permission_doctypes(self):
add_user_permission("Blog Category", "_Test Blog Category 1",
add_user_permission("Blog Category", "-test-blog-category-1",
"test2@example.com")
add_user_permission("Blogger", "_Test Blogger 1",
"test2@example.com")
@@ -235,7 +235,7 @@ class TestPermissions(unittest.TestCase):
def if_owner_setup(self):
update('Blog Post', 'Blogger', 0, 'if_owner', 1)

add_user_permission("Blog Category", "_Test Blog Category 1",
add_user_permission("Blog Category", "-test-blog-category-1",
"test2@example.com")
add_user_permission("Blogger", "_Test Blogger 1",
"test2@example.com")
@@ -254,7 +254,7 @@ class TestPermissions(unittest.TestCase):

doc = frappe.get_doc({
"doctype": "Blog Post",
"blog_category": "_Test Blog Category",
"blog_category": "-test-blog-category",
"blogger": "_Test Blogger 1",
"title": "_Test Blog Post Title",
"content": "_Test Blog Post Content"
@@ -263,14 +263,14 @@ class TestPermissions(unittest.TestCase):
self.assertRaises(frappe.PermissionError, doc.insert)

frappe.set_user('test1@example.com')
add_user_permission("Blog Category", "_Test Blog Category",
add_user_permission("Blog Category", "-test-blog-category",
"test2@example.com")

frappe.set_user("test2@example.com")
doc.insert()

frappe.set_user("Administrator")
remove_user_permission("Blog Category", "_Test Blog Category",
remove_user_permission("Blog Category", "-test-blog-category",
"test2@example.com")

frappe.set_user("test2@example.com")
@@ -286,13 +286,13 @@ class TestPermissions(unittest.TestCase):
def test_ignore_user_permissions_if_missing(self):
"""If there are no user permissions, then allow as per role"""

add_user_permission("Blog Category", "_Test Blog Category",
add_user_permission("Blog Category", "-test-blog-category",
"test2@example.com")
frappe.set_user("test2@example.com")

doc = frappe.get_doc({
"doctype": "Blog Post",
"blog_category": "_Test Blog Category 2",
"blog_category": "-test-blog-category-2",
"blogger": "_Test Blogger 1",
"title": "_Test Blog Post Title",
"content": "_Test Blog Post Content"
@@ -301,7 +301,7 @@ class TestPermissions(unittest.TestCase):
self.assertFalse(doc.has_permission("write"))

frappe.set_user("Administrator")
remove_user_permission("Blog Category", "_Test Blog Category",
remove_user_permission("Blog Category", "-test-blog-category",
"test2@example.com")

frappe.set_user("test2@example.com")
@@ -420,7 +420,7 @@ class TestPermissions(unittest.TestCase):

doc = frappe.get_doc({
"doctype": "Blog Post",
"blog_category": "_Test Blog Category",
"blog_category": "-test-blog-category",
"blogger": "_Test Blogger 1",
"title": "_Test Blog Post Title",
"content": "_Test Blog Post Content"
@@ -454,7 +454,7 @@ class TestPermissions(unittest.TestCase):

add_user_permission('Blog Post', '-test-blog-post-1', 'test2@example.com')
add_user_permission('Blog Post', '-test-blog-post-2', 'test2@example.com')
add_user_permission("Blog Category", '_Test Blog Category 1', 'test2@example.com')
add_user_permission("Blog Category", '-test-blog-category-1', 'test2@example.com')

deleted_user_permission_count = clear_user_permissions('test2@example.com', 'Blog Post')



+ 6
- 12
frappe/website/doctype/blog_category/blog_category.json View File

@@ -2,26 +2,17 @@
"actions": [],
"allow_guest_to_view": 1,
"allow_import": 1,
"autoname": "field:category_name",
"allow_rename": 1,
"creation": "2013-03-08 09:41:11",
"doctype": "DocType",
"document_type": "Setup",
"engine": "InnoDB",
"field_order": [
"category_name",
"title",
"published",
"route"
],
"fields": [
{
"fieldname": "category_name",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Category Name",
"reqd": 1,
"unique": 1
},
{
"fieldname": "title",
"fieldtype": "Data",
@@ -31,7 +22,7 @@
"reqd": 1
},
{
"default": "0",
"default": "1",
"fieldname": "published",
"fieldtype": "Check",
"in_list_view": 1,
@@ -42,15 +33,17 @@
"fieldname": "route",
"fieldtype": "Data",
"label": "Route",
"read_only": 1,
"unique": 1
}
],
"has_web_view": 1,
"icon": "fa fa-tag",
"idx": 1,
"index_web_pages_for_search": 1,
"is_published_field": "published",
"links": [],
"modified": "2020-07-29 21:14:47.210446",
"modified": "2020-08-21 11:40:36.919321",
"modified_by": "Administrator",
"module": "Website",
"name": "Blog Category",
@@ -78,5 +71,6 @@
"quick_entry": 1,
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "title",
"track_changes": 1
}

+ 4
- 5
frappe/website/doctype/blog_category/blog_category.py View File

@@ -8,12 +8,11 @@ from frappe.website.render import clear_cache
class BlogCategory(WebsiteGenerator):
def autoname(self):
# to override autoname of WebsiteGenerator
self.name = self.category_name
self.name = self.scrub(self.title)

def on_update(self):
clear_cache()

def validate(self):
if not self.route:
self.route = 'blog/' + self.scrub(self.name)
super(BlogCategory, self).validate()
def set_route(self):
# Override blog route since it has to been templated
self.route = 'blog/' + self.name

+ 3
- 1
frappe/website/doctype/blog_category/test_blog_category.py View File

@@ -3,5 +3,7 @@
from __future__ import unicode_literals

import frappe
import unittest

test_records = frappe.get_test_records('Blog Category')
class TestBlogCategory(unittest.TestCase):
pass

+ 0
- 3
frappe/website/doctype/blog_category/test_records.json View File

@@ -1,18 +1,15 @@
[
{
"category_name": "_Test Blog Category",
"doctype": "Blog Category",
"parent_website_route": "blog",
"title": "_Test Blog Category"
},
{
"category_name": "_Test Blog Category 1",
"doctype": "Blog Category",
"parent_website_route": "blog",
"title": "_Test Blog Category 1"
},
{
"category_name": "_Test Blog Category 2",
"doctype": "Blog Category",
"parent_website_route": "blog",
"title": "_Test Blog Category 2"


+ 1
- 1
frappe/website/doctype/blog_post/templates/blog_post.html View File

@@ -12,7 +12,7 @@
<div>
<a class="mr-2" href="/blog">{{ _('Blog') }}</a>
<span class="text-muted">/</span>
<a class="ml-2" href="/blog/{{ category.title }}">{{ category.title }}</a>
<a class="ml-2" href="/{{ category.route }}">{{ category.title }}</a>
</div>
<h1 itemprop="headline" class="blog-title">{{ title }}</h1>
<p class="blog-intro">


+ 31
- 3
frappe/website/doctype/blog_post/test_blog_post.py View File

@@ -3,6 +3,8 @@
from __future__ import unicode_literals
import frappe
import unittest
from bs4 import BeautifulSoup
import re

from frappe.utils import set_request
from frappe.website.render import render
@@ -32,11 +34,37 @@ class TestBlogPost(unittest.TestCase):

self.assertTrue(response.status_code, 404)

def test_category_link(self):
# Make a temporary Blog Post (and a Blog Category)
blog = make_test_blog()

# Visit the blog post page
set_request(path=blog.route)
blog_page_response = render()
blog_page_html = frappe.safe_decode(blog_page_response.get_data())

# On blog post page find link to the category page
soup = BeautifulSoup(blog_page_html, "lxml")
category_page_link = list(soup.find_all('a', href=re.compile(blog.blog_category)))[0]
category_page_url = category_page_link["href"]

# Visit the category page (by following the link found in above stage)
set_request(path=category_page_url)
category_page_response = render()
category_page_html = frappe.safe_decode(category_page_response.get_data())

# Category page should contain the blog post title
self.assertIn(blog.title, category_page_html)

# Cleanup afterwords
frappe.delete_doc("Blog Post", blog.name)
frappe.delete_doc("Blog Category", blog.blog_category)

def make_test_blog():
if not frappe.db.exists('Blog Category', 'Test Blog Category'):
if not frappe.db.exists('Blog Category', 'test-blog-category'):
# Set different title and name for the category
frappe.get_doc(dict(
doctype = 'Blog Category',
category_name = 'Test Blog Category',
title='Test Blog Category')).insert()
if not frappe.db.exists('Blogger', 'test-blogger'):
frappe.get_doc(dict(
@@ -45,7 +73,7 @@ def make_test_blog():
full_name='Test Blogger')).insert()
test_blog = frappe.get_doc(dict(
doctype = 'Blog Post',
blog_category = 'Test Blog Category',
blog_category = 'test-blog-category',
blogger = 'test-blogger',
title = random_string(20),
route = random_string(20),


+ 5
- 5
frappe/website/doctype/blog_post/test_records.json View File

@@ -1,6 +1,6 @@
[
{
"blog_category": "_Test Blog Category",
"blog_category": "-test-blog-category",
"blog_intro": "Test Blog Intro",
"blogger": "_Test Blogger",
"content": "Test Blog Content",
@@ -9,7 +9,7 @@
"published": 1
},
{
"blog_category": "_Test Blog Category 1",
"blog_category": "-test-blog-category-1",
"blog_intro": "Test Blog Intro",
"blogger": "_Test Blogger",
"content": "Test Blog Content",
@@ -18,7 +18,7 @@
"published": 1
},
{
"blog_category": "_Test Blog Category 1",
"blog_category": "-test-blog-category-1",
"blog_intro": "Test Blog Intro",
"blogger": "_Test Blogger 1",
"content": "Test Blog Content",
@@ -27,7 +27,7 @@
"published": 0
},
{
"blog_category": "_Test Blog Category 1",
"blog_category": "-test-blog-category-1",
"blog_intro": "Test Blog Intro",
"blogger": "_Test Blogger 2",
"content": "Test Blog Content",
@@ -35,4 +35,4 @@
"title": "_Test Blog Post 3",
"published": 0
}
]
]

Loading…
Cancel
Save