diff --git a/CHANGES.rst b/CHANGES.rst index 041ca48e2e..44f59fa555 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,7 @@ Changelog 2.2.0 (unreleased) ------------------ +- #2008 Import demo data in tests with Generic Setup - #2002 Allow string results for calculation dependencies - #2004 Added behavior to allow sharing objects across clients users - #2001 Fix Traceback when rendering UIDReferenceWidget with limited privileges diff --git a/src/senaite/core/exportimport/genericsetup/structure.py b/src/senaite/core/exportimport/genericsetup/structure.py index 0752070ed6..d669d3bdee 100644 --- a/src/senaite/core/exportimport/genericsetup/structure.py +++ b/src/senaite/core/exportimport/genericsetup/structure.py @@ -582,8 +582,10 @@ def import_xml(context): qi = api.get_tool("portal_quickinstaller") installed = qi.isProductInstalled("senaite.core") + request = api.get_request() - if not installed: + # tests call it w/o request + if request and not installed: logger.debug("Nothing to import.") return diff --git a/src/senaite/core/tests/layers.py b/src/senaite/core/tests/layers.py index 111d84d08e..97aff36ca3 100644 --- a/src/senaite/core/tests/layers.py +++ b/src/senaite/core/tests/layers.py @@ -18,8 +18,10 @@ # Copyright 2018-2021 by it's authors. # Some rights reserved, see README and LICENSE. +import os + import transaction -from senaite.core.exportimport.load_setup_data import LoadSetupData +from bika.lims import api from plone.app.testing import PLONE_FIXTURE from plone.app.testing import SITE_OWNER_NAME from plone.app.testing import FunctionalTesting @@ -28,6 +30,7 @@ from plone.app.testing import login from plone.app.testing import logout from plone.testing import zope +from Products.GenericSetup.context import TarballImportContext class BaseLayer(PloneSandboxLayer): @@ -73,20 +76,30 @@ class DataLayer(BaseLayer): """ def setup_data_load(self, portal, request): - login(portal.aq_parent, SITE_OWNER_NAME) # again + """Provision site with demo data + """ + login(portal.aq_parent, SITE_OWNER_NAME) + + setup_tool = api.get_tool("portal_setup") + curdir = os.path.dirname(__file__) + path = os.path.join(curdir, "setup_tool-demodata.tar.gz") + + with open(path, "rb") as tarball: + context = TarballImportContext( + tool=setup_tool, + archive_bits=tarball.read(), + encoding="UTF-8", + should_purge=True) + setup_tool._doRunImportStep("senaite.core.import", context) + + transaction.commit() - # load test data - request.form["setupexisting"] = 1 - request.form["existing"] = "bika.lims:test" - lsd = LoadSetupData(portal, request) - lsd() logout() def setUpPloneSite(self, portal): super(DataLayer, self).setUpPloneSite(portal) # Install Demo Data self.setup_data_load(portal, portal.REQUEST) - transaction.commit() BASE_LAYER_FIXTURE = BaseLayer() diff --git a/src/senaite/core/tests/setup_tool-demodata.tar.gz b/src/senaite/core/tests/setup_tool-demodata.tar.gz new file mode 100644 index 0000000000..2ad2b3484c Binary files /dev/null and b/src/senaite/core/tests/setup_tool-demodata.tar.gz differ