Bladeren bron

test: docshare with submit permission

version-14
Rucha Mahabal 4 jaren geleden
bovenliggende
commit
b3066f3702
3 gewijzigde bestanden met toevoegingen van 33 en 5 verwijderingen
  1. +4
    -4
      frappe/automation/doctype/auto_repeat/test_auto_repeat.py
  2. +7
    -1
      frappe/core/doctype/docshare/docshare.py
  3. +22
    -0
      frappe/core/doctype/docshare/test_docshare.py

+ 4
- 4
frappe/automation/doctype/auto_repeat/test_auto_repeat.py Bestand weergeven

@@ -196,7 +196,7 @@ def make_auto_repeat(**args):
return doc return doc




def create_submittable_doctype(doctype):
def create_submittable_doctype(doctype, submit_perms=1):
if frappe.db.exists('DocType', doctype): if frappe.db.exists('DocType', doctype):
return return
else: else:
@@ -217,9 +217,9 @@ def create_submittable_doctype(doctype):
'write': 1, 'write': 1,
'create': 1, 'create': 1,
'delete': 1, 'delete': 1,
'submit': 1,
'cancel': 1,
'amend': 1
'submit': submit_perms,
'cancel': submit_perms,
'amend': submit_perms
}] }]
}).insert() }).insert()




+ 7
- 1
frappe/core/doctype/docshare/docshare.py Bestand weergeven

@@ -5,7 +5,7 @@ from __future__ import unicode_literals
import frappe import frappe
from frappe.model.document import Document from frappe.model.document import Document
from frappe import _ from frappe import _
from frappe.utils import get_fullname
from frappe.utils import get_fullname, cint


exclude_from_linked_with = True exclude_from_linked_with = True


@@ -15,6 +15,7 @@ class DocShare(Document):
def validate(self): def validate(self):
self.validate_user() self.validate_user()
self.check_share_permission() self.check_share_permission()
self.check_is_submittable()
self.cascade_permissions_downwards() self.cascade_permissions_downwards()
self.get_doc().run_method("validate_share", self) self.get_doc().run_method("validate_share", self)


@@ -41,6 +42,11 @@ class DocShare(Document):


frappe.throw(_('You need to have "Share" permission'), frappe.PermissionError) frappe.throw(_('You need to have "Share" permission'), frappe.PermissionError)


def check_is_submittable(self):
if self.submit and not cint(frappe.db.get_value("DocType", self.share_doctype, "is_submittable")):
frappe.throw(_("Cannot share {0} with submit permission as the doctype {1} is not submittable").format(
frappe.bold(self.share_name), frppe.bold(self.share_doctype)))

def after_insert(self): def after_insert(self):
doc = self.get_doc() doc = self.get_doc()
owner = get_fullname(self.owner) owner = get_fullname(self.owner)


+ 22
- 0
frappe/core/doctype/docshare/test_docshare.py Bestand weergeven

@@ -5,6 +5,7 @@ from __future__ import unicode_literals
import frappe import frappe
import frappe.share import frappe.share
import unittest import unittest
from frappe.automation.doctype.auto_repeat.test_auto_repeat import create_submittable_doctype


class TestDocShare(unittest.TestCase): class TestDocShare(unittest.TestCase):
def setUp(self): def setUp(self):
@@ -91,3 +92,24 @@ class TestDocShare(unittest.TestCase):
self.assertTrue(self.event.name not in frappe.share.get_shared("Event", self.user)) self.assertTrue(self.event.name not in frappe.share.get_shared("Event", self.user))
self.assertTrue(self.event.name not in frappe.share.get_shared("Event", "test1@example.com")) self.assertTrue(self.event.name not in frappe.share.get_shared("Event", "test1@example.com"))
self.assertTrue(self.event.name not in frappe.share.get_shared("Event", "Guest")) self.assertTrue(self.event.name not in frappe.share.get_shared("Event", "Guest"))

def test_share_with_submit_perm(self):
doctype = "Test DocShare with Submit"
create_submittable_doctype(doctype, submit_perms=0)

submittable_doc = frappe.get_doc(dict(doctype=doctype, test="test docshare with submit")).insert()

frappe.set_user(self.user)
self.assertFalse(frappe.has_permission(doctype, "submit", user=self.user))

frappe.set_user("Administrator")
frappe.share.add(doctype, submittable_doc.name, self.user, submit=1)

frappe.set_user(self.user)
self.assertTrue(frappe.has_permission(doctype, "submit", doc=submittable_doc.name, user=self.user))

# test cascade
self.assertTrue(frappe.has_permission(doctype, "read", doc=submittable_doc.name, user=self.user))
self.assertTrue(frappe.has_permission(doctype, "write", doc=submittable_doc.name, user=self.user))

frappe.share.remove(doctype, submittable_doc.name, self.user)

Laden…
Annuleren
Opslaan