2021-10-27 15:49:06 +03:00
package retailcrm
2018-02-27 11:37:15 +03:00
import (
2018-04-20 17:59:26 +03:00
"encoding/json"
2018-02-27 11:37:15 +03:00
"fmt"
2022-11-24 13:37:21 +03:00
"github.com/google/go-querystring/query"
2019-09-04 11:38:21 +03:00
"io/ioutil"
2018-09-28 01:37:56 +03:00
"log"
2018-02-27 11:37:15 +03:00
"math/rand"
"net/http"
"net/url"
"os"
2020-08-04 13:09:42 +03:00
"reflect"
2018-02-27 11:37:15 +03:00
"strconv"
2019-09-04 11:38:21 +03:00
"strings"
2018-02-27 11:37:15 +03:00
"testing"
"time"
2018-04-20 17:59:26 +03:00
2022-02-03 18:09:33 +03:00
"github.com/stretchr/testify/assert"
2018-09-28 01:37:56 +03:00
"github.com/joho/godotenv"
2021-04-16 14:25:25 +03:00
gock "gopkg.in/h2non/gock.v1"
2018-02-27 11:37:15 +03:00
)
2022-11-24 13:37:21 +03:00
const prefix = "/api/v5"
2018-09-28 01:37:56 +03:00
func TestMain ( m * testing . M ) {
2021-10-27 15:49:06 +03:00
err := godotenv . Load ( ".env" )
if err != nil {
log . Fatal ( "Error loading .env file" )
2018-09-28 01:37:56 +03:00
}
2021-10-27 15:49:06 +03:00
os . Exit ( m . Run ( ) )
2018-09-28 01:37:56 +03:00
}
func init ( ) {
r = rand . New ( rand . NewSource ( time . Now ( ) . UnixNano ( ) ) )
}
2018-04-20 17:59:26 +03:00
var (
r * rand . Rand // Rand for this package.
user , _ = strconv . Atoi ( os . Getenv ( "RETAILCRM_USER" ) )
statuses = map [ int ] bool { http . StatusOK : true , http . StatusCreated : true }
2018-09-28 01:37:56 +03:00
crmURL = os . Getenv ( "RETAILCRM_URL" )
2020-12-15 13:33:24 +03:00
badURL = "https://qwertypoiu.retailcrm.pro"
2018-04-20 17:59:26 +03:00
statusFail = "FailTest: status < 400"
successFail = "FailTest: Success == true"
codeFail = "test-12345"
iCodeFail = 123123
)
2018-02-27 11:37:15 +03:00
func RandomString ( strlen int ) string {
const chars = "abcdefghijklmnopqrstuvwxyz0123456789"
result := make ( [ ] byte , strlen )
for i := range result {
result [ i ] = chars [ r . Intn ( len ( chars ) ) ]
}
return string ( result )
}
func client ( ) * Client {
2018-09-28 13:46:09 +03:00
c := New ( crmURL , os . Getenv ( "RETAILCRM_KEY" ) )
c . Debug = true
return c
2018-02-27 11:37:15 +03:00
}
2018-04-22 20:39:22 +03:00
func badurlclient ( ) * Client {
2018-09-28 01:37:56 +03:00
return New ( badURL , os . Getenv ( "RETAILCRM_KEY" ) )
2018-04-22 20:39:22 +03:00
}
2022-04-18 12:23:18 +03:00
func TestBaseURLTrimmed ( t * testing . T ) {
c1 := New ( "https://test.retailcrm.pro" , "key" )
c2 := New ( "https://test.retailcrm.pro/" , "key" )
c3 := New ( "https://test.retailcrm.pro////" , "key" )
assert . Equal ( t , c1 . URL , c2 . URL )
assert . Equal ( t , c1 . URL , c3 . URL )
}
2018-02-27 11:37:15 +03:00
func TestGetRequest ( t * testing . T ) {
c := client ( )
2019-02-21 11:51:50 +03:00
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/api/v5/fake-method" ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg" : "Method not found"} ` )
2018-02-27 11:37:15 +03:00
_ , status , _ := c . GetRequest ( "/fake-method" )
if status != http . StatusNotFound {
2018-04-20 17:59:26 +03:00
t . Fail ( )
2018-02-27 11:37:15 +03:00
}
}
func TestPostRequest ( t * testing . T ) {
c := client ( )
2019-02-21 11:51:50 +03:00
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/api/v5/fake-method" ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg" : "Method not found"} ` )
2018-02-27 11:37:15 +03:00
_ , status , _ := c . PostRequest ( "/fake-method" , url . Values { } )
if status != http . StatusNotFound {
2018-04-20 17:59:26 +03:00
t . Fail ( )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_ApiVersionsVersions ( t * testing . T ) {
c := client ( )
2019-02-21 11:51:50 +03:00
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/api/api-versions" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "versions" : ["1.0", "4.0", "3.0", "4.0", "5.0"]} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . APIVersions ( )
if err != nil {
2018-04-22 20:39:22 +03:00
t . Errorf ( "%v" , err . Error ( ) )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-22 20:39:22 +03:00
}
}
func TestClient_ApiVersionsVersionsBadUrl ( t * testing . T ) {
c := badurlclient ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( badURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/api/api-versions" ) .
2021-04-26 12:09:21 +03:00
Reply ( 400 ) .
2018-04-20 17:59:26 +03:00
BodyString ( ` { "success": false, "errorMsg" : "Account does not exist"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . APIVersions ( )
if err == nil {
t . Error ( "Error must be return" )
2018-04-22 20:39:22 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
2021-04-26 12:09:21 +03:00
t . Logf ( "%v" , err )
2018-04-22 20:39:22 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_ApiCredentialsCredentialsBadKey ( t * testing . T ) {
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/api/credentials" ) .
Reply ( 403 ) .
BodyString ( ` { "success": false, "errorMsg": "Wrong \"apiKey\" value"} ` )
2019-02-21 11:51:50 +03:00
c := client ( )
2018-04-22 20:39:22 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . APICredentials ( )
if err == nil {
t . Error ( "Error must be return" )
2018-04-22 20:39:22 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
2021-04-26 12:09:21 +03:00
t . Logf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_ApiCredentialsCredentials ( t * testing . T ) {
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/api/credentials" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
c := client ( )
2021-04-26 12:09:21 +03:00
data , _ , err := c . APICredentials ( )
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2022-02-03 18:09:33 +03:00
func TestClient_APISystemInfo ( t * testing . T ) {
defer gock . Off ( )
r := SystemInfoResponse {
Success : true ,
SystemVersion : "8.7.77" ,
PublicURL : crmURL ,
TechnicalURL : fmt . Sprintf ( "https://%s.io" , RandomString ( 30 ) ) ,
}
data , err := json . Marshal ( r )
if err != nil {
t . Errorf ( "%v" , err )
}
gock . New ( crmURL ) .
Get ( "/api/system-info" ) .
Reply ( 200 ) .
BodyString ( string ( data ) )
c := client ( )
res , s , e := c . APISystemInfo ( )
if e != nil {
t . Errorf ( "%v" , e )
}
assert . Equal ( t , s , 200 )
assert . Equal ( t , crmURL , res . PublicURL )
assert . Contains ( t , res . TechnicalURL , ".io" )
}
2018-02-27 11:37:15 +03:00
func TestClient_CustomersCustomers ( t * testing . T ) {
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/api/v5/customers" ) .
MatchParam ( "filter[city]" , "Москва" ) .
MatchParam ( "page" , "3" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
c := client ( )
data , status , err := c . Customers ( CustomersRequest {
Filter : CustomersFilter {
City : "Москва" ,
} ,
Page : 3 ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Logf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Logf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_CustomersCustomers_Fail ( t * testing . T ) {
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/api/v5/customers" ) .
MatchParam ( "filter[ids][]" , codeFail ) .
Reply ( 400 ) .
BodyString ( ` { "success": false,"errorMsg": "Internal Server Error"} ` )
c := client ( )
2021-04-26 12:09:21 +03:00
data , _ , err := c . Customers ( CustomersRequest {
2018-04-20 17:59:26 +03:00
Filter : CustomersFilter {
Ids : [ ] string { codeFail } ,
} ,
} )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_CustomerChange ( t * testing . T ) {
c := client ( )
f := Customer {
FirstName : "Понтелей" ,
LastName : "Турбин" ,
Patronymic : "Аристархович" ,
2018-03-19 23:18:36 +03:00
ExternalID : RandomString ( 8 ) ,
2018-02-27 11:37:15 +03:00
Email : fmt . Sprintf ( "%s@example.com" , RandomString ( 8 ) ) ,
Address : & Address {
City : "Москва" ,
Street : "Кутузовский" ,
Building : "14" ,
} ,
2020-08-04 13:09:42 +03:00
Tags : [ ] Tag {
{ "first" , "#3e89b6" , false } ,
{ "second" , "#ffa654" , false } ,
} ,
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
str , _ := json . Marshal ( f )
p := url . Values {
"customer" : { string ( str ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/api/v5/customers/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true, "id": 123} ` )
2018-02-27 11:37:15 +03:00
cr , sc , err := c . CustomerCreate ( f )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if sc != http . StatusCreated {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if cr . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-03-19 23:18:36 +03:00
f . ID = cr . ID
2018-02-27 11:37:15 +03:00
f . Vip = true
2018-04-20 17:59:26 +03:00
str , _ = json . Marshal ( f )
p = url . Values {
2019-10-16 16:32:31 +03:00
"by" : { string ( ByID ) } ,
2018-04-20 17:59:26 +03:00
"customer" : { string ( str ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/customers/%v/edit" , cr . ID ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2019-10-16 16:32:31 +03:00
ed , se , err := c . CustomerEdit ( f , ByID )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if se != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if ed . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/api/v5/customers/%v" , f . ExternalID ) ) .
2019-10-16 16:32:31 +03:00
MatchParam ( "by" , ByExternalID ) .
2018-04-20 17:59:26 +03:00
Reply ( 200 ) .
2020-08-04 13:09:42 +03:00
BodyString ( ` {
"success" : true ,
"customer" : {
"tags" : [
{
"name" : "first" ,
"color" : "#3e89b6" ,
"attached" : false
} ,
{
"name" : "second" ,
"color" : "#ffa654" ,
"attached" : false
}
]
}
} ` )
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . Customer ( f . ExternalID , ByExternalID , "" )
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2020-08-04 13:09:42 +03:00
if ! reflect . DeepEqual ( data . Customer . Tags , f . Tags ) {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2020-08-04 13:09:42 +03:00
}
2018-04-20 17:59:26 +03:00
}
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
func TestClient_CustomerChange_Fail ( t * testing . T ) {
c := client ( )
f := Customer {
FirstName : "Понтелей" ,
}
defer gock . Off ( )
str , _ := json . Marshal ( f )
p := url . Values {
"customer" : { string ( str ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/api/v5/customers/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Parameter 'externalId' in 'customer' is missing"} ` )
cr , sc , err := c . CustomerCreate ( f )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if sc < http . StatusBadRequest {
t . Error ( statusFail )
}
if cr . Success != false {
t . Error ( successFail )
}
f . ID = cr . ID
f . Vip = true
str , _ = json . Marshal ( f )
p = url . Values {
2019-10-16 16:32:31 +03:00
"by" : { string ( ByID ) } ,
2018-04-20 17:59:26 +03:00
"customer" : { string ( str ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/customers/%v/edit" , cr . ID ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Not found"} ` )
2019-10-16 16:32:31 +03:00
ed , se , err := c . CustomerEdit ( f , ByID )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if se < http . StatusBadRequest {
t . Error ( statusFail )
}
if ed . Success != false {
t . Error ( successFail )
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/api/v5/customers/%v" , codeFail ) ) .
2019-10-16 16:32:31 +03:00
MatchParam ( "by" , ByExternalID ) .
2018-04-20 17:59:26 +03:00
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Not found"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . Customer ( codeFail , ByExternalID , "" )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_CustomersUpload ( t * testing . T ) {
c := client ( )
customers := make ( [ ] Customer , 3 )
for i := range customers {
customers [ i ] = Customer {
FirstName : fmt . Sprintf ( "Name_%s" , RandomString ( 8 ) ) ,
LastName : fmt . Sprintf ( "Test_%s" , RandomString ( 8 ) ) ,
2018-03-19 23:18:36 +03:00
ExternalID : RandomString ( 8 ) ,
2018-02-27 11:37:15 +03:00
Email : fmt . Sprintf ( "%s@example.com" , RandomString ( 8 ) ) ,
}
}
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
str , _ := json . Marshal ( customers )
p := url . Values {
"customers" : { string ( str ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/api/v5/customers/upload" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
2022-12-09 11:38:21 +03:00
BodyString ( ` {
"success" : true ,
"uploadedCustomers" : [
{
"id" : 136
}
] ,
"failedCustomers" : [ ]
} ` )
2018-04-20 17:59:26 +03:00
2018-02-27 11:37:15 +03:00
data , status , err := c . CustomersUpload ( customers )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2022-12-09 11:38:21 +03:00
assert . Equal ( t , 136 , data . UploadedCustomers [ 0 ] . ID )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
func TestClient_CustomersUpload_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2022-12-08 16:24:52 +03:00
customers := [ ] Customer { { ExternalID : strconv . Itoa ( iCodeFail ) } , { FirstName : "John" } }
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
str , _ := json . Marshal ( customers )
p := url . Values {
"customers" : { string ( str ) } ,
2018-02-27 11:37:15 +03:00
}
2022-12-09 11:38:21 +03:00
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/api/v5/customers/upload" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 460 ) .
2022-12-08 16:24:52 +03:00
BodyString ( fmt . Sprintf ( ` {
"success" : false ,
"uploadedCustomers" : [
{
"id" : 132
}
] ,
"failedCustomers" : [
{
"externalId" : "%d"
}
] ,
"errorMsg" : "Customers are loaded with errors" ,
"errors" : {
"managerId" : "Something went wrong"
}
} ` , iCodeFail ) )
2018-04-20 17:59:26 +03:00
2022-12-09 11:38:21 +03:00
data , status , err := c . CustomersUpload ( customers )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2022-12-09 11:38:21 +03:00
assert . Equal ( t , 132 , data . UploadedCustomers [ 0 ] . ID )
assert . Equal ( t , HTTPStatusUnknown , status )
assert . Equal ( t , fmt . Sprintf ( "%d" , iCodeFail ) , data . FailedCustomers [ 0 ] . ExternalID )
assert . Equal ( t , "Customers are loaded with errors" , err . Error ( ) )
2022-12-09 11:40:52 +03:00
assert . Equal ( t , "Something went wrong" , err . ( APIError ) . Errors ( ) [ "managerId" ] ) //nolint:errorlint
2018-04-20 17:59:26 +03:00
}
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
func TestClient_CustomersCombine ( t * testing . T ) {
c := client ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
customers := [ ] Customer { { ID : 1 } , { ID : 2 } }
resultCustomer := Customer { ID : 3 }
jr , _ := json . Marshal ( & customers )
combineJSONOut , _ := json . Marshal ( & resultCustomer )
p := url . Values {
"customers" : { string ( jr [ : ] ) } ,
"resultCustomer" : { string ( combineJSONOut [ : ] ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/customers/combine" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
data , status , err := c . CustomersCombine ( customers , resultCustomer )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_CustomersCombine_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
customers := [ ] Customer { { } , { } }
resultCustomer := Customer { }
jr , _ := json . Marshal ( & customers )
combineJSONOut , _ := json . Marshal ( & resultCustomer )
p := url . Values {
"customers" : { string ( jr [ : ] ) } ,
"resultCustomer" : { string ( combineJSONOut [ : ] ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/customers/combine" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Invalid input parameters"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . CustomersCombine ( [ ] Customer { { } , { } } , Customer { } )
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
}
func TestClient_CustomersFixExternalIds ( t * testing . T ) {
c := client ( )
2018-02-27 11:37:15 +03:00
customers := [ ] IdentifiersPair { {
2018-04-20 17:59:26 +03:00
ID : 123 ,
2018-03-19 23:18:36 +03:00
ExternalID : RandomString ( 8 ) ,
2018-02-27 11:37:15 +03:00
} }
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
jr , _ := json . Marshal ( & customers )
p := url . Values {
"customers" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/customers/fix-external-ids" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
fx , fe , err := c . CustomersFixExternalIds ( customers )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if fe != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if fx . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_CustomersFixExternalIds_Fail ( t * testing . T ) {
c := client ( )
customers := [ ] IdentifiersPair { { ExternalID : RandomString ( 8 ) } }
defer gock . Off ( )
jr , _ := json . Marshal ( & customers )
p := url . Values {
"customers" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/customers/fix-external-ids" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters", "ErrorsList": { "id": "ID must be an integer"}} ` )
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . CustomersFixExternalIds ( customers )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
2018-02-27 11:37:15 +03:00
func TestClient_CustomersHistory ( t * testing . T ) {
c := client ( )
f := CustomersHistoryRequest {
Filter : CustomersHistoryFilter {
2018-03-19 23:18:36 +03:00
SinceID : 20 ,
2018-02-27 11:37:15 +03:00
} ,
}
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/customers/history" ) .
MatchParam ( "filter[sinceId]" , "20" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "history": [ { "id": 1}]} ` )
2018-02-27 11:37:15 +03:00
data , status , err := c . CustomersHistory ( f )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if len ( data . History ) == 0 {
2018-04-22 20:39:22 +03:00
t . Errorf ( "%v" , "Empty history" )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_CustomersHistory_Fail ( t * testing . T ) {
c := client ( )
f := CustomersHistoryRequest {
Filter : CustomersHistoryFilter {
StartDate : "2020-13-12" ,
} ,
}
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/customers/history" ) .
MatchParam ( "filter[startDate]" , "2020-13-12" ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters", "ErrorsList": { "children[startDate]": "Значение недопустимо."}} ` )
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . CustomersHistory ( f )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
2019-10-16 16:32:31 +03:00
func TestClient_CorporateCustomersList ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/api/v5/customers-corporate" ) .
MatchParam ( "filter[city]" , "Москва" ) .
MatchParam ( "page" , "3" ) .
Reply ( 200 ) .
BodyString ( ` { "success":true,"pagination": { "limit":20,"totalCount":1,"currentPage":3,"totalPageCount":1}} ` )
c := client ( )
data , status , err := c . CorporateCustomers ( CorporateCustomersRequest {
Filter : CorporateCustomersFilter {
City : "Москва" ,
} ,
Page : 3 ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Logf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Logf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
}
func TestClient_CorporateCustomersCreate ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/api/v5/customers-corporate/create" ) .
Reply ( 201 ) .
BodyString ( ` { "success":true,"id":2344} ` )
c := client ( )
customer := CorporateCustomer {
ExternalID : "ext-id" ,
Nickname : "Test Customer" ,
Vip : true ,
Bad : false ,
CustomFields : nil ,
PersonalDiscount : 10 ,
DiscountCardNumber : "1234567890" ,
Source : & Source {
Source : "source" ,
Medium : "medium" ,
Campaign : "campaign" ,
Keyword : "keyword" ,
Content : "content" ,
} ,
Companies : [ ] Company {
{
IsMain : true ,
ExternalID : "company-ext-id" ,
Active : true ,
Name : "name" ,
Brand : "brand" ,
Site : "https://retailcrm.pro" ,
Contragent : & Contragent {
ContragentType : "legal-entity" ,
LegalName : "Legal Name" ,
LegalAddress : "Legal Address" ,
INN : "000000000" ,
OKPO : "000000000" ,
KPP : "000000000" ,
OGRN : "000000000" ,
BIK : "000000000" ,
Bank : "bank" ,
BankAddress : "bankAddress" ,
CorrAccount : "corrAccount" ,
BankAccount : "bankAccount" ,
} ,
Address : & IdentifiersPair {
ID : 0 ,
ExternalID : "ext-addr-id" ,
} ,
CustomFields : nil ,
} ,
} ,
Addresses : [ ] CorporateCustomerAddress {
{
Index : "123456" ,
CountryISO : "RU" ,
Region : "Russia" ,
RegionID : 0 ,
City : "Moscow" ,
CityID : 0 ,
CityType : "city" ,
Street : "Pushkinskaya" ,
StreetID : 0 ,
StreetType : "street" ,
Building : "" ,
Flat : "" ,
IntercomCode : "" ,
Floor : 0 ,
Block : 0 ,
House : "" ,
Housing : "" ,
Metro : "" ,
Notes : "" ,
Text : "" ,
ExternalID : "ext-addr-id" ,
Name : "Main Address" ,
} ,
} ,
}
data , status , err := c . CorporateCustomerCreate ( customer , "site" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status != http . StatusCreated {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
}
func TestClient_CorporateCustomersFixExternalIds ( t * testing . T ) {
c := client ( )
customers := [ ] IdentifiersPair { {
ID : 123 ,
ExternalID : RandomString ( 8 ) ,
} }
defer gock . Off ( )
jr , _ := json . Marshal ( & customers )
p := url . Values {
"customersCorporate" : { string ( jr [ : ] ) } ,
}
gock . New ( crmURL ) .
Post ( "/customers-corporate/fix-external-ids" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
fx , fe , err := c . CorporateCustomersFixExternalIds ( customers )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if fe != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if fx . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
}
func TestClient_CorporateCustomersFixExternalIds_Fail ( t * testing . T ) {
c := client ( )
customers := [ ] IdentifiersPair { { ExternalID : RandomString ( 8 ) } }
defer gock . Off ( )
jr , _ := json . Marshal ( & customers )
p := url . Values {
"customersCorporate" : { string ( jr [ : ] ) } ,
}
gock . New ( crmURL ) .
Post ( "/customers-corporate/fix-external-ids" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters", "ErrorsList": { "id": "ID must be an integer"}} ` )
2019-10-16 16:32:31 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . CorporateCustomersFixExternalIds ( customers )
if err == nil {
t . Error ( "Error must be return" )
2019-10-16 16:32:31 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
2019-11-25 10:55:06 +03:00
func TestClient_CorporateCustomersHistory ( t * testing . T ) {
c := client ( )
f := CorporateCustomersHistoryRequest {
Filter : CorporateCustomersHistoryFilter {
SinceID : 20 ,
} ,
}
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/customers-corporate/history" ) .
MatchParam ( "filter[sinceId]" , "20" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "history": [ { "id": 1}]} ` )
data , status , err := c . CorporateCustomersHistory ( f )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-11-25 10:55:06 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-11-25 10:55:06 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-11-25 10:55:06 +03:00
}
if len ( data . History ) == 0 {
t . Errorf ( "%v" , "Empty history" )
}
}
func TestClient_CorporateCustomersHistory_Fail ( t * testing . T ) {
c := client ( )
f := CorporateCustomersHistoryRequest {
Filter : CorporateCustomersHistoryFilter {
StartDate : "2020-13-12" ,
} ,
}
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/customers-corporate/history" ) .
MatchParam ( "filter[startDate]" , "2020-13-12" ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters", "ErrorsList": { "children[startDate]": "Значение недопустимо."}} ` )
2019-11-25 10:55:06 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . CorporateCustomersHistory ( f )
if err == nil {
t . Error ( "Error must be return" )
2019-11-25 10:55:06 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
2019-10-16 16:32:31 +03:00
func TestClient_CorporateCustomersNotes ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/api/v5/customers-corporate/notes" ) .
MatchParam ( "filter[text]" , "sample" ) .
Reply ( 200 ) .
BodyString ( `
{
"success" : true ,
"pagination" : {
"limit" : 20 ,
"totalCount" : 1 ,
"currentPage" : 1 ,
"totalPageCount" : 1
} ,
"notes" : [
{
"customer" : {
"site" : "site" ,
"id" : 2346 ,
"externalId" : "ext-id" ,
"type" : "customer_corporate"
} ,
"managerId" : 24 ,
"id" : 106 ,
"text" : "<p>sample text</p>" ,
"createdAt" : "2019-10-15 17:08:59"
}
]
}
` )
c := client ( )
data , status , err := c . CorporateCustomersNotes ( CorporateCustomersNotesRequest {
Filter : CorporateCustomersNotesFilter {
Text : "sample" ,
} ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Notes [ 0 ] . Text != "<p>sample text</p>" {
t . Errorf ( "invalid note text" )
}
}
func TestClient_CorporateCustomerNoteCreate ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/customers-corporate/notes/create" ) .
Reply ( 201 ) .
BodyString ( ` { "success":true,"id":1} ` )
data , status , err := c . CorporateCustomerNoteCreate ( CorporateCustomerNote {
Text : "another note" ,
Customer : & IdentifiersPair {
ID : 1 ,
} ,
} , "site" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . ID != 1 {
t . Error ( "invalid note id" )
}
}
func TestClient_CorporateCustomerNoteDelete ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/customers-corporate/notes/1/delete" ) .
Reply ( 200 ) .
BodyString ( ` { "success":true} ` )
data , status , err := c . CorporateCustomerNoteDelete ( 1 )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
}
func TestClient_CorporateCustomersUpload ( t * testing . T ) {
c := client ( )
customers := make ( [ ] CorporateCustomer , 3 )
for i := range customers {
customers [ i ] = CorporateCustomer {
Nickname : fmt . Sprintf ( "Name_%s" , RandomString ( 8 ) ) ,
ExternalID : RandomString ( 8 ) ,
}
}
defer gock . Off ( )
str , _ := json . Marshal ( customers )
p := url . Values {
"customersCorporate" : { string ( str ) } ,
}
gock . New ( crmURL ) .
Post ( "/api/v5/customers-corporate/upload" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
data , status , err := c . CorporateCustomersUpload ( customers )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
}
func TestClient_CorporateCustomersUpload_Fail ( t * testing . T ) {
c := client ( )
2022-12-09 11:38:21 +03:00
customers := [ ] CorporateCustomer { { ExternalID : strconv . Itoa ( iCodeFail ) , ManagerID : 100001 } }
2019-10-16 16:32:31 +03:00
defer gock . Off ( )
str , _ := json . Marshal ( customers )
p := url . Values {
"customersCorporate" : { string ( str ) } ,
}
gock . New ( crmURL ) .
Post ( "/api/v5/customers-corporate/upload" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 460 ) .
2022-12-09 11:38:21 +03:00
BodyString ( fmt . Sprintf ( ` {
"success" : false ,
"uploadedCustomers" : [ ] ,
"failedCustomers" : [ {
"externalId" : "%d"
} ] ,
"errorMsg" : "Customers are loaded with errors" ,
"errors" : {
"managerId" : "Something went wrong"
}
} ` , iCodeFail ) )
2019-10-16 16:32:31 +03:00
2022-12-09 11:38:21 +03:00
data , status , err := c . CorporateCustomersUpload ( customers )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2019-10-16 16:32:31 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
2022-12-09 11:38:21 +03:00
assert . Empty ( t , data . UploadedCustomers )
assert . Equal ( t , HTTPStatusUnknown , status )
assert . Equal ( t , fmt . Sprintf ( "%d" , iCodeFail ) , data . FailedCustomers [ 0 ] . ExternalID )
assert . Equal ( t , "Customers are loaded with errors" , err . Error ( ) )
2022-12-09 11:40:52 +03:00
assert . Equal ( t , "Something went wrong" , err . ( APIError ) . Errors ( ) [ "managerId" ] ) //nolint:errorlint
2019-10-16 16:32:31 +03:00
}
func TestClient_CorporateCustomer ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/customers-corporate/ext-id" ) .
MatchParam ( "by" , ByExternalID ) .
MatchParam ( "site" , "site" ) .
Reply ( 200 ) .
BodyString ( `
{
"success" : true ,
"customerCorporate" : {
"type" : "customer_corporate" ,
"id" : 2346 ,
"externalId" : "ext-id" ,
"nickName" : "Test Customer 2" ,
"mainAddress" : {
"id" : 2034 ,
"externalId" : "ext-addr-id223" ,
"name" : "Main Address"
} ,
"createdAt" : "2019-10-15 16:16:56" ,
"vip" : false ,
"bad" : false ,
"site" : "site" ,
"marginSumm" : 0 ,
"totalSumm" : 0 ,
"averageSumm" : 0 ,
"ordersCount" : 0 ,
"costSumm" : 0 ,
"customFields" : [ ] ,
"personalDiscount" : 10 ,
"mainCompany" : {
"id" : 26 ,
"externalId" : "company-ext-id" ,
"name" : "name"
}
}
}
` )
data , status , err := c . CorporateCustomer ( "ext-id" , ByExternalID , "site" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
}
func TestClient_CorporateCustomerAddresses ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/customers-corporate/ext-id/addresses" ) .
MatchParams ( map [ string ] string {
"by" : ByExternalID ,
"filter[name]" : "Main Address" ,
"limit" : "20" ,
"page" : "1" ,
"site" : "site" ,
} ) .
Reply ( 200 ) .
BodyString ( `
{
"success" : true ,
"addresses" : [
{
"id" : 2034 ,
"index" : "123456" ,
"countryIso" : "RU" ,
"region" : "Russia" ,
"city" : "Moscow" ,
"cityType" : "city" ,
"street" : "Pushkinskaya" ,
"streetType" : "street" ,
"text" : "street Pushkinskaya" ,
"externalId" : "ext-addr-id223" ,
"name" : "Main Address"
}
]
}
` )
data , status , err := c . CorporateCustomerAddresses ( "ext-id" , CorporateCustomerAddressesRequest {
Filter : CorporateCustomerAddressesFilter {
Name : "Main Address" ,
} ,
By : ByExternalID ,
Site : "site" ,
Limit : 20 ,
Page : 1 ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if len ( data . Addresses ) == 0 {
t . Error ( "data.Addresses must not be empty" )
}
}
func TestClient_CorporateCustomerAddressesCreate ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/customers-corporate/ext-id/addresses/create" ) .
Reply ( 201 ) .
BodyString ( ` { "success":true,"id":1} ` )
data , status , err := c . CorporateCustomerAddressesCreate ( "ext-id" , ByExternalID , CorporateCustomerAddress {
Text : "this is new address" ,
Name : "New Address" ,
} , "site" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
}
func TestClient_CorporateCustomerAddressesEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/customers-corporate/customer-ext-id/addresses/addr-ext-id/edit" ) .
Reply ( 200 ) .
BodyString ( ` { "success":true,"id":1} ` )
data , status , err := c . CorporateCustomerAddressesEdit (
"customer-ext-id" ,
ByExternalID ,
ByExternalID ,
CorporateCustomerAddress {
ExternalID : "addr-ext-id" ,
Name : "Main Address 2" ,
} ,
"site" ,
)
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
}
func TestClient_CorporateCustomerCompanies ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/customers-corporate/ext-id/companies" ) .
MatchParams ( map [ string ] string {
"by" : ByExternalID ,
"filter[ids][]" : "1" ,
"limit" : "20" ,
"page" : "1" ,
"site" : "site" ,
} ) .
Reply ( 200 ) .
BodyString ( `
{
"success" : true ,
"companies" : [
{
"isMain" : true ,
"id" : 1 ,
"externalId" : "company-ext-id" ,
"customer" : {
"site" : "site" ,
"id" : 2346 ,
"externalId" : "ext-id" ,
"type" : "customer_corporate"
} ,
"active" : true ,
"name" : "name" ,
"brand" : "brand" ,
"site" : "https://retailcrm.pro" ,
"createdAt" : "2019-10-15 16:16:56" ,
"contragent" : {
"contragentType" : "legal-entity" ,
"legalName" : "Legal Name" ,
"legalAddress" : "Legal Address" ,
"INN" : "000000000" ,
"OKPO" : "000000000" ,
"KPP" : "000000000" ,
"OGRN" : "000000000" ,
"BIK" : "000000000" ,
"bank" : "bank" ,
"bankAddress" : "bankAddress" ,
"corrAccount" : "corrAccount" ,
"bankAccount" : "bankAccount"
} ,
"address" : {
"id" : 2034 ,
"index" : "123456" ,
"countryIso" : "RU" ,
"region" : "Russia" ,
"city" : "Moscow" ,
"cityType" : "city" ,
"street" : "Pushkinskaya" ,
"streetType" : "street" ,
"text" : "street Pushkinskaya" ,
"externalId" : "ext-addr-id" ,
"name" : "Main Address 2"
} ,
"marginSumm" : 0 ,
"totalSumm" : 0 ,
"averageSumm" : 0 ,
"ordersCount" : 0 ,
"costSumm" : 0 ,
"customFields" : [ ]
}
]
}
` )
data , status , err := c . CorporateCustomerCompanies ( "ext-id" , IdentifiersPairRequest {
Filter : IdentifiersPairFilter {
Ids : [ ] string { "1" } ,
} ,
By : ByExternalID ,
Site : "site" ,
Limit : 20 ,
Page : 1 ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if len ( data . Companies ) == 0 {
t . Error ( "data.Companies must not be empty" )
}
}
func TestClient_CorporateCustomerCompaniesCreate ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/customers-corporate/ext-id/companies/create" ) .
Reply ( 201 ) .
BodyString ( ` { "success":true,"id":1} ` )
data , status , err := c . CorporateCustomerCompaniesCreate ( "ext-id" , ByExternalID , Company {
Name : "New Company" ,
} , "site" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
}
func TestClient_CorporateCustomerCompaniesEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/customers-corporate/customer-ext-id/companies/company-ext-id/edit" ) .
Reply ( 200 ) .
BodyString ( ` { "success":true,"id":1} ` )
data , status , err := c . CorporateCustomerCompaniesEdit (
"customer-ext-id" ,
ByExternalID ,
ByExternalID ,
Company {
ExternalID : "company-ext-id" ,
Name : "New Company Name 2" ,
} ,
"site" ,
)
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
}
func TestClient_CorporateCustomerContacts ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/customers-corporate/ext-id/contacts" ) .
MatchParams ( map [ string ] string {
"by" : ByExternalID ,
"limit" : "20" ,
"page" : "1" ,
"site" : "site" ,
} ) .
Reply ( 200 ) .
BodyString ( `
{
"success" : true ,
"contacts" : [
{
"isMain" : false ,
"customer" : {
"id" : 2347 ,
"site" : "site"
} ,
"companies" : [ ]
}
]
}
` )
data , status , err := c . CorporateCustomerContacts ( "ext-id" , IdentifiersPairRequest {
Filter : IdentifiersPairFilter { } ,
By : ByExternalID ,
Site : "site" ,
Limit : 20 ,
Page : 1 ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if len ( data . Contacts ) == 0 {
t . Error ( "data.Contacts must not be empty" )
}
}
func TestClient_CorporateCustomerContactsCreate ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/customers/create" ) .
Reply ( 201 ) .
BodyString ( ` { "success":true,"id":2} ` )
gock . New ( crmURL ) .
Post ( "/customers-corporate/ext-id/contacts/create" ) .
Reply ( 201 ) .
BodyString ( ` { "success":true,"id":3} ` )
createResponse , createStatus , createErr := c . CustomerCreate ( Customer {
ExternalID : "test-customer-as-contact-person" ,
FirstName : "Contact" ,
LastName : "Person" ,
} , "site" )
2021-04-26 12:09:21 +03:00
if createErr != nil {
t . Errorf ( "%v" , createErr )
2019-10-16 16:32:31 +03:00
}
if createStatus >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , createErr )
2019-10-16 16:32:31 +03:00
}
if createResponse . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , createErr )
2019-10-16 16:32:31 +03:00
}
if createResponse . ID != 2 {
t . Errorf ( "invalid createResponse.ID: should be `2`, got `%d`" , createResponse . ID )
}
data , status , err := c . CorporateCustomerContactsCreate ( "ext-id" , ByExternalID , CorporateCustomerContact {
IsMain : false ,
Customer : CorporateCustomerContactCustomer {
ExternalID : "test-customer-as-contact-person" ,
Site : "site" ,
} ,
Companies : [ ] IdentifiersPair { } ,
} , "site" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . ID != 3 {
t . Errorf ( "invalid data.ID: should be `3`, got `%d`" , data . ID )
}
}
func TestClient_CorporateCustomerContactsEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/customers-corporate/ext-id/contacts/2350/edit" ) .
Reply ( 200 ) .
BodyString ( ` { "success":true,"id":19} ` )
data , status , err := c . CorporateCustomerContactsEdit ( "ext-id" , ByExternalID , ByID , CorporateCustomerContact {
IsMain : false ,
Customer : CorporateCustomerContactCustomer {
ID : 2350 ,
} ,
} , "site" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "(%d) %v" , status , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if data . ID == 0 {
t . Errorf ( "invalid data.ID: should be `19`, got `%d`" , data . ID )
}
}
func TestClient_CorporateCustomerEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/customers-corporate/ext-id/edit" ) .
Reply ( 200 ) .
BodyString ( ` { "success":true,"id":2346} ` )
data , status , err := c . CorporateCustomerEdit ( CorporateCustomer {
ExternalID : "ext-id" ,
Nickname : "Another Nickname 2" ,
Vip : true ,
} , ByExternalID , "site" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "(%d) %v" , status , err )
2019-10-16 16:32:31 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-10-16 16:32:31 +03:00
}
}
2018-02-27 11:37:15 +03:00
func TestClient_NotesNotes ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/customers/notes" ) .
MatchParam ( "page" , "1" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "notes": [ { "id": 1}]} ` )
2018-03-21 00:54:37 +03:00
data , status , err := c . CustomerNotes ( NotesRequest { Page : 1 } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if len ( data . Notes ) == 0 {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
func TestClient_NotesNotes_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/customers/notes" ) .
MatchParam ( "filter[createdAtFrom]" , "2020-13-12" ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters", "ErrorsList": { "children[createdAtFrom]": "This value is not valid."}} ` )
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . CustomerNotes ( NotesRequest {
2018-04-20 17:59:26 +03:00
Filter : NotesFilter { CreatedAtFrom : "2020-13-12" } ,
2018-02-27 11:37:15 +03:00
} )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
}
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
func TestClient_NotesCreateDelete ( t * testing . T ) {
c := client ( )
note := Note {
2018-02-27 11:37:15 +03:00
Text : "some text" ,
2018-03-19 23:18:36 +03:00
ManagerID : user ,
2018-02-27 11:37:15 +03:00
Customer : & Customer {
2018-04-20 17:59:26 +03:00
ID : 123 ,
2018-02-27 11:37:15 +03:00
} ,
2018-04-20 17:59:26 +03:00
}
defer gock . Off ( )
jr , _ := json . Marshal ( & note )
p := url . Values {
"note" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/customers/notes/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true, "id": 1} ` )
noteCreateResponse , noteCreateStatus , err := c . CustomerNoteCreate ( note )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if noteCreateStatus != http . StatusCreated {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if noteCreateResponse . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
p = url . Values {
2021-04-16 14:25:25 +03:00
"id" : { "1" } ,
2018-04-20 17:59:26 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/api/v5/customers/notes/%d/delete" , 1 ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-03-21 00:54:37 +03:00
noteDeleteResponse , noteDeleteStatus , err := c . CustomerNoteDelete ( noteCreateResponse . ID )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if noteDeleteStatus != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if noteDeleteResponse . Success != true {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_NotesCreateDelete_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
note := Note {
Text : "some text" ,
ManagerID : user ,
Customer : & Customer { } ,
}
jr , _ := json . Marshal ( & note )
p := url . Values {
"note" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/customers/notes/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Errors in the entity format", "ErrorsList": { "customer": "Set one of the following fields: id, externalId"}} ` )
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . CustomerNoteCreate ( note )
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
p = url . Values {
2021-04-16 14:25:25 +03:00
"id" : { strconv . Itoa ( iCodeFail ) } ,
2018-04-20 17:59:26 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/customers/notes/%d/delete" , iCodeFail ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Note not found map"} ` )
noteDeleteResponse , noteDeleteStatus , err := c . CustomerNoteDelete ( iCodeFail )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if noteDeleteStatus < http . StatusBadRequest {
t . Error ( statusFail )
}
if noteDeleteResponse . Success != false {
t . Error ( successFail )
}
}
func TestClient_OrdersOrders ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/orders" ) .
MatchParam ( "filter[city]" , "Москва" ) .
MatchParam ( "page" , "1" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "orders": [ { "id": 1}]} ` )
data , status , err := c . Orders ( OrdersRequest { Filter : OrdersFilter { City : "Москва" } , Page : 1 } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_OrdersOrders_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/orders" ) .
MatchParam ( "filter[attachments]" , "7" ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters", "ErrorsList": { "children[attachments]": "SThis value is not valid."}} ` )
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . Orders ( OrdersRequest { Filter : OrdersFilter { Attachments : 7 } } )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
2018-02-27 11:37:15 +03:00
func TestClient_OrderChange ( t * testing . T ) {
c := client ( )
random := RandomString ( 8 )
f := Order {
FirstName : "Понтелей" ,
LastName : "Турбин" ,
Patronymic : "Аристархович" ,
2018-03-19 23:18:36 +03:00
ExternalID : random ,
2018-02-27 11:37:15 +03:00
Email : fmt . Sprintf ( "%s@example.com" , random ) ,
}
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
jr , _ := json . Marshal ( & f )
p := url . Values {
"order" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/orders/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
2020-07-14 11:51:35 +03:00
BodyString ( ` {
"success" : true ,
"id" : 1 ,
"order" : {
"slug" : 1 ,
"id" : 1 ,
"number" : "1A" ,
"orderMethod" : "shopping-cart" ,
"countryIso" : "RU" ,
"createdAt" : "2020-07-14 11:44:43" ,
"statusUpdatedAt" : "2020-07-14 11:44:43" ,
"summ" : 0 ,
"totalSumm" : 0 ,
"prepaySum" : 0 ,
"purchaseSumm" : 0 ,
"markDatetime" : "2020-07-14 11:44:43" ,
"call" : false ,
"expired" : false ,
"customer" : {
"type" : "customer" ,
"id" : 1 ,
"isContact" : false ,
"createdAt" : "2020-07-14 11:44:43" ,
"vip" : false ,
"bad" : false ,
"site" : "site" ,
"contragent" : {
"contragentType" : "individual"
} ,
"tags" : [ ] ,
"marginSumm" : 0 ,
"totalSumm" : 0 ,
"averageSumm" : 0 ,
"ordersCount" : 0 ,
"personalDiscount" : 0 ,
"segments" : [ ] ,
"email" : "" ,
"phones" : [ ]
} ,
"contact" : {
"type" : "customer" ,
"id" : 4512 ,
"isContact" : false ,
"createdAt" : "2020-07-14 11:44:43" ,
"vip" : false ,
"bad" : false ,
"site" : "site" ,
"contragent" : {
"contragentType" : "individual"
} ,
"tags" : [ ] ,
"marginSumm" : 0 ,
"totalSumm" : 0 ,
"averageSumm" : 0 ,
"ordersCount" : 0 ,
"personalDiscount" : 0 ,
"segments" : [ ] ,
"email" : "" ,
"phones" : [ ]
} ,
"contragent" : {
"contragentType" : "individual"
} ,
"delivery" : {
"cost" : 0 ,
"netCost" : 0 ,
"address" : { }
} ,
"site" : "site" ,
"status" : "new" ,
"items" : [ ] ,
"payments" : [ ] ,
"fromApi" : true ,
"shipmentStore" : "main" ,
"shipped" : false
}
} ` )
2018-04-20 17:59:26 +03:00
2018-02-27 11:37:15 +03:00
cr , sc , err := c . OrderCreate ( f )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if sc != http . StatusCreated {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if cr . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2020-07-14 11:51:35 +03:00
if cr . Order . Number != "1A" {
t . Errorf ( "invalid order number: got %s want %s" , cr . Order . Number , "1A" )
}
2018-03-19 23:18:36 +03:00
f . ID = cr . ID
2018-02-27 11:37:15 +03:00
f . CustomerComment = "test comment"
2018-04-20 17:59:26 +03:00
jr , _ = json . Marshal ( & f )
p = url . Values {
2019-10-16 16:32:31 +03:00
"by" : { string ( ByID ) } ,
2018-04-20 17:59:26 +03:00
"order" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/orders/%d/edit" , f . ID ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2019-10-16 16:32:31 +03:00
ed , se , err := c . OrderEdit ( f , ByID )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if se != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if ed . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/orders/%s" , f . ExternalID ) ) .
2019-10-16 16:32:31 +03:00
MatchParam ( "by" , ByExternalID ) .
2018-04-20 17:59:26 +03:00
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2019-10-16 16:32:31 +03:00
data , status , err := c . Order ( f . ExternalID , ByExternalID , "" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
}
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
func TestClient_OrderChange_Fail ( t * testing . T ) {
c := client ( )
random := RandomString ( 8 )
f := Order {
FirstName : "Понтелей" ,
LastName : "Турбин" ,
Patronymic : "Аристархович" ,
ExternalID : random ,
Email : fmt . Sprintf ( "%s@example.com" , random ) ,
CustomerComment : "test comment" ,
}
defer gock . Off ( )
jr , _ := json . Marshal ( & f )
p := url . Values {
2019-10-16 16:32:31 +03:00
"by" : { string ( ByID ) } ,
2018-04-20 17:59:26 +03:00
"order" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/orders/%d/edit" , f . ID ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Not found map"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . OrderEdit ( f , ByID )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_OrdersUpload ( t * testing . T ) {
c := client ( )
orders := make ( [ ] Order , 3 )
for i := range orders {
orders [ i ] = Order {
FirstName : fmt . Sprintf ( "Name_%s" , RandomString ( 8 ) ) ,
LastName : fmt . Sprintf ( "Test_%s" , RandomString ( 8 ) ) ,
2018-03-19 23:18:36 +03:00
ExternalID : RandomString ( 8 ) ,
2018-02-27 11:37:15 +03:00
Email : fmt . Sprintf ( "%s@example.com" , RandomString ( 8 ) ) ,
}
}
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
jr , _ := json . Marshal ( & orders )
p := url . Values {
"orders" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/orders/upload" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , status , err := c . OrdersUpload ( orders )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_OrdersUpload_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
orders := [ ] Order {
{
FirstName : fmt . Sprintf ( "Name_%s" , RandomString ( 8 ) ) ,
LastName : fmt . Sprintf ( "Test_%s" , RandomString ( 8 ) ) ,
ExternalID : strconv . Itoa ( iCodeFail ) ,
Email : fmt . Sprintf ( "%s@example.com" , RandomString ( 8 ) ) ,
2022-12-09 11:38:21 +03:00
Items : [ ] OrderItem {
{ Offer : Offer { ID : iCodeFail } } ,
} ,
2018-04-20 17:59:26 +03:00
} ,
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
jr , _ := json . Marshal ( & orders )
p := url . Values {
"orders" : { string ( jr [ : ] ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/orders/upload" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 460 ) .
2022-12-09 11:38:21 +03:00
BodyString ( fmt . Sprintf ( ` {
"success" : false ,
"uploadedOrders" : [ ] ,
"failedOrders" : [
{
"externalId" : "%d"
}
] ,
"errorMsg" : "Orders are loaded with errors" ,
"errors" : [
"items[0].offer.id: Offer with id %d not found."
]
} ` , iCodeFail , iCodeFail ) )
2018-04-20 17:59:26 +03:00
2022-12-09 11:38:21 +03:00
data , status , err := c . OrdersUpload ( orders )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
}
2022-12-09 11:38:21 +03:00
assert . Equal ( t , HTTPStatusUnknown , status )
assert . Equal ( t , fmt . Sprintf ( "%d" , iCodeFail ) , data . FailedOrders [ 0 ] . ExternalID )
assert . Equal ( t , "Orders are loaded with errors" , err . Error ( ) )
2022-12-09 11:40:52 +03:00
assert . Equal ( t , "items[0].offer.id: Offer with id 123123 not found." , err . ( APIError ) . Errors ( ) [ "0" ] ) //nolint:errorlint
2018-04-20 17:59:26 +03:00
}
func TestClient_OrdersCombine ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
jr1 , _ := json . Marshal ( & Order { ID : 1 } )
jr2 , _ := json . Marshal ( & Order { ID : 2 } )
p := url . Values {
"technique" : { "ours" } ,
"order" : { string ( jr1 ) } ,
"resultOrder" : { string ( jr2 ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/orders/combine" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
data , status , err := c . OrdersCombine ( "ours" , Order { ID : 1 } , Order { ID : 2 } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_OrdersCombine_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
jr , _ := json . Marshal ( & Order { } )
p := url . Values {
"technique" : { "ours" } ,
"order" : { string ( jr ) } ,
"resultOrder" : { string ( jr ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/orders/combine" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Invalid input parameters"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . OrdersCombine ( "ours" , Order { } , Order { } )
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
}
func TestClient_OrdersFixExternalIds ( t * testing . T ) {
c := client ( )
2018-02-27 11:37:15 +03:00
orders := [ ] IdentifiersPair { {
2018-04-20 17:59:26 +03:00
ID : 123 ,
2018-03-19 23:18:36 +03:00
ExternalID : RandomString ( 8 ) ,
2018-02-27 11:37:15 +03:00
} }
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
jr , _ := json . Marshal ( orders )
p := url . Values {
"orders" : { string ( jr ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/orders/fix-external-ids" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
fx , fe , err := c . OrdersFixExternalIds ( orders )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if fe != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if fx . Success != true {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_OrdersFixExternalIds_Fail ( t * testing . T ) {
c := client ( )
orders := [ ] IdentifiersPair { { ExternalID : RandomString ( 8 ) } }
defer gock . Off ( )
jr , _ := json . Marshal ( orders )
p := url . Values {
"orders" : { string ( jr ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/orders/fix-external-ids" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Invalid input parameters"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . OrdersFixExternalIds ( orders )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
2020-06-29 16:26:10 +03:00
func TestClient_OrdersStatuses ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/orders/statuses" ) .
MatchParam ( "ids[]" , "1" ) .
MatchParam ( "externalIds[]" , "2" ) .
Reply ( 200 ) .
BodyString ( `
{
"success" : true ,
"orders" : [
{
"id" : 1 ,
"externalId" : "123" ,
"status" : "New" ,
"group" : "new"
} ,
{
"id" : 123 ,
"externalId" : "2" ,
"status" : "New" ,
"group" : "new"
}
]
} ` )
data , status , err := c . OrdersStatuses ( OrdersStatusesRequest {
IDs : [ ] int { 1 } ,
ExternalIDs : [ ] string { "2" } ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2020-06-29 16:26:10 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2020-06-29 16:26:10 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2020-06-29 16:26:10 +03:00
}
if len ( data . Orders ) == 0 {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2020-06-29 16:26:10 +03:00
}
}
2018-02-27 11:37:15 +03:00
func TestClient_OrdersHistory ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/orders/history" ) .
MatchParam ( "filter[sinceId]" , "20" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "history": [ { "id": 1}]} ` )
2018-03-19 23:18:36 +03:00
data , status , err := c . OrdersHistory ( OrdersHistoryRequest { Filter : OrdersHistoryFilter { SinceID : 20 } } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if len ( data . History ) == 0 {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_OrdersHistory_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/orders/history" ) .
MatchParam ( "filter[startDate]" , "2020-13-12" ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters", "ErrorsList": { "children[startDate]": "Значение недопустимо."}} ` )
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . OrdersHistory ( OrdersHistoryRequest { Filter : OrdersHistoryFilter { StartDate : "2020-13-12" } } )
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
}
func TestClient_PaymentCreateEditDelete ( t * testing . T ) {
c := client ( )
2018-02-27 11:37:15 +03:00
f := Payment {
Order : & Order {
2018-04-20 17:59:26 +03:00
ID : 123 ,
2018-02-27 11:37:15 +03:00
} ,
Amount : 300 ,
Type : "cash" ,
}
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
jr , _ := json . Marshal ( f )
p := url . Values {
"payment" : { string ( jr ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/orders/payments/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true, "id": 1} ` )
2018-03-21 00:54:37 +03:00
paymentCreateResponse , status , err := c . OrderPaymentCreate ( f )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status != http . StatusCreated {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if paymentCreateResponse . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
k := Payment {
2018-03-19 23:18:36 +03:00
ID : paymentCreateResponse . ID ,
2018-02-27 11:37:15 +03:00
Amount : 500 ,
}
2018-04-20 17:59:26 +03:00
jr , _ = json . Marshal ( k )
p = url . Values {
"payment" : { string ( jr ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/orders/payments/%d/edit" , paymentCreateResponse . ID ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2019-10-16 16:32:31 +03:00
paymentEditResponse , status , err := c . OrderPaymentEdit ( k , ByID )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if paymentEditResponse . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
p = url . Values {
2021-04-16 14:25:25 +03:00
"id" : { strconv . Itoa ( paymentCreateResponse . ID ) } ,
2018-04-20 17:59:26 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/orders/payments/%d/delete" , paymentCreateResponse . ID ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-03-21 00:54:37 +03:00
paymentDeleteResponse , status , err := c . OrderPaymentDelete ( paymentCreateResponse . ID )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if paymentDeleteResponse . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_PaymentCreateEditDelete_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
f := Payment {
Order : & Order { } ,
Amount : 300 ,
Type : "cash" ,
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
jr , _ := json . Marshal ( f )
p := url . Values {
"payment" : { string ( jr ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/orders/payments/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Errors in the entity format", "ErrorsList": { "order": "Set one of the following fields: id, externalId, number"}} ` )
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . OrderPaymentCreate ( f )
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
k := Payment {
ID : iCodeFail ,
Amount : 500 ,
}
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
jr , _ = json . Marshal ( k )
p = url . Values {
"payment" : { string ( jr ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/orders/payments/%d/edit" , iCodeFail ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Payment not found"} ` )
2019-10-16 16:32:31 +03:00
paymentEditResponse , status , err := c . OrderPaymentEdit ( k , ByID )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if status < http . StatusBadRequest {
t . Error ( statusFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if paymentEditResponse . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
p = url . Values {
2021-04-16 14:25:25 +03:00
"id" : { strconv . Itoa ( iCodeFail ) } ,
2018-04-20 17:59:26 +03:00
}
2018-02-27 11:37:15 +03:00
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/orders/payments/%d/delete" , iCodeFail ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Payment not found"} ` )
paymentDeleteResponse , status , err := c . OrderPaymentDelete ( iCodeFail )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if paymentDeleteResponse . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
}
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
func TestClient_TasksTasks ( t * testing . T ) {
c := client ( )
f := TasksRequest {
Filter : TasksFilter {
Creators : [ ] int { 123 } ,
} ,
Page : 1 ,
}
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/api/v5/tasks" ) .
MatchParam ( "filter[creators][]" , "123" ) .
MatchParam ( "page" , "1" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
data , status , err := c . Tasks ( f )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_TasksTasks_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
f := TasksRequest {
Filter : TasksFilter {
Creators : [ ] int { 123123 } ,
} ,
}
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/api/v5/tasks" ) .
MatchParam ( "filter[creators][]" , "123123" ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . Tasks ( f )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_TaskChange ( t * testing . T ) {
c := client ( )
f := Task {
Text : RandomString ( 15 ) ,
PerformerID : user ,
}
defer gock . Off ( )
jr , _ := json . Marshal ( f )
p := url . Values {
"task" : { string ( jr ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/tasks/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true, "id": 1} ` )
cr , sc , err := c . TaskCreate ( f )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if sc != http . StatusCreated {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if cr . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
f . ID = cr . ID
f . Commentary = RandomString ( 20 )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/tasks/%d" , f . ID ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
gt , sg , err := c . Task ( f . ID )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if sg != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if gt . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
jr , _ = json . Marshal ( f )
p = url . Values {
"task" : { string ( jr ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/tasks/%d/edit" , f . ID ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
data , status , err := c . TaskEdit ( f )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_TaskChange_Fail ( t * testing . T ) {
c := client ( )
f := Task {
Text : RandomString ( 15 ) ,
Commentary : RandomString ( 20 ) ,
}
defer gock . Off ( )
jr , _ := json . Marshal ( f )
p := url . Values {
"task" : { string ( jr ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/tasks/%d/edit" , f . ID ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Task is not loaded", "ErrorsList": { "performerId": "This value should not be blank."}} ` )
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . TaskEdit ( f )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_UsersUsers ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/users" ) .
MatchParam ( "filter[active]" , "1" ) .
MatchParam ( "page" , "1" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
data , status , err := c . Users ( UsersRequest { Filter : UsersFilter { Active : 1 } , Page : 1 } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_UsersUsers_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/users" ) .
MatchParam ( "filter[active]" , "3" ) .
MatchParam ( "page" , "1" ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters", "ErrorsList": { "active": "he value you selected is not a valid choice."}} ` )
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . Users ( UsersRequest { Filter : UsersFilter { Active : 3 } , Page : 1 } )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
2018-02-27 11:37:15 +03:00
func TestClient_UsersUser ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/users/%d" , user ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . User ( user )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_UsersUser_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/users/%d" , iCodeFail ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Not found"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . User ( iCodeFail )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
2018-02-27 11:37:15 +03:00
func TestClient_UsersGroups ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/user-groups" ) .
MatchParam ( "page" , "1" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , status , err := c . UserGroups ( UserGroupsRequest { Page : 1 } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_UsersUpdate ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
p := url . Values {
"status" : { string ( "busy" ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/users/%d/status" , user ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . UserStatus ( user , "busy" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_UsersUpdate_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
p := url . Values {
"status" : { string ( "busy" ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/users/%d/status" , iCodeFail ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Not found"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . UserStatus ( iCodeFail , "busy" )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
2018-03-21 00:54:37 +03:00
func TestClient_StaticticsUpdate ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/statistic/update" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-03-21 00:54:37 +03:00
data , st , err := c . StaticticsUpdate ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_Countries ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/couriers" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . Couriers ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_CostGroups ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/cost-groups" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . CostGroups ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_CostItems ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/cost-items" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . CostItems ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_Couriers ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/couriers" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . Couriers ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_DeliveryService ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/delivery-services" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . DeliveryServices ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_DeliveryTypes ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/delivery-types" ) .
Reply ( 200 ) .
2022-12-08 13:32:54 +03:00
BodyString ( ` {
"success" : true ,
"deliveryTypes" : {
"courier" : {
"name" : "Доставка курьером" ,
"code" : "courier" ,
"active" : true ,
"deliveryPaymentTypes" : [
{
"code" : "cash" ,
"cod" : false
} ,
{
"code" : "bank-card" ,
"cod" : false
}
]
}
}
} ` )
2018-04-20 17:59:26 +03:00
2018-02-27 11:37:15 +03:00
data , st , err := c . DeliveryTypes ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2022-12-08 13:32:54 +03:00
assert . Equal ( t , "Доставка курьером" , data . DeliveryTypes [ "courier" ] . Name )
assert . Equal ( t , "courier" , data . DeliveryTypes [ "courier" ] . Code )
assert . True ( t , data . DeliveryTypes [ "courier" ] . Active )
assert . Equal ( t , "cash" , data . DeliveryTypes [ "courier" ] . DeliveryPaymentTypes [ 0 ] . Code )
assert . Equal ( t , "bank-card" , data . DeliveryTypes [ "courier" ] . DeliveryPaymentTypes [ 1 ] . Code )
assert . False ( t , data . DeliveryTypes [ "courier" ] . DeliveryPaymentTypes [ 0 ] . Cod )
assert . False ( t , data . DeliveryTypes [ "courier" ] . DeliveryPaymentTypes [ 1 ] . Cod )
2018-02-27 11:37:15 +03:00
}
func TestClient_LegalEntities ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/legal-entities" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . LegalEntities ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_OrderMethods ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/order-methods" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . OrderMethods ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2020-08-03 12:56:15 +03:00
func TestClient_OrderPaymentEdit ( t * testing . T ) {
c := client ( )
payment := Payment {
ExternalID : RandomString ( 8 ) ,
}
defer gock . Off ( )
jr , _ := json . Marshal ( & payment )
p := url . Values {
"by" : { "externalId" } ,
"payment" : { string ( jr [ : ] ) } ,
}
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/orders/payments/%s/edit" , payment . ExternalID ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
data , status , err := c . OrderPaymentEdit ( payment , "externalId" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2020-08-03 12:56:15 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2020-08-03 12:56:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2020-08-03 12:56:15 +03:00
}
}
2018-02-27 11:37:15 +03:00
func TestClient_OrderTypes ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/order-types" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . OrderTypes ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_PaymentStatuses ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/payment-statuses" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . PaymentStatuses ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_PaymentTypes ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/payment-types" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . PaymentTypes ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_PriceTypes ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/price-types" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . PriceTypes ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_ProductStatuses ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/product-statuses" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . ProductStatuses ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_Statuses ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/statuses" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . Statuses ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_StatusGroups ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/status-groups" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . StatusGroups ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_Sites ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/sites" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . Sites ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_Stores ( t * testing . T ) {
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/reference/stores" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
data , st , err := c . Stores ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
func TestClient_CostGroupItemEdit ( t * testing . T ) {
c := client ( )
uid := RandomString ( 4 )
2018-04-20 17:59:26 +03:00
costGroup := CostGroup {
2018-02-27 11:37:15 +03:00
Code : fmt . Sprintf ( "cost-gr-%s" , uid ) ,
Active : false ,
Color : "#da5c98" ,
Name : fmt . Sprintf ( "CostGroup-%s" , uid ) ,
2018-04-20 17:59:26 +03:00
}
defer gock . Off ( )
jr , _ := json . Marshal ( & costGroup )
p := url . Values {
"costGroup" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/api/v5/reference/cost-groups/%s/edit" , costGroup . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
data , st , err := c . CostGroupEdit ( costGroup )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
costItem := CostItem {
2018-02-27 11:37:15 +03:00
Code : fmt . Sprintf ( "cost-it-%s" , uid ) ,
Name : fmt . Sprintf ( "CostItem-%s" , uid ) ,
Group : fmt . Sprintf ( "cost-gr-%s" , uid ) ,
Type : "const" ,
AppliesToOrders : true ,
Active : false ,
2018-04-20 17:59:26 +03:00
}
jr , _ = json . Marshal ( & costItem )
p = url . Values {
"costItem" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/api/v5/reference/cost-items/%s/edit" , costItem . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
idata , st , err := c . CostItemEdit ( costItem )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if idata . Success != true {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_CostGroupItemEdit_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
uid := RandomString ( 4 )
costGroup := CostGroup {
Code : fmt . Sprintf ( "cost-gr-%s" , uid ) ,
Active : false ,
Name : fmt . Sprintf ( "CostGroup-%s" , uid ) ,
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
jr , _ := json . Marshal ( & costGroup )
p := url . Values {
"costGroup" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/cost-groups/%s/edit" , costGroup . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . CostGroupEdit ( costGroup )
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
costItem := CostItem {
Code : fmt . Sprintf ( "666cost-it-%s" , uid ) ,
Name : fmt . Sprintf ( "CostItem-%s" , uid ) ,
Group : fmt . Sprintf ( "cost-gr-%s" , uid ) ,
Type : "const" ,
AppliesToOrders : true ,
Active : false ,
}
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
jr , _ = json . Marshal ( & costItem )
p = url . Values {
"costItem" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/cost-items/%s/edit" , costItem . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
idata , st , err := c . CostItemEdit ( costItem )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if st < http . StatusBadRequest {
t . Error ( statusFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if idata . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_Courier ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
cur := Courier {
Active : true ,
Email : fmt . Sprintf ( "%s@example.com" , RandomString ( 5 ) ) ,
2021-10-27 15:49:06 +03:00
FirstName : RandomString ( 5 ) ,
LastName : RandomString ( 5 ) ,
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
jr , _ := json . Marshal ( & cur )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
p := url . Values {
"courier" : { string ( jr [ : ] ) } ,
}
2018-02-27 11:37:15 +03:00
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/api/v5/reference/couriers/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true, "id": 1} ` )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
data , st , err := c . CourierCreate ( cur )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
cur . ID = data . ID
2021-10-27 15:49:06 +03:00
cur . Patronymic = RandomString ( 5 )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
jr , _ = json . Marshal ( & cur )
p = url . Values {
"courier" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/couriers/%d/edit" , cur . ID ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
idata , st , err := c . CourierEdit ( cur )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if idata . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_Courier_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
jr , _ := json . Marshal ( & Courier { } )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
p := url . Values {
"courier" : { string ( jr [ : ] ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/api/v5/reference/couriers/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Errors in the entity format", "ErrorsList": { "firstName": "Specify the first name"}} ` )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
data , st , err := c . CourierCreate ( Courier { } )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if st < http . StatusBadRequest {
t . Error ( statusFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2021-10-27 15:49:06 +03:00
cur := Courier { Patronymic : RandomString ( 5 ) }
2018-04-20 17:59:26 +03:00
jr , _ = json . Marshal ( & cur )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
p = url . Values {
"courier" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/couriers/%d/edit" , cur . ID ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "An attempt was made to edit a nonexistent record"} ` )
idata , st , err := c . CourierEdit ( cur )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if st < http . StatusBadRequest {
t . Error ( statusFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if idata . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_DeliveryServiceEdit ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
deliveryService := DeliveryService {
Active : false ,
2018-02-27 11:37:15 +03:00
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
}
2018-04-20 17:59:26 +03:00
jr , _ := json . Marshal ( & deliveryService )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
p := url . Values {
"deliveryService" : { string ( jr [ : ] ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/delivery-services/%s/edit" , deliveryService . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "id": 1} ` )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
data , st , err := c . DeliveryServiceEdit ( deliveryService )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_DeliveryServiceEdit_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
deliveryService := DeliveryService {
2018-02-27 11:37:15 +03:00
Active : false ,
2018-04-20 17:59:26 +03:00
Name : RandomString ( 5 ) ,
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
jr , _ := json . Marshal ( & deliveryService )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
p := url . Values {
"deliveryService" : { string ( jr [ : ] ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/delivery-services/%s/edit" , deliveryService . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
data , st , err := c . DeliveryServiceEdit ( deliveryService )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if st < http . StatusBadRequest {
t . Error ( statusFail )
}
2018-02-27 11:37:15 +03:00
if data . Success != false {
2018-04-20 17:59:26 +03:00
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_DeliveryTypeEdit ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
x := [ ] string { "cash" , "bank-card" }
defer gock . Off ( )
deliveryType := DeliveryType {
Active : false ,
2018-02-27 11:37:15 +03:00
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
2018-04-20 17:59:26 +03:00
DefaultCost : 300 ,
PaymentTypes : x ,
DefaultForCrm : false ,
}
jr , _ := json . Marshal ( & deliveryType )
p := url . Values {
"deliveryType" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/delivery-types/%s/edit" , deliveryType . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true} ` )
data , st , err := c . DeliveryTypeEdit ( deliveryType )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_DeliveryTypeEdit_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
deliveryType := DeliveryType {
Active : false ,
Name : RandomString ( 5 ) ,
DefaultCost : 300 ,
PaymentTypes : [ ] string { "cash" , "bank-card" } ,
DefaultForCrm : false ,
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
jr , _ := json . Marshal ( & deliveryType )
p := url . Values {
"deliveryType" : { string ( jr [ : ] ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/delivery-types/%s/edit" , deliveryType . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
data , st , err := c . DeliveryTypeEdit ( deliveryType )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if st < http . StatusBadRequest {
t . Error ( statusFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
}
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
func TestClient_OrderMethodEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
orderMethod := OrderMethod {
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
Active : false ,
DefaultForCRM : false ,
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
jr , _ := json . Marshal ( & orderMethod )
p := url . Values {
"orderMethod" : { string ( jr [ : ] ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/order-methods/%s/edit" , orderMethod . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true} ` )
data , st , err := c . OrderMethodEdit ( orderMethod )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
}
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
func TestClient_OrderMethodEdit_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
orderMethod := OrderMethod {
Name : RandomString ( 5 ) ,
Active : false ,
DefaultForCRM : false ,
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
jr , _ := json . Marshal ( & orderMethod )
p := url . Values {
"orderMethod" : { string ( jr [ : ] ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/order-methods/%s/edit" , orderMethod . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
data , st , err := c . OrderMethodEdit ( orderMethod )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if st < http . StatusBadRequest {
t . Error ( statusFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_OrderTypeEdit ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
orderType := OrderType {
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
Active : false ,
DefaultForCRM : false ,
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
jr , _ := json . Marshal ( & orderType )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
p := url . Values {
"orderType" : { string ( jr [ : ] ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/order-types/%s/edit" , orderType . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true} ` )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
data , st , err := c . OrderTypeEdit ( orderType )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_OrderTypeEdit_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
orderType := OrderType {
Name : RandomString ( 5 ) ,
Active : false ,
DefaultForCRM : false ,
}
jr , _ := json . Marshal ( & orderType )
p := url . Values {
"orderType" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/order-types/%s/edit" , orderType . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
data , st , err := c . OrderTypeEdit ( orderType )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if st < http . StatusBadRequest {
t . Error ( statusFail )
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_PaymentStatusEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
paymentStatus := PaymentStatus {
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
Active : false ,
DefaultForCRM : false ,
PaymentTypes : [ ] string { "cash" } ,
PaymentComplete : false ,
}
jr , _ := json . Marshal ( & paymentStatus )
p := url . Values {
"paymentStatus" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/payment-statuses/%s/edit" , paymentStatus . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true} ` )
data , st , err := c . PaymentStatusEdit ( paymentStatus )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_PaymentStatusEdit_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
paymentStatus := PaymentStatus {
Name : RandomString ( 5 ) ,
Active : false ,
DefaultForCRM : false ,
PaymentTypes : [ ] string { "cash" } ,
PaymentComplete : false ,
}
jr , _ := json . Marshal ( & paymentStatus )
p := url . Values {
"paymentStatus" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/payment-statuses/%s/edit" , paymentStatus . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
data , st , err := c . PaymentStatusEdit ( paymentStatus )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if st < http . StatusBadRequest {
t . Error ( statusFail )
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_PaymentTypeEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
paymentType := PaymentType {
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
Active : false ,
DefaultForCRM : false ,
}
jr , _ := json . Marshal ( & paymentType )
p := url . Values {
"paymentType" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/payment-types/%s/edit" , paymentType . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true} ` )
data , st , err := c . PaymentTypeEdit ( paymentType )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_PaymentTypeEdit_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
paymentType := PaymentType {
Name : RandomString ( 5 ) ,
Active : false ,
DefaultForCRM : false ,
}
jr , _ := json . Marshal ( & paymentType )
p := url . Values {
"paymentType" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/payment-types/%s/edit" , paymentType . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
data , st , err := c . PaymentTypeEdit ( paymentType )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if st < http . StatusBadRequest {
t . Error ( statusFail )
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_PriceTypeEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
priceType := PriceType {
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
Active : false ,
}
jr , _ := json . Marshal ( & priceType )
p := url . Values {
"priceType" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/price-types/%s/edit" , priceType . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true} ` )
data , st , err := c . PriceTypeEdit ( priceType )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_PriceTypeEdit_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
priceType := PriceType {
Name : RandomString ( 5 ) ,
Active : false ,
}
jr , _ := json . Marshal ( & priceType )
p := url . Values {
"priceType" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/price-types/%s/edit" , priceType . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
data , st , err := c . PriceTypeEdit ( priceType )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if st < http . StatusBadRequest {
t . Error ( statusFail )
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_ProductStatusEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
productStatus := ProductStatus {
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
Active : false ,
CancelStatus : false ,
}
jr , _ := json . Marshal ( & productStatus )
p := url . Values {
"productStatus" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/product-statuses/%s/edit" , productStatus . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true} ` )
data , st , err := c . ProductStatusEdit ( productStatus )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_ProductStatusEdit_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
productStatus := ProductStatus {
Name : RandomString ( 5 ) ,
Active : false ,
CancelStatus : false ,
}
jr , _ := json . Marshal ( & productStatus )
p := url . Values {
"productStatus" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/product-statuses/%s/edit" , productStatus . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
data , st , err := c . ProductStatusEdit ( productStatus )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if st < http . StatusBadRequest {
t . Error ( statusFail )
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_StatusEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
status := Status {
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
Active : false ,
Group : "new" ,
}
jr , _ := json . Marshal ( & status )
p := url . Values {
"status" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/statuses/%s/edit" , status . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true} ` )
data , st , err := c . StatusEdit ( status )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_StatusEdit_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
status := Status {
Name : RandomString ( 5 ) ,
Active : false ,
Group : "new" ,
}
jr , _ := json . Marshal ( & status )
p := url . Values {
"status" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/statuses/%s/edit" , status . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
data , st , err := c . StatusEdit ( status )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if st < http . StatusBadRequest {
t . Error ( statusFail )
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_SiteEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
site := Site {
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
URL : fmt . Sprintf ( "https://%s.example.com" , RandomString ( 4 ) ) ,
LoadFromYml : false ,
}
jr , _ := json . Marshal ( & site )
p := url . Values {
"site" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/sites/%s/edit" , site . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true} ` )
data , _ , err := c . SiteEdit ( site )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success == false {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_SiteEdit_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
site := Site {
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
LoadFromYml : false ,
}
jr , _ := json . Marshal ( & site )
p := url . Values {
"site" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/sites/%s/edit" , site . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 405 ) .
BodyString ( ` { "success": false, "errorMsg": "Method Not Allowed"} ` )
data , _ , err := c . SiteEdit ( site )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_StoreEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
store := Store {
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
Active : false ,
Type : "store-type-warehouse" ,
InventoryType : "integer" ,
}
jr , _ := json . Marshal ( & store )
p := url . Values {
"store" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/stores/%s/edit" , store . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true} ` )
data , st , err := c . StoreEdit ( store )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_StoreEdit_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
store := Store {
Name : RandomString ( 5 ) ,
Active : false ,
Type : "store-type-warehouse" ,
InventoryType : "integer" ,
}
jr , _ := json . Marshal ( & store )
p := url . Values {
"store" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/reference/stores/%s/edit" , store . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
data , st , err := c . StoreEdit ( store )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if st < http . StatusBadRequest {
t . Error ( statusFail )
}
if data . Success != false {
2019-02-20 10:07:02 +03:00
t . Error ( successFail )
}
}
func TestClient_Units ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/api/v5/reference/units" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "units": []} ` )
data , st , err := c . Units ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-02-20 10:07:02 +03:00
}
if st != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-02-20 10:07:02 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-02-20 10:07:02 +03:00
}
}
func TestClient_UnitsEdit ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
unit := Unit {
2019-02-21 11:51:50 +03:00
Code : RandomString ( 5 ) ,
Name : RandomString ( 5 ) ,
Sym : RandomString ( 2 ) ,
Default : false ,
Active : true ,
2019-02-20 10:07:02 +03:00
}
jr , _ := json . Marshal ( & unit )
p := url . Values {
"unit" : { string ( jr [ : ] ) } ,
}
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/api/v5/reference/units/%s/edit" , unit . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true} ` )
data , st , err := c . UnitEdit ( unit )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-02-20 10:07:02 +03:00
}
if ! statuses [ st ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-02-20 10:07:02 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-02-20 10:07:02 +03:00
}
}
func TestClient_UnitEdit_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
unit := Unit {
2019-02-21 11:51:50 +03:00
Name : RandomString ( 5 ) ,
Active : false ,
2019-02-20 10:07:02 +03:00
}
jr , _ := json . Marshal ( & unit )
p := url . Values {
2019-02-21 11:51:50 +03:00
"unit" : { string ( jr [ : ] ) } ,
2019-02-20 10:07:02 +03:00
}
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/api/v5/reference/units/%s/edit" , unit . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
2019-02-21 11:51:50 +03:00
BodyString ( ` { "success": false, "errorMsg": "Method not found"} ` )
2019-02-20 10:07:02 +03:00
data , st , err := c . UnitEdit ( unit )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2019-02-20 10:07:02 +03:00
}
if st < http . StatusBadRequest {
t . Error ( statusFail )
}
if data . Success != false {
2018-04-20 17:59:26 +03:00
t . Error ( successFail )
}
}
func TestClient_PackChange ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
pack := Pack {
Store : "test-store" ,
ItemID : 123 ,
Quantity : 1 ,
}
jr , _ := json . Marshal ( & pack )
pr := url . Values {
"pack" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/orders/packs/create" ) .
MatchType ( "url" ) .
BodyString ( pr . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true, "id": 1} ` )
p , status , err := c . PackCreate ( pack )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status != http . StatusCreated {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if p . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/orders/packs/%d" , p . ID ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
s , status , err := c . Pack ( p . ID )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if s . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
jr , _ = json . Marshal ( & Pack { ID : p . ID , Quantity : 2 } )
pr = url . Values {
"pack" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/orders/packs/%d/edit" , p . ID ) ) .
MatchType ( "url" ) .
BodyString ( pr . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
e , status , err := c . PackEdit ( Pack { ID : p . ID , Quantity : 2 } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if e . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/orders/packs/%d/delete" , p . ID ) ) .
MatchType ( "url" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
d , status , err := c . PackDelete ( p . ID )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if d . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_PackChange_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
pack := Pack {
Store : "test-store" ,
ItemID : iCodeFail ,
Quantity : 1 ,
}
jr , _ := json . Marshal ( & pack )
pr := url . Values {
"pack" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/orders/packs/create" ) .
MatchType ( "url" ) .
BodyString ( pr . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the entity format"} ` )
p , status , err := c . PackCreate ( pack )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status < http . StatusBadRequest {
t . Error ( statusFail )
}
if p . Success != false {
t . Error ( successFail )
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/orders/packs/%d" , iCodeFail ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the entity format"} ` )
s , status , err := c . Pack ( iCodeFail )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if s . Success != false {
t . Error ( successFail )
}
jr , _ = json . Marshal ( & Pack { ID : iCodeFail , Quantity : 2 } )
pr = url . Values {
"pack" : { string ( jr [ : ] ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/orders/packs/%d/edit" , iCodeFail ) ) .
MatchType ( "url" ) .
BodyString ( pr . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Pack with id 123123 not found"} ` )
e , status , err := c . PackEdit ( Pack { ID : iCodeFail , Quantity : 2 } )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if e . Success != false {
t . Error ( successFail )
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/orders/packs/%d/delete" , iCodeFail ) ) .
MatchType ( "url" ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Pack not found"} ` )
d , status , err := c . PackDelete ( iCodeFail )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if d . Success != false {
t . Error ( successFail )
}
}
func TestClient_PacksHistory ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/orders/packs/history" ) .
MatchParam ( "filter[sinceId]" , "5" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "history": [ { "id": 1}]} ` )
data , status , err := c . PacksHistory ( PacksHistoryRequest { Filter : OrdersHistoryFilter { SinceID : 5 } } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if len ( data . History ) == 0 {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_PacksHistory_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/orders/packs/history" ) .
MatchParam ( "filter[startDate]" , "2020-13-12" ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . PacksHistory ( PacksHistoryRequest { Filter : OrdersHistoryFilter { StartDate : "2020-13-12" } } )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_Packs ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/orders/packs" ) .
MatchParam ( "page" , "1" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
data , status , err := c . Packs ( PacksRequest { Filter : PacksFilter { } , Page : 1 } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_Packs_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/orders/packs" ) .
MatchParam ( "filter[shipmentDateFrom]" , "2020-13-12" ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . Packs ( PacksRequest { Filter : PacksFilter { ShipmentDateFrom : "2020-13-12" } } )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_Inventories ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/store/inventories" ) .
MatchParam ( "filter[details]" , "1" ) .
MatchParam ( "page" , "1" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "id": 1} ` )
data , status , err := c . Inventories ( InventoriesRequest { Filter : InventoriesFilter { Details : 1 } , Page : 1 } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_Inventories_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/store/inventories" ) .
MatchParam ( "filter[sites][]" , codeFail ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . Inventories ( InventoriesRequest { Filter : InventoriesFilter { Sites : [ ] string { codeFail } } } )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_Segments ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/segments" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "id": 1} ` )
data , status , err := c . Segments ( SegmentsRequest { } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
2018-02-27 11:37:15 +03:00
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
2020-07-14 10:22:36 +03:00
func TestClient_Settings ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/settings" ) .
Reply ( 200 ) .
BodyString ( ` {
"success" : true ,
"settings" : {
"default_currency" : {
"value" : "RUB" ,
"updated_at" : "2019-02-13 13:57:20"
} ,
"system_language" : {
"value" : "RU" ,
"updated_at" : "2019-02-13 14:02:23"
} ,
"timezone" : {
"value" : "Europe/Moscow" ,
"updated_at" : "2019-02-13 13:57:20"
2022-04-29 12:26:38 +03:00
} ,
"work_times" : [
{
"day_type" : "Monday" ,
"start_time" : "08:00" ,
"end_time" : "18:30" ,
"lunch_start_time" : "15:00" ,
"lunch_end_time" : "16:00"
} ,
{
"day_type" : "Tuesday" ,
"start_time" : "09:00" ,
"end_time" : "17:00" ,
"lunch_start_time" : "13:00" ,
"lunch_end_time" : "14:00"
}
]
2020-07-14 10:22:36 +03:00
}
}
` )
data , status , err := c . Settings ( )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2020-07-14 10:22:36 +03:00
}
if status >= http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2020-07-14 10:22:36 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2020-07-14 10:22:36 +03:00
}
if data . Settings . DefaultCurrency . Value != "RUB" {
t . Errorf ( "Invalid default_currency value: %v" , data . Settings . DefaultCurrency . Value )
}
if data . Settings . SystemLanguage . Value != "RU" {
t . Errorf ( "Invalid system_language value: %v" , data . Settings . SystemLanguage . Value )
}
if data . Settings . Timezone . Value != "Europe/Moscow" {
t . Errorf ( "Invalid timezone value: %v" , data . Settings . Timezone . Value )
}
2022-04-29 12:26:38 +03:00
if data . Settings . WorkTimes [ 0 ] . DayType != "Monday" {
t . Errorf ( "Invalid work times: %v" , data . Settings . WorkTimes [ 0 ] . DayType )
}
2020-07-14 10:22:36 +03:00
}
2018-04-20 17:59:26 +03:00
func TestClient_Segments_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/segments" ) .
MatchParam ( "filter[active]" , "3" ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . Segments ( SegmentsRequest { Filter : SegmentsFilter { Active : 3 } } )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_IntegrationModule ( t * testing . T ) {
c := client ( )
name := RandomString ( 5 )
code := RandomString ( 8 )
defer gock . Off ( )
integrationModule := IntegrationModule {
Code : code ,
IntegrationCode : code ,
2022-12-06 22:27:56 +03:00
Active : new ( bool ) ,
2018-04-20 17:59:26 +03:00
Name : fmt . Sprintf ( "Integration module %s" , name ) ,
AccountURL : fmt . Sprintf ( "http://example.com/%s/account" , name ) ,
BaseURL : fmt . Sprintf ( "http://example.com/%s" , name ) ,
ClientID : RandomString ( 10 ) ,
Logo : "https://cdn.worldvectorlogo.com/logos/github-icon.svg" ,
2022-11-24 13:37:21 +03:00
Integrations : & Integrations {
Delivery : & Delivery {
StatusList : [ ] DeliveryStatus {
{
Code : "st1" ,
Name : "st1" ,
IsEditable : true ,
IsError : true ,
IsPreprocessing : false ,
} ,
{
Code : "st2" ,
Name : "st2" ,
IsEditable : false ,
IsError : false ,
IsPreprocessing : false ,
} ,
} ,
} ,
} ,
2018-04-20 17:59:26 +03:00
}
2022-12-08 16:24:52 +03:00
integrations , err := json . Marshal ( integrationModule . Integrations )
assert . NoError ( t , err )
2022-12-06 22:27:56 +03:00
jsonData := fmt . Sprintf (
2022-12-08 16:24:52 +03:00
` { "code":"%s","integrationCode":"%s","active":false,"name":"%s","logo":"%s","clientId":"%s","baseUrl":"%s","accountUrl":"%s","integrations":%s} ` ,
code ,
code ,
integrationModule . Name ,
integrationModule . Logo ,
integrationModule . ClientID ,
integrationModule . BaseURL ,
integrationModule . AccountURL ,
integrations ,
2022-12-06 22:27:56 +03:00
)
2018-04-20 17:59:26 +03:00
pr := url . Values {
2022-12-06 22:27:56 +03:00
"integrationModule" : { jsonData } ,
2018-04-20 17:59:26 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/integration-modules/%s/edit" , integrationModule . Code ) ) .
MatchType ( "url" ) .
BodyString ( pr . Encode ( ) ) .
Reply ( 201 ) .
2022-11-24 13:37:21 +03:00
BodyString ( ` {
"success" : true ,
"info" : {
"deliveryType" : {
"id" : 38 ,
"code" : "sdek-v-2-podkliuchenie-1"
} ,
"billingInfo" : {
"price" : 0 ,
"currency" : {
"name" : "Рубль" ,
"shortName" : "р у б ." ,
"code" : "RUB"
} ,
"billingType" : "fixed"
}
}
} ` )
2018-04-20 17:59:26 +03:00
m , status , err := c . IntegrationModuleEdit ( integrationModule )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status != http . StatusCreated {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if m . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/integration-modules/%s" , code ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
g , status , err := c . IntegrationModule ( code )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if g . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_IntegrationModule_Fail ( t * testing . T ) {
c := client ( )
name := RandomString ( 5 )
code := RandomString ( 8 )
defer gock . Off ( )
2022-12-06 22:27:56 +03:00
active := new ( bool )
* active = true
2018-04-20 17:59:26 +03:00
integrationModule := IntegrationModule {
IntegrationCode : code ,
2022-12-06 22:27:56 +03:00
Active : active ,
2018-04-20 17:59:26 +03:00
Name : fmt . Sprintf ( "Integration module %s" , name ) ,
AccountURL : fmt . Sprintf ( "http://example.com/%s/account" , name ) ,
BaseURL : fmt . Sprintf ( "http://example.com/%s" , name ) ,
ClientID : RandomString ( 10 ) ,
Logo : "https://cdn.worldvectorlogo.com/logos/github-icon.svg" ,
}
2022-12-06 22:27:56 +03:00
jsonData := fmt . Sprintf (
` { "integrationCode":"%s","active":true,"name":"%s","logo":"%s","clientId":"%s","baseUrl":"%s","accountUrl":"%s"} ` ,
code , integrationModule . Name , integrationModule . Logo , integrationModule . ClientID , integrationModule . BaseURL , integrationModule . AccountURL ,
)
2018-04-20 17:59:26 +03:00
pr := url . Values {
2022-12-06 22:27:56 +03:00
"integrationModule" : { jsonData } ,
2018-04-20 17:59:26 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/integration-modules/%s/edit" , integrationModule . Code ) ) .
MatchType ( "url" ) .
BodyString ( pr . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
m , status , err := c . IntegrationModuleEdit ( integrationModule )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if status < http . StatusBadRequest {
t . Error ( statusFail )
}
if m . Success != false {
t . Error ( successFail )
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/integration-modules/%s" , code ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
g , status , err := c . IntegrationModule ( code )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if g . Success != false {
t . Error ( successFail )
}
}
func TestClient_ProductsGroup ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/store/product-groups" ) .
MatchParam ( "filter[active]" , "1" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
g , status , err := c . ProductsGroup ( ProductsGroupsRequest {
Filter : ProductsGroupsFilter {
Active : 1 ,
} ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if g . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_ProductsGroup_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/store/product-groups" ) .
MatchParam ( "filter[active]" , "3" ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
g , status , err := c . ProductsGroup ( ProductsGroupsRequest {
Filter : ProductsGroupsFilter {
Active : 3 ,
} ,
} )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if status < http . StatusBadRequest {
t . Error ( statusFail )
}
if g . Success != false {
t . Error ( successFail )
}
}
func TestClient_Products ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/store/products" ) .
MatchParam ( "filter[active]" , "1" ) .
MatchParam ( "filter[minPrice]" , "1" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
g , status , err := c . Products ( ProductsRequest {
Filter : ProductsFilter {
Active : 1 ,
MinPrice : 1 ,
} ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if g . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
func TestClient_Products_Fail ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/store/products" ) .
MatchParam ( "filter[active]" , "3" ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
g , status , err := c . Products ( ProductsRequest {
Filter : ProductsFilter { Active : 3 } ,
} )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
if status < http . StatusBadRequest {
t . Error ( statusFail )
}
if g . Success != false {
t . Error ( successFail )
}
}
func TestClient_ProductsProperties ( t * testing . T ) {
c := client ( )
sites := make ( [ ] string , 1 )
sites [ 0 ] = os . Getenv ( "RETAILCRM_SITE" )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/store/products" ) .
MatchParam ( "filter[sites][]" , sites [ 0 ] ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
g , status , err := c . ProductsProperties ( ProductsPropertiesRequest {
Filter : ProductsPropertiesFilter {
Sites : sites ,
} ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if g . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
}
2021-01-29 14:29:44 +03:00
func TestClient_DeliveryTracking ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
p := url . Values {
"statusUpdate" : { ` [ { "deliveryId":"123","history":[ { "code":"1","updatedAt":"2020-01-01T00:00:00:000"}]}] ` } ,
}
gock . New ( crmURL ) .
Post ( "/delivery/generic/subcode/tracking" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
g , status , err := c . DeliveryTracking ( [ ] DeliveryTrackingRequest { {
DeliveryID : "123" ,
History : [ ] DeliveryHistoryRecord { {
Code : "1" ,
UpdatedAt : "2020-01-01T00:00:00:000" ,
} } ,
} } , "subcode" )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2021-01-29 14:29:44 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2021-01-29 14:29:44 +03:00
}
if g . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2021-01-29 14:29:44 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_DeliveryShipments ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/delivery/shipments" ) .
MatchParam ( "filter[dateFrom]" , "2017-10-10" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
g , status , err := c . DeliveryShipments ( DeliveryShipmentsRequest {
Filter : ShipmentFilter {
DateFrom : "2017-10-10" ,
} ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if g . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_DeliveryShipments_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/delivery/shipments" ) .
MatchParam ( "filter[stores][]" , codeFail ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
g , status , err := c . DeliveryShipments ( DeliveryShipmentsRequest {
Filter : ShipmentFilter {
Stores : [ ] string { codeFail } ,
} ,
} )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Error ( "Error must be return" )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if status < http . StatusBadRequest {
t . Error ( statusFail )
}
if g . Success != false {
t . Error ( successFail )
}
}
func TestClient_Cost ( t * testing . T ) {
c := client ( )
costRecord := CostRecord {
DateFrom : "2018-04-02" ,
DateTo : "2018-04-02" ,
Summ : 124 ,
CostItem : "seo" ,
}
defer gock . Off ( )
str , _ := json . Marshal ( costRecord )
p := url . Values {
"cost" : { string ( str ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/costs/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true, "id": 123} ` )
data , status , err := c . CostCreate ( costRecord )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
id := data . ID
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/costs" ) .
MatchParam ( "filter[ids][]" , strconv . Itoa ( id ) ) .
MatchParam ( "limit" , "20" ) .
MatchParam ( "page" , "1" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
costs , status , err := c . Costs ( CostsRequest {
Filter : CostsFilter {
Ids : [ ] string { strconv . Itoa ( id ) } ,
} ,
Limit : 20 ,
Page : 1 ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if costs . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/costs/%d" , id ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
cost , status , err := c . Cost ( id )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if cost . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
costRecord . DateFrom = "2018-04-09"
costRecord . DateTo = "2018-04-09"
costRecord . Summ = 421
str , _ = json . Marshal ( costRecord )
p = url . Values {
"cost" : { string ( str ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/costs/%d/edit" , id ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
costEdit , status , err := c . CostEdit ( id , costRecord )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if costEdit . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
j , _ := json . Marshal ( & id )
p = url . Values {
"costs" : { string ( j ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/costs/%d/delete" , id ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
costDelete , status , err := c . CostDelete ( id )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if costDelete . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
func TestClient_Cost_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
costRecord := CostRecord {
DateFrom : "2018-13-13" ,
DateTo : "2012-04-02" ,
Summ : 124 ,
CostItem : "seo" ,
}
str , _ := json . Marshal ( costRecord )
p := url . Values {
"cost" : { string ( str ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/costs/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Cost is not loaded"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . CostCreate ( costRecord )
if err == nil {
t . Error ( "Error must be return" )
2018-04-20 17:59:26 +03:00
}
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
id := data . ID
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/costs" ) .
MatchParam ( "filter[sites][]" , codeFail ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
costs , status , err := c . Costs ( CostsRequest {
Filter : CostsFilter { Sites : [ ] string { codeFail } } ,
2018-02-27 11:37:15 +03:00
} )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if status < http . StatusBadRequest {
t . Error ( statusFail )
}
if costs . Success != false {
t . Error ( successFail )
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/costs/%d" , id ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Not found"} ` )
cost , status , err := c . Cost ( id )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if cost . Success != false {
t . Error ( successFail )
}
costRecord . DateFrom = "2020-13-12"
costRecord . DateTo = "2012-04-09"
costRecord . Summ = 421
costRecord . Sites = [ ] string { codeFail }
str , _ = json . Marshal ( costRecord )
p = url . Values {
"cost" : { string ( str ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/costs/%d/edit" , id ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Cost is not loaded"} ` )
costEdit , status , err := c . CostEdit ( id , costRecord )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if costEdit . Success != false {
t . Error ( successFail )
}
j , _ := json . Marshal ( & id )
p = url . Values {
"costs" : { string ( j ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/costs/%d/delete" , id ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Not found"} ` )
costDelete , status , err := c . CostDelete ( id )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if costDelete . Success != false {
t . Error ( successFail )
}
}
func TestClient_CostsUpload ( t * testing . T ) {
c := client ( )
defer gock . Off ( )
costsUpload := [ ] CostRecord {
{
Source : nil ,
DateFrom : "2018-04-02" ,
DateTo : "2018-04-02" ,
Summ : 124 ,
CostItem : "seo" ,
Order : nil ,
} ,
{
Source : nil ,
DateFrom : "2018-04-03" ,
DateTo : "2018-04-03" ,
Summ : 125 ,
CostItem : "seo" ,
Order : nil ,
Sites : [ ] string { "retailcrm-ru" } ,
} ,
}
j , _ := json . Marshal ( & costsUpload )
p := url . Values {
"costs" : { string ( j ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/costs/upload" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true, "uploadedCosts": [1, 2]} ` )
data , status , err := c . CostsUpload ( costsUpload )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-20 17:59:26 +03:00
}
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
ids := data . UploadedCosts
j , _ = json . Marshal ( & ids )
p = url . Values {
"ids" : { string ( j ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/costs/delete" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
costsDelete , status , err := c . CostsDelete ( ids )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if costsDelete . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_CostsUpload_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
costsUpload := [ ] CostRecord {
{
Source : nil ,
DateFrom : "2018-04-03" ,
DateTo : "2018-04-03" ,
Summ : 125 ,
CostItem : "seo" ,
Order : nil ,
Sites : [ ] string { codeFail } ,
} ,
}
j , _ := json . Marshal ( & costsUpload )
p := url . Values {
"costs" : { string ( j ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/costs/upload" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 460 ) .
2021-10-27 15:49:06 +03:00
BodyString ( ` { "success": false, "errorMsg": "Costs are loaded with ErrorsList"} ` )
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . CostsUpload ( costsUpload )
if err == nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
ids := data . UploadedCosts
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
j , _ = json . Marshal ( & ids )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
p = url . Values {
"ids" : { string ( j ) } ,
2018-02-27 11:37:15 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/costs/delete" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Expected array, but got NULL: null"} ` )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
costsDelete , status , err := c . CostsDelete ( ids )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if status < http . StatusBadRequest {
t . Error ( statusFail )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if costsDelete . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
}
2019-09-04 11:38:21 +03:00
func TestClient_Files ( t * testing . T ) {
c := client ( )
fileID := 14925
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/files" ) .
MatchParam ( "filter[ids][]" , strconv . Itoa ( fileID ) ) .
MatchParam ( "limit" , "20" ) .
MatchParam ( "page" , "1" ) .
Reply ( 200 ) .
2019-09-09 14:57:58 +03:00
BodyString ( ` { "success": true,"pagination": { "limit": 20,"totalCount": 0,"currentPage": 1,"totalPageCount": 0},"files": []} ` )
2019-09-04 11:38:21 +03:00
_ , status , err := c . Files ( FilesRequest {
Limit : 20 ,
Page : 1 ,
Filter : FilesFilter {
Ids : [ ] int { fileID } ,
} ,
} )
if status != 200 {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v %v" , err . Error ( ) , err )
2019-09-04 11:38:21 +03:00
}
}
func TestClient_FileUpload ( t * testing . T ) {
c := client ( )
file := strings . NewReader ( ` test file contents ` )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/files/upload" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true, "file": { "id": 1}} ` )
data , status , err := c . FileUpload ( file )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if data . File . ID != 1 {
t . Error ( "invalid file id" )
}
}
func TestClient_FileUploadFail ( t * testing . T ) {
c := client ( )
file := strings . NewReader ( ` test file contents ` )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( "/files/upload" ) .
Reply ( 400 ) .
2019-09-09 14:57:58 +03:00
BodyString ( ` { "success":false,"errorMsg":"Your account doesn't have enough money to upload files."} ` )
2019-09-04 11:38:21 +03:00
_ , status , err := c . FileUpload ( file )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if status != http . StatusBadRequest {
t . Errorf ( "status should be `%d`, got `%d` instead" , http . StatusBadRequest , status )
}
}
func TestClient_File ( t * testing . T ) {
c := client ( )
invalidFile := 20
fileResponse := & FileResponse {
Success : true ,
File : & File {
ID : 19 ,
Filename : "image.jpg" ,
Type : "image/jpeg" ,
CreatedAt : time . Now ( ) . String ( ) ,
Size : 10000 ,
Attachment : nil ,
} ,
}
respData , errr := json . Marshal ( fileResponse )
if errr != nil {
t . Errorf ( "%v" , errr . Error ( ) )
}
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( fmt . Sprintf ( "/files/%d" , fileResponse . File . ID ) ) .
Reply ( 200 ) .
BodyString ( string ( respData ) )
gock . New ( crmURL ) .
Get ( fmt . Sprintf ( "/files/%d" , invalidFile ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Not Found"} ` )
s , status , err := c . File ( fileResponse . File . ID )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if s . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if s . File . ID != fileResponse . File . ID {
t . Error ( "invalid response data" )
}
s , status , err = c . File ( invalidFile )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if status != http . StatusNotFound {
t . Errorf ( "status should be `%d`, got `%d` instead" , http . StatusNotFound , status )
}
}
func TestClient_FileDelete ( t * testing . T ) {
c := client ( )
successful := 19
badRequest := 20
notFound := 21
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/files/%d/delete" , successful ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/files/%d/delete" , badRequest ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Error"} ` )
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/files/%d/delete" , notFound ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Not Found"} ` )
data , status , err := c . FileDelete ( successful )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
2021-04-26 12:09:21 +03:00
data , _ , err = c . FileDelete ( badRequest )
if err == nil {
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
2021-04-26 12:09:21 +03:00
data , _ , err = c . FileDelete ( notFound )
if err == nil {
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
}
func TestClient_FileDownload ( t * testing . T ) {
c := client ( )
successful := 19
fail := 20
fileData := "file data"
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( fmt . Sprintf ( "/files/%d/download" , successful ) ) .
Reply ( 200 ) .
BodyString ( fileData )
gock . New ( crmURL ) .
Get ( fmt . Sprintf ( "/files/%d/download" , fail ) ) .
Reply ( 400 ) .
BodyString ( "" )
data , status , err := c . FileDownload ( successful )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
2021-04-26 12:09:21 +03:00
fetchedByte , err := ioutil . ReadAll ( data )
if err != nil {
t . Error ( err )
2019-09-04 11:38:21 +03:00
}
fetched := string ( fetchedByte )
if fetched != fileData {
t . Error ( "file data mismatch" )
}
data , status , err = c . FileDownload ( fail )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if status != http . StatusBadRequest {
t . Errorf ( "status should be `%d`, got `%d` instead" , http . StatusBadRequest , status )
}
}
func TestClient_FileEdit ( t * testing . T ) {
c := client ( )
successful := 19
fail := 20
resp := FileResponse {
Success : true ,
File : & File { Filename : "image.jpg" } ,
}
respData , _ := json . Marshal ( resp )
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/files/%d/edit" , successful ) ) .
Reply ( 200 ) .
BodyString ( string ( respData ) )
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/files/%d/edit" , fail ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Not Found"} ` )
data , status , err := c . FileEdit ( successful , * resp . File )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if status != http . StatusOK {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
if data . File . Filename != resp . File . Filename {
t . Errorf ( "filename should be `%s`, got `%s` instead" , resp . File . Filename , data . File . Filename )
}
2021-04-26 12:09:21 +03:00
data , _ , err = c . FileEdit ( fail , * resp . File )
if err == nil {
t . Errorf ( "%v" , err )
2019-09-04 11:38:21 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_CustomFields ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/custom-fields" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
data , status , err := c . CustomFields ( CustomFieldsRequest { } )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_CustomFields_Fail ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-02-27 11:37:15 +03:00
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/custom-fields" ) .
MatchParam ( "filter[type]" , codeFail ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . CustomFields ( CustomFieldsRequest { Filter : CustomFieldsFilter { Type : codeFail } } )
if err == nil {
t . Errorf ( "%v" , err )
2018-02-27 11:37:15 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-02-27 11:37:15 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_CustomDictionariesCreate ( t * testing . T ) {
2018-02-27 11:37:15 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
code := "test_" + RandomString ( 8 )
defer gock . Off ( )
customDictionary := CustomDictionary {
Name : "test2" ,
Code : code ,
Elements : [ ] Element {
{
Name : "test" ,
Code : "test" ,
} ,
2018-02-27 11:37:15 +03:00
} ,
}
2018-04-20 17:59:26 +03:00
j , _ := json . Marshal ( & customDictionary )
2018-02-27 11:37:15 +03:00
2018-04-20 17:59:26 +03:00
p := url . Values {
"customDictionary" : { string ( j ) } ,
2018-02-27 11:37:15 +03:00
}
2018-04-11 13:39:43 +03:00
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/custom-fields/dictionaries/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true, "id": 1} ` )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
data , status , err := c . CustomDictionariesCreate ( customDictionary )
2018-04-11 13:39:43 +03:00
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-12 16:43:53 +03:00
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
if data . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( "/custom-fields/dictionaries" ) .
MatchParam ( "filter[name]" , "test" ) .
MatchParam ( "limit" , "10" ) .
MatchParam ( "page" , "1" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
cds , status , err := c . CustomDictionaries ( CustomDictionariesRequest {
Filter : CustomDictionariesFilter {
Name : "test" ,
2018-04-11 13:39:43 +03:00
} ,
2018-04-20 17:59:26 +03:00
Limit : 10 ,
2018-04-11 13:39:43 +03:00
Page : 1 ,
} )
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-12 16:43:53 +03:00
if ! statuses [ status ] {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if cds . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/custom-fields/dictionaries/%s" , code ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
cd , status , err := c . CustomDictionary ( code )
2018-04-11 13:39:43 +03:00
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if cd . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
customDictionary . Name = "test223"
customDictionary . Elements = [ ] Element {
{
Name : "test3" ,
Code : "test3" ,
} ,
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
j , _ = json . Marshal ( & customDictionary )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
p = url . Values {
"customDictionary" : { string ( j ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/custom-fields/dictionaries/%s/edit" , customDictionary . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
cde , status , err := c . CustomDictionaryEdit ( customDictionary )
2018-04-11 13:39:43 +03:00
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-12 16:43:53 +03:00
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if cde . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_CustomDictionariesCreate_Fail ( t * testing . T ) {
2018-04-11 13:39:43 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
customDictionary := CustomDictionary {
Name : "test2" ,
Code : RandomString ( 8 ) ,
Elements : [ ] Element {
{
Name : "test" ,
Code : "test" ,
} ,
} ,
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
j , _ := json . Marshal ( & customDictionary )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
p := url . Values {
"customDictionary" : { string ( j ) } ,
2018-04-11 13:39:43 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( "/custom-fields/dictionaries/create" ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
2018-04-11 13:39:43 +03:00
2021-04-26 12:09:21 +03:00
data , _ , err := c . CustomDictionariesCreate ( customDictionary )
if err == nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-04-11 13:39:43 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/custom-fields/dictionaries/%s" , codeFail ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Not found"} ` )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
cd , status , err := c . CustomDictionary ( codeFail )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if cd . Success != false {
t . Error ( successFail )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
customDictionary . Name = "test223"
customDictionary . Elements = [ ] Element {
{
Name : "test3" ,
} ,
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
j , _ = json . Marshal ( & customDictionary )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
p = url . Values {
"customDictionary" : { string ( j ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/custom-fields/dictionaries/%s/edit" , customDictionary . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
cde , status , err := c . CustomDictionaryEdit ( customDictionary )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-23 16:28:54 +03:00
if status < http . StatusBadRequest {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if cde . Success != false {
t . Error ( successFail )
2018-04-11 13:39:43 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_CustomFieldsCreate ( t * testing . T ) {
2018-04-11 13:39:43 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
codeCustomField := RandomString ( 8 )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
defer gock . Off ( )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
customFields := CustomFields {
Name : codeCustomField ,
Code : codeCustomField ,
Type : "text" ,
Entity : "order" ,
DisplayArea : "customer" ,
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
j , _ := json . Marshal ( & customFields )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
p := url . Values {
"customField" : { string ( j ) } ,
2018-04-11 13:39:43 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/custom-fields/%s/create" , customFields . Entity ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 201 ) .
BodyString ( ` { "success": true, "id": 1} ` )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
data , status , err := c . CustomFieldsCreate ( customFields )
2018-04-11 13:39:43 +03:00
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-12 16:43:53 +03:00
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
if data . Success != true {
2018-04-20 17:59:26 +03:00
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/custom-fields/%s/%s" , "order" , codeCustomField ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
customField , status , err := c . CustomField ( "order" , codeCustomField )
2018-04-11 13:39:43 +03:00
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-12 16:43:53 +03:00
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if customField . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
customFields . DisplayArea = "delivery"
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
j , _ = json . Marshal ( & customFields )
p = url . Values {
"customField" : { string ( j ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/custom-fields/%s/%s/edit" , customFields . Entity , customFields . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
customFieldEdit , status , err := c . CustomFieldEdit ( customFields )
2018-04-11 13:39:43 +03:00
2021-04-26 12:09:21 +03:00
if err != nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-12 16:43:53 +03:00
if ! statuses [ status ] {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if customFieldEdit . Success != true {
2021-04-26 12:09:21 +03:00
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
}
2018-04-20 17:59:26 +03:00
func TestClient_CustomFieldsCreate_Fail ( t * testing . T ) {
2018-04-11 13:39:43 +03:00
c := client ( )
2018-04-20 17:59:26 +03:00
codeCustomField := "test_" + RandomString ( 8 )
defer gock . Off ( )
customFields := CustomFields {
2018-04-12 16:43:53 +03:00
Name : codeCustomField ,
Type : "text" ,
Entity : "order" ,
DisplayArea : "customer" ,
2018-04-20 17:59:26 +03:00
}
j , _ := json . Marshal ( & customFields )
p := url . Values {
"customField" : { string ( j ) } ,
}
2018-04-11 13:39:43 +03:00
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/custom-fields/%s/create" , customFields . Entity ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Errors in the input parameters"} ` )
2021-04-26 12:09:21 +03:00
data , _ , err := c . CustomFieldsCreate ( customFields )
if err == nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if data . Success != false {
t . Error ( successFail )
2018-04-11 13:39:43 +03:00
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Get ( fmt . Sprintf ( "/custom-fields/%s/%s" , "order" , codeCustomField ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "Not found"} ` )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
customField , status , err := c . CustomField ( "order" , codeCustomField )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if status < http . StatusBadRequest {
t . Error ( statusFail )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if customField . Success != false {
t . Error ( successFail )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
customFields . DisplayArea = "delivery"
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
j , _ = json . Marshal ( & customFields )
2018-04-11 13:39:43 +03:00
2018-04-20 17:59:26 +03:00
p = url . Values {
"customField" : { string ( j ) } ,
}
2018-09-28 01:37:56 +03:00
gock . New ( crmURL ) .
2018-04-20 17:59:26 +03:00
Post ( fmt . Sprintf ( "/custom-fields/%s/%s/edit" , customFields . Entity , customFields . Code ) ) .
MatchType ( "url" ) .
BodyString ( p . Encode ( ) ) .
Reply ( 404 ) .
BodyString ( ` { "success": false, "errorMsg": "API method not found"} ` )
customFieldEdit , status , err := c . CustomFieldEdit ( customFields )
2021-04-26 12:09:21 +03:00
if err == nil {
t . Errorf ( "%v" , err )
2018-04-11 13:39:43 +03:00
}
2018-04-20 17:59:26 +03:00
if customFieldEdit . Success != false {
t . Error ( successFail )
2018-04-11 13:39:43 +03:00
}
}
2022-04-01 17:22:53 +03:00
func TestClient_UpdateScopes ( t * testing . T ) {
c := client ( )
code := RandomString ( 8 )
defer gock . Off ( )
2022-04-12 15:37:15 +03:00
request := ScopesRequired { Scopes : [ ] string { "scope1" , "scope2" } }
2022-04-13 17:32:26 +03:00
2022-04-01 17:22:53 +03:00
jr , _ := json . Marshal ( & request )
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/integration-modules/%s/update-scopes" , code ) ) .
2022-04-12 15:37:15 +03:00
BodyString ( ( url . Values {
"requires" : { string ( jr ) } ,
} ) . Encode ( ) ) .
2022-04-01 17:22:53 +03:00
Reply ( 200 ) .
BodyString ( ` { "success": true, "apiKey": "newApiKey"} ` )
m , status , err := c . UpdateScopes ( code , request )
if err != nil {
t . Errorf ( "%v" , err )
}
if status != http . StatusOK {
t . Errorf ( "%v" , err )
}
if m . Success != true {
t . Errorf ( "%v" , err )
}
}
func TestClient_UpdateScopes_Fail ( t * testing . T ) {
c := client ( )
code := RandomString ( 8 )
defer gock . Off ( )
2022-04-12 15:37:15 +03:00
request := ScopesRequired { Scopes : [ ] string { "scope1" , "scope2" } }
2022-04-13 17:32:26 +03:00
2022-04-01 17:22:53 +03:00
jr , _ := json . Marshal ( & request )
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/integration-modules/%s/update-scopes" , code ) ) .
2022-04-12 15:37:15 +03:00
BodyString ( ( url . Values {
"requires" : { string ( jr ) } ,
} ) . Encode ( ) ) .
2022-04-01 17:22:53 +03:00
Reply ( 400 ) .
BodyString ( ` { "success": false, "errorMsg": "Not enabled simple connection"} ` )
m , status , err := c . UpdateScopes ( code , request )
if err == nil {
t . Error ( "Error must be return" )
}
if status != http . StatusBadRequest {
t . Errorf ( "%v" , err )
}
if m . Success != false {
t . Error ( successFail )
}
}
2022-08-09 13:45:11 +03:00
func TestClient_BonusOperations ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/api/v5/loyalty/bonus/operations" ) .
MatchParam ( "filter[loyalties][]" , "1" ) .
MatchParam ( "filter[loyalties][]" , "3" ) .
MatchParam ( "cursor" , "qwe" ) .
MatchParam ( "limit" , "3" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
c := client ( )
data , status , err := c . BonusOperations ( BonusOperationsRequest {
Filter : BonusOperationsFilter {
Loyalties : [ ] int { 1 , 3 } ,
} ,
Cursor : "qwe" ,
Limit : 3 ,
} )
if err != nil {
t . Errorf ( "%v" , err )
}
if status >= http . StatusBadRequest {
t . Logf ( "%v" , err )
}
if data . Success != true {
t . Logf ( "%v" , err )
}
}
func TestClient_BonusOperations_Fail ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/api/v5/loyalty/bonus/operations" ) .
MatchParam ( "filter[loyalties][]" , "1" ) .
MatchParam ( "filter[loyalties][]" , "3" ) .
MatchParam ( "cursor" , "qwe" ) .
MatchParam ( "limit" , "3" ) .
Reply ( 400 ) .
BodyString ( ` { "success": false,"errorMsg": "Internal Server Error"} ` )
c := client ( )
data , _ , err := c . BonusOperations ( BonusOperationsRequest {
Filter : BonusOperationsFilter {
Loyalties : [ ] int { 1 , 3 } ,
} ,
Cursor : "qwe" ,
Limit : 3 ,
} )
if err == nil {
t . Error ( "Error must be return" )
}
if data . Success != false {
t . Error ( successFail )
}
}
func TestClient_AccountBonusOperations ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/api/v5/loyalty/account/123/bonus/operations" ) .
MatchParam ( "filter[createdAtFrom]" , "2012-12-12" ) .
MatchParam ( "filter[createdAtTo]" , "2012-12-13" ) .
MatchParam ( "page" , "3" ) .
MatchParam ( "limit" , "10" ) .
Reply ( 200 ) .
BodyString ( ` { "success": true} ` )
c := client ( )
data , status , err := c . AccountBonusOperations ( 123 , AccountBonusOperationsRequest {
Filter : AccountBonusOperationsFilter {
CreatedAtFrom : "2012-12-12" ,
CreatedAtTo : "2012-12-13" ,
} ,
Page : 3 ,
Limit : 10 ,
} )
if err != nil {
t . Errorf ( "%v" , err )
}
if status >= http . StatusBadRequest {
t . Logf ( "%v" , err )
}
if data . Success != true {
t . Logf ( "%v" , err )
}
}
func TestClient_AccountBonusOperations_Fail ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( "/api/v5/loyalty/account/123/bonus/operations" ) .
MatchParam ( "filter[createdAtFrom]" , "2012-12-12" ) .
MatchParam ( "filter[createdAtTo]" , "2012-12-13" ) .
MatchParam ( "page" , "3" ) .
MatchParam ( "limit" , "10" ) .
Reply ( 400 ) .
BodyString ( ` { "success": false,"errorMsg": "Internal Server Error"} ` )
c := client ( )
data , _ , err := c . AccountBonusOperations ( 123 , AccountBonusOperationsRequest {
Filter : AccountBonusOperationsFilter {
CreatedAtFrom : "2012-12-12" ,
CreatedAtTo : "2012-12-13" ,
} ,
Page : 3 ,
Limit : 10 ,
} )
if err == nil {
t . Error ( "Error must be return" )
}
if data . Success != false {
t . Error ( successFail )
}
}
2022-11-23 18:16:58 +03:00
func TestClient_ProductsBatchCreate ( t * testing . T ) {
defer gock . Off ( )
products := getProductsCreate ( )
2022-11-24 13:37:21 +03:00
productsJSON , err := json . Marshal ( products )
2022-11-23 18:16:58 +03:00
assert . NoError ( t , err )
p := url . Values { "products" : { string ( productsJSON ) } }
gock . New ( crmURL ) .
2022-11-24 13:37:21 +03:00
Post ( prefix + "/store/products/batch/create" ) .
2022-11-23 18:16:58 +03:00
BodyString ( p . Encode ( ) ) .
Reply ( http . StatusOK ) .
JSON ( getProductsCreateResponse ( ) )
2022-11-24 13:37:21 +03:00
resp , status , err := client ( ) . ProductsBatchCreate ( products )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if resp . Success != true || resp . ProcessedProductsCount == 0 {
t . Errorf ( "%v" , err )
}
}
func TestClient_ProductsBatchCreateFail ( t * testing . T ) {
defer gock . Off ( )
products := getProductsCreate ( )
productsJSON , err := json . Marshal ( products )
assert . NoError ( t , err )
p := url . Values { "products" : { string ( productsJSON ) } }
gock . New ( crmURL ) .
Post ( prefix + "/store/products/batch/create" ) .
BodyString ( p . Encode ( ) ) .
Reply ( http . StatusBadRequest ) .
JSON ( ` { "success":false,"errorMsg":"Something went wrong"} ` )
2022-11-23 18:16:58 +03:00
resp , status , err := client ( ) . ProductsBatchCreate ( products )
2022-11-24 13:37:21 +03:00
if err == nil {
t . Error ( "Expected error" )
}
if status < http . StatusBadRequest {
t . Errorf ( "%v" , err )
}
if resp . Success != false {
t . Error ( successFail )
}
}
func TestClient_ProductsBatchEdit ( t * testing . T ) {
defer gock . Off ( )
products := getProductsEdit ( )
productsJSON , err := json . Marshal ( products )
assert . NoError ( t , err )
p := url . Values { "products" : { string ( productsJSON ) } }
gock . New ( crmURL ) .
Post ( prefix + "/store/products/batch/edit" ) .
BodyString ( p . Encode ( ) ) .
Reply ( http . StatusOK ) .
JSON ( getProductsEditResponse ( ) )
resp , status , err := client ( ) . ProductsBatchEdit ( products )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if resp . Success != true || resp . ProcessedProductsCount == 0 {
t . Errorf ( "%v" , err )
}
}
func TestClient_ProductsBatchEditFail ( t * testing . T ) {
defer gock . Off ( )
products := getProductsEdit ( )
productsJSON , err := json . Marshal ( products )
assert . NoError ( t , err )
p := url . Values { "products" : { string ( productsJSON ) } }
gock . New ( crmURL ) .
Post ( prefix + "/store/products/batch/edit" ) .
BodyString ( p . Encode ( ) ) .
Reply ( http . StatusInternalServerError ) .
JSON ( ` { "success":false,"errorMsg":"Something went wrong"} ` )
resp , status , err := client ( ) . ProductsBatchEdit ( products )
if err == nil {
t . Error ( "Expected error" )
}
if status != http . StatusInternalServerError {
t . Errorf ( "%v" , err )
}
if resp . Success != false {
t . Error ( successFail )
}
}
func TestClient_LoyaltyAccountCreate ( t * testing . T ) {
defer gock . Off ( )
acc := getLoyaltyAccountCreate ( )
accJSON , _ := json . Marshal ( acc )
p := url . Values {
"site" : { "second" } ,
"loyaltyAccount" : { string ( accJSON ) } ,
}
gock . New ( crmURL ) .
Post ( prefix + "/loyalty/account/create" ) .
BodyString ( p . Encode ( ) ) .
Reply ( http . StatusOK ) .
JSON ( getLoyaltyAccountCreateResponse ( ) )
resp , status , err := client ( ) . LoyaltyAccountCreate ( "second" , acc )
2022-11-23 18:16:58 +03:00
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if resp . Success != true {
t . Errorf ( "%v" , err )
}
}
2022-11-24 13:37:21 +03:00
func TestClient_LoyaltyAccountCreateFail ( t * testing . T ) {
defer gock . Off ( )
acc := getLoyaltyAccountCreate ( )
accJSON , _ := json . Marshal ( acc )
p := url . Values {
"site" : { "second" } ,
"loyaltyAccount" : { string ( accJSON ) } ,
}
gock . New ( crmURL ) .
Post ( "/loyalty/account/create" ) .
BodyString ( p . Encode ( ) ) .
Reply ( http . StatusInternalServerError ) .
JSON ( ` { "success":false,"errorMsg":"Something went wrong"} ` )
resp , status , err := client ( ) . LoyaltyAccountCreate ( "second" , acc )
if err == nil {
t . Error ( "Expected error" )
}
if status != http . StatusInternalServerError {
t . Errorf ( "%v" , err )
}
if resp . Success != false {
t . Error ( successFail )
}
}
func TestClient_LoyaltyAccountEdit ( t * testing . T ) {
defer gock . Off ( )
acc := getLoyaltyAccountCreate ( )
acc . PhoneNumber = "89142221020"
req := SerializedEditLoyaltyAccount { acc . SerializedBaseLoyaltyAccount }
reqJSON , _ := json . Marshal ( req )
p := url . Values {
"loyaltyAccount" : { string ( reqJSON ) } ,
}
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/loyalty/account/%d/edit" , 13 ) ) .
BodyString ( p . Encode ( ) ) .
Reply ( http . StatusOK ) .
JSON ( getLoyaltyAccountEditResponse ( ) )
res , status , err := client ( ) . LoyaltyAccountEdit ( 13 , req )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
}
func TestClient_LoyaltyAccountEditFail ( t * testing . T ) {
defer gock . Off ( )
acc := getLoyaltyAccountCreate ( )
acc . PhoneNumber = "89142221020"
req := SerializedEditLoyaltyAccount { acc . SerializedBaseLoyaltyAccount }
reqJSON , _ := json . Marshal ( req )
p := url . Values {
"loyaltyAccount" : { string ( reqJSON ) } ,
}
gock . New ( crmURL ) .
Post ( fmt . Sprintf ( "/loyalty/account/%d/edit" , 13 ) ) .
BodyString ( p . Encode ( ) ) .
Reply ( http . StatusInternalServerError ) .
JSON ( ` { "success":false,"errorMsg":"Something went wrong"} ` )
res , status , err := client ( ) . LoyaltyAccountEdit ( 13 , req )
if err == nil {
t . Error ( "Expected error" )
}
if status != http . StatusInternalServerError {
t . Errorf ( "%v" , err )
}
if res . Success != false {
t . Error ( successFail )
}
}
func TestClient_LoyaltyAccount ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( prefix + fmt . Sprintf ( "/loyalty/account/%d" , 13 ) ) .
Reply ( http . StatusOK ) .
JSON ( getLoyaltyAccountResponse ( ) )
res , status , err := client ( ) . LoyaltyAccount ( 13 )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
assert . NotEmpty ( t , res . LoyaltyAccount . ID )
assert . NotEmpty ( t , res . LoyaltyAccount . Loyalty )
assert . NotEmpty ( t , res . LoyaltyAccount . Customer )
assert . NotEmpty ( t , res . LoyaltyAccount . PhoneNumber )
assert . NotEmpty ( t , res . LoyaltyAccount . NextLevelSum )
assert . NotEmpty ( t , res . LoyaltyAccount . LoyaltyLevel )
assert . NotEmpty ( t , res . LoyaltyAccount . CreatedAt )
assert . NotEmpty ( t , res . LoyaltyAccount . ActivatedAt )
assert . NotEmpty ( t , res . LoyaltyAccount . Status )
}
func TestClient_LoyaltyAccountActivate ( t * testing . T ) {
defer gock . Off ( )
var resp LoyaltyAccountActivateResponse
err := json . Unmarshal ( [ ] byte ( getLoyaltyAccountResponse ( ) ) , & resp )
assert . NoError ( t , err )
resp . Verification = SmsVerification {
CreatedAt : "2022-11-24 12:39:37" ,
ExpiredAt : "2022-11-24 12:39:37" ,
VerifiedAt : "2022-11-24 13:39:37" ,
CheckID : "test" ,
ActionType : "test" ,
}
gock . New ( crmURL ) .
Post ( prefix + fmt . Sprintf ( "/loyalty/account/%d/activate" , 13 ) ) .
Body ( strings . NewReader ( "" ) ) .
Reply ( http . StatusOK ) .
JSON ( resp )
res , status , err := client ( ) . LoyaltyAccountActivate ( 13 )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
assert . NotEmpty ( t , res . LoyaltyAccount . ID )
assert . NotEmpty ( t , res . LoyaltyAccount . Loyalty )
assert . NotEmpty ( t , res . LoyaltyAccount . Customer )
assert . NotEmpty ( t , res . LoyaltyAccount . PhoneNumber )
assert . NotEmpty ( t , res . LoyaltyAccount . NextLevelSum )
assert . NotEmpty ( t , res . LoyaltyAccount . LoyaltyLevel )
assert . NotEmpty ( t , res . LoyaltyAccount . CreatedAt )
assert . NotEmpty ( t , res . LoyaltyAccount . ActivatedAt )
assert . NotEmpty ( t , res . LoyaltyAccount . Status )
assert . NotEmpty ( t , res . Verification )
}
func TestClient_LoyaltyBonusCredit ( t * testing . T ) {
defer gock . Off ( )
req := LoyaltyBonusCreditRequest {
Amount : 120 ,
ExpiredDate : "2023-11-24 12:39:37" ,
Comment : "Test" ,
}
body , err := query . Values ( req )
assert . NoError ( t , err )
gock . New ( crmURL ) .
Post ( prefix + fmt . Sprintf ( "/loyalty/account/%d/bonus/credit" , 13 ) ) .
BodyString ( body . Encode ( ) ) .
Reply ( http . StatusOK ) .
JSON ( ` {
"success" : true ,
"loyaltyBonus" : {
"amount" : 120 ,
"expiredDate" : "2023-11-24 12:39:37"
}
} ` )
res , status , err := client ( ) . LoyaltyBonusCredit ( 13 , req )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
}
func TestClient_LoyaltyBonusCreditFail ( t * testing . T ) {
defer gock . Off ( )
req := LoyaltyBonusCreditRequest {
Amount : 120 ,
ExpiredDate : "2023-11-24 12:39:37" ,
Comment : "Test" ,
}
body , err := query . Values ( req )
assert . NoError ( t , err )
gock . New ( crmURL ) .
Post ( prefix + fmt . Sprintf ( "/loyalty/account/%d/bonus/credit" , 13 ) ) .
BodyString ( body . Encode ( ) ) .
Reply ( http . StatusInternalServerError ) .
JSON ( ` { "success":false,"errorMsg":"Something went wrong"} ` )
res , status , err := client ( ) . LoyaltyBonusCredit ( 13 , req )
if err == nil {
t . Error ( "Expected error" )
}
if status != http . StatusInternalServerError {
t . Errorf ( "%v" , err )
}
if res . Success != false {
t . Error ( successFail )
}
}
func TestClient_LoyaltyBonusStatusDetails ( t * testing . T ) {
defer gock . Off ( )
req := LoyaltyBonusStatusDetailsRequest {
Limit : 20 ,
Page : 3 ,
}
gock . New ( crmURL ) .
Get ( prefix + fmt . Sprintf ( "/loyalty/account/%d/bonus/%s/details" , 13 , "waiting_activation" ) ) .
MatchParam ( "limit" , strconv . Itoa ( 20 ) ) .
MatchParam ( "page" , strconv . Itoa ( 3 ) ) .
Reply ( http . StatusOK ) .
JSON ( getBonusDetailsResponse ( ) )
res , status , err := client ( ) . LoyaltyBonusStatusDetails ( 13 , "waiting_activation" , req )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
assert . NotEmpty ( t , res . Pagination . TotalCount )
assert . NotEmpty ( t , res . Bonuses )
assert . NotEmpty ( t , res . Statistic . TotalAmount )
}
2022-12-07 17:40:52 +03:00
func TestClient_LoyaltyAccounts ( t * testing . T ) {
2022-12-08 13:32:54 +03:00
defer gock . Off ( )
2022-12-07 17:40:52 +03:00
req := LoyaltyAccountsRequest {
2022-12-08 16:24:52 +03:00
Filter : LoyaltyAccountAPIFilter {
2022-12-07 17:40:52 +03:00
Status : "activated" ,
PhoneNumber : "89185556363" ,
Ids : [ ] int { 14 } ,
Level : 5 ,
Loyalties : [ ] int { 2 } ,
2022-12-08 16:24:52 +03:00
CustomerID : "109" ,
2022-12-07 17:40:52 +03:00
} ,
}
gock . New ( crmURL ) .
Get ( prefix + "/loyalty/accounts" ) .
MatchParams ( map [ string ] string {
"filter[phoneNumber]" : "89185556363" ,
"filter[status]" : "activated" ,
"filter[level]" : "5" ,
"filter[customerId]" : "109" ,
} ) .
Reply ( http . StatusOK ) .
JSON ( getLoyaltyAccountsResponse ( ) )
res , status , err := client ( ) . LoyaltyAccounts ( req )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
assert . Equal ( t , req . Filter . Ids [ 0 ] , res . LoyaltyAccounts [ 0 ] . ID )
assert . Equal ( t , req . Filter . Loyalties [ 0 ] , res . LoyaltyAccounts [ 0 ] . Loyalty . ID )
assert . True ( t , res . LoyaltyAccounts [ 0 ] . Active )
assert . Equal ( t , req . Filter . PhoneNumber , res . LoyaltyAccounts [ 0 ] . PhoneNumber )
assert . Equal ( t , req . Filter . Status , res . LoyaltyAccounts [ 0 ] . Status )
}
2022-12-08 13:32:54 +03:00
func TestClient_LoyaltyCalculate ( t * testing . T ) {
defer gock . Off ( )
req := getLoyaltyCalculateReq ( )
orderJSON , err := json . Marshal ( req . Order )
assert . NoError ( t , err )
p := url . Values {
"site" : { req . Site } ,
"bonuses" : { fmt . Sprintf ( "%f" , req . Bonuses ) } ,
"order" : { string ( orderJSON ) } ,
}
gock . New ( crmURL ) .
Post ( prefix + "/loyalty/calculate" ) .
BodyString ( p . Encode ( ) ) .
Reply ( http . StatusOK ) .
JSON ( getLoyaltyCalculateResponse ( ) )
res , status , err := client ( ) . LoyaltyCalculate ( req )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
assert . Equal ( t , float32 ( 999 ) , res . Order . BonusesCreditTotal )
assert . Equal ( t , float32 ( 10 ) , res . Order . BonusesChargeTotal )
assert . Equal ( t , req . Order . PrivilegeType , res . Order . PrivilegeType )
assert . Equal ( t , float64 ( 9990 ) , res . Order . TotalSumm )
assert . Equal ( t , 13 , res . Order . LoyaltyAccount . ID )
assert . Equal ( t , float64 ( 240 ) , res . Order . LoyaltyAccount . Amount )
assert . Equal ( t , req . Order . Customer . ID , res . Order . Customer . ID )
assert . Equal ( t , float32 ( 999 ) , res . Order . Items [ 0 ] . BonusesCreditTotal )
assert . Equal ( t , float32 ( 10 ) , res . Order . Items [ 0 ] . BonusesChargeTotal )
assert . Equal ( t , req . Order . Items [ 0 ] . PriceType . Code , res . Order . Items [ 0 ] . PriceType . Code )
assert . Equal ( t , req . Order . Items [ 0 ] . InitialPrice , res . Order . Items [ 0 ] . InitialPrice )
assert . Equal ( t , "bonus_charge" , res . Order . Items [ 0 ] . Discounts [ 0 ] . Type )
assert . Equal ( t , float32 ( 10 ) , res . Order . Items [ 0 ] . Discounts [ 0 ] . Amount )
assert . Equal ( t , float64 ( 9990 ) , res . Order . Items [ 0 ] . Prices [ 0 ] . Price )
assert . Equal ( t , float32 ( 1 ) , res . Order . Items [ 0 ] . Prices [ 0 ] . Quantity )
assert . Equal ( t , float32 ( 1 ) , res . Order . Items [ 0 ] . Quantity )
assert . Equal ( t , "696999ed-bc8d-4d0f-9627-527acf7b1d57" , res . Order . Items [ 0 ] . Offer . XMLID )
assert . Equal ( t , req . Order . PrivilegeType , res . Calculations [ 0 ] . PrivilegeType )
assert . Equal ( t , req . Bonuses , res . Calculations [ 0 ] . Discount )
assert . Equal ( t , float32 ( 999 ) , res . Calculations [ 0 ] . CreditBonuses )
assert . Equal ( t , float32 ( 240 ) , res . Calculations [ 0 ] . MaxChargeBonuses )
assert . Equal ( t , float32 ( 240 ) , res . Calculations [ 0 ] . MaxChargeBonuses )
assert . Equal ( t , "Бонусная программа" , res . Loyalty . Name )
assert . Equal ( t , float32 ( 1 ) , res . Loyalty . ChargeRate )
}
func TestClient_GetLoyalties ( t * testing . T ) {
defer gock . Off ( )
active := new ( int )
* active = 1
req := LoyaltiesRequest {
2022-12-08 16:24:52 +03:00
Filter : LoyaltyAPIFilter {
2022-12-08 13:32:54 +03:00
Active : active ,
Ids : [ ] int { 2 } ,
Sites : [ ] string { "main" } ,
} ,
}
gock . New ( crmURL ) .
Get ( prefix + "/loyalty/loyalties" ) .
MatchParams ( map [ string ] string {
"filter[active]" : "1" ,
"filter[sites][]" : "main" ,
"filter[ids][]" : "2" ,
} ) .
Reply ( http . StatusOK ) .
JSON ( getLoyaltiesResponse ( ) )
res , status , err := client ( ) . GetLoyalties ( req )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
assert . NotEmpty ( t , res . Pagination )
assert . True ( t , res . Loyalties [ 0 ] . Active )
assert . False ( t , res . Loyalties [ 0 ] . Blocked )
assert . Equal ( t , 2 , res . Loyalties [ 0 ] . ID )
assert . Equal ( t , "Бонусная программа" , res . Loyalties [ 0 ] . Name )
assert . False ( t , res . Loyalties [ 0 ] . ConfirmSmsCharge )
assert . False ( t , res . Loyalties [ 0 ] . ConfirmSmsCharge )
assert . NotEmpty ( t , res . Loyalties [ 0 ] . CreatedAt )
assert . NotEmpty ( t , res . Loyalties [ 0 ] . ActivatedAt )
}
func TestClient_GetLoyaltyById ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( prefix + "/loyalty/loyalties/2" ) .
Reply ( http . StatusOK ) .
JSON ( getLoyaltyResponse ( ) )
2022-12-08 16:24:52 +03:00
res , status , err := client ( ) . GetLoyaltyByID ( 2 )
2022-12-08 13:32:54 +03:00
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
assert . True ( t , res . Loyalty . Active )
assert . False ( t , res . Loyalty . Blocked )
assert . Equal ( t , 2 , res . Loyalty . ID )
assert . Equal ( t , 4 , len ( res . Loyalty . LoyaltyLevels ) )
assert . Equal ( t , "Бонусная программа" , res . Loyalty . Name )
assert . False ( t , res . Loyalty . ConfirmSmsCharge )
assert . False ( t , res . Loyalty . ConfirmSmsCharge )
assert . NotEmpty ( t , res . Loyalty . CreatedAt )
assert . NotEmpty ( t , res . Loyalty . ActivatedAt )
}
func TestClient_OrderIntegrationDeliveryCancel ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Post ( prefix + "/orders/123/delivery/cancel" ) .
MatchParams ( map [ string ] string {
"by" : "id" ,
"force" : "true" ,
} ) .
Reply ( http . StatusOK ) .
JSON ( ` { "success":true} ` )
res , status , err := client ( ) . OrderIntegrationDeliveryCancel ( "id" , true , "123" )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
}
2022-12-08 16:24:52 +03:00
func TestClient_CreateProductsGroup ( t * testing . T ) {
defer gock . Off ( )
group := ProductGroup {
ParentID : 19 ,
Name : "Подкатегория хлама" ,
Site : "main" ,
Active : true ,
Description : "Н у и хлам!" ,
ExternalID : "ti22" ,
}
body , err := json . Marshal ( group )
assert . NoError ( t , err )
p := url . Values {
"productGroup" : { string ( body ) } ,
}
gock . New ( crmURL ) .
Post ( prefix + "/store/product-groups/create" ) .
BodyString ( p . Encode ( ) ) .
Reply ( http . StatusCreated ) .
JSON ( ` { "success":true,"id":32} ` )
res , status , err := client ( ) . CreateProductsGroup ( group )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
assert . Equal ( t , 32 , res . ID )
}
func TestClient_EditProductsGroup ( t * testing . T ) {
defer gock . Off ( )
group := ProductGroup {
Name : "Ценнейший хлам из хламов" ,
Active : true ,
ExternalID : "ti22" ,
}
body , err := json . Marshal ( group )
assert . NoError ( t , err )
p := url . Values {
"by" : { "id" } ,
"site" : { "main" } ,
"productGroup" : { string ( body ) } ,
}
gock . New ( crmURL ) .
Post ( prefix + "/store/product-groups/32/edit" ) .
BodyString ( p . Encode ( ) ) .
Reply ( http . StatusOK ) .
JSON ( ` { "success":true,"id":32} ` )
res , status , err := client ( ) . EditProductsGroup ( "id" , "32" , "main" , group )
if err != nil {
t . Errorf ( "%v" , err )
}
if ! statuses [ status ] {
t . Errorf ( "%v" , err )
}
if res . Success != true {
t . Errorf ( "%v" , err )
}
assert . Equal ( t , 32 , res . ID )
}
func TestClient_GetOrderPlate ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( prefix + "/orders/124/plates/1/print" ) .
MatchParams ( map [ string ] string {
"by" : "id" ,
"site" : "main" ,
} ) .
Reply ( 200 ) .
2022-12-09 11:38:21 +03:00
Body ( ioutil . NopCloser ( strings . NewReader ( "PDF" ) ) )
2022-12-08 16:24:52 +03:00
data , status , err := client ( ) . GetOrderPlate ( "id" , "124" , "main" , 1 )
if err != nil {
t . Errorf ( "%v" , err )
}
assert . NotNil ( t , data )
assert . Equal ( t , status , http . StatusOK )
}
func TestClient_GetOrderPlateFail ( t * testing . T ) {
defer gock . Off ( )
gock . New ( crmURL ) .
Get ( prefix + "/orders/124/plates/1/print" ) .
MatchParams ( map [ string ] string {
"by" : "id" ,
"site" : "main" ,
} ) .
Reply ( 404 ) .
JSON ( ` {
"success" : false ,
"errorMsg" : "Not found"
} ` )
data , status , err := client ( ) . GetOrderPlate ( "id" , "124" , "main" , 1 )
if err == nil {
t . Error ( "Expected error" )
}
assert . Nil ( t , data )
assert . Equal ( t , status , http . StatusNotFound )
assert . Equal ( t , "Not found" , err . ( APIError ) . Error ( ) ) //nolint:errorlint
}