From cf370b804f693377c8d43c70d8a93b62547d6360 Mon Sep 17 00:00:00 2001 From: sandra Date: Wed, 14 Feb 2018 11:25:09 +0100 Subject: [PATCH 01/13] Added base_object to DefaultFactory --- src/pkan/dcatapde/config/interfaces.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pkan/dcatapde/config/interfaces.py b/src/pkan/dcatapde/config/interfaces.py index 36864dd7..bf26e651 100644 --- a/src/pkan/dcatapde/config/interfaces.py +++ b/src/pkan/dcatapde/config/interfaces.py @@ -22,6 +22,7 @@ def __call__(self): 'harvesting_type': harv.harvesting_type, 'data_cleaner': getattr(harv, 'data_cleaner', None), 'source_type': harv.source_type, + 'base_object': harv.base_object, }) return res From b75a17fd4663bcef9ae2c762179cb37de154c1e7 Mon Sep 17 00:00:00 2001 From: Thomas Massmann Date: Tue, 13 Feb 2018 17:34:33 +0100 Subject: [PATCH 02/13] Don't fail if we don't have any data. --- src/pkan/dcatapde/api/harvester.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pkan/dcatapde/api/harvester.py b/src/pkan/dcatapde/api/harvester.py index 0eb9c5ba..117c68d8 100644 --- a/src/pkan/dcatapde/api/harvester.py +++ b/src/pkan/dcatapde/api/harvester.py @@ -14,6 +14,9 @@ # Data Cleaning Methods def clean_harvester(**data): """Clean harvester.""" + if not data: + return data, () + if 'title' not in data: data['title'] = data['url'] From f35fdf5a6075a8d93000ce006daeeb2feb797d7b Mon Sep 17 00:00:00 2001 From: Thomas Massmann Date: Tue, 13 Feb 2018 17:34:57 +0100 Subject: [PATCH 03/13] Add missing base_object property. --- src/pkan/dcatapde/config/interfaces.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pkan/dcatapde/config/interfaces.py b/src/pkan/dcatapde/config/interfaces.py index bf26e651..08715e6a 100644 --- a/src/pkan/dcatapde/config/interfaces.py +++ b/src/pkan/dcatapde/config/interfaces.py @@ -19,6 +19,7 @@ def __call__(self): res.append({ 'title': harv.title, 'url': harv.url, + 'base_object': harv.base_object, 'harvesting_type': harv.harvesting_type, 'data_cleaner': getattr(harv, 'data_cleaner', None), 'source_type': harv.source_type, From 250e336d9c0fd014dddc8d72a22b10d8e1434a99 Mon Sep 17 00:00:00 2001 From: sandra Date: Wed, 14 Feb 2018 11:54:45 +0100 Subject: [PATCH 04/13] Removed duplicated base_object after rebase with branch tmassman-fixes. --- src/pkan/dcatapde/config/interfaces.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pkan/dcatapde/config/interfaces.py b/src/pkan/dcatapde/config/interfaces.py index 08715e6a..0093ee92 100644 --- a/src/pkan/dcatapde/config/interfaces.py +++ b/src/pkan/dcatapde/config/interfaces.py @@ -23,7 +23,6 @@ def __call__(self): 'harvesting_type': harv.harvesting_type, 'data_cleaner': getattr(harv, 'data_cleaner', None), 'source_type': harv.source_type, - 'base_object': harv.base_object, }) return res From e731b41242b6063cc3c46aa9a0b97652e2da60dd Mon Sep 17 00:00:00 2001 From: sandra Date: Wed, 14 Feb 2018 14:02:06 +0100 Subject: [PATCH 05/13] Added Edit-Link to table. --- src/pkan/dcatapde/browser/content_views/harvester.py | 1 + src/pkan/dcatapde/browser/content_views/templates/harvester.pt | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/pkan/dcatapde/browser/content_views/harvester.py b/src/pkan/dcatapde/browser/content_views/harvester.py index d7a90191..bd4ff5e0 100644 --- a/src/pkan/dcatapde/browser/content_views/harvester.py +++ b/src/pkan/dcatapde/browser/content_views/harvester.py @@ -30,6 +30,7 @@ def __call__(self, *args, **kwargs): 'dry_run': addTokenToUrl(path + '/dry_run'), 'real_run': addTokenToUrl(path + '/real_run'), 'reset_fields': addTokenToUrl(path + '/reset_fields'), + 'edit': addTokenToUrl(path + '/edit'), } if field_config: data['field_config'] = addTokenToUrl( diff --git a/src/pkan/dcatapde/browser/content_views/templates/harvester.pt b/src/pkan/dcatapde/browser/content_views/templates/harvester.pt index 5882ffac..dded9017 100644 --- a/src/pkan/dcatapde/browser/content_views/templates/harvester.pt +++ b/src/pkan/dcatapde/browser/content_views/templates/harvester.pt @@ -9,6 +9,7 @@ Harvester Data Source + Edit Dry Run Real Run Field Config @@ -21,6 +22,8 @@ tal:content="harv/title"> + Edit Harvester Dry Run Date: Wed, 14 Feb 2018 15:00:07 +0100 Subject: [PATCH 06/13] Added comments and Todos --- .../harvesting/data_cleaner/interfaces.py | 15 ++++++--------- .../dcatapde/harvesting/field_adapter/base.py | 5 +++++ .../dcatapde/harvesting/field_adapter/i18n.py | 2 ++ .../harvesting/field_adapter/interfaces.py | 16 ++++++++++++++++ .../harvesting/field_adapter/relationchoice.py | 8 ++++++-- .../harvesting/source_type/interfaces.py | 2 +- .../dcatapde/harvesting/source_type/rdfttl.py | 10 +++++----- 7 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/pkan/dcatapde/harvesting/data_cleaner/interfaces.py b/src/pkan/dcatapde/harvesting/data_cleaner/interfaces.py index 821ba039..339300c5 100644 --- a/src/pkan/dcatapde/harvesting/data_cleaner/interfaces.py +++ b/src/pkan/dcatapde/harvesting/data_cleaner/interfaces.py @@ -7,19 +7,16 @@ class IDataType(Interface): """Base Interface for preprocessing data.""" - def clean_data(self, data): - """Clear data and return it. + def clean_data(self, data_storage): + """Clean data. - :param data: - - data must be dictionary like - - {ct_identifier: {index: {field: list of data}}} + :param data_storage: + DataStorage-Instance for managing the data :return: """ - return data + return class IPotsdamCleaner(IDataType): - """Preprocessor Marker for Potsdam.""" + """Marker for Potsdam.""" diff --git a/src/pkan/dcatapde/harvesting/field_adapter/base.py b/src/pkan/dcatapde/harvesting/field_adapter/base.py index 97b49660..61ea8539 100644 --- a/src/pkan/dcatapde/harvesting/field_adapter/base.py +++ b/src/pkan/dcatapde/harvesting/field_adapter/base.py @@ -13,6 +13,11 @@ @adapter(IField) @implementer(IFieldProcessor) class BaseField(object): + """ + Base Adapter. + Deals with simple, unsplitted fields. + Convert values to unicode. + """ def __init__(self, field): self.field = field diff --git a/src/pkan/dcatapde/harvesting/field_adapter/i18n.py b/src/pkan/dcatapde/harvesting/field_adapter/i18n.py index 0a3c33a0..95f87c72 100644 --- a/src/pkan/dcatapde/harvesting/field_adapter/i18n.py +++ b/src/pkan/dcatapde/harvesting/field_adapter/i18n.py @@ -17,6 +17,8 @@ @implementer(IFieldProcessor) class I18nTextAdapter(BaseField): """ + I18NFields are splitted to content and language in vocabulary. + Values are combined to dictionary mapping language to content. """ suffix = [_(u'language'), _(u'content')] diff --git a/src/pkan/dcatapde/harvesting/field_adapter/interfaces.py b/src/pkan/dcatapde/harvesting/field_adapter/interfaces.py index 95bc3f43..ff6a3bd5 100644 --- a/src/pkan/dcatapde/harvesting/field_adapter/interfaces.py +++ b/src/pkan/dcatapde/harvesting/field_adapter/interfaces.py @@ -5,7 +5,23 @@ class IFieldProcessor(Interface): def get_terms_for_vocab(self, ct, field_name, prefix='', required=False): + """ + Manages terms for vocab. Returns a list of SimpleTerms. + Number of Terms depends on Field-Type. + :param ct: + :param field_name: + :param prefix: + :param required: + :return: + """ pass def clean_value(self, data, field_id): + """ + Clean values. + Recombind splitted fields. Convert data in correct types. + :param data: + :param field_id: + :return: + """ pass diff --git a/src/pkan/dcatapde/harvesting/field_adapter/relationchoice.py b/src/pkan/dcatapde/harvesting/field_adapter/relationchoice.py index 3e13252b..c81f5e66 100644 --- a/src/pkan/dcatapde/harvesting/field_adapter/relationchoice.py +++ b/src/pkan/dcatapde/harvesting/field_adapter/relationchoice.py @@ -10,8 +10,12 @@ @adapter(IRelationChoice) @implementer(IFieldProcessor) class RelationAdapter(BaseField): - ''' - ''' + """ + Relations return terms for target contenttype with prefix. + The prefix indicates the parent contenttype and field. + + Values are cleaned by FieldAdapter of target interface. + """ def get_terms_for_vocab(self, ct, field_name, prefix='', required=False): terms = [] diff --git a/src/pkan/dcatapde/harvesting/source_type/interfaces.py b/src/pkan/dcatapde/harvesting/source_type/interfaces.py index 206aaaac..442cff04 100644 --- a/src/pkan/dcatapde/harvesting/source_type/interfaces.py +++ b/src/pkan/dcatapde/harvesting/source_type/interfaces.py @@ -6,7 +6,7 @@ class IImportSource(Interface): """Base Interface for Source types.""" - # Todo: new Import requires different fields + # Todo: new Import requires different fields/methods def read_available_fields(self): """Read fields from data source. diff --git a/src/pkan/dcatapde/harvesting/source_type/rdfttl.py b/src/pkan/dcatapde/harvesting/source_type/rdfttl.py index e85df400..91ab8f0a 100644 --- a/src/pkan/dcatapde/harvesting/source_type/rdfttl.py +++ b/src/pkan/dcatapde/harvesting/source_type/rdfttl.py @@ -48,12 +48,12 @@ def __init__(self, harvester): self.cleaned_data = None self.field_config = get_field_config(self.harvester) self.context = portal.get() - if self.field_config: - if self.field_config.base_object: - # fix: check why sometime to_object and sometimes not - self.context = getattr(self.field_config.base_object, + if self.harvester: + if self.harvester.base_object: + # Todo: check why sometime to_object and sometimes not + self.context = getattr(self.harvester.base_object, 'to_object', - self.field_config.base_object) + self.harvester.base_object) # determine the source format serializer string for rdflib from our # own interface. Todo this is a bit ugly From 34f2fc899cfb7fa2d8a508594581b3994ca60316 Mon Sep 17 00:00:00 2001 From: sandra Date: Wed, 14 Feb 2018 15:22:10 +0100 Subject: [PATCH 07/13] Added comments and Todos --- src/pkan/dcatapde/vocabularies/dcat_field.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pkan/dcatapde/vocabularies/dcat_field.py b/src/pkan/dcatapde/vocabularies/dcat_field.py index 3d131051..66849eae 100644 --- a/src/pkan/dcatapde/vocabularies/dcat_field.py +++ b/src/pkan/dcatapde/vocabularies/dcat_field.py @@ -30,6 +30,7 @@ def __call__(self, context): if harvester: processor = harvester.source_type(harvester) # Todo: Reimplement method in new RDF-Import + # Todo: Use CTInfo-Adapter to get fields for vocab. terms = processor.read_dcat_fields(ct=self.ct) # Create a SimpleVocabulary from the terms list and return it: From 6b936ca944260c46d31ff9943b76b8035613b337 Mon Sep 17 00:00:00 2001 From: sandra Date: Wed, 14 Feb 2018 17:48:58 +0100 Subject: [PATCH 08/13] Added comments and Todos --- src/pkan/dcatapde/browser/content_views/harvester.py | 2 ++ src/pkan/dcatapde/config/views.py | 1 + 2 files changed, 3 insertions(+) diff --git a/src/pkan/dcatapde/browser/content_views/harvester.py b/src/pkan/dcatapde/browser/content_views/harvester.py index bd4ff5e0..8bdb95c3 100644 --- a/src/pkan/dcatapde/browser/content_views/harvester.py +++ b/src/pkan/dcatapde/browser/content_views/harvester.py @@ -14,6 +14,8 @@ class HarvesterOverview(BrowserView): + # Todo: Split it in Controlpanel-View and Folder Overview + def __call__(self, *args, **kwargs): harvester = get_all_harvester() diff --git a/src/pkan/dcatapde/config/views.py b/src/pkan/dcatapde/config/views.py index a195a74a..d30c37c7 100644 --- a/src/pkan/dcatapde/config/views.py +++ b/src/pkan/dcatapde/config/views.py @@ -27,6 +27,7 @@ class HarvesterForm(AutoExtensibleForm, form.Form): """ # Todo: Not working anymore + # Todo: Remove it schema = IConfigHarvesterSchema ignoreContext = True From 9dbbebb83e1e8c8742d695b2ed5ebab4e31fa656 Mon Sep 17 00:00:00 2001 From: sandra Date: Thu, 15 Feb 2018 10:10:47 +0100 Subject: [PATCH 09/13] Removed Datagrid-View for Harvester --- .../browser/content_views/configure.zcml | 2 +- .../browser/content_views/harvester.py | 4 +- src/pkan/dcatapde/config/configure.zcml | 7 -- src/pkan/dcatapde/config/interfaces.py | 42 ------- src/pkan/dcatapde/config/views.py | 113 ------------------ .../dcatapde/profiles/default/actions.xml | 10 -- 6 files changed, 3 insertions(+), 175 deletions(-) delete mode 100644 src/pkan/dcatapde/config/interfaces.py diff --git a/src/pkan/dcatapde/browser/content_views/configure.zcml b/src/pkan/dcatapde/browser/content_views/configure.zcml index b306b83d..1f020500 100644 --- a/src/pkan/dcatapde/browser/content_views/configure.zcml +++ b/src/pkan/dcatapde/browser/content_views/configure.zcml @@ -30,7 +30,7 @@ diff --git a/src/pkan/dcatapde/browser/content_views/harvester.py b/src/pkan/dcatapde/browser/content_views/harvester.py index 8bdb95c3..240daf63 100644 --- a/src/pkan/dcatapde/browser/content_views/harvester.py +++ b/src/pkan/dcatapde/browser/content_views/harvester.py @@ -12,7 +12,7 @@ import copy -class HarvesterOverview(BrowserView): +class HarvesterFolderView(BrowserView): # Todo: Split it in Controlpanel-View and Folder Overview @@ -43,7 +43,7 @@ def __call__(self, *args, **kwargs): self.data.append(data) - return super(HarvesterOverview, self).__call__(*args, **kwargs) + return super(HarvesterFolderView, self).__call__(*args, **kwargs) class DryRunView(BrowserView): diff --git a/src/pkan/dcatapde/config/configure.zcml b/src/pkan/dcatapde/config/configure.zcml index 3a17d431..6d74ed60 100644 --- a/src/pkan/dcatapde/config/configure.zcml +++ b/src/pkan/dcatapde/config/configure.zcml @@ -11,11 +11,4 @@ template="templates/controlpanel.pt" /> - - diff --git a/src/pkan/dcatapde/config/interfaces.py b/src/pkan/dcatapde/config/interfaces.py deleted file mode 100644 index 0093ee92..00000000 --- a/src/pkan/dcatapde/config/interfaces.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -"""Configuration Interfaces.""" - -from collective.z3cform.datagridfield import DictRow -from pkan.dcatapde import _ -from pkan.dcatapde.api.harvester import get_all_harvester -from pkan.dcatapde.content.harvester import IHarvester -from plone.supermodel import model -from zope import schema - - -class HarvesterDefaultFactory(object): - """Harvester Default Factory.""" - - def __call__(self): - harvester = get_all_harvester() - res = [] - for harv in harvester: - res.append({ - 'title': harv.title, - 'url': harv.url, - 'base_object': harv.base_object, - 'harvesting_type': harv.harvesting_type, - 'data_cleaner': getattr(harv, 'data_cleaner', None), - 'source_type': harv.source_type, - }) - return res - - -class IConfigHarvesterSchema(model.Schema): - """Schema for Harvester Configuration.""" - - harvester = schema.List( - defaultFactory=HarvesterDefaultFactory(), - description=_(u'Configure Harvester to be filled with exported Data'), - required=False, - title=_(u'Harvester'), - value_type=DictRow( - title=_(u'Tables'), - schema=IHarvester, - ), - ) diff --git a/src/pkan/dcatapde/config/views.py b/src/pkan/dcatapde/config/views.py index d30c37c7..0d640f3f 100644 --- a/src/pkan/dcatapde/config/views.py +++ b/src/pkan/dcatapde/config/views.py @@ -1,121 +1,8 @@ # -*- coding: utf-8 -*- """Configuration Views.""" -from collective.z3cform.datagridfield import DataGridFieldFactory from pkan.dcatapde import _ -from pkan.dcatapde.api.harvester import add_harvester -from pkan.dcatapde.api.harvester import delete_harvester -from pkan.dcatapde.api.harvester import get_all_harvester -from pkan.dcatapde.api.harvester import get_harvester_folder -from pkan.dcatapde.config.interfaces import IConfigHarvesterSchema -from plone.app.registry.browser.controlpanel import ControlPanelFormWrapper -from plone.autoform.form import AutoExtensibleForm -from plone.z3cform import layout from Products.Five.browser import BrowserView -from Products.statusmessages.interfaces import IStatusMessage -from z3c.form import button -from z3c.form import field -from z3c.form import form -from z3c.form.interfaces import ActionExecutionError -from zope.interface import Invalid - - -class HarvesterForm(AutoExtensibleForm, form.Form): - """Define Form handling. - - This form can be accessed as http://yoursite/@@my-form - - """ - # Todo: Not working anymore - # Todo: Remove it - - schema = IConfigHarvesterSchema - ignoreContext = True - - fields = field.Fields(IConfigHarvesterSchema) - fields['harvester'].widgetFactory = DataGridFieldFactory - - label = _(u'Harverster Configuration') - - def __init__(self, *args, **kwargs): - self.description = _(u"""Configure your Harvester here.""") - - super(HarvesterForm, self).__init__(*args, **kwargs) - - @button.buttonAndHandler(u'Ok') - def handleApply(self, action): - data, errors = self.extractData() - if errors: - self.status = self.formErrorsMessage - return - - harvester_folder = get_harvester_folder() - - if not harvester_folder: - raise ActionExecutionError( - Invalid('Please create Harvester-Folder first'), - ) - - harvester = data['harvester'] - - harvester_url = [] - - for element in harvester: - harvester_url.append(element['url']) - - created_harvester = get_all_harvester() - created_harvester_url = [] - - for obj in created_harvester: - created_harvester_url.append(obj.url) - - all = set(created_harvester_url + harvester_url) - - for url in all: - if url in created_harvester_url and url not in harvester_url: - index = created_harvester_url.index(url) - delete_harvester(created_harvester[index]) - elif url in harvester_url and url not in created_harvester_url: - index = harvester_url.index(url) - add_harvester(self.context, **harvester[index]) - else: - index = created_harvester_url.index(url) - harvester_obj = (created_harvester[index]) - index = harvester_url.index(url) - harv_data = harvester[index] - - harvester_obj.harvesting_type = harv_data['harvesting_type'] - harvester_obj.data_cleaner = harv_data['data_cleaner'] - harvester_obj.source_type = harv_data['source_type'] - harvester_obj.title = harv_data['title'] - - self.successMessage = _(u'Stored Changes') - IStatusMessage(self.request).addStatusMessage( - self.successMessage) - - @button.buttonAndHandler(u'Cancel') - def handleCancel(self, action): - """User cancelled. Redirect back to the front page.""" - - -class HarvesterView(BrowserView): - """View which wraps the settings form. - - It does so using ControlPanelFormWrapper to a HTML boilerplate frame. - """ - - def __call__(self, *args, **kwargs): - view_factor = layout.wrap_form( - HarvesterForm, - ControlPanelFormWrapper, - ) - view = view_factor(self.context, self.request) - return view() - - def parent_panel_url(self): - return '{url}/@@pkan-dcatapde-config'.format( - url=self.context.absolute_url(), - ) class MainControlPanelView(BrowserView): diff --git a/src/pkan/dcatapde/profiles/default/actions.xml b/src/pkan/dcatapde/profiles/default/actions.xml index 96586cf5..fb855321 100644 --- a/src/pkan/dcatapde/profiles/default/actions.xml +++ b/src/pkan/dcatapde/profiles/default/actions.xml @@ -8,16 +8,6 @@ - - Harvester Configuration - - string:$object_url/@@harvester-config - string:$portal_url/++resource++jqueryui_icon.jpg - - - - True - Harvester Overview From 4cdefed83e5a5e0c8521fe292923c9ad0602d60b Mon Sep 17 00:00:00 2001 From: sandra Date: Thu, 15 Feb 2018 11:25:49 +0100 Subject: [PATCH 10/13] Splitted View for Controlpanel and HarvesterFolder --- src/pkan/dcatapde/api/harvester.py | 15 +++- .../browser/content_views/configure.zcml | 8 ++ .../browser/content_views/harvester.py | 86 ++++++++++++++----- .../content_views/templates/harvester.pt | 2 +- .../templates/harvester_overview.pt | 45 ++++++++++ 5 files changed, 131 insertions(+), 25 deletions(-) create mode 100644 src/pkan/dcatapde/browser/content_views/templates/harvester_overview.pt diff --git a/src/pkan/dcatapde/api/harvester.py b/src/pkan/dcatapde/api/harvester.py index 117c68d8..25f15c0b 100644 --- a/src/pkan/dcatapde/api/harvester.py +++ b/src/pkan/dcatapde/api/harvester.py @@ -95,7 +95,7 @@ def get_harvester_folder(): def get_all_harvester(): - """Find the folder where the harvester_folder live.""" + """Get all harvester,""" portal = getSite() if not portal: return None @@ -107,6 +107,19 @@ def get_all_harvester(): return harvester +def get_all_harvester_folder(): + """Find all HarvesterFolder""" + portal = getSite() + if not portal: + return None + catalog = portal.portal_catalog + res = catalog.searchResults({'portal_type': constants.CT_HARVESTER_FOLDER}) + folder = [] + for brain in res: + folder.append(brain.getObject()) + return folder + + # Delete Methods def delete_harvester(object): """Remove a harvester.""" diff --git a/src/pkan/dcatapde/browser/content_views/configure.zcml b/src/pkan/dcatapde/browser/content_views/configure.zcml index 1f020500..d47d981d 100644 --- a/src/pkan/dcatapde/browser/content_views/configure.zcml +++ b/src/pkan/dcatapde/browser/content_views/configure.zcml @@ -30,6 +30,14 @@ + + - Harvester + Harvester Data Source Edit Dry Run diff --git a/src/pkan/dcatapde/browser/content_views/templates/harvester_overview.pt b/src/pkan/dcatapde/browser/content_views/templates/harvester_overview.pt new file mode 100644 index 00000000..722163ef --- /dev/null +++ b/src/pkan/dcatapde/browser/content_views/templates/harvester_overview.pt @@ -0,0 +1,45 @@ + + + +
+

+ View +

Content:

+ + + + + + + + + + + + + + + + + + + + + + + +
HarvesterData SourceEditDry RunReal RunField ConfigReset Fields
Edit HarvesterDry RunReal RunField ConfigReset Fields
+

+
+ + From 6d932568d44b3835eaa4fca581d4d71306ef4990 Mon Sep 17 00:00:00 2001 From: sandra Date: Thu, 15 Feb 2018 14:07:03 +0100 Subject: [PATCH 11/13] Started adding tests --- src/pkan/dcatapde/api/harvester.py | 7 +- .../tests/robot/notest_harvester.robot | 61 ------------ .../tests/robot/notest_harvesterfolder.robot | 61 ------------ .../dcatapde/tests/robot/test_harvester.robot | 98 +++++++++++++++++++ ...older.robot => test_harvesterfolder.robot} | 0 5 files changed, 103 insertions(+), 124 deletions(-) delete mode 100644 src/pkan/dcatapde/tests/robot/notest_harvester.robot delete mode 100644 src/pkan/dcatapde/tests/robot/notest_harvesterfolder.robot create mode 100644 src/pkan/dcatapde/tests/robot/test_harvester.robot rename src/pkan/dcatapde/tests/robot/{harvesterfolder.robot => test_harvesterfolder.robot} (100%) diff --git a/src/pkan/dcatapde/api/harvester.py b/src/pkan/dcatapde/api/harvester.py index 25f15c0b..715d01dc 100644 --- a/src/pkan/dcatapde/api/harvester.py +++ b/src/pkan/dcatapde/api/harvester.py @@ -36,6 +36,7 @@ def clean_harvester(**data): def clean_harvesterfolder(**data): """Clean Harvesterfolder.""" test_obj = Harvesterfolder() + test_obj.id = constants.HARVESTER_FOLDER_ID test_obj.title = constants.HARVESTER_FOLDER_TITLE @@ -70,11 +71,13 @@ def add_harvester_folder(context, **data): data, errors = clean_harvesterfolder(**data) # set id and title, title for presentation and id for addressing the object + if 'title' not in data: + data['title'] = constants.HARVESTER_FOLDER_TITLE + if 'id' not in data: + data['id'] = constants.HARVESTER_FOLDER_ID harvester_folder = api.content.create( container=context, type=constants.CT_HARVESTER_FOLDER, - title=constants.HARVESTER_FOLDER_TITLE, - id=constants.HARVESTER_FOLDER_ID, **data) return harvester_folder diff --git a/src/pkan/dcatapde/tests/robot/notest_harvester.robot b/src/pkan/dcatapde/tests/robot/notest_harvester.robot deleted file mode 100644 index 690c61d2..00000000 --- a/src/pkan/dcatapde/tests/robot/notest_harvester.robot +++ /dev/null @@ -1,61 +0,0 @@ -*** Settings ***************************************************************** - -Resource keywords.robot - -Suite Setup Setup -Suite Teardown Teardown - - -*** Test Cases *************************************************************** - -Scenario: As a site administrator I can add a harvester - Given a logged-in site administrator - and an add harvester form - When I type 'My Harvester' into the title field - and I submit the form - Then a harvester with the title 'My Harvester' has been created - -Scenario: As a site administrator I can view a harvester - Given a logged-in site administrator - and a harvester 'My Harvester' - When I go to the harvester view - Then I can see the harvester title 'My Harvester' - - -*** Keywords ***************************************************************** - -# --- Given ------------------------------------------------------------------ - -a logged-in site administrator - Enable autologin as Site Administrator - -an add harvester form - Go To ${PLONE_URL}/++add++harvester - -a harvester 'My Harvester' - Create content type=harvester id=my-harvester title=My Harvester - - -# --- WHEN ------------------------------------------------------------------- - -I type '${title}' into the title field - Input Text name=form.widgets.IDublinCore.title ${title} - -I submit the form - Click Button Save - -I go to the harvester view - Go To ${PLONE_URL}/my-harvester - Wait until page contains Site Map - - -# --- THEN ------------------------------------------------------------------- - -a harvester with the title '${title}' has been created - Wait until page contains Site Map - Page should contain ${title} - Page should contain Item created - -I can see the harvester title '${title}' - Wait until page contains Site Map - Page should contain ${title} diff --git a/src/pkan/dcatapde/tests/robot/notest_harvesterfolder.robot b/src/pkan/dcatapde/tests/robot/notest_harvesterfolder.robot deleted file mode 100644 index 85e8c062..00000000 --- a/src/pkan/dcatapde/tests/robot/notest_harvesterfolder.robot +++ /dev/null @@ -1,61 +0,0 @@ -*** Settings ***************************************************************** - -Resource keywords.robot - -Suite Setup Setup -Suite Teardown Teardown - - -*** Test Cases *************************************************************** - -Scenario: As a site administrator I can add a harvesterfolder - Given a logged-in site administrator - and an add harvesterfolder form - When I type 'My HarvesterFolder' into the title field - and I submit the form - Then a harvesterfolder with the title 'My HarvesterFolder' has been created - -Scenario: As a site administrator I can view a harvesterfolder - Given a logged-in site administrator - and a harvesterfolder 'My HarvesterFolder' - When I go to the harvesterfolder view - Then I can see the harvesterfolder title 'My HarvesterFolder' - - -*** Keywords ***************************************************************** - -# --- Given ------------------------------------------------------------------ - -a logged-in site administrator - Enable autologin as Site Administrator - -an add harvesterfolder form - Go To ${PLONE_URL}/++add++harvesterfolder - -a harvesterfolder 'My HarvesterFolder' - Create content type=harvesterfolder id=my-harvesterfolder title=My HarvesterFolder - - -# --- WHEN ------------------------------------------------------------------- - -I type '${title}' into the title field - Input Text name=form.widgets.IDublinCore.title ${title} - -I submit the form - Click Button Save - -I go to the harvesterfolder view - Go To ${PLONE_URL}/my-harvesterfolder - Wait until page contains Site Map - - -# --- THEN ------------------------------------------------------------------- - -a harvesterfolder with the title '${title}' has been created - Wait until page contains Site Map - Page should contain ${title} - Page should contain Item created - -I can see the harvesterfolder title '${title}' - Wait until page contains Site Map - Page should contain ${title} diff --git a/src/pkan/dcatapde/tests/robot/test_harvester.robot b/src/pkan/dcatapde/tests/robot/test_harvester.robot new file mode 100644 index 00000000..c2bbf888 --- /dev/null +++ b/src/pkan/dcatapde/tests/robot/test_harvester.robot @@ -0,0 +1,98 @@ +*** Settings ***************************************************************** + +Resource keywords.robot + +Suite Setup Setup +Suite Teardown Teardown + + +*** Test Cases *************************************************************** + +Scenario: As a site administrator I can add a harvester + Given a logged-in site administrator + and a harvester folder 'Harvester Folder' + and an add harvester form + When I type 'My Harvester' into the title field + and I type 'http://www.test.de' into the url field + and I submit the form + Then a harvester with the title 'My Harvester' has been created + +Scenario: As a site administrator I can view a harvester + Given a logged-in site administrator + and a harvester folder 'Harvester Folder' + and an add harvester form + When I type 'My Harvester' into the title field + and I type 'http://www.test.de' into the url field + and I submit the form + and I go to the harvester view + Then I can see the harvester title 'My Harvester' + +Scenario: As a site administrator I can view a harvester on folder_view + Given a logged-in site administrator + and a harvester folder 'Harvester Folder' + and an add harvester form + When I type 'My Harvester' into the title field + and I type 'http://www.test.de' into the url field + and I submit the form + and I go to harvester folder view + Then I can see the harvester title 'My Harvester' + +Scenario: As a site administrator I can view a harvester on control_panel + Given a logged-in site administrator + and a harvester folder 'Harvester Folder' + and an add harvester form + When I type 'My Harvester' into the title field + and I type 'http://www.test.de' into the url field + and I submit the form + and I go to controlpanel view + Then I can see the harvester title 'My Harvester' + + +*** Keywords ***************************************************************** + +# --- Given ------------------------------------------------------------------ + +a logged-in site administrator + Enable autologin as Site Administrator + +a harvester folder 'Harvester Folder' + Create content type=harvesterfolder id=my-harvesterfolder title=My HarvesterFolder + +an add harvester form + Go To ${PLONE_URL}/my-harvesterfolder/++add++harvester + + + +# --- WHEN ------------------------------------------------------------------- + +I type '${title}' into the title field + Input Text name=form.widgets.IDublinCore.title ${title} + +I type '${url}' into the url field + Input Text name=form.widgets.url ${url} + +I submit the form + Click Button Save + +I go to the harvester view + Go To ${PLONE_URL}/my-harvester + Wait until page contains Site Map + +I go to harvester folder view + Go To ${PLONE_URL}/my-harvesterfolder/harvester_overview + Wait until page contains Site Map + +I go to controlpanel view + Go To ${PLONE_URL}/harvester_overview + Wait until page contains Site Map + +# --- THEN ------------------------------------------------------------------- + +a harvester with the title '${title}' has been created + Wait until page contains Site Map + Page should contain ${title} + Page should contain Item created + +I can see the harvester title '${title}' + Wait until page contains Site Map + Page should contain ${title} diff --git a/src/pkan/dcatapde/tests/robot/harvesterfolder.robot b/src/pkan/dcatapde/tests/robot/test_harvesterfolder.robot similarity index 100% rename from src/pkan/dcatapde/tests/robot/harvesterfolder.robot rename to src/pkan/dcatapde/tests/robot/test_harvesterfolder.robot From 47eb2056bdef42c3dd34e0a01d832722bfa33ed0 Mon Sep 17 00:00:00 2001 From: sandra Date: Thu, 15 Feb 2018 14:54:37 +0100 Subject: [PATCH 12/13] Corrected Tests --- .../dcatapde/tests/robot/test_harvester.robot | 22 +++++++++---------- .../tests/robot/test_harvesterfolder.robot | 12 +++++----- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/pkan/dcatapde/tests/robot/test_harvester.robot b/src/pkan/dcatapde/tests/robot/test_harvester.robot index c2bbf888..322d5940 100644 --- a/src/pkan/dcatapde/tests/robot/test_harvester.robot +++ b/src/pkan/dcatapde/tests/robot/test_harvester.robot @@ -8,8 +8,8 @@ Suite Teardown Teardown *** Test Cases *************************************************************** -Scenario: As a site administrator I can add a harvester - Given a logged-in site administrator +Scenario: As a manager I can add a harvester + Given a logged-in manager and a harvester folder 'Harvester Folder' and an add harvester form When I type 'My Harvester' into the title field @@ -17,8 +17,8 @@ Scenario: As a site administrator I can add a harvester and I submit the form Then a harvester with the title 'My Harvester' has been created -Scenario: As a site administrator I can view a harvester - Given a logged-in site administrator +Scenario: As a manager I can view a harvester + Given a logged-in manager and a harvester folder 'Harvester Folder' and an add harvester form When I type 'My Harvester' into the title field @@ -27,8 +27,8 @@ Scenario: As a site administrator I can view a harvester and I go to the harvester view Then I can see the harvester title 'My Harvester' -Scenario: As a site administrator I can view a harvester on folder_view - Given a logged-in site administrator +Scenario: As a manager I can view a harvester on folder_view + Given a logged-in manager and a harvester folder 'Harvester Folder' and an add harvester form When I type 'My Harvester' into the title field @@ -37,8 +37,8 @@ Scenario: As a site administrator I can view a harvester on folder_view and I go to harvester folder view Then I can see the harvester title 'My Harvester' -Scenario: As a site administrator I can view a harvester on control_panel - Given a logged-in site administrator +Scenario: As a manager I can view a harvester on control_panel + Given a logged-in manager and a harvester folder 'Harvester Folder' and an add harvester form When I type 'My Harvester' into the title field @@ -52,8 +52,8 @@ Scenario: As a site administrator I can view a harvester on control_panel # --- Given ------------------------------------------------------------------ -a logged-in site administrator - Enable autologin as Site Administrator +a logged-in manager + Enable autologin as Manager a harvester folder 'Harvester Folder' Create content type=harvesterfolder id=my-harvesterfolder title=My HarvesterFolder @@ -75,7 +75,7 @@ I submit the form Click Button Save I go to the harvester view - Go To ${PLONE_URL}/my-harvester + Go To ${PLONE_URL}/my-harvesterfolder/my-harvester Wait until page contains Site Map I go to harvester folder view diff --git a/src/pkan/dcatapde/tests/robot/test_harvesterfolder.robot b/src/pkan/dcatapde/tests/robot/test_harvesterfolder.robot index 85e8c062..8b17dbb6 100644 --- a/src/pkan/dcatapde/tests/robot/test_harvesterfolder.robot +++ b/src/pkan/dcatapde/tests/robot/test_harvesterfolder.robot @@ -8,15 +8,15 @@ Suite Teardown Teardown *** Test Cases *************************************************************** -Scenario: As a site administrator I can add a harvesterfolder - Given a logged-in site administrator +Scenario: As a manager I can add a harvesterfolder + Given a logged-in manager and an add harvesterfolder form When I type 'My HarvesterFolder' into the title field and I submit the form Then a harvesterfolder with the title 'My HarvesterFolder' has been created -Scenario: As a site administrator I can view a harvesterfolder - Given a logged-in site administrator +Scenario: As a manager I can view a harvesterfolder + Given a logged-in manager and a harvesterfolder 'My HarvesterFolder' When I go to the harvesterfolder view Then I can see the harvesterfolder title 'My HarvesterFolder' @@ -26,8 +26,8 @@ Scenario: As a site administrator I can view a harvesterfolder # --- Given ------------------------------------------------------------------ -a logged-in site administrator - Enable autologin as Site Administrator +a logged-in manager + Enable autologin as Manager an add harvesterfolder form Go To ${PLONE_URL}/++add++harvesterfolder From 42f25867802c3a39346b919fb89381166375f4cb Mon Sep 17 00:00:00 2001 From: sandra Date: Thu, 15 Feb 2018 15:31:07 +0100 Subject: [PATCH 13/13] Corrected travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 69f42fa6..6030ac61 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,7 +29,7 @@ script: - bin/code-analysis - bin/test after_success: - - bin/createcoverage + - travis_wait 30 bin/createcoverage - pip install coveralls - coveralls notifications: