limit = 20; $request->page = 1; $request->filter = new CustomerFilter(); $request->filter->sites = ['moysklad', 'aliexpress']; $request->filter->name = '89229112322'; $request->filter->isContact = NumericBoolean::TRUE; $mock = static::createApiMockBuilder('customers'); $mock->matchMethod(RequestMethod::GET) ->matchQuery(static::encodeFormArray($request)) ->reply(200) ->withBody($json); $client = TestClientFactory::createClient($mock->getClient()); $costs = $client->customers->list($request); self::assertModelEqualsToResponse($json, $costs); } public function testCustomersCombine(): void { $json = <<<'EOF' { "success": true } EOF; $request = new CustomersCombineRequest(); $request->customers = [ new SerializedCustomerReference(2), new SerializedCustomerReference(3), new SerializedCustomerReference(4), ]; $request->resultCustomer = new SerializedCustomerReference(1); $mock = static::createApiMockBuilder('customers/combine'); $mock->matchMethod(RequestMethod::POST) ->matchBody(static::encodeForm($request)) ->reply(200) ->withBody($json); $client = TestClientFactory::createClient($mock->getClient()); $response = $client->customers->combine($request); self::assertModelEqualsToResponse($json, $response); } public function testCustomersCreate(): void { $json = <<<'EOF' { "success": true, "id": 1 } EOF; $customer = new Customer(); $customer->type = CustomerType::CUSTOMER; $customer->externalId = 'test_10'; $customer->managerId = 24; $customer->contragent = new CustomerContragent(); $customer->contragent->contragentType = ContragentType::INDIVIDUAL; $customer->tags = [ new CustomerTag('first'), new CustomerTag('second'), new CustomerTag('third'), ]; $customer->customFields = [ 'galkatrue' => true ]; $customer->address = new CustomerAddress(); $customer->address->text = '(719) 395-5645 13990 W County 270 Rd Nathrop, Colorado(CO), 81236'; $customer->firstName = 'Test'; $customer->lastName = 'User'; $customer->patronymic = 'Tester'; $customer->email = 'tester@example.com'; $customer->phones = [ new CustomerPhone('(603) 292-6810') ]; $customer->birthday = DateTimeTransformer::createDate('1980-01-01'); $request = new CustomersCreateRequest(); $request->site = 'aliexpress'; $request->customer = $customer; $mock = static::createApiMockBuilder('customers/create'); $mock->matchMethod(RequestMethod::POST) ->matchBody(static::encodeForm($request)) ->reply(200) ->withBody($json); $client = TestClientFactory::createClient($mock->getClient()); $response = $client->customers->create($request); self::assertModelEqualsToResponse($json, $response); } public function testCustomersFixExternalIds(): void { $json = <<<'EOF' { "success": true } EOF; $request = new CustomersFixExternalIdsRequest(); $request->customers = [ new FixExternalRow(1, 'external_id_1'), new FixExternalRow(2, 'external_id_2'), new FixExternalRow(3, 'external_id_3'), ]; $mock = static::createApiMockBuilder('customers/fix-external-ids'); $mock->matchMethod(RequestMethod::POST) ->matchBody(static::encodeForm($request)) ->reply(200) ->withBody($json); $client = TestClientFactory::createClient($mock->getClient()); $response = $client->customers->fixExternalIds($request); self::assertModelEqualsToResponse($json, $response); } public function testCustomersHistory(): void { $json = <<<'EOF' { "success": true, "generatedAt": "2021-02-16 15:41:11", "history": [ { "id": 2692, "createdAt": "2018-10-04 20:04:13", "source": "code", "field": "segments", "oldValue": { "code": "nizkiy-sredniy-chek" }, "newValue": null, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2693, "createdAt": "2018-10-04 20:04:13", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "normalniy-sredniy-chek" }, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2694, "createdAt": "2018-10-05 13:39:00", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "problemnie" }, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2695, "createdAt": "2018-10-05 13:49:08", "created": true, "source": "api", "field": "id", "apiKey": { "current": false }, "oldValue": null, "newValue": 982, "customer": { "type": "customer", "id": 982, "externalId": "2", "createdAt": "2018-10-05 13:49:07", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "Admin", "lastName": "admin", "email": "admin@mail.ru" } }, { "id": 2696, "createdAt": "2018-10-05 13:51:11", "source": "api", "field": "phones", "apiKey": { "current": false }, "oldValue": null, "newValue": "9515120000", "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2697, "createdAt": "2018-10-05 13:54:18", "source": "code", "field": "manager", "oldValue": null, "newValue": { "id": 23 }, "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2698, "createdAt": "2018-10-05 14:36:22", "created": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": null, "newValue": 983, "customer": { "type": "customer", "id": 983, "createdAt": "2018-10-05 14:36:22", "managerId": 23, "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "test", "email": "" } }, { "id": 2699, "createdAt": "2018-10-05 14:36:34", "source": "api", "field": "external_id", "apiKey": { "current": false }, "oldValue": null, "newValue": "3", "customer": { "id": 983, "externalId": "3", "site": "presta" } }, { "id": 2700, "createdAt": "2018-10-05 15:04:36", "source": "user", "user": { "id": 23 }, "field": "manager", "oldValue": null, "newValue": { "id": 23 }, "customer": { "id": 971, "externalId": "1", "site": "BitrixMod" } }, { "id": 2701, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nedavnie" }, "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2702, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nedavnie" }, "customer": { "id": 983, "externalId": "3", "site": "presta" } }, { "id": 2703, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "rossiya-krome-msk" }, "customer": { "id": 983, "externalId": "3", "site": "presta" } }, { "id": 2704, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "bez-otmen" }, "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2705, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "pol-ne-ukazan" }, "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2706, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "pol-ne-ukazan" }, "customer": { "id": 983, "externalId": "3", "site": "presta" } }, { "id": 2707, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "sredney-davnosti" }, "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2708, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "sredney-davnosti" }, "customer": { "id": 983, "externalId": "3", "site": "presta" } }, { "id": 2709, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-ltv" }, "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2710, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-ltv" }, "customer": { "id": 983, "externalId": "3", "site": "presta" } }, { "id": 2711, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "davnie" }, "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2712, "createdAt": "2018-10-05 16:36:26", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "davnie" }, "customer": { "id": 983, "externalId": "3", "site": "presta" } }, { "id": 2713, "createdAt": "2018-10-05 16:36:27", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "malenkaya-summa-pokupok" }, "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2714, "createdAt": "2018-10-05 16:36:27", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "malenkaya-summa-pokupok" }, "customer": { "id": 983, "externalId": "3", "site": "presta" } }, { "id": 2715, "createdAt": "2018-10-05 16:36:27", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-sredniy-chek" }, "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2716, "createdAt": "2018-10-05 16:36:27", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-sredniy-chek" }, "customer": { "id": 983, "externalId": "3", "site": "presta" } }, { "id": 2717, "createdAt": "2018-10-05 16:36:27", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "rossiya" }, "customer": { "id": 983, "externalId": "3", "site": "presta" } }, { "id": 2718, "createdAt": "2018-10-12 12:15:53", "source": "user", "user": { "id": 19 }, "field": "address.building", "oldValue": null, "newValue": "5", "address": { "id": 982, "isMain": true }, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2719, "createdAt": "2018-10-12 12:15:53", "source": "user", "user": { "id": 19 }, "field": "address.city", "oldValue": null, "newValue": "Москва", "address": { "id": 982, "isMain": true }, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2720, "createdAt": "2018-10-12 12:15:53", "source": "user", "user": { "id": 19 }, "field": "address.region", "oldValue": null, "newValue": "Москва город", "address": { "id": 982, "isMain": true }, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2721, "createdAt": "2018-10-12 12:15:53", "source": "user", "user": { "id": 19 }, "field": "address.street", "oldValue": null, "newValue": "Мира", "address": { "id": 982, "isMain": true }, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2722, "createdAt": "2018-10-12 13:46:37", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "moskva" }, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2723, "createdAt": "2018-10-12 13:46:37", "source": "code", "field": "segments", "oldValue": { "code": "rossiya-krome-msk" }, "newValue": null, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2724, "createdAt": "2018-10-12 13:46:38", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "klienti-iz-gorodov-millionnikov" }, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2725, "createdAt": "2018-10-16 16:37:21", "created": true, "source": "api", "field": "id", "apiKey": { "current": false }, "oldValue": null, "newValue": 984, "customer": { "type": "customer", "id": 984, "externalId": "4", "createdAt": "2018-10-16 16:37:21", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "Test", "lastName": "test", "email": "sergey_ds@gmail.com" } }, { "id": 2726, "createdAt": "2018-10-16 16:39:55", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "pol-ne-ukazan" }, "customer": { "id": 984, "externalId": "4", "site": "presta" } }, { "id": 2727, "createdAt": "2018-10-16 16:39:55", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "problemnie" }, "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2728, "createdAt": "2018-10-16 16:39:55", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "sredney-davnosti" }, "customer": { "id": 984, "externalId": "4", "site": "presta" } }, { "id": 2729, "createdAt": "2018-10-16 16:39:56", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nedavnie" }, "customer": { "id": 984, "externalId": "4", "site": "presta" } }, { "id": 2730, "createdAt": "2018-10-16 16:39:56", "source": "code", "field": "segments", "oldValue": { "code": "bez-otmen" }, "newValue": null, "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2731, "createdAt": "2018-10-16 16:39:56", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "davnie" }, "customer": { "id": 984, "externalId": "4", "site": "presta" } }, { "id": 2732, "createdAt": "2018-10-16 16:39:56", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-sredniy-chek" }, "customer": { "id": 984, "externalId": "4", "site": "presta" } }, { "id": 2733, "createdAt": "2018-10-16 18:06:04", "source": "api", "field": "phones", "apiKey": { "current": false }, "oldValue": null, "newValue": "1245987", "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2734, "createdAt": "2018-10-16 18:06:04", "source": "api", "field": "email", "apiKey": { "current": false }, "oldValue": "admin@mail.ru", "newValue": "test12@gmail.com", "customer": { "id": 982, "externalId": "2", "site": "presta" } }, { "id": 2735, "createdAt": "2018-10-16 18:07:18", "deleted": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": 974, "newValue": null, "customer": { "type": "customer", "id": 974, "externalId": "82", "isContact": false, "createdAt": "2018-10-03 09:13:04", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "tags": [ ], "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "costSumm": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "TestPresta", "phones": [ ] } }, { "id": 2736, "createdAt": "2018-10-16 18:07:18", "deleted": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": 975, "newValue": null, "customer": { "type": "customer", "id": 975, "externalId": "83", "isContact": false, "createdAt": "2018-10-03 09:16:25", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "tags": [ ], "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "costSumm": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "TestPresta", "lastName": "TestPresta", "phones": [ ] } }, { "id": 2737, "createdAt": "2018-10-16 18:07:18", "deleted": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": 976, "newValue": null, "customer": { "type": "customer", "id": 976, "externalId": "84", "isContact": false, "createdAt": "2018-10-03 09:55:05", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "tags": [ ], "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "costSumm": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "TestPresta", "lastName": "TestPresta", "phones": [ ] } }, { "id": 2738, "createdAt": "2018-10-16 18:07:18", "deleted": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": 977, "newValue": null, "customer": { "type": "customer", "id": 977, "externalId": "85", "isContact": false, "createdAt": "2018-10-03 10:22:15", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "tags": [ ], "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "costSumm": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "TestPresta", "lastName": "TestPresta", "email": "test@gmail.ru", "phones": [ ] } }, { "id": 2739, "createdAt": "2018-10-16 18:07:18", "deleted": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": 979, "newValue": null, "customer": { "type": "customer", "id": 979, "externalId": "86", "isContact": false, "createdAt": "2018-10-03 16:25:32", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "tags": [ ], "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "costSumm": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "TestPresta", "lastName": "TestPresta", "email": "test@gmail.ru", "phones": [ ] } }, { "id": 2740, "createdAt": "2018-10-16 18:07:18", "deleted": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": 980, "newValue": null, "customer": { "type": "customer", "id": 980, "externalId": "87", "isContact": false, "createdAt": "2018-10-03 16:32:05", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "tags": [ ], "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "costSumm": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "TestPresta", "lastName": "TestPresta", "email": "test@gmail.ru", "phones": [ ] } }, { "id": 2741, "createdAt": "2018-10-16 18:07:18", "deleted": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": 981, "newValue": null, "customer": { "type": "customer", "id": 981, "externalId": "88", "isContact": false, "createdAt": "2018-10-03 16:32:09", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "tags": [ ], "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "costSumm": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "TestPresta", "lastName": "TestPresta", "email": "test@gmail.ru", "phones": [ ] } }, { "id": 2742, "createdAt": "2018-10-16 18:07:18", "deleted": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": 984, "newValue": null, "customer": { "type": "customer", "id": 984, "externalId": "4", "isContact": false, "createdAt": "2018-10-16 16:37:21", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "tags": [ ], "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "costSumm": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "Test", "lastName": "test", "email": "sergey_ds@gmail.com", "phones": [ ] } }, { "id": 2743, "createdAt": "2018-10-16 18:07:18", "deleted": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": 983, "newValue": null, "customer": { "type": "customer", "id": 983, "externalId": "3", "isContact": false, "createdAt": "2018-10-05 14:36:22", "managerId": 23, "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "tags": [ ], "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "costSumm": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "address": { "id": 984, "countryIso": "RU" }, "segments": [ ], "firstName": "test", "email": "", "phones": [ ] } }, { "id": 2744, "createdAt": "2018-10-16 18:07:18", "deleted": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": 982, "newValue": null, "customer": { "type": "customer", "id": 982, "externalId": "2", "isContact": false, "createdAt": "2018-10-05 13:49:07", "managerId": 23, "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "tags": [ ], "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "costSumm": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "address": { "id": 983, "index": "344092", "countryIso": "", "city": "Ростов", "text": "test " }, "segments": [ ], "firstName": "Admin", "lastName": "admin", "email": "test12@gmail.com", "phones": [ { "number": "1245987" }, { "number": "9515120000" } ] } }, { "id": 2745, "createdAt": "2018-10-16 18:07:40", "created": true, "source": "api", "field": "id", "apiKey": { "current": false }, "oldValue": null, "newValue": 985, "customer": { "type": "customer", "id": 985, "externalId": "2", "createdAt": "2018-10-16 18:03:30", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "Test", "lastName": "test", "email": "test12@gmail.com", "phones": [ { "number": "1245987" } ] } }, { "id": 2746, "createdAt": "2018-10-16 20:03:51", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "sredney-davnosti" }, "customer": { "id": 985, "externalId": "2", "site": "presta" } }, { "id": 2747, "createdAt": "2018-10-16 20:03:51", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nedavnie" }, "customer": { "id": 985, "externalId": "2", "site": "presta" } }, { "id": 2748, "createdAt": "2018-10-16 20:03:51", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-ltv" }, "customer": { "id": 985, "externalId": "2", "site": "presta" } }, { "id": 2749, "createdAt": "2018-10-16 20:03:52", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "pol-ne-ukazan" }, "customer": { "id": 985, "externalId": "2", "site": "presta" } }, { "id": 2750, "createdAt": "2018-10-16 20:03:52", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-sredniy-chek" }, "customer": { "id": 985, "externalId": "2", "site": "presta" } }, { "id": 2751, "createdAt": "2018-10-16 20:03:52", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "davnie" }, "customer": { "id": 985, "externalId": "2", "site": "presta" } }, { "id": 2752, "createdAt": "2018-10-16 20:03:52", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "malenkaya-summa-pokupok" }, "customer": { "id": 985, "externalId": "2", "site": "presta" } }, { "id": 2753, "createdAt": "2018-10-17 09:27:03", "created": true, "source": "api", "field": "id", "apiKey": { "current": false }, "oldValue": null, "newValue": 986, "customer": { "type": "customer", "id": 986, "createdAt": "2018-10-17 09:27:03", "vip": false, "bad": false, "site": "BitrixMod", "contragent": { "contragentType": "individual" }, "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "email": "" } }, { "id": 2754, "createdAt": "2018-10-17 09:28:15", "created": true, "source": "api", "field": "id", "apiKey": { "current": false }, "oldValue": null, "newValue": 987, "customer": { "type": "customer", "id": 987, "createdAt": "2018-10-17 09:28:15", "vip": false, "bad": false, "site": "BitrixMod", "contragent": { "contragentType": "individual" }, "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "email": "" } }, { "id": 2755, "createdAt": "2018-10-17 12:06:13", "source": "code", "field": "phones", "oldValue": null, "newValue": "911", "customer": { "id": 978, "site": "moysklad" } }, { "id": 2756, "createdAt": "2018-10-17 12:09:38", "source": "code", "field": "phones", "oldValue": null, "newValue": "890999999999", "customer": { "id": 978, "site": "moysklad" } }, { "id": 2757, "createdAt": "2018-10-17 13:37:52", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-ltv" }, "customer": { "id": 986, "site": "BitrixMod" } }, { "id": 2758, "createdAt": "2018-10-17 13:37:52", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-ltv" }, "customer": { "id": 987, "site": "BitrixMod" } }, { "id": 2759, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "pol-ne-ukazan" }, "customer": { "id": 986, "site": "BitrixMod" } }, { "id": 2760, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "pol-ne-ukazan" }, "customer": { "id": 987, "site": "BitrixMod" } }, { "id": 2761, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "sredney-davnosti" }, "customer": { "id": 986, "site": "BitrixMod" } }, { "id": 2762, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "sredney-davnosti" }, "customer": { "id": 987, "site": "BitrixMod" } }, { "id": 2763, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nedavnie" }, "customer": { "id": 986, "site": "BitrixMod" } }, { "id": 2764, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nedavnie" }, "customer": { "id": 987, "site": "BitrixMod" } }, { "id": 2765, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": { "code": "normalniy-sredniy-chek" }, "newValue": null, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2766, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "davnie" }, "customer": { "id": 986, "site": "BitrixMod" } }, { "id": 2767, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "davnie" }, "customer": { "id": 987, "site": "BitrixMod" } }, { "id": 2768, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "malenkaya-summa-pokupok" }, "customer": { "id": 986, "site": "BitrixMod" } }, { "id": 2769, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "malenkaya-summa-pokupok" }, "customer": { "id": 987, "site": "BitrixMod" } }, { "id": 2770, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-sredniy-chek" }, "customer": { "id": 986, "site": "BitrixMod" } }, { "id": 2771, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-sredniy-chek" }, "customer": { "id": 987, "site": "BitrixMod" } }, { "id": 2772, "createdAt": "2018-10-17 13:37:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-sredniy-chek" }, "customer": { "id": 978, "site": "moysklad" } }, { "id": 2773, "createdAt": "2018-10-17 14:50:00", "created": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": null, "newValue": 988, "customer": { "type": "customer", "id": 988, "createdAt": "2018-10-17 14:50:00", "vip": false, "bad": false, "contragent": { "contragentType": "individual" }, "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "testing" } }, { "id": 2774, "createdAt": "2018-10-17 16:00:27", "created": true, "source": "user", "user": { "id": 23 }, "field": "id", "oldValue": null, "newValue": 989, "customer": { "type": "customer", "id": 989, "createdAt": "2018-10-17 16:00:27", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "testing2" } }, { "id": 2775, "createdAt": "2018-10-17 16:42:34", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "pol-ne-ukazan" }, "customer": { "id": 988 } }, { "id": 2776, "createdAt": "2018-10-17 16:42:34", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "pol-ne-ukazan" }, "customer": { "id": 989, "site": "presta" } }, { "id": 2777, "createdAt": "2018-10-17 16:42:34", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "sredney-davnosti" }, "customer": { "id": 988 } }, { "id": 2778, "createdAt": "2018-10-17 16:42:34", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "sredney-davnosti" }, "customer": { "id": 989, "site": "presta" } }, { "id": 2779, "createdAt": "2018-10-17 16:42:35", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nedavnie" }, "customer": { "id": 988 } }, { "id": 2780, "createdAt": "2018-10-17 16:42:35", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nedavnie" }, "customer": { "id": 989, "site": "presta" } }, { "id": 2781, "createdAt": "2018-10-17 16:42:35", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "rossiya-krome-msk" }, "customer": { "id": 988 } }, { "id": 2782, "createdAt": "2018-10-17 16:42:35", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "rossiya-krome-msk" }, "customer": { "id": 989, "site": "presta" } }, { "id": 2783, "createdAt": "2018-10-17 16:42:35", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-sredniy-chek" }, "customer": { "id": 988 } }, { "id": 2784, "createdAt": "2018-10-17 16:42:35", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "nizkiy-sredniy-chek" }, "customer": { "id": 989, "site": "presta" } }, { "id": 2785, "createdAt": "2018-10-17 16:42:35", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "rossiya" }, "customer": { "id": 988 } }, { "id": 2786, "createdAt": "2018-10-17 16:42:35", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "rossiya" }, "customer": { "id": 989, "site": "presta" } }, { "id": 2787, "createdAt": "2018-10-17 16:42:35", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "davnie" }, "customer": { "id": 988 } }, { "id": 2788, "createdAt": "2018-10-17 16:42:35", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "davnie" }, "customer": { "id": 989, "site": "presta" } }, { "id": 2789, "createdAt": "2018-10-17 17:11:17", "created": true, "source": "api", "field": "id", "apiKey": { "current": false }, "oldValue": null, "newValue": 990, "customer": { "type": "customer", "id": 990, "externalId": "3", "createdAt": "2018-10-17 17:11:16", "vip": false, "bad": false, "site": "presta", "contragent": { "contragentType": "individual" }, "marginSumm": 0, "totalSumm": 0, "averageSumm": 0, "ordersCount": 0, "customFields": [ ], "personalDiscount": 0, "cumulativeDiscount": 0, "segments": [ ], "firstName": "Testadd", "lastName": "Adddd", "email": "test11@gmail.com" } }, { "id": 2790, "createdAt": "2018-10-17 20:03:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "pol-ne-ukazan" }, "customer": { "id": 990, "externalId": "3", "site": "presta" } }, { "id": 2791, "createdAt": "2018-10-17 20:03:53", "source": "code", "field": "segments", "oldValue": null, "newValue": { "code": "sredney-davnosti" }, "customer": { "id": 990, "externalId": "3", "site": "presta" } } ], "pagination": { "limit": 100, "totalCount": 28676, "currentPage": 1, "totalPageCount": 287 } } EOF; $request = new CustomersHistoryRequest(); $request->limit = 20; $request->page = 1; $request->filter = new CustomerHistoryFilter(); $request->filter->sinceId = 2691; $mock = static::createApiMockBuilder('customers/history'); $mock->matchMethod(RequestMethod::GET) ->matchQuery(static::encodeFormArray($request)) ->reply(200) ->withBody($json); $client = TestClientFactory::createClient($mock->getClient()); $response = $client->customers->history($request); self::assertModelEqualsToResponse($json, $response, true); } public function testCustomersNotes(): void { $json = <<<'EOF' { "success": true, "pagination": { "limit": 20, "totalCount": 2, "currentPage": 1, "totalPageCount": 1 }, "notes": [ { "customer": { "site": "moysklad", "id": 1057, "externalId": "10", "type": "customer" }, "id": 42, "text": "note", "createdAt": "2019-08-06 18:04:56" }, { "customer": { "site": "moysklad", "id": 1057, "externalId": "10", "type": "customer" }, "id": 43, "text": "note2", "createdAt": "2019-08-06 18:05:27" } ] } EOF; $request = new CustomersNotesRequest(); $request->limit = 20; $request->page = 1; $request->filter = new CustomerNoteFilter(); $request->filter->customerExternalIds = ['10']; $request->filter->createdAtFrom = '2019-08-06 12:00:00'; $request->filter->text = 'note'; $mock = static::createApiMockBuilder('customers/notes'); $mock->matchMethod(RequestMethod::GET) ->matchQuery(static::encodeFormArray($request)) ->reply(200) ->withBody($json); $client = TestClientFactory::createClient($mock->getClient()); $costs = $client->customers->notes($request); self::assertModelEqualsToResponse($json, $costs); } public function testCustomersNotesCreate(): void { $json = <<<'EOF' { "success": true, "id": 1 } EOF; $request = new CustomersNotesCreateRequest(); $request->site = 'moysklad'; $request->note = new CustomerNote(); $request->note->customer = new Customer(); $request->note->customer->externalId = '10'; $request->note->managerId = 21; $request->note->text = 'Text'; $mock = static::createApiMockBuilder('customers/notes/create'); $mock->matchMethod(RequestMethod::POST) ->matchBody(static::encodeForm($request)) ->reply(200) ->withBody($json); $client = TestClientFactory::createClient($mock->getClient()); $response = $client->customers->notesCreate($request); self::assertModelEqualsToResponse($json, $response); } public function testCustomersNotesDelete(): void { $json = <<<'EOF' { "success": true } EOF; $mock = static::createApiMockBuilder('customers/notes/1/delete'); $mock->matchMethod(RequestMethod::POST) ->reply(200) ->withBody($json); $client = TestClientFactory::createClient($mock->getClient()); $response = $client->customers->notesDelete(1); self::assertModelEqualsToResponse($json, $response); } public function testCustomersUpload(): void { $json = <<<'EOF' { "success": true, "uploadedCustomers": [{ "id": 1, "externalId": "test_10" }] } EOF; $customer = new Customer(); $customer->type = CustomerType::CUSTOMER; $customer->externalId = 'test_10'; $customer->managerId = 24; $customer->contragent = new CustomerContragent(); $customer->contragent->contragentType = ContragentType::INDIVIDUAL; $customer->tags = [ new CustomerTag('first'), new CustomerTag('second'), new CustomerTag('third'), ]; $customer->customFields = [ 'galkatrue' => true ]; $customer->address = new CustomerAddress(); $customer->address->text = '(719) 395-5645 13990 W County 270 Rd Nathrop, Colorado(CO), 81236'; $customer->firstName = 'Test'; $customer->lastName = 'User'; $customer->patronymic = 'Tester'; $customer->email = 'tester@example.com'; $customer->phones = [ new CustomerPhone('(603) 292-6810') ]; $request = new CustomersUploadRequest(); $request->site = 'aliexpress'; $request->customers = [$customer]; $mock = static::createApiMockBuilder('customers/upload'); $mock->matchMethod(RequestMethod::POST) ->matchBody(static::encodeForm($request)) ->reply(200) ->withBody($json); $client = TestClientFactory::createClient($mock->getClient()); $response = $client->customers->upload($request); self::assertModelEqualsToResponse($json, $response); } public function testCustomersGet(): void { $json = <<<'EOF' { "success": true, "customer": { "type": "customer", "id": 4770, "externalId": "5", "isContact": false, "createdAt": "2022-03-11 15:39:08", "managerId": 24, "vip": false, "bad": false, "site": "bb_demo", "contragent": { "contragentType": "individual" }, "tags": [ { "name": "test", "color": "#3e89b6", "attached": false }, { "name": "first", "color": "#eff8e3", "attached": false }, { "name": "third", "color": "#3e89b6", "attached": false }, { "name": "second", "color": "#ef5e67", "attached": false } ], "marginSumm": 7057, "totalSumm": 7057, "averageSumm": 7057, "ordersCount": 1, "costSumm": 0, "customFields": { "galkatrue": true }, "personalDiscount": 0, "cumulativeDiscount": 0, "address": { "id": 3492, "text": "ул. Красноармейская, д. 63/90, кв. 45" }, "segments": [ { "id": 9, "code": "nedavnie", "name": "Недавние", "createdAt": "2018-09-04 16:35:59", "isDynamic": true, "customersCount": 77, "active": true }, { "id": 14, "code": "malenkaya-summa-pokupok", "name": "Маленькая сумма покупок", "createdAt": "2018-09-04 16:35:59", "isDynamic": true, "customersCount": 1040, "active": true }, { "id": 16, "code": "sredniy-ltv", "name": "Средний LTV", "createdAt": "2018-09-04 16:35:59", "isDynamic": true, "customersCount": 21, "active": true }, { "id": 19, "code": "normalniy-sredniy-chek", "name": "Нормальный средний чек", "createdAt": "2018-09-04 16:35:59", "isDynamic": true, "customersCount": 20, "active": true }, { "id": 26, "code": "bez-otmen", "name": "Без отмен", "createdAt": "2018-09-04 16:35:59", "isDynamic": true, "customersCount": 1284, "active": true }, { "id": 31, "code": "pol-ne-ukazan", "name": "Пол не указан", "createdAt": "2018-09-04 16:35:59", "isDynamic": true, "customersCount": 1281, "active": true } ], "firstName": "Omega", "email": "omega@omega.com", "emailMarketingUnsubscribedAt": "2020-10-30 14:22:12", "phones": [ { "number": "79094055045" }, { "number": "+79094055044" } ] } } EOF; $request = new BySiteRequest(ByIdentifier::ID, 'bb_demo'); $mock = static::createApiMockBuilder('customers/4770'); $mock->matchMethod(RequestMethod::GET) ->matchQuery(static::encodeFormArray($request)) ->reply(200) ->withBody($json); $client = TestClientFactory::createClient($mock->getClient()); $response = $client->customers->get(4770, $request); self::assertModelsCallback($json, $response, static function ($expected, $actual) { $actualTags = $actual['customer']['tags']; $actual['customer']['tags'] = array_filter( array_map(static function ($tag) use ($actualTags) { if (in_array($tag['name'], $actualTags, true)) { return $tag; } }, $expected['customer']['tags']) ); $expected['customer']['marginSumm'] = (float)$expected['customer']['marginSumm']; $expected['customer']['totalSumm'] = (float)$expected['customer']['totalSumm']; $expected['customer']['averageSumm'] = (float)$expected['customer']['averageSumm']; $expected['customer']['costSumm'] = (float)$expected['customer']['costSumm']; $expected['customer']['personalDiscount'] = (float)$expected['customer']['personalDiscount']; $expected['customer']['cumulativeDiscount'] = (float)$expected['customer']['cumulativeDiscount']; self::assertEquals($expected, $actual); }); } public function testCustomersEdit(): void { $json = <<<'EOF' { "success": true, "id": 4770 } EOF; $request = new CustomersEditRequest(); $request->customer = new Customer(); $request->by = ByIdentifier::ID; $request->site = 'aliexpress'; $request->customer->firstName = 'Test'; $mock = static::createApiMockBuilder('customers/4770/edit'); $mock->matchMethod(RequestMethod::POST) ->matchBody(static::encodeForm($request)) ->reply(200) ->withBody($json); $client = TestClientFactory::createClient($mock->getClient()); $response = $client->customers->edit(4770, $request); self::assertModelEqualsToResponse($json, $response); } }