diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 99cef5d..0eb8742 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,7 @@ Changelog * `ContactTag `_ * `DealStatus `_ * `DealCategory `_ + * `CrmQuery `_ 0.9.0 (2014-09-11) ++++++++++++++++++ diff --git a/docs/resources/crm_query.rst b/docs/resources/crm_query.rst new file mode 100644 index 0000000..5986751 --- /dev/null +++ b/docs/resources/crm_query.rst @@ -0,0 +1,67 @@ +CRM Query +========= + +Supported starting from version 1.0.0 and only available if `CRM plugin `_ of version 3.3.0 and higher is installed. + +Manager +------- + +All operations on the crm query resource are provided via it's manager. To get access to +it you have to call ``redmine.crm_query`` where ``redmine`` is a configured redmine object. +See the :doc:`../configuration` about how to configure redmine object. + +Create methods +-------------- + +Not supported by CRM plugin + +Read methods +------------ + +get ++++ + +Not supported by CRM plugin + +all ++++ + +Not supported by CRM plugin + +filter +++++++ + +.. py:method:: filter(**filters) + :module: redmine.managers.ResourceManager + :noindex: + + Returns crm query resources that match the given lookup parameters. + + :param string resource: + .. raw:: html + + (required). Get crm queries for the requested resource. Available resources are: + + - contact + - deal + + :param integer limit: (optional). How much resources to return. + :param integer offset: (optional). Starting from what resource to return the other resources. + :return: ResourceSet object + +.. code-block:: python + + >>> queries = redmine.crm_query.filter(resource='contact') + >>> queries + + +Update methods +-------------- + +Not supported by CRM plugin + +Delete methods +-------------- + +Not supported by CRM plugin diff --git a/docs/resources/index.rst b/docs/resources/index.rst index 606a950..f770db6 100644 --- a/docs/resources/index.rst +++ b/docs/resources/index.rst @@ -52,3 +52,4 @@ Resources contact_tag deal_status deal_category + crm_query diff --git a/redmine/resources.py b/redmine/resources.py index b7c2dbf..16004fd 100644 --- a/redmine/resources.py +++ b/redmine/resources.py @@ -792,6 +792,22 @@ def url(self): return '{0}/contacts_tags/{1}/edit'.format(self.manager.redmine.url, self.internal_id) +class CrmQuery(_Resource): + redmine_version = '2.3' + requirements = (('CRM plugin', '3.3.0'),) + container_filter = 'queries' + query_filter = '/crm_queries.json?object_type={resource}' + + @property + def url(self): + return '{0}/projects/{1}/{2}s?query_id={3}'.format( + self.manager.redmine.url, + self._attributes.get('project_id', 0), + self.manager.params.get('resource', ''), + self.internal_id + ) + + class DealStatus(_Resource): redmine_version = '2.3' requirements = (('CRM plugin', '3.3.0'),) diff --git a/tests/test_resources.py b/tests/test_resources.py index 169a25a..f8c3d17 100644 --- a/tests/test_resources.py +++ b/tests/test_resources.py @@ -80,6 +80,9 @@ 'deal_category': { 'filter': {'deal_categories': [{'name': 'Foo', 'id': 1}, {'name': 'Bar', 'id': 2}]}, }, + 'crm_query': { + 'filter': {'queries': [{'name': 'Foo', 'id': 1}, {'name': 'Bar', 'id': 2}]}, + }, } @@ -1184,4 +1187,25 @@ def test_deal_category_url(self): self.assertEqual( self.redmine.deal_category.filter(project_id=1)[0].url, '{0}/deal_categories/edit?id=1'.format(self.url) - ) \ No newline at end of file + ) + + def test_crm_query_version(self): + self.assertEqual(self.redmine.crm_query.resource_class.redmine_version, '2.3') + + def test_crm_query_requirements(self): + self.assertEqual(self.redmine.crm_query.resource_class.requirements, (('CRM plugin', '3.3.0'),)) + + def test_crm_query_filter(self): + self.response.json = json_response(responses['crm_query']['filter']) + queries = self.redmine.crm_query.filter(resource='contact') + self.assertEqual(queries[0].id, 1) + self.assertEqual(queries[0].name, 'Foo') + self.assertEqual(queries[1].id, 2) + self.assertEqual(queries[1].name, 'Bar') + + def test_crm_query_url(self): + self.response.json = json_response(responses['crm_query']['filter']) + self.assertEqual( + self.redmine.crm_query.filter(resource='contact')[0].url, + '{0}/projects/0/contacts?query_id=1'.format(self.url) + )