Adding functionality from recent updates to the library

This commit is contained in:
Danila 2023-09-05 18:09:36 +03:00
parent 5c6d2ebead
commit ab648cd06a
5 changed files with 101 additions and 85 deletions

1
api-client-go Submodule

@ -0,0 +1 @@
Subproject commit 5c6d2ebead217f5916767a9a542117fa496c677b

View File

@ -2136,10 +2136,14 @@ func (c *Client) IntegrationModule(code string) (IntegrationModuleResponse, int,
func (c *Client) LinksCreate(link SerializedOrderLink, site ...string) (SuccessfulResponse, int, error) {
var resp SuccessfulResponse
linkJson, _ := json.Marshal(link)
linkJSON, err := json.Marshal(link)
if err != nil {
return resp, http.StatusBadRequest, err
}
p := url.Values{
"link": {string(linkJson)},
"link": {string(linkJSON)},
}
fillSite(&p, site)
@ -2166,7 +2170,7 @@ func (c *Client) LinksCreate(link SerializedOrderLink, site ...string) (Successf
//
// var client = retailcrm.New("https://demo.url", "09jIJ")
//
// data, status, err := client.ClientIdsUpload([]retailcrm.ClientId{
// data, status, err := client.ClientIdsUpload([]retailcrm.ClientID{
// {
// Value: "value",
// Order: LinkedOrder{ID: 10, ExternalID: "externalID", Number: "number"},
@ -2192,9 +2196,13 @@ func (c *Client) LinksCreate(link SerializedOrderLink, site ...string) (Successf
// if data.Success == true {
// log.Println("Upload is successful")
// }
func (c *Client) ClientIdsUpload(clientIds []ClientId) (ClientIdResponse, int, error) {
var resp ClientIdResponse
clientIdsJSON, _ := json.Marshal(&clientIds)
func (c *Client) ClientIdsUpload(clientIds []ClientID) (ClientIDResponse, int, error) {
var resp ClientIDResponse
clientIdsJSON, err := json.Marshal(&clientIds)
if err != nil {
return resp, http.StatusBadRequest, err
}
p := url.Values{
"clientIds": {string(clientIdsJSON)},
@ -2228,7 +2236,7 @@ func (c *Client) ClientIdsUpload(clientIds []ClientId) (ClientIdResponse, int, e
// Campaign: "campaign",
// Keyword: "keyword",
// Content: "content",
// ClientId: "10",
// ClientID: "10",
// Order: LinkedOrder{ID: 10, ExternalID: "externalId", Number: "number"},
// Customer: SerializedEntityCustomer{ID: 10, ExternalID: "externalId"},
// Site: "site",
@ -2248,7 +2256,11 @@ func (c *Client) ClientIdsUpload(clientIds []ClientId) (ClientIdResponse, int, e
// }
func (c *Client) SourcesUpload(sources []Source) (SourcesResponse, int, error) {
var resp SourcesResponse
sourcesJSON, _ := json.Marshal(&sources)
sourcesJSON, err := json.Marshal(&sources)
if err != nil {
return resp, http.StatusBadRequest, err
}
p := url.Values{
"sources": {string(sourcesJSON)},
@ -2335,7 +2347,11 @@ func (c *Client) Currencies() (CurrencyResponse, int, error) {
// }
func (c *Client) CurrenciesCreate(currency Currency) (CurrencyCreateResponse, int, error) {
var resp CurrencyCreateResponse
currencyJSON, _ := json.Marshal(&currency)
currencyJSON, err := json.Marshal(&currency)
if err != nil {
return resp, http.StatusBadRequest, err
}
p := url.Values{
"currency": {string(currencyJSON)},
@ -2388,7 +2404,11 @@ func (c *Client) CurrenciesEdit(currency Currency) (SuccessfulResponse, int, err
var resp SuccessfulResponse
var uid = strconv.Itoa(currency.ID)
currencyJSON, _ := json.Marshal(&currency)
currencyJSON, err := json.Marshal(&currency)
if err != nil {
return resp, http.StatusBadRequest, err
}
p := url.Values{
"currency": {string(currencyJSON)},

View File

@ -1998,10 +1998,10 @@ func TestClient_LinksCreate(t *testing.T) {
Orders: orders,
}
linkJson, _ := json.Marshal(link)
linkJSON, _ := json.Marshal(link)
p := url.Values{
"link": {string(linkJson)},
"link": {string(linkJSON)},
}
defer gock.Off()
@ -2028,10 +2028,45 @@ func TestClient_LinksCreate(t *testing.T) {
}
}
func TestClient_LinksCreate_Fail(t *testing.T) {
c := client()
orders := []LinkedOrder{{ID: 10}}
link := SerializedOrderLink{
Comment: "comment",
Orders: orders,
}
linkJSON, _ := json.Marshal(link)
p := url.Values{
"link": {string(linkJSON)},
}
defer gock.Off()
gock.New(crmURL).
Post("/links/create").
BodyString(p.Encode()).
Reply(400).
BodyString(`{"errorMsg": "Errors in the entity format", errors: [orders: "This collection should contain 2 elements or more."}`)
data, _, err := c.LinksCreate(link)
if err == nil {
t.Error("Error must be return")
}
if data.Success != false {
t.Error(successFail)
}
}
func TestClient_ClientIdsUpload(t *testing.T) {
c := client()
clientIds := []ClientId{
clientIds := []ClientID{
{
Value: "value",
Order: LinkedOrder{ID: 10, ExternalID: "externalID", Number: "number"},
@ -2078,18 +2113,11 @@ func TestClient_ClientIdsUpload(t *testing.T) {
func TestClient_ClientIdsUpload_Fail(t *testing.T) {
c := client()
clientIds := []ClientId{
clientIds := []ClientID{
{
Value: "value",
Order: LinkedOrder{ID: 10, ExternalID: "externalID", Number: "number"},
Order: LinkedOrder{ID: 10},
Customer: SerializedEntityCustomer{},
Site: "site",
},
{
Value: "value2",
Order: LinkedOrder{ID: 12, ExternalID: "externalID2", Number: "number2"},
Customer: SerializedEntityCustomer{ID: 12, ExternalID: "externalID2"},
Site: "site2",
},
}
@ -2103,22 +2131,11 @@ func TestClient_ClientIdsUpload_Fail(t *testing.T) {
gock.New(crmURL).
Post("/web-analytics/client-ids/upload").
BodyString(p.Encode()).
Reply(460).
Reply(400).
BodyString(`
{
"success": false,
"failedClientIds": {
"value": "value",
"order": {
"id": 10,
"externalID": "externalID",
"number": "number"
},
"customer": {}.
"site": "site2"
},
"errorMsg": "customer is required",
"errors": [460]
"errorMsg": "ClientIds are loaded with errors",
"errors": [0: "customer: Set one of the following fields: id, externalId"]
}
`)
@ -2143,7 +2160,7 @@ func TestClient_SourcesUpload(t *testing.T) {
Campaign: "campaign",
Keyword: "keyword",
Content: "content",
ClientId: "10",
ClientID: "10",
Order: LinkedOrder{ID: 10, ExternalID: "externalId", Number: "number"},
Customer: SerializedEntityCustomer{ID: 10, ExternalID: "externalId"},
Site: "site",
@ -2189,19 +2206,8 @@ func TestClient_SourcesUpload_Fail(t *testing.T) {
Campaign: "campaign",
Keyword: "keyword",
Content: "content",
ClientId: "10",
ClientID: "12",
Order: LinkedOrder{ID: 10, ExternalID: "externalId", Number: "number"},
Customer: SerializedEntityCustomer{ID: 10, ExternalID: "externalId"},
Site: "site",
},
{
Source: "source",
Medium: "medium",
Campaign: "campaign",
Keyword: "keyword",
Content: "content",
ClientId: "12",
Order: LinkedOrder{},
Customer: SerializedEntityCustomer{},
Site: "site",
},
@ -2216,22 +2222,11 @@ func TestClient_SourcesUpload_Fail(t *testing.T) {
gock.New(crmURL).
Post("/web-analytics/sources/upload").
BodyString(p.Encode()).
Reply(460).
Reply(400).
BodyString(`
{
"success": false,
"failedSources": {
"source": "source",
"medium": "medium",
"campaign": "campaign",
"keyword": "keyword",
"content": "content",
"order": {},
"customer": {}.
"site": "sitey"
},
"errorMsg": "order and customer is required",
"errors": [460]
"errorMsg": "ClientIds are loaded with errors",
"errors": [0: "customer: Set one of the following fields: id, externalId"]
}
`)
@ -2325,7 +2320,7 @@ func TestClient_CurrenciesCreate(t *testing.T) {
currency := Currency{
ID: 10,
Code: "code",
Code: "RUB",
IsBase: true,
IsAutoConvert: true,
AutoConvertExtraPercent: 1,

View File

@ -596,18 +596,18 @@ type AccountBonusOperationsResponse struct {
BonusOperations []BonusOperation `json:"bonusOperations,omitempty"`
}
// ClientIdResponse type
type ClientIdResponse struct {
Success bool `json:"success"`
FailedClientIds []ClientId `json:"failed_client_ids,omitempty"`
// ClientIDResponse type.
type ClientIDResponse struct {
ErrorMsg string `json:"errorMsg,omitempty"`
Errors map[string]string `json:"errors,omitempty"`
FailedClientIds []ClientID `json:"failed_client_ids,omitempty"`
Success bool `json:"success"`
}
// SourcesResponse type
type SourcesResponse struct {
Success bool `json:"success"`
FailedSources []Source `json:"failed_sources,omitempty"`
FailedSources []Source `json:"failedSources,omitempty"`
ErrorMsg string `json:"errorMsg,omitempty"`
Errors map[string]string `json:"errors,omitempty"`
}

View File

@ -69,7 +69,7 @@ type Source struct {
Campaign string `json:"campaign,omitempty"`
Keyword string `json:"keyword,omitempty"`
Content string `json:"content,omitempty"`
ClientId string `json:"client_id,omitempty"`
ClientID string `json:"client_id,omitempty"`
Order LinkedOrder `json:"order,omitempty"`
Customer SerializedEntityCustomer `json:"customer,omitempty"`
Site string `json:"site,omitempty"`
@ -352,45 +352,45 @@ type Order struct {
Currency string `json:"currency,omitempty"`
}
// LinkedOrder type
// LinkedOrder type.
type LinkedOrder struct {
ID int `json:"id,omitempty"`
Number string `json:"number,omitempty"`
ExternalID string `json:"externalID,omitempty"`
ID int `json:"id,omitempty"`
}
// OrderLink type
// OrderLink type.
type OrderLink struct {
Comment string `json:"comment,omitempty"`
Order LinkedOrder `json:"order,omitempty"`
CreatedAt string `json:"createdAt,omitempty"`
Order LinkedOrder `json:"order,omitempty"`
}
// SerializedOrderLink type
// SerializedOrderLink type.
type SerializedOrderLink struct {
Comment string `json:"comment,omitempty"`
Orders []LinkedOrder `json:"orders,omitempty"`
CreatedAt string `json:"createdAt,omitempty"`
Orders []LinkedOrder `json:"orders,omitempty"`
}
// ClientId type
type ClientId struct {
// ClientID type.
type ClientID struct {
Value string `json:"value"`
CreateAt string `json:"createAt,omitempty"`
Order LinkedOrder `json:"order,omitempty"`
Customer SerializedEntityCustomer `json:"customer,omitempty"`
Site string `json:"site,omitempty"`
Customer SerializedEntityCustomer `json:"customer,omitempty"`
Order LinkedOrder `json:"order,omitempty"`
}
// Currency type
// Currency type.
type Currency struct {
ID int `json:"id,omitempty"`
Code string `json:"code,omitempty"`
ID int `json:"id,omitempty"`
ManualConvertNominal int `json:"manualConvertNominal,omitempty"`
AutoConvertExtraPercent int `json:"autoConvertExtraPercent,omitempty"`
IsBase bool `json:"isBase,omitempty"`
IsAutoConvert bool `json:"isAutoConvert,omitempty"`
AutoConvertExtraPercent int `json:"autoConvertExtraPercent,omitempty"`
ManualConvertNominal int `json:"manualConvertNominal,omitempty"`
ManualConvertValue float64 `json:"manualConvertValue,omitempty"`
ManualConvertValue float32 `json:"manualConvertValue,omitempty"`
}
// OrdersStatus type.