# coding=utf-8 """ RetailCRM API client v5 tests """ from urllib.parse import urlencode import unittest import os import retailcrm import pook import json class TestVersion5(unittest.TestCase): """ TestClass for v5 """ __header = {'Server': 'nginx/1.16.0', 'Content-Type': 'application/json; charset=UTF-8'} __customer = { 'id': 9717, 'externalId': 'c-111111111', 'createdAt': '2020-04-09 16:55:59', 'vip': 'false', 'bad': 'false', 'site': 'test-org', 'marginSumm': 28180, 'totalSumm': 28180, 'averageSumm': 28180, 'ordersCount': 1, 'customFields': [], 'personalDiscount': 0, 'address': { 'id': 5667, 'text': 'MAY' }, 'firstName': 'Аа', 'lastName': 'Аа', 'phones': [], 'contragentType': 'individual' } __order = { 'slug': 5604, 'summ': 0, 'id': 5604, 'number': '5604A', 'externalId': '5603', 'orderType': 'individual', 'orderMethod': 'shopping-cart', 'countryIso': 'RU', 'createdAt': '2020-04-07 15:44:24', 'statusUpdatedAt': '2020-04-07 15:44:24', 'totalSumm': 0, 'prepaySum': 0, 'purchaseSumm': 0, 'markDatetime': '2020-04-07 15:44:24', 'call': 'false', 'expired': 'false', 'customer': { 'id': 9711, 'createdAt': '2020-04-07 15:44:24', 'vip': 'false', 'bad': 'false', 'site': '127-0-0-1-8080', 'marginSumm': 0, 'totalSumm': 0, 'averageSumm': 0, 'ordersCount': 1, 'customFields': [], 'personalDiscount': 0, 'email': '', 'phones': [], 'contragentType': 'individual' }, 'contragentType': 'individual', 'delivery': { 'cost': 0, 'netCost': 0, 'address': {} }, 'site': '127-0-0-1-8080', 'status': 'new', 'items': [], 'fromApi': 'true', 'shipped': 'false', 'customFields': [] } __pack = { 'id': 122, 'purchasePrice': 0, 'quantity': 1, 'store': '7777z', 'item': { 'id': 7632, 'order': { 'id': 5608 }, 'offer': { 'externalId': 'y6642' } } } __cost = { 'id': 635, 'dateFrom': '2020-01-30', 'dateTo': '2020-01-30', 'summ': 2, 'costItem': 'delivery-cost', 'createdAt': '2020-01-30 16:43:36', 'order': { 'id': 4798, 'number': '16', 'externalId': '16' }, 'sites': [ 'prestashop' ] } __file = { 'id': 30, 'filename': 'API upload 18-09-2019 13:14:00', 'type': 'application/pdf', 'createdAt': '2019-09-18 13:14:00', 'size': 124225, 'attachment': [ { 'order': { 'id': 7777, 'number': '7777A', 'site': 'hhhh' } } ] } __customer_corporate = { 'type': 'customer_corporate', 'id': 9084, 'externalId': 'cc_9', 'nickName': 'Test', 'mainAddress': { 'id': 3995, 'name': 'Test' }, 'createdAt': '2020-02-14 13:49:21', 'vip': 'false', 'bad': 'false', 'site': 'opencart', 'tags': [], 'marginSumm': 0, 'totalSumm': 0, 'averageSumm': 0, 'ordersCount': 0, 'costSumm': 0, 'customFields': [], 'personalDiscount': 0, 'ainCustomerContact': { 'id': 33, 'customer': { 'id': 9083, 'externalId': '9' }, 'companies': [] }, 'mainCompany': { 'id': 31, 'name': 'Test' } } __task = { 'id': 433, 'text': 'test task edited', 'commentary': 'test commentary', 'complete': 'false', 'phone': '+79185550000', 'performerId': 15 } def setUp(self): """ Setup """ self.client = retailcrm.v5(os.getenv('RETAILCRM_URL'), os.getenv('RETAILCRM_KEY')) @staticmethod def dictionaryEncode(key, dictionary): return urlencode({key: json.dumps(dictionary)}) @pook.on def test_wrong_api_url(self): """ V5 Test wrong api url """ (pook.get('https://epoqq.retailcrm.pro' + '/api/v5/statistic/update') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(404) .headers(self.__header) .json( { 'success': 'true', 'errorMsg': 'Account does not exist.' } ) ) client = retailcrm.v5('https://epoqq.retailcrm.pro', os.getenv('RETAILCRM_KEY')) response = client.statistic_update() pook.off() self.assertIsNot(response.is_successful(), True) self.assertEqual(response.get_error_msg(), 'Account does not exist.') @pook.on def test_wrong_api_key(self): """ V5 Test wrong api key """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/statistic/update') .headers({'X-API-KEY': 'XXXX'}) .reply(200) .headers(self.__header) .json({'errorMsg': 'Wrong "apiKey" value.'}) ) client = retailcrm.v5(os.getenv('RETAILCRM_URL'), 'XXXX') response = client.statistic_update() pook.off() self.assertEqual(response.get_error_msg(), 'Wrong "apiKey" value.') @pook.on def test_missing_api_key(self): """ V5 Test missing api key """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/statistic/update') .headers({'X-API-KEY': None}) .reply(200) .headers(self.__header) .json({'errorMsg': '"apiKey" is missing.'}) ) client = retailcrm.v5(os.getenv('RETAILCRM_URL'), None) response = client.statistic_update() pook.off() self.assertEqual(response.get_error_msg(), '"apiKey" is missing.') @pook.on def test_api_versions(self): """ V5 Test api-versions method """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/api-versions') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true', 'versions': ['3.0', '4.0', '5.0']}) ) response = self.client.api_versions() pook.off() self.assertTrue(response.is_successful(), True) @pook.on def test_api_credentials(self): """ V5 Test api-credentials method """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/credentials') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true', 'credentials': [], 'siteAccess': 'access_full'}) ) response = self.client.api_credentials() pook.off() self.assertTrue(response.is_successful(), True) @pook.on def test_costs(self): """ V5 Test method costs """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/costs') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 6, 'currentPage': 1, 'totalPageCount': 1 }, 'costs': [self.__cost] } ) ) response = self.client.costs() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_costs_create(self): """ V5 Test method costs_create """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/costs/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('cost', self.__cost)) .reply(201) .headers(self.__header) .json({'success': 'true', 'id': 7117}) ) response = self.client.cost_create(self.__cost) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_costs_delete(self): """ V5 Test method costs_delete """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/costs/delete') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('ids', [555, 666, 777])) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'count': 3, 'notRemovedIds': [] } ) ) response = self.client.costs_delete([555, 666, 777]) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_costs_upload(self): """ V5 Test method costs_upload """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/costs/upload') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('costs', [self.__cost])) .reply(200) .headers(self.__header) .json({'success': 'true', 'uploadedCosts': [555]}) ) response = self.client.costs_upload([self.__cost]) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_cost(self): """ V5 Test method cost """ uid = str(self.__cost['id']) (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/costs/' + uid) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true', 'cost': self.__cost}) ) response = self.client.cost(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_costs_delete_v5(self): """ V5 Test method costs_delete """ uid = '7777' (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/costs/' + uid + '/delete') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.cost_delete(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_costs_edit(self): """ V5 Test method cost_edit """ uid = str(self.__cost['id']) (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/costs/' + uid + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('cost', self.__cost)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 7777}) ) response = self.client.cost_edit(self.__cost) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_custom_fields(self): """ V5 Test method custom_fields """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/custom-fields') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[entity]': 'customer'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 66, 'currentPage': 1, 'totalPageCount': 4 }, 'customFields': [ { 'name': 'xxxx', 'code': 'test', 'required': 'false', 'inFilter': 'true', 'inList': 'true', 'inGroupActions': 'false', 'type': 'text', 'entity': 'order', 'ordering': 50, 'displayArea': 'delivery', 'viewMode': 'editable' } ] } ) ) response = self.client.custom_fields({'entity': 'customer'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_custom_dictionaries(self): """ V5 Test method custom_dictionaries """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/custom-fields/dictionaries') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[name]': 'test223'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 67, 'currentPage': 1, 'totalPageCount': 1 }, 'customDictionaries': [ { 'name': 'test223', 'code': 'test2', 'elements': [ { 'name': 'test3', 'code': 'test3', 'ordering': 50 } ] } ] } ) ) response = self.client.custom_dictionaries({'name': 'test223'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_custom_dictionary_create(self): """ V5 Test method custom_dictionary_create """ custom_dictionary = { 'name': 'test', 'code': 'test', 'elements': [{'name': 'fear', 'code': 'e456'}] } (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/custom-fields/dictionaries/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customDictionary', custom_dictionary)) .reply(201) .headers(self.__header) .json({'success': 'true', 'code': 'test'}) ) response = self.client.custom_dictionary_create(custom_dictionary) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_custom_dictionary(self): """ V5 Test method custom_dictionary """ uid = '777' (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/custom-fields/dictionaries/' + uid) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'customDictionary': { 'name': 'test223', 'code': 'test2', 'elements': [ { 'name': 'test3', 'code': 'test3', 'ordering': 50 } ] } } ) ) response = self.client.custom_dictionary(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_custom_dictionary_edit(self): """ V5 Test method custom_dictionary_edit """ custom_dictionary = { 'name': 'test', 'code': 'test', 'elements': [{'name': 'fear', 'code': 'e456'}] } (pook.post("".join( [ os.getenv('RETAILCRM_URL'), '/api/v5/custom-fields/dictionaries/', custom_dictionary['code'], '/edit' ])) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customDictionary', custom_dictionary)) .reply(200) .headers(self.__header) .json({'success': 'true', 'code': 'test'})) response = self.client.custom_dictionary_edit(custom_dictionary) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_custom_field_create(self): """ V5 Test method custom_field_create """ custom_field = { 'name': 'test', 'code': 'test', 'type': 'text', 'entity': 'customer' } (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/custom-fields/' + custom_field['entity'] + '/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customField', custom_field)) .reply(200) .headers(self.__header) .json({'success': 'true', 'code': 'test'}) ) response = self.client.custom_field_create(custom_field) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_custom_field(self): """ V5 Test method custom_field """ entity = 'customer' code = 'test' (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/custom-fields/' + entity + '/' + code) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'customField': { 'name': 'test', 'code': 'test', 'required': 'false', 'inFilter': 'true', 'inList': 'true', 'inGroupActions': 'false', 'type': 'text', 'entity': 'customer', 'ordering': 50, 'viewMode': 'editable' } } ) ) response = self.client.custom_field(code, entity) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_custom_field_edit(self): """ V5 Test method custom_field_edit """ custom_field = { 'name': 'test', 'ordering': 5555, 'displayArea': 'customer', 'entity': 'customer', 'code': 'test' } (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/custom-fields/' + custom_field['entity'] + '/' + custom_field[ 'code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customField', custom_field)) .reply(200) .headers(self.__header) .json({'success': 'true', 'code': 'test'}) ) response = self.client.custom_field_edit(custom_field) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers(self): """ V5 Test method customers """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/customers') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[online]': 'No', 'filter[contragentType]': 'individual'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 4347, 'currentPage': 1, 'totalPageCount': 87 }, 'customers': [self.__customer] } ) ) response = self.client.customers({'online': 'No', 'contragentType': 'individual'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers_combine(self): """ V5 Test method customers_combine """ customer = {'id': 5604} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers/combine') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.customers_combine(customer, customer) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers_create(self): """ V5 Test method customers_create """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customer', self.__customer)) .reply(201) .headers(self.__header) .json({'success': 'true', 'id': 7117}) ) response = self.client.customer_create(self.__customer) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers_fix_external_ids(self): """ V5 Test method customers_fix_external_ids """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers/fix-external-ids') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customers', self.__customer['externalId'])) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.customers_fix_external_ids(self.__customer['externalId']) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers_history(self): """ V5 Test method customers_history """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/customers/history') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params( { 'filter[sinceId]': '1111', 'filter[startDate]': '2016-01-07', 'filter[endDate]': '2020-04-12' } ) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'generatedAt': '2020-04-15 17:43:12', 'history': [ { 'id': 7018, 'createdAt': '2018-04-11 09:01:26', 'created': 'true', 'source': 'api', 'field': 'id', 'apiKey': { 'current': 'false' }, 'oldValue': 'null', 'newValue': 4949, 'customer': { 'id': 4949, 'externalId': 'c456', 'createdAt': '2018-04-11 09:01:26', 'vip': 'false', 'bad': 'false', 'site': 'retailcrm-ru', 'contragent': { 'contragentType': 'individual' }, 'marginSumm': 0, 'totalSumm': 0, 'averageSumm': 0, 'ordersCount': 0, 'customFields': [], 'personalDiscount': 0, 'cumulativeDiscount': 0, 'firstName': 'XXX', 'lastName': 'XXX', 'patronymic': 'XXX', 'email': 'xxx@example.com' } } ] } ) ) response = self.client.customers_history( { 'sinceId': '1111', 'startDate': '2016-01-07', 'endDate': '2020-04-12' } ) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers_notes(self): """ V5 Test method customers_notes """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/customers/notes') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[createdAtFrom]': '2020-04-18', 'filter[createdAtTo]': '2020-04-21'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 3, 'currentPage': 1, 'totalPageCount': 1 }, 'notes': [ { 'customer': { 'site': 'retailcrm-ru', 'id': 5604, 'type': 'customer' }, 'id': 279, 'text': 'test', 'createdAt': '2020-04-20 13:02:35' } ] } ) ) response = self.client.customer_notes({'createdAtFrom': '2020-04-18', 'createdAtTo': '2020-04-21'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_note_create(self): """ V5 Test method customer_note_create """ note = {'managerId': 23, 'text': 'test', 'customer': {'id': 5604}} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers/notes/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('note', note)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 2222}) ) response = self.client.customer_note_create(note) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_note_delete(self): """ V5 Test method customer_note_delete """ uid = '279' (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers/notes/' + uid + '/delete') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.customer_note_delete(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers_upload(self): """ V5 Test method customers_upload """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers/upload') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customers', self.__customer)) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'uploadedCustomers': [ { 'id': 9717, 'externalId': 'c-983344770' } ] } ) ) response = self.client.customers_upload(self.__customer) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer(self): """ V5 Test method customer """ uid = str(self.__customer['externalId']) (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/customers/' + uid) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true', 'customers': self.__customer}) ) response = self.client.customer(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers_edit(self): """ V5 Test method customers_edit """ uid = str(self.__customer['externalId']) (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers/' + uid + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customer', self.__customer)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 9717}) ) response = self.client.customer_edit(self.__customer) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers_corporate(self): """ V5 Test customers_corporate """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[vip]': 'false', 'filter[companyName]': 'Test'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 128, 'currentPage': 1, 'totalPageCount': 7 }, 'customersCorporate': [self.__customer_corporate] } ) ) response = self.client.customers_corporate({'vip': 'false', 'companyName': 'Test'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers_combine_corporate(self): """ V5 Test method customers_combine_corporate """ customer = {'id': 5604} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/combine') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.customers_combine_corporate(customer, customer) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_create(self): """ V5 Test method customer_corporate_create """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customerCorporate', self.__customer_corporate)) .reply(201) .headers(self.__header) .json({'success': 'true', 'id': 7117}) ) response = self.client.customer_corporate_create(self.__customer_corporate) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def customers_corporate_fix_external_ids(self): """ V5 Test method customers_corporate_fix_external_ids """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/fix-external-ids') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customerCorporate', self.__customer_corporate['externalId'])) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.customers_corporate_fix_external_ids(self.__customer_corporate['externalId']) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers_history_v5(self): """ V5 Test method customers_corporate_history """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/history') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params( { 'filter[sinceId]': '1111', 'filter[startDate]': '2016-01-07', 'filter[endDate]': '2020-04-12' } ) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'generatedAt': '2020-04-15 17:43:12', 'history': [ { 'id': 1, 'createdAt': '2019-10-14 14:57:21', 'created': 'true', 'source': 'user', 'user': {'id': 15}, 'field': 'id', 'oldValue': 'null', 'newValue': 7484, 'customer': { 'type': 'customer_corporate', 'id': 7484, 'nickName': 'Inventive', 'createdAt': '2019-10-14 14:57:21', 'managerId': 15, 'vip': 'false', 'bad': 'false', 'site': 'samsung', 'marginSumm': 0, 'totalSumm': 0, 'averageSumm': 0, 'ordersCount': 0, 'customFields': [], 'personalDiscount': 0, 'cumulativeDiscount': 0 } } ] } ) ) response = self.client.customers_corporate_history( { 'sinceId': '1111', 'startDate': '2016-01-07', 'endDate': '2020-04-12' } ) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_notes(self): """ V5 Test method customer_corporate_notes """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/notes') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[createdAtFrom]': '2020-04-18', 'filter[createdAtTo]': '2020-04-21'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 3, 'currentPage': 1, 'totalPageCount': 1 }, 'notes': [ { 'customer': { 'site': 'retailcrm-ru', 'id': 5604, 'type': 'customer_corporate' }, 'id': 279, 'text': 'test', 'createdAt': '2020-04-29 13:02:35' } ] } ) ) response = self.client.customer_corporate_notes({'createdAtFrom': '2020-04-18', 'createdAtTo': '2020-04-21'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_note_create(self): """ V5 Test method customer_corporate_note_create """ note = {'managerId': 23, 'text': 'test', 'customer': {'id': 5604}} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/notes/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('note', note)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 2222}) ) response = self.client.customer_corporate_note_create(note) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_note_delete(self): """ V5 Test method customer_corporate_note_delete """ uid = '279' (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/notes/' + uid + '/delete') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.customer_corporate_note_delete(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customers_corporate_upload(self): """ V5 Test method customers_corporate_upload """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/upload') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customersCorporate', self.__customer_corporate)) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'uploadedCustomers': [ { 'id': 9717, 'externalId': 'c-983344770' } ] } ) ) response = self.client.customers_corporate_upload(self.__customer_corporate) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate(self): """ V5 Test method customer_corporate """ uid = str(self.__customer_corporate['externalId']) (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/' + uid) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true', 'customerCorporate': self.__customer_corporate}) ) response = self.client.customer_corporate(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_addresses(self): """ V5 Test method customer_corporate_addresses """ uid = str(self.__customer_corporate['externalId']) (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/' + uid + '/addresses') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params(uid) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'addresses': [{ 'id': 3995, 'text': '123123, Russian Federation, Moscow, Kubuntu 14', 'isMain': 'true', 'name': 'Test' }], 'pagination': { 'limit': 20, 'totalCount': 1, 'currentPage': 1, 'totalPageCount': 1 } } ) ) response = self.client.customer_corporate_addresses(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_addresses_create(self): """ V5 Test method customer_corporate_addresses_create """ address = {'isMain': 'true', 'name': 'Test', 'externalId': 'cc_9'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/' + address['externalId'] + '/addresses/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('address', address)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 9717})) response = self.client.customer_corporate_addresses_create(address) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_addresses_edit(self): """ V5 Test method customer_corporate_addresses_edit """ uid = str(self.__customer_corporate['externalId']) address = {'isMain': 'true', 'name': 'Test', 'externalId': 'ccc8'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/' + uid + '/addresses/' + address[ 'externalId'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('address', address)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': '7777'}) ) response = self.client.customer_corporate_addresses_edit(uid, address) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_companies(self): """ V5 Test method customer_corporate_companies """ uid = str(self.__customer_corporate['externalId']) (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/' + uid + '/companies') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params(uid) .reply(200) .headers(self.__header) .json( { "success": 'true', "companies": [ { "isMain": 'true', "id": 31, "customer": { "site": "test", "id": 9084, "externalId": "cc_9", "type": "customer_corporate" }, "active": 'true', "name": "Test", "createdAt": "2020-02-14 16:49:21", "contragent": { "contragentType": "legal-entity" }, "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "costSumm": 0, "customFields": [] } ], "pagination": { "limit": 20, "totalCount": 1, "currentPage": 1, "totalPageCount": 1 } } ) ) response = self.client.customer_corporate_companies(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_companies_create(self): """ V5 Test method customer_corporate_companies_create """ company = {'isMain': 'true', 'name': 'TestN', 'externalId': 'cc_9'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/' + company['externalId'] + '/companies/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('company', company)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 9717}) ) response = self.client.customer_corporate_companies_create(company) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_companies_edit(self): """ V5 Test method customer_corporate_companies_edit """ uid = str(self.__customer_corporate['externalId']) company = {'isMain': 'true', 'name': 'TestN', 'externalId': 'ccc9'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/' + uid + '/companies/' + company[ 'externalId'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('company', company)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 7777}) ) response = self.client.customer_corporate_companies_edit(uid, company) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_contacts(self): """ V5 Test method customer_corporate_contacts """ uid = str(self.__customer_corporate['externalId']) (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/' + uid + '/contacts') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params(uid) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'contacts': [ { 'isMain': 'true', 'id': 33, 'customer': { 'id': 9083, 'externalId': '9', 'site': 'opencart' }, 'companies': [] } ], 'pagination': { 'limit': 20, 'totalCount': 1, 'currentPage': 1, 'totalPageCount': 1 } } ) ) response = self.client.customer_corporate_contacts(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_contacts_create(self): """ V5 Test method customer_corporate_contacts_create """ contact = {'isMain': 'true', 'name': 'TestM', 'externalId': 'cc_9'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/' + contact['externalId'] + '/contacts/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('contact', contact)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 9717}) ) response = self.client.customer_corporate_contacts_create(contact) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_contacts_edit(self): """ V5 Test method customer_corporate_contacts_edit """ uid = str(self.__customer_corporate['externalId']) contact = {'isMain': 'true', 'name': 'TestM', 'externalId': 'cc_10'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/' + uid + '/contacts/' + contact[ 'externalId'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('contact', contact)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': '7777'}) ) response = self.client.customer_corporate_contacts_edit(uid, contact) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_customer_corporate_edit(self): """ V5 Test method customer_corporate_edit """ uid = str(self.__customer_corporate['externalId']) (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/customers-corporate/' + uid + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('customersCorporate', self.__customer_corporate)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': '9717'}) ) response = self.client.customer_corporate_edit(self.__customer_corporate) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_delivery_tracking(self): """ V5 Test method delivery_tracking """ code = 'zzz' delivery_id = { 'deliveryId': '777z', 'history': [ { 'code': '888', 'updatedAt': '2020-04-12', 'comment': 'Good' } ] } (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/delivery/generic/' + code + '/tracking') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('statusUpdate', delivery_id)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.delivery_tracking(code, delivery_id) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_delivery_shipments(self): """ V5 Test delivery_shipments """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/delivery/shipments') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[stores]': 'test'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 1, 'currentPage': 1, 'totalPageCount': 1 }, 'deliveryShipments': [ { 'integrationCode': 'xxx', 'id': 1, 'externalId': '10471460', 'deliveryType': 'osj97', 'store': 'test', 'managerId': 23, 'status': 'processing', 'date': '2020-03-31', 'time': { 'from': '13:00', 'to': '18:00' }, 'orders': [ { 'id': 5596, 'number': '5596C' } ], 'extraData': [] } ] } ) ) response = self.client.delivery_shipments({'stores': 'test'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_delivery_shipment_create(self): """ V5 Test method delivery_shipment_create """ delivery_shipment = {'status': 'cancelled', 'store': 'test'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/delivery/shipments/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('deliveryShipment', delivery_shipment)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 5555, 'status': 'cancelled'}) ) response = self.client.delivery_shipment_create(delivery_shipment) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_delivery_shipment(self): """ V5 Test method delivery_shipment """ uid = '10471460' (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/delivery/shipments/' + uid) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'deliveryShipments': { 'integrationCode': 'xxx', 'id': 1, 'externalId': '10471460', 'deliveryType': 'osj97', 'store': 'test', 'managerId': 23, 'status': 'processing', 'date': '2020-03-31', 'time': { 'from': '13:00', 'to': '18:00' }, 'orders': [ { 'id': 5596, 'number': '5596C' } ], 'extraData': [] } } ) ) response = self.client.delivery_shipment(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_delivery_shipment_edit(self): """ V5 Test method delivery_shipment_edit """ delivery_shipment = { 'integrationCode': 'xxx', 'id': 1, 'externalId': '10471460', 'deliveryType': 'osj97', 'store': 'test', 'managerId': 23, 'status': 'processing', 'date': '2020-03-31', 'time': { 'from': '13:00', 'to': '18:00' }, 'orders': [ { 'id': 5596, 'number': '5596C' } ], 'extraData': [] } uid = delivery_shipment['id'] (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/delivery/shipment/' + str(uid) + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('deliveryShipment', delivery_shipment)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 5555, 'status': 'cancelled'}) ) response = self.client.delivery_shipment_edit(delivery_shipment) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_files(self): """ V5 Test method files """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/files') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[sizeFrom]': '1'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 1, 'currentPage': 1, 'totalPageCount': 1 }, 'files': [self.__file] } ) ) response = self.client.files({'sizeFrom': '1'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_files_upload(self): """ V5 Test method files_upload """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/files/upload') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('file', self.__file)) .reply(200) .headers(self.__header) .json({'success': 'true', 'file': {'id': 92}}) ) response = self.client.files_upload(self.__file) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_file(self): """ V5 Test method file """ uid = str(self.__file['id']) (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/files/' + uid) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true', 'file': self.__file}) ) response = self.client.file(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_files_delete(self): """ V5 Test method files_delete """ uid = '7777' (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/files/' + uid + '/delete') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.files_delete(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_files_download(self): """ V5 Test method files_download """ uid = '7777' (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/files/' + uid + '/download') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params(uid) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.files_download(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_files_edit(self): """ V5 Test method files_edit """ uid = '30' (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/files/' + uid + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('file', self.__file)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.files_edit(self.__file) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_integration_module(self): """ V5 Test method integration_module """ code = 'xxx' (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/integration-modules/' + code) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params(code) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': '20', 'totalCount': '4347', 'currentPage': '1', 'totalPageCount': '87' }, 'integrationModule': { 'success': 'true', 'integrationModule': { 'code': 'xxx', 'integrationCode': 'xxx', 'active': 'true', 'freeze': 'false', 'name': 'test', 'native': 'false', 'actions': {}, 'availableCountries': [], 'integrations': { 'store': { 'actions': [ { 'code': 'ccc', 'url': 'https://test' } ] } } } } } ) ) response = self.client.integration_module(code) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_integration_module_edit(self): """ V5 Test method integration_module_edit """ integration_module = {'code': 'xxx', 'integrationCode': 'xxx'} uid = 'xxx' (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/integration-modules/' + uid + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('integrationModule', integration_module)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.integration_module_edit(integration_module) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_orders(self): """ V5 Test method orders """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/orders') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[city]': 'Moscow', 'filter[contragentType]': 'individual'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 2464, 'currentPage': 1, 'totalPageCount': 50 }, 'orders': [self.__order] } ) ) response = self.client.orders({'city': 'Moscow', 'contragentType': 'individual'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_orders_combine(self): """ V5 Test method orders_combine """ order = {'id': 5604} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/combine') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.orders_combine(order, order, 'merge') pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_orders_create(self): """ V5 Test method orders_create """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('order', self.__order)) .reply(201) .headers(self.__header) .json({'success': 'true', 'id': 8888, 'order': self.__order}) ) response = self.client.order_create(self.__order) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_orders_fix_external_ids(self): """ V5 Test method orders_fix_external_ids """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/fix-external-ids') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('orders', self.__order['externalId'])) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.orders_fix_external_ids(self.__order['externalId']) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_orders_history(self): """ V5 Test method orders_history """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/orders/history') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params( { 'filter[sinceId]': '1111', 'filter[startDate]': '2016-01-07', 'filter[endDate]': '2020-04-12' } ) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'generatedAt': '2020-04-16 11:03:00', 'history': [ { 'id': 7887, 'createdAt': '2018-04-11 09:01:29', 'created': 'true', 'source': 'api', 'field': 'status', 'apiKey': { 'current': 'false' }, 'oldValue': 'null', 'newValue': { 'code': 'new' }, 'order': { 'slug': 9090, 'summ': 0, 'id': 9090, 'number': '9090A', 'externalId': 'v4321', 'orderType': 'eshop-individual', 'orderMethod': 'shopping-cart', 'createdAt': '2018-04-11 09:01:29', 'statusUpdatedAt': '2018-04-11 09:01:29', 'totalSumm': 0, 'prepaySum': 0, 'purchaseSumm': 0, 'markDatetime': '2018-04-11 09:01:29', 'lastName': 'xxxx', 'firstName': 'xxxx', 'patronymic': 'xxxx', 'email': 'maymayslt@example.com', 'call': 'false', 'expired': 'false', 'customer': { 'id': 5544, 'isContact': 'false', 'createdAt': '2018-04-11 09:01:29', 'vip': 'false', 'bad': 'false', 'site': 'retailcrm-ru', 'contragent': { 'contragentType': 'individual' }, 'marginSumm': 0, 'totalSumm': 0, 'averageSumm': 0, 'ordersCount': 1, 'customFields': [], 'personalDiscount': 0, 'cumulativeDiscount': 0, 'address': { 'id': 3322 }, 'lastName': 'xxxx', 'firstName': 'xxxx', 'patronymic': 'xxxx', 'email': 'maymays@example.com', 'phones': [] }, 'contragent': { 'contragentType': 'individual' }, 'delivery': { 'cost': 0, 'netCost': 0, 'address': { 'id': 2477, 'countryIso': '' } }, 'site': 'retailcrm-ru', 'status': 'new', 'items': [], 'fromApi': 'true', 'shipped': 'false', 'customFields': [] } } ] } ) ) response = self.client.orders_history( { 'sinceId': '1111', 'startDate': '2016-01-07', 'endDate': '2020-04-12' } ) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_orders_statuses(self): """ V5 Test method orders_statuses """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/orders/statuses') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'ids[]': '5604', 'externalIds[]': '5603'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'orders': [ { 'id': '5604', 'externalId': '5603', 'status': 'new', 'group': 'new' } ] } ) ) response = self.client.orders_statuses([5604], [5603]) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_orders_upload(self): """ V5 Test method orders_upload """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/upload') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('orders', self.__order)) .reply(201) .headers(self.__header) .json( { 'success': 'true', 'uploadedOrders': [ { 'id': 5604, 'externalId': '5603' } ], 'orders': [self.__order] } ) ) response = self.client.orders_upload(self.__order) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_order(self): """ V5 Test method order """ uid = str(self.__order['externalId']) (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/orders/' + uid) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true', 'orders': self.__order}) ) response = self.client.order(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_order_links_create(self): """ V5 Test method order_links_create """ link = { "comment": "test", "orders": [ { "id": 5604, "externalId": 5603, "number": 1 }, { "id": 5605, "externalId": 5601, "number": 1 } ] } (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/links/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('link', link)) .reply(201) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.order_links_create(link) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_order_payment_create(self): """ V5 Test method payment_create """ payment = {'order': {'externalId': '5603'}, 'type': 'bank-card'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/payments/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('payment', payment)) .reply(201) .headers(self.__header) .json({'success': 'true', 'id': 7777}) ) response = self.client.order_payment_create(payment) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_order_payment_delete(self): """ V5 Test method order_payment_delete """ uid = '7777' (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/payments/' + uid + '/delete') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.order_payment_delete(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_order_payment_edit(self): """ V5 Test method order_payment_edit """ payment = { 'externalId': '5603', 'order': [ { 'id': 5604, 'externalId': '5603', 'number': 1 } ], 'type': 'bank-card' } uid = str(self.__order['externalId']) (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/payments/' + uid + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('payment', payment)) .reply(200) .headers(self.__header) .json({'success': 'true', 'payment': payment}) ) response = self.client.order_payment_edit(payment) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_orders_statuses_v5(self): """ V5 Test method orders_statuses """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/orders/statuses') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'ids[]': '5604', 'externalIds[]': '5603'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'orders': [ { 'id': 5604, 'externalId': '5603', 'status': 'new', 'group': 'new' } ] } ) ) response = self.client.orders_statuses([5604], [5603]) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_orders_upload_v5(self): """ V5 Test method orders_upload """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/upload') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('orders', self.__order)) .reply(201) .headers(self.__header) .json( { 'success': 'true', 'uploadedOrders': [ { 'id': 5604, 'externalId': '5603' } ], 'orders': [self.__order] } ) ) response = self.client.orders_upload(self.__order) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_order_v5(self): """ V5 Test method order """ uid = str(self.__order['externalId']) (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/orders/' + uid) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true', 'orders': self.__order}) ) response = self.client.order(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_orders_edit(self): """ V5 Test method orders_edit """ uid = str(self.__order['externalId']) (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/' + uid + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('order', self.__order)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 5604, 'order': self.__order}) ) response = self.client.order_edit(self.__order) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_packs(self): """ V5 Test method packs """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/orders/packs') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[store]': '7777z'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 1, 'currentPage': 1, 'totalPageCount': 1 }, 'packs': [self.__pack] } ) ) response = self.client.packs({'store': '7777z'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_packs_create(self): """ V5 Test method packs_create """ packs_create = {'store': '7777z', 'quantity': 1, 'itemId': 7632} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/packs/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('pack', packs_create)) .reply(201) .headers(self.__header) .json({'success': 'true', 'id': 7777}) ) response = self.client.pack_create(packs_create) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_packs_history(self): """ V5 Test method packs_history """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/orders/packs/history') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[startDate]': '2016-01-07', 'filter[endDate]': '2020-04-12'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'generatedAt': '2020-04-17 13:08:48', 'history': [ { 'id': 777, 'createdAt': '2018-04-13 15:46:06', 'created': 'true', 'field': 'store', 'newValue': { 'code': 'zzz' }, 'pack': { 'id': 678, 'quantity': 1, 'store': {'code': 'zzz'}, 'item': { 'id': 222, 'order': {'id': 6677}, 'offer': {'externalId': '333'} } }, 'source': 'api' } ] } ) ) response = self.client.packs_history({'startDate': '2016-01-07', 'endDate': '2020-04-12'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_pack(self): """ V5 Test method pack """ uid = str(self.__pack['id']) (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/orders/packs/' + uid) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true', 'pack': self.__pack}) ) response = self.client.pack(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_packs_delete(self): """ V5 Test method packs_delete """ uid = '7777' (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/packs/' + uid + '/delete') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.pack_delete(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_pack_edit(self): """ V5 Test method pack_edit """ uid = str(self.__pack['id']) (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/orders/packs/' + uid + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('pack', self.__pack)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': 5604}) ) response = self.client.pack_edit(self.__pack) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_payment_check(self): """ V5 Test method payment_check """ check = {'invoiceUuid': '577', 'amount': 1, 'currency': 'RU'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/payment/check') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('check', check)) .reply(201) .headers(self.__header) .json({'success': 'true', 'result': {'success': 'true'}}) ) response = self.client.payment_check(check) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_payment_create_invoice(self): """ V5 Test method payment_create_invoice """ create_invoice = {'paymentId': 578, 'returnUrl': 'https://test.ru'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/payment/create-invoice') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('createInvoice', create_invoice)) .reply(201) .headers(self.__header) .json({'success': 'true', 'result': {'link': 'https://test.ru'}}) ) response = self.client.payment_create_invoice(create_invoice) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_payment_update_invoice(self): """ V5 Test method payment_update_invoice """ update_invoice = {'invoiceUuid': '577', 'paymentId': '5304'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/payment/update-invoice') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('updateInvoice', update_invoice)) .reply(201) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.payment_update_invoice(update_invoice) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_cost_groups(self): """ V5 Test method cost_groups """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/cost-groups') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'costGroups': [ { 'code': 'cost-gr-example', 'name': 'CostGroup-example', 'ordering': 990, 'active': 'true', 'color': '#da5c98' }, { 'code': 'cost-gr-lst7', 'name': 'CostGroup-lst7', 'ordering': 990, 'active': 'true', 'color': '#da5c98' } ] } ) ) response = self.client.cost_groups() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_cost_groups_edit(self): """ V5 Test method cost_groups_edit """ group = {'code': 'cost-gr-example', 'color': '#da5c98', 'ordering': 990, 'name': 'CostGroup-lst7'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/cost-groups/' + group['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('costGroup', group)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.cost_groups_edit(group) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_cost_items(self): """ V5 Test method cost_items """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/cost-items') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'costItems': [ { 'code': 'cost-it-example', 'name': 'CostItem-example', 'group': 'cost-gr-example', 'ordering': 990, 'active': 'true', 'appliesToOrders': 'true', 'type': 'const', 'appliesToUsers': 'false' }, { 'code': 'cost-it-1', 'name': 'CostItem-1', 'group': 'cost-gr-1', 'ordering': 990, 'active': 'true', 'appliesToOrders': 'true', 'type': 'const', 'appliesToUsers': 'false' } ] } ) ) response = self.client.cost_items() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_cost_items_edit(self): """ V5 Test method cost_items_edit """ item = {'code': 'cost-it-example', 'name': 'CostItem-example', 'ordering': 990, 'active': 'true'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/cost-groups/' + item['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('costItem', item)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.cost_items_edit(item) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_countries(self): """ V5 Test method countries """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/countries') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true', 'countriesIso': ['RU', 'UA', 'BY', 'KZ']}) ) response = self.client.countries() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_couriers(self): """ V5 Test method couriers """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/couriers') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'couriers': [ { 'id': 55, 'firstName': 'Jean', 'lastName': 'Doe', 'patronymic': 'M.', 'active': 'true', 'email': 'r9z4o@example.com' }, { 'id': 57, 'firstName': 'John', 'lastName': 'Doe', 'patronymic': 'H.', 'active': 'true', 'email': 'oflf9@example.com' } ] } ) ) response = self.client.couriers() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_couriers_create(self): """ V5 Test method couriers_create """ courier = { 'id': 55, 'firstName': 'John', 'lastName': 'Doe', 'patronymic': 'H.', 'active': 'true', 'email': 'r9z4o@example.com' } (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/couriers/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('courier', courier)) .reply(201) .headers(self.__header) .json({'success': 'true', 'id': '8888'}) ) response = self.client.couriers_create(courier) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_couriers_edit(self): """ V5 Test method couriers_edit """ courier = { 'id': 55, 'firstName': 'John', 'lastName': 'Doe', 'patronymic': 'H.', 'active': 'true', 'email': 'r9z4o@example.com' } (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/couriers/' + str(courier['id']) + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('courier', courier)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.couriers_edit(courier) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_delivery_services(self): """ V5 Test method delivery_services """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/delivery-services') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'deliveryServices': { 'hp5kc': { 'name': '8305u', 'code': 'hp5kc', 'active': 'true' }, 'hmo8s': { 'name': 'k1233', 'code': 'hmo8s', 'active': 'true' } } } ) ) response = self.client.delivery_services() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_delivery_services_edit(self): """ V5 Test method delivery_services_edit """ service = {'code': 'hmo8s', 'name': 'x345'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/delivery-services/' + service['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('deliveryService', service)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.delivery_services_edit(service) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_delivery_types(self): """ V5 Test method delivery_types """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/delivery-types') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(201) .headers(self.__header) .json( { 'success': 'true', 'deliveryTypes': { '1kp52': { 'name': 'c435', 'code': 'd345', 'defaultCost': 300, 'defaultNetCost': 0, 'paymentTypes': [ 'cash', 'bank-card' ], 'deliveryServices': [], 'defaultForCrm': 'false' }, 'example-code': { 'name': '1s0ei', 'code': 'example-code', 'defaultCost': 300, 'defaultNetCost': 0, 'paymentTypes': [ 'cash', 'bank-card' ], 'deliveryServices': [], 'defaultForCrm': 'false' } } } ) ) response = self.client.delivery_types() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_delivery_types_edit(self): """ V5 Test method delivery_types_edit """ delivery_type = {'code': 'example-code', 'name': '1s0ei'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/delivery-types/' + delivery_type['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('deliveryType', delivery_type)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.delivery_types_edit(delivery_type) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_legal_entities(self): """ V5 Test method legal_entities """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/legal-entities') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'legalEntities': [ { 'contragentType': 'legal-entity', 'legalName': 'Test LegalEntity-0aca34', 'code': '0aca34', 'countryIso': 'RU' }, { 'contragentType': 'legal-entity', 'legalName': 'Test LegalEntity-2e8913', 'code': '2e8913', 'countryIso': 'RU' } ] } ) ) response = self.client.legal_entities() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_legal_entities_edit(self): """ V5 Test method legal_entities_edit """ legal = { 'contragentType': 'legal-entity', 'legalName': 'Test LegalEntity-0aca34', 'code': '0aca34', 'countryIso': 'RU' } (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/legal-entities/' + legal['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('legalEntity', legal)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.legal_entities_edit(legal) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_mg_channels(self): """ V5 Test method mg_channels """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/mg-channels') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'mgChannels': [ { 'id': 1, 'externalId': 1, 'type': 'telegram', 'active': 'false' }, { 'id': 2, 'externalId': 268, 'type': 'telegram', 'active': 'false' } ] } ) ) response = self.client.mg_channels() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_order_methods(self): """ V5 Test method order_methods """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/order-methods') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'orderMethods': { '44cmd': { 'name': '1tdf4', 'code': '44cmd', 'defaultForCrm': 'false', 'defaultForApi': 'false', 'isFromPos': 'false' }, 'zoc5q': { 'name': '1y0cp', 'code': 'zoc5q', 'defaultForCrm': 'false', 'defaultForApi': 'false', 'isFromPos': 'false' } } } ) ) response = self.client.order_methods() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_order_methods_edit(self): """ V5 Test method order_methods_edit """ method = {'code': 'zoc5q', 'name': '1y0cp'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/order-methods/' + method['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('orderMethod', method)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.order_methods_edit(method) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_order_types(self): """ V5 Test method order_types """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/order-types') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'orderTypes': { 'example-code': { 'name': 'test', 'code': 'example-code', 'defaultForCrm': 'true', 'defaultForApi': 'true', 'ordering': 990 }, 'b7e20': { 'name': 'vwt5f', 'code': 'b7e20', 'defaultForCrm': 'false', 'defaultForApi': 'false', 'ordering': 990 } } } ) ) response = self.client.order_types() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_order_types_edit(self): """ V5 Test method order_types_edit """ order_type = {'code': 'example-code', 'name': 'test'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/order-types/' + order_type['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('orderType', order_type)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.order_types_edit(order_type) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_payment_statuses(self): """ V5 Test method payment_statuses """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/payment-statuses') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'paymentStatuses': { 'invoice': { 'name': 'Выставлен счет', 'code': 'invoice', 'defaultForCrm': 'false', 'defaultForApi': 'false', 'paymentComplete': 'false', 'ordering': 20, 'paymentTypes': [ 'bank-card', 'bank-transfer', 'credit', 'cash', 'e-money' ] }, 'payment-start': { 'name': 'Платеж проведен', 'code': 'payment-start', 'defaultForCrm': 'false', 'defaultForApi': 'false', 'paymentComplete': 'false', 'ordering': 30, 'paymentTypes': [ 'bank-card', 'bank-transfer', 'credit', 'cash', 'e-money' ] } } } ) ) response = self.client.payment_statuses() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_payment_statuses_edit(self): """ V5 Test method payment_statuses_edit """ status = {'code': 'payment-start', 'name': 'Платеж проведен'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/payment-statuses/' + status['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('paymentStatus', status)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.payment_statuses_edit(status) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_payment_types(self): """ V5 Test method payment_types """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/payment-types') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'paymentTypes': { '056a3e': { 'name': 'TestPaymentType-056a3e', 'code': '056a3e', 'defaultForCrm': 'false', 'defaultForApi': 'false', 'deliveryTypes': [], 'paymentStatuses': [] }, '238c06': { 'name': 'TestPaymentType-238c06', 'code': '238c06', 'defaultForCrm': 'false', 'defaultForApi': 'false', 'deliveryTypes': [], 'paymentStatuses': [] } } } ) ) response = self.client.payment_types() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_payment_types_edit(self): """ V5 Test method payment_types_edit """ payment_type = {'code': '238c06', 'name': 'TestPaymentType-238c06'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/payment-types/' + payment_type['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('paymentType', payment_type)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.payment_types_edit(payment_type) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_price_types(self): """ V5 Test method price_types """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/price-types') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'priceTypes': [ { 'id': 174, 'code': 'sample_v5_price_code', 'name': 'Sample v5 price type', 'active': 'true', 'default': 'false', 'geo': [], 'groups': [], 'ordering': 500 }, { 'id': 170, 'code': 'l6u5c', 'name': 's50sa', 'active': 'false', 'default': 'false', 'geo': [], 'groups': [], 'ordering': 990 } ] } ) ) response = self.client.price_types() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_price_types_edit(self): """ V5 Test method price_types_edit """ price_type = { 'id': 174, 'code': 'sample_v5_price_code', 'name': 'Sample v5 price type', 'active': 'true', 'default': 'false', 'geo': [], 'groups': [], 'ordering': 500 } (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/price-types/' + price_type['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('priceTypes', price_type)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.price_types_edit(price_type) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_product_statuses(self): """ V5 Test method product_statuses """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/product-statuses') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'productStatuses': { 'confirming': { 'code': 'confirming', 'ordering': 20, 'createdAt': '2018-04-10 12:33:58', 'cancelStatus': 'false', 'name': 'Подтверждение наличия' }, 'in-reserve': { 'code': 'in-reserve', 'ordering': 30, 'createdAt': '2018-04-10 12:33:58', 'cancelStatus': 'false', 'name': 'В резерве' } } } ) ) response = self.client.product_statuses() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_product_statuses_edit(self): """ V5 Test method product_statuses_edit """ status = {'code': 'in-reserve', 'name': 'В резерве'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/product-statuses/' + status['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('productStatus', status)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.product_statuses_edit(status) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_sites(self): """ V5 Test method sites """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/sites') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'sites': { 'sites': { 'name': 'XXX', 'url': 'http://url', 'code': 'code', 'defaultForCrm': 'false', 'ymlUrl': 'http://url', 'loadFromYml': 'true', 'catalogUpdatedAt': '2020-04-03 13:56:26', 'catalogLoadingAt': '2020-04-13 08:50:55', 'countryIso': 'RU' } } } ) ) response = self.client.sites() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_sites_edit(self): """ V5 Test method sites_edit """ site = {'code': 'code', 'name': 'XXX'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/sites/' + site['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('site', site)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.sites_edit(site) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_status_groups(self): """ V5 Test method status_groups """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/status-groups') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'statusGroups': { 'new': { 'name': 'Новый', 'code': 'new', 'ordering': 10, 'process': 'false', 'statuses': [ 'new', 'rake-status' ] }, 'approval': { 'name': 'Согласование', 'code': 'approval', 'ordering': 20, 'process': 'true', 'statuses': [ 'availability-confirmed', 'offer-analog', 'client-confirmed', 'prepayed' ] } } } ) ) response = self.client.status_groups() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_statuses(self): """ V5 Test method statuses """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/statuses') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'statuses': { 'new': { 'name': 'Новый', 'code': 'new', 'ordering': 10, 'group': 'new' }, 'rake-status': { 'name': 'Rake status', 'code': 'rake-status', 'ordering': 990, 'group': 'new' } } } ) ) response = self.client.statuses() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_statuses_edit(self): """ V5 Test method statuses_edit """ status = {'code': 'new', 'name': 'Новый'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/statuses/' + status['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('status', status)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.statuses_edit(status) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_stores(self): """ V5 Test method stores """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/stores') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'stores': [ { 'type': 'store-type-warehouse', 'inventoryType': 'integer', 'code': 'lca46', 'name': 'new' }, { 'type': 'store-type-warehouse', 'inventoryType': 'integer', 'code': 'q6w5i', 'name': 's344' } ] } ) ) response = self.client.stores() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_stores_edit(self): """ V5 Test method stores_edit """ store = {'code': 'q6w5i', 'name': 's234f'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/stores/' + store['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('store', store)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.stores_edit(store) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_units(self): """ V5 Test method units """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/reference/units') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'units': { 'pc': { 'code': 'pc', 'name': 'Штука', 'sym': 'шт.', 'default': 'true', 'active': 'true' }, 'kg': { 'code': 'kg', 'name': 'Килограмм', 'sym': 'кг', 'default': 'false', 'active': 'true' } } } ) ) response = self.client.units() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_units_edit(self): """ V5 Test method units_edit """ units = { 'code': 'pc', 'name': 'Штука', 'sym': 'шт.', 'default': 'true', 'active': 'true' } (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/reference/units/' + units['code'] + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('units', units)) .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.units_edit(units) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_segments(self): """ V5 Test method segments """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/segments') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[active]': 'true'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'segments': [ { 'id': 34, 'code': 'no-sex', 'name': 'Пол не указан', 'createdAt': '2018-04-10 12:34:30', 'isDynamic': 'true', 'customersCount': 1290, 'active': 'true' }, { 'id': 33, 'code': 'women', 'name': 'Women', 'createdAt': '2018-04-10 12:34:30', 'isDynamic': 'true', 'customersCount': 0, 'active': 'true' } ] } ) ) response = self.client.segments({'active': 'true'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_inventories(self): """ V5 Test method inventories """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/store/inventories') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[site]': 'https://retailcrm.pro'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 621, 'currentPage': 1, 'totalPageCount': 32 }, 'offers': [ { 'id': 33937, 'externalId': '89387', 'site': 'https://retailcrm.pro', 'quantity': 102 }, { 'id': 33933, 'externalId': '46', 'site': 'https://retailcrm.pro', 'quantity': 0 } ] } ) ) response = self.client.inventories({'site': 'https://retailcrm.pro'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_inventories_upload(self): """ V5 Test method inventories_upload """ offer = {'externalId': '89387', 'id': 33937} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/store/inventories/upload') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('offers', offer)) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'processedOffersCount': 0, 'notFoundOffers': { 'externalId': '89387', 'id': 33937, 'xmlId': 9999 } } ) ) response = self.client.inventories_upload(offer) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_prices_upload(self): """ V5 Test method prices_upload """ price = [{'price': 999, 'externalId': '89387'}] (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/store/prices/upload') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('prices', price)) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'processedOffersCount': 0, 'notFoundOffers': [ { 'externalId': 'x2342' } ] } ) ) response = self.client.prices_upload(price) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_product_groups(self): """ V5 Test method product_groups """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/store/product-groups') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[active]': 'true'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 115, 'currentPage': 1, 'totalPageCount': 6 }, 'productGroup': [ { 'site': '127-0-0-1-8080', 'id': 2171, 'name': 'Cameras', 'externalId': '33', 'active': 'true' }, { 'site': 'localhost-8080', 'id': 2133, 'name': 'Cameras', 'externalId': '33', 'active': 'true' } ] } ) ) response = self.client.product_groups({'active': 'true'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_products(self): """ V5 Test method products """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/store/products') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[active]': 'true'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 558, 'currentPage': 1, 'totalPageCount': 28 }, 'products': [ { 'minPrice': 100, 'maxPrice': 100, 'id': 25804, 'name': 'sds', 'groups': [ { 'id': 2171, 'externalId': '33' } ], 'manufacturer': 'asdas', 'offers': [ { 'name': 'example', 'price': 100, 'images': [], 'id': 33937, 'externalId': '89387', 'article': 'x3421', 'prices': [ { 'priceType': 'base', 'price': 100, 'ordering': 991 } ], 'weight': 44, 'length': 324, 'width': 33, 'height': 432, 'unit': { 'code': 'pc', 'name': 'Штука', 'sym': 'шт.' } } ], 'active': 'true', 'quantity': 102, 'markable': 'false' } ] } ) ) response = self.client.products({'active': 'true'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_products_properties(self): """ V5 Test method products_properties """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/store/products/properties') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[active]': 'true'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 24, 'currentPage': 1, 'totalPageCount': 2 }, 'properties': [ { 'sites': [ 'samsung' ], 'code': 'type', 'name': 'Тип' }, { 'sites': [ 'samsung' ], 'code': 'vendor_country', 'name': 'Страна производителя' }, { 'sites': [ 'samsung' ], 'code': 'vendor_address', 'name': 'Юр. адрес производителя' }, { 'sites': [ 'samsung' ], 'code': 'color', 'name': 'color' } ] } ) ) response = self.client.products_properties({'active': 'true'}) pook.off() self.assertTrue(response.is_successful(), True) @pook.on def test_tasks(self): """ V5 Test method tasks """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/tasks') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[performers]': '15'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 139, 'currentPage': 1, 'totalPageCount': 7 }, 'tasks': [ { 'id': 433, 'text': 'test task edited', 'commentary': 'test commentary', 'datetime': '2020-02-20 05:01', 'createdAt': '2020-02-20 01:01:28', 'complete': 'false', 'performer': 15, 'performerType': 'user' }, { 'id': 432, 'text': 'test task edited', 'commentary': 'test commentary', 'datetime': '2020-02-20 05:00', 'createdAt': '2020-02-20 01:00:07', 'complete': 'false', 'performer': 15, 'performerType': 'user' } ] } ) ) response = self.client.tasks({'performers': '15'}) pook.off() self.assertTrue(response.is_successful(), True) @pook.on def test_task_create(self): """ V5 Test method task_create """ (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/tasks/create') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('task', self.__task)) .reply(201) .headers(self.__header) .json({'success': 'true', 'id': 434}) ) response = self.client.task_create(self.__task) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_task(self): """ V5 Test method task """ uid = str(self.__task['id']) (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/tasks/' + uid) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true', 'task': self.__task}) ) response = self.client.task(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_task_edit(self): """ V5 Test method task_edit """ uid = str(self.__task['id']) (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/tasks/' + uid + '/edit') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('task', self.__task)) .reply(200) .headers(self.__header) .json({'success': 'true', 'id': '433', 'task': self.__task}) ) response = self.client.task_edit(self.__task) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_telephony_call_event(self): """ V5 Test method telephony_call_event """ call_event = {'phone': '+799999999', 'type': 'out'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/telephony/call/event') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('event', call_event)) .reply(200) .headers(self.__header) .json({'success': 'false', 'errorMsg': 'Telephony not enabled'}) ) response = self.client.telephony_call_event(call_event) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_telephony_calls_upload(self): """ V5 Test method telephony_calls_upload """ call = {'phone': '79999999999', 'type': 'out'} (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/telephony/calls/upload') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body(self.dictionaryEncode('calls', call)) .reply(200) .headers(self.__header) .json({'success': 'false', 'errorMsg': 'Telephony not enabled or not supports calls upload'} ) ) response = self.client.telephony_calls_upload(call) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_telephony_manager(self): """ V5 Test method telephony_manager """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/telephony/manager') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params('+79999999999') .reply(200) .headers(self.__header) .json( { 'success': 'true', 'manager': { 'id': 777, 'firstName': 'John', 'lastName': 'Doe', 'patronymic': 'H.', 'email': 'mail@retailcrm.pro', 'code': 'ccc7' }, 'customer': { 'id': 888, 'externalId': '5406', 'firstName': 'John', 'lastName': 'Doe', 'patronymic': 'H.', 'email': 'mail@retailcrm.pro', 'code': 'ccc7', 'phones': [{'number': '+71111111111'}] }, 'links': { 'newOrderLink': 'https://newOrderLink.ru', 'lastOrderLink': 'https://lastOrderLink.ru', 'newCustomerLink': 'https://newCustomerLink.ru', 'customerLink': 'https://customerLink.ru', } } ) ) response = self.client.telephony_manager('+79999999999') pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_user_groups(self): """ V5 Test method user_groups """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/user-groups') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 2, 'currentPage': 1, 'totalPageCount': 1 }, 'groups': [ { 'name': 'Менеджеры', 'code': 'manager', 'isManager': 'true', 'isPosManager': 'false', 'isDeliveryMen': 'false', 'deliveryTypes': [], 'breakdownOrderTypes': ['xxx', 'yyy', 'zzz'], }, { 'name': 'Руководители', 'code': 'director', 'isManager': 'false', 'isPosManager': 'false', 'isDeliveryMen': 'false', 'deliveryTypes': ['xxx'], 'breakdownOrderTypes': ['yyy'], 'breakdownSites': [], 'breakdownOrderMethods': ['zzz'], 'grantedOrderTypes': ['ccc'] } ] } ) ) response = self.client.user_groups() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_users(self): """ V5 Test method users """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/users') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .params({'filter[status]': 'online', 'filter[isManager]': 'false'}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'pagination': { 'limit': 20, 'totalCount': 7, 'currentPage': 1, 'totalPageCount': 1 }, 'users': [ { 'id': 777, 'createdAt': '2020-04-05 11:23:46', 'active': 'true', 'email': 'mail@retailcrm.pro', 'firstName': 'yyy', 'lastName': 'xxxx', 'status': 'free', 'online': 'true', 'isAdmin': 'true', 'isManager': 'false', 'groups': [] } ] } ) ) response = self.client.users({'status': 'online', 'isManager': 'false'}) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_user(self): """ V5 Test method user """ uid = '777' (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/users/' + uid) .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json( { 'success': 'true', 'user': { 'id': 777, 'createdAt': '2020-04-05 11:23:46', 'active': 'true', 'email': 'mail@retailcrm.pro', 'firstName': 'yyy', 'lastName': 'xxxx', 'status': 'free', 'online': 'true', 'isAdmin': 'true', 'isManager': 'false', 'groups': [] } } ) ) response = self.client.user(uid) pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def test_user_status(self): """ V5 Test method user_status """ uid = '777' (pook.post(os.getenv('RETAILCRM_URL') + '/api/v5/users/' + uid + '/status') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .body('status=free') .reply(200) .headers(self.__header) .json({'success': 'true'}) ) response = self.client.user_status(uid, 'free') pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True) @pook.on def statistic_update(self): """ V5 Test method statistic_update """ (pook.get(os.getenv('RETAILCRM_URL') + '/api/v5/statistic/update') .headers({'X-API-KEY': os.getenv('RETAILCRM_KEY')}) .reply(200) .headers(self.__header) .json({'success': 'true'})) response = self.client.statistic_update() pook.off() self.assertTrue(response.is_successful(), True) self.assertTrue(response.get_status_code() < 400, True)