Skip to content

Commit

Permalink
fix: remove plone.api usage
Browse files Browse the repository at this point in the history
  • Loading branch information
gforcada committed Feb 21, 2025
1 parent 3099c7a commit fc20467
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 24 deletions.
36 changes: 29 additions & 7 deletions Products/CMFPlone/tests/test_login_help.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from plone import api
from plone.registry.interfaces import IRegistry
from plone.testing.zope import Browser
from Products.CMFPlone.browser.login.login_help import RequestResetPassword
from Products.CMFPlone.browser.login.login_help import RequestUsername
from Products.CMFPlone.testing import PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING
from Products.CMFPlone.testing import PRODUCTS_CMFPLONE_INTEGRATION_TESTING
from zope.component import getMultiAdapter
from zope.component import getUtility

import transaction
import unittest
Expand Down Expand Up @@ -34,7 +35,8 @@ def test_view_form(self):
self.assertTrue(request_username())

def test_view_form_with_emaillogin(self):
api.portal.set_registry_record("plone.use_email_as_login", True)
registry = getUtility(IRegistry)
registry.records["plone.use_email_as_login"] = True
form = getMultiAdapter((self.portal, self.request), name="login-help")
self.assertEqual(form.subforms, [])
form.update()
Expand All @@ -61,7 +63,8 @@ def test_request_reset_password(self):
# no mail was sent since the user does not exist
self.request["form.widgets.reset_password"] = "test"

member = api.user.get("test_user_1_")
portal_membership = self.portal.get_tool("portal_membership")
member = portal_membership.getMemberById("test_user_1_")
email = "[email protected]"
member.setMemberProperties({"email": email})
self.request["form.widgets.reset_password"] = "test_user_1_"
Expand All @@ -85,7 +88,8 @@ def test_login_help_request_password_reset(self):
self.browser.getLink("Get help").click()
self.assertEqual(self.browser.url, "http://nohost/plone/@@login-help")

member = api.user.get("test_user_1_")
portal_membership = self.portal.get_tool("portal_membership")
member = portal_membership.getMemberById("test_user_1_")
email = "[email protected]"
member.setMemberProperties({"email": email})
transaction.commit()
Expand Down Expand Up @@ -121,7 +125,8 @@ def test_login_help_request_username(self):
self.browser.getLink("Get help").click()
self.assertEqual(self.browser.url, "http://nohost/plone/@@login-help")

member = api.user.get("test_user_1_")
portal_membership = self.portal.get_tool("portal_membership")
member = portal_membership.getMemberById("test_user_1_")
email = "[email protected]"
member.setMemberProperties({"email": email})
transaction.commit()
Expand Down Expand Up @@ -160,7 +165,7 @@ def test_login_help_request_username(self):
)
self.assertEqual(len(self.portal.MailHost.messages), 1)

api.user.create(
self._create_user(
username="another_user_same_email",
email="[email protected]",
password="password1",
Expand All @@ -178,7 +183,7 @@ def test_login_help_request_username(self):
)
self.assertEqual(len(self.portal.MailHost.messages), 1)

api.user.create(
self._create_user(
username="next_user_new_email",
email="[email protected]",
password="password1",
Expand All @@ -195,3 +200,20 @@ def test_login_help_request_username(self):
self.browser.contents,
)
self.assertEqual(len(self.portal.MailHost.messages), 2)

def _create_user(self, username, email, password, roles):
properties = {
"username": username,
"email": email,
}
registration = self.portal.get_tool("portal_registration")
registration.addMember(
username,
password,
roles,
properties=properties,
)

portal_membership = self.portal.get_tool("portal_membership")
member = portal_membership.getMemberById(username)
return member
72 changes: 55 additions & 17 deletions Products/CMFPlone/tests/test_relationhelper.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from plone import api
from plone.app.testing import setRoles
from plone.app.testing import TEST_USER_ID
from Products.CMFPlone.relationhelper import get_relations_stats
from Products.CMFPlone.relationhelper import rebuild_relations
from Products.CMFPlone.testing import PRODUCTS_CMFPLONE_INTEGRATION_TESTING
from z3c.relationfield import RelationValue
from zope.component import getUtility
from zope.intid.interfaces import IIntIds
from zope.lifecycleevent import modified

import unittest

Expand All @@ -19,35 +20,49 @@ def setUp(self):
setRoles(self.portal, TEST_USER_ID, ("Manager",))

def test_relations_stats(self):
doc1 = api.content.create(type="Document", title="doc1", container=self.portal)
doc2 = api.content.create(type="Document", title="doc2", container=self.portal)
api.relation.create(doc1, doc2, "relatedItems")
doc1 = self._create_content(
type="Document", title="doc1", container=self.portal
)
doc2 = self._create_content(
type="Document", title="doc2", container=self.portal
)
self._create_relation(doc1, doc2, "relatedItems")

stats, broken = get_relations_stats()
self.assertEqual(dict(stats), {"relatedItems": 1})
self.assertEqual(dict(broken), {})

def test_relations_stats_broken(self):
doc1 = api.content.create(type="Document", title="doc1", container=self.portal)
doc2 = api.content.create(type="Document", title="doc2", container=self.portal)
api.relation.create(doc1, doc2, "relatedItems")
doc1 = self._create_content(
type="Document", title="doc1", container=self.portal
)
doc2 = self._create_content(
type="Document", title="doc2", container=self.portal
)
self._create_relation(doc1, doc2, "relatedItems")
self.portal._delObject("doc2")

stats, broken = get_relations_stats()
self.assertEqual(dict(stats), {})
self.assertEqual(dict(broken), {"relatedItems": 1})

def test_rebuild_relations(self):
doc1 = api.content.create(type="Document", title="doc1", container=self.portal)
doc2 = api.content.create(type="Document", title="doc2", container=self.portal)
doc3 = api.content.create(type="Document", title="doc3", container=self.portal)
doc1 = self._create_content(
type="Document", title="doc1", container=self.portal
)
doc2 = self._create_content(
type="Document", title="doc2", container=self.portal
)
doc3 = self._create_content(
type="Document", title="doc3", container=self.portal
)
intids = getUtility(IIntIds)
doc1_intid = intids.getId(doc1)
doc2_intid = intids.getId(doc2)
doc3_intid = intids.getId(doc3)

api.relation.create(doc1, doc2, "relatedItems")
api.relation.create(doc1, doc3, "relatedItems")
self._create_relation(doc1, doc2, "relatedItems")
self._create_relation(doc1, doc3, "relatedItems")

stats, broken = get_relations_stats()
self.assertEqual(dict(stats), {"relatedItems": 2})
Expand Down Expand Up @@ -90,16 +105,22 @@ def test_rebuild_relations(self):
self.assertEqual(dict(broken), {})

def test_rebuild_relations_with_intid_flush(self):
doc1 = api.content.create(type="Document", title="doc1", container=self.portal)
doc2 = api.content.create(type="Document", title="doc2", container=self.portal)
doc3 = api.content.create(type="Document", title="doc3", container=self.portal)
doc1 = self._create_content(
type="Document", title="doc1", container=self.portal
)
doc2 = self._create_content(
type="Document", title="doc2", container=self.portal
)
doc3 = self._create_content(
type="Document", title="doc3", container=self.portal
)
intids = getUtility(IIntIds)
doc1_intid = intids.getId(doc1)
doc2_intid = intids.getId(doc2)
doc3_intid = intids.getId(doc3)

api.relation.create(doc1, doc2, "relatedItems")
api.relation.create(doc1, doc3, "relatedItems")
self._create_relation(doc1, doc2, "relatedItems")
self._create_relation(doc1, doc3, "relatedItems")

stats, broken = get_relations_stats()
self.assertEqual(dict(stats), {"relatedItems": 2})
Expand Down Expand Up @@ -132,3 +153,20 @@ def test_rebuild_relations_with_intid_flush(self):
stats, broken = get_relations_stats()
self.assertEqual(dict(stats), {"relatedItems": 1})
self.assertEqual(dict(broken), {})

def _create_content(self, type, title, container):
# Create a temporary id if the id is not given
content_id = title
container.invokeFactory(type, content_id)
content = container[content_id]
return content

def _create_relation(self, source, target, relationship):
intids = getUtility(IIntIds)
to_id = intids.getId(target)
from_attribute = relationship

existing_relations = getattr(source, from_attribute, None) or []
existing_relations.append(RelationValue(to_id))
setattr(source, from_attribute, existing_relations)
modified(source)

0 comments on commit fc20467

Please sign in to comment.