mirror of
https://github.com/retailcrm/api-client-go.git
synced 2024-11-22 04:46:03 +03:00
refactoring
correct example for methods fix linters error add `/api/v5/orders/{externalId}/delivery/cancel`, `/api/v5/store/product-groups/create`, `/api/v5/store/product-groups/{externalId}/edit`
This commit is contained in:
parent
ddc2b3f785
commit
1bd5b77b3f
5
.github/workflows/ci.yml
vendored
5
.github/workflows/ci.yml
vendored
@ -34,6 +34,7 @@ jobs:
|
|||||||
version: v1.45.2
|
version: v1.45.2
|
||||||
only-new-issues: true
|
only-new-issues: true
|
||||||
skip-pkg-cache: true
|
skip-pkg-cache: true
|
||||||
|
args: --build-tags=testutils
|
||||||
tests:
|
tests:
|
||||||
name: Tests
|
name: Tests
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@ -58,13 +59,13 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
COVERAGE: ${{ matrix.coverage }}
|
COVERAGE: ${{ matrix.coverage }}
|
||||||
if: env.COVERAGE != 1
|
if: env.COVERAGE != 1
|
||||||
run: go test ./...
|
run: go test -tags=testutils ./...
|
||||||
- name: Tests with coverage
|
- name: Tests with coverage
|
||||||
env:
|
env:
|
||||||
COVERAGE: ${{ matrix.coverage }}
|
COVERAGE: ${{ matrix.coverage }}
|
||||||
if: env.COVERAGE == 1
|
if: env.COVERAGE == 1
|
||||||
run: |
|
run: |
|
||||||
go test ./... -race -coverprofile=coverage.txt -covermode=atomic "$d"
|
go test -tags=testutils ./... -race -coverprofile=coverage.txt -covermode=atomic "$d"
|
||||||
- name: Coverage
|
- name: Coverage
|
||||||
env:
|
env:
|
||||||
COVERAGE: ${{ matrix.coverage }}
|
COVERAGE: ${{ matrix.coverage }}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
run:
|
run:
|
||||||
skip-dirs-use-default: true
|
skip-dirs-use-default: true
|
||||||
allow-parallel-runners: true
|
allow-parallel-runners: true
|
||||||
|
skip-files:
|
||||||
|
- testutils.go
|
||||||
|
|
||||||
output:
|
output:
|
||||||
format: colored-line-number
|
format: colored-line-number
|
||||||
|
226
client.go
226
client.go
@ -5834,7 +5834,7 @@ func (c *Client) LoyaltyAccountCreate(site string, loyaltyAccount SerializedCrea
|
|||||||
// if data.Success == true {
|
// if data.Success == true {
|
||||||
// log.Printf("%v", data.LoyaltyAccount.PhoneNumber)
|
// log.Printf("%v", data.LoyaltyAccount.PhoneNumber)
|
||||||
// }
|
// }
|
||||||
func (c *Client) LoyaltyAccountEdit(ID int, loyaltyAccount SerializedEditLoyaltyAccount) (EditLoyaltyAccountResponse, int, error) {
|
func (c *Client) LoyaltyAccountEdit(id int, loyaltyAccount SerializedEditLoyaltyAccount) (EditLoyaltyAccountResponse, int, error) {
|
||||||
var result EditLoyaltyAccountResponse
|
var result EditLoyaltyAccountResponse
|
||||||
|
|
||||||
loyaltyAccountJSON, _ := json.Marshal(loyaltyAccount)
|
loyaltyAccountJSON, _ := json.Marshal(loyaltyAccount)
|
||||||
@ -5842,7 +5842,7 @@ func (c *Client) LoyaltyAccountEdit(ID int, loyaltyAccount SerializedEditLoyalty
|
|||||||
"loyaltyAccount": {string(loyaltyAccountJSON)},
|
"loyaltyAccount": {string(loyaltyAccountJSON)},
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, status, err := c.PostRequest(fmt.Sprintf("/loyalty/account/%d/edit", ID), p)
|
resp, status, err := c.PostRequest(fmt.Sprintf("/loyalty/account/%d/edit", id), p)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, status, err
|
return result, status, err
|
||||||
@ -5878,10 +5878,10 @@ func (c *Client) LoyaltyAccountEdit(ID int, loyaltyAccount SerializedEditLoyalty
|
|||||||
// if data.Success == true {
|
// if data.Success == true {
|
||||||
// log.Printf("%v", data.LoyaltyAccount.PhoneNumber)
|
// log.Printf("%v", data.LoyaltyAccount.PhoneNumber)
|
||||||
// }
|
// }
|
||||||
func (c *Client) LoyaltyAccount(ID int) (LoyaltyAccountResponse, int, error) {
|
func (c *Client) LoyaltyAccount(id int) (LoyaltyAccountResponse, int, error) {
|
||||||
var result LoyaltyAccountResponse
|
var result LoyaltyAccountResponse
|
||||||
|
|
||||||
resp, status, err := c.GetRequest(fmt.Sprintf("/loyalty/account/%d", ID))
|
resp, status, err := c.GetRequest(fmt.Sprintf("/loyalty/account/%d", id))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, status, err
|
return result, status, err
|
||||||
@ -5917,10 +5917,10 @@ func (c *Client) LoyaltyAccount(ID int) (LoyaltyAccountResponse, int, error) {
|
|||||||
// if data.Success == true {
|
// if data.Success == true {
|
||||||
// log.Printf("%v", data.LoyaltyAccount.Active)
|
// log.Printf("%v", data.LoyaltyAccount.Active)
|
||||||
// }
|
// }
|
||||||
func (c *Client) LoyaltyAccountActivate(ID int) (LoyaltyAccountActivateResponse, int, error) {
|
func (c *Client) LoyaltyAccountActivate(id int) (LoyaltyAccountActivateResponse, int, error) {
|
||||||
var result LoyaltyAccountActivateResponse
|
var result LoyaltyAccountActivateResponse
|
||||||
|
|
||||||
resp, status, err := c.PostRequest(fmt.Sprintf("/loyalty/account/%d/activate", ID), strings.NewReader(""))
|
resp, status, err := c.PostRequest(fmt.Sprintf("/loyalty/account/%d/activate", id), strings.NewReader(""))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, status, err
|
return result, status, err
|
||||||
@ -5962,11 +5962,11 @@ func (c *Client) LoyaltyAccountActivate(ID int) (LoyaltyAccountActivateResponse,
|
|||||||
// if data.Success == true {
|
// if data.Success == true {
|
||||||
// log.Printf("%v", data.LoyaltyBonus.ActivationDate)
|
// log.Printf("%v", data.LoyaltyBonus.ActivationDate)
|
||||||
// }
|
// }
|
||||||
func (c *Client) LoyaltyBonusCredit(ID int, req LoyaltyBonusCreditRequest) (LoyaltyBonusCreditResponse, int, error) {
|
func (c *Client) LoyaltyBonusCredit(id int, req LoyaltyBonusCreditRequest) (LoyaltyBonusCreditResponse, int, error) {
|
||||||
var result LoyaltyBonusCreditResponse
|
var result LoyaltyBonusCreditResponse
|
||||||
p, _ := query.Values(req)
|
p, _ := query.Values(req)
|
||||||
|
|
||||||
resp, status, err := c.PostRequest(fmt.Sprintf("/loyalty/account/%d/bonus/credit", ID), p)
|
resp, status, err := c.PostRequest(fmt.Sprintf("/loyalty/account/%d/bonus/credit", id), p)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, status, err
|
return result, status, err
|
||||||
@ -6010,13 +6010,13 @@ func (c *Client) LoyaltyBonusCredit(ID int, req LoyaltyBonusCreditRequest) (Loya
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
func (c *Client) LoyaltyBonusStatusDetails(
|
func (c *Client) LoyaltyBonusStatusDetails(
|
||||||
ID int, statusType string, request LoyaltyBonusStatusDetailsRequest,
|
id int, statusType string, request LoyaltyBonusStatusDetailsRequest,
|
||||||
) (LoyaltyBonusDetailsResponse, int, error) {
|
) (LoyaltyBonusDetailsResponse, int, error) {
|
||||||
var result LoyaltyBonusDetailsResponse
|
var result LoyaltyBonusDetailsResponse
|
||||||
|
|
||||||
p, _ := query.Values(request)
|
p, _ := query.Values(request)
|
||||||
|
|
||||||
resp, status, err := c.GetRequest(fmt.Sprintf("/loyalty/account/%d/bonus/%s/details?%s", ID, statusType, p.Encode()))
|
resp, status, err := c.GetRequest(fmt.Sprintf("/loyalty/account/%d/bonus/%s/details?%s", id, statusType, p.Encode()))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, status, err
|
return result, status, err
|
||||||
@ -6040,13 +6040,13 @@ func (c *Client) LoyaltyBonusStatusDetails(
|
|||||||
// var client = retailcrm.New("https://demo.url", "09jIJ")
|
// var client = retailcrm.New("https://demo.url", "09jIJ")
|
||||||
//
|
//
|
||||||
// req := LoyaltyAccountsRequest{
|
// req := LoyaltyAccountsRequest{
|
||||||
// Filter: LoyaltyAccountApiFilter{
|
// Filter: LoyaltyAccountAPIFilter{
|
||||||
// Status: "activated",
|
// Status: "activated",
|
||||||
// PhoneNumber: "89185556363",
|
// PhoneNumber: "89185556363",
|
||||||
// Ids: []int{14},
|
// Ids: []int{14},
|
||||||
// Level: 5,
|
// Level: 5,
|
||||||
// Loyalties: []int{2},
|
// Loyalties: []int{2},
|
||||||
// CustomerId: "109",
|
// CustomerID: "109",
|
||||||
// },
|
// },
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
@ -6129,7 +6129,7 @@ func (c *Client) LoyaltyAccounts(req LoyaltyAccountsRequest) (LoyaltyAccountsRes
|
|||||||
func (c *Client) LoyaltyCalculate(req LoyaltyCalculateRequest) (LoyaltyCalculateResponse, int, error) {
|
func (c *Client) LoyaltyCalculate(req LoyaltyCalculateRequest) (LoyaltyCalculateResponse, int, error) {
|
||||||
var result LoyaltyCalculateResponse
|
var result LoyaltyCalculateResponse
|
||||||
|
|
||||||
orderJSON, err := json.Marshal(req.Order)
|
orderJSON, _ := json.Marshal(req.Order)
|
||||||
|
|
||||||
p := url.Values{
|
p := url.Values{
|
||||||
"site": {req.Site},
|
"site": {req.Site},
|
||||||
@ -6152,7 +6152,7 @@ func (c *Client) LoyaltyCalculate(req LoyaltyCalculateRequest) (LoyaltyCalculate
|
|||||||
return result, status, nil
|
return result, status, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetLoyalties calculations of the maximum discount
|
// GetLoyalties returns list of loyalty programs
|
||||||
//
|
//
|
||||||
// For more information see https://docs.retailcrm.ru/Developers/API/APIVersions/APIv5#get--api-v5-loyalty-loyalties
|
// For more information see https://docs.retailcrm.ru/Developers/API/APIVersions/APIv5#get--api-v5-loyalty-loyalties
|
||||||
//
|
//
|
||||||
@ -6161,7 +6161,7 @@ func (c *Client) LoyaltyCalculate(req LoyaltyCalculateRequest) (LoyaltyCalculate
|
|||||||
// var client = retailcrm.New("https://demo.url", "09jIJ")
|
// var client = retailcrm.New("https://demo.url", "09jIJ")
|
||||||
//
|
//
|
||||||
// req := LoyaltiesRequest{
|
// req := LoyaltiesRequest{
|
||||||
// Filter: LoyaltyApiFilter{
|
// Filter: LoyaltyAPIFilter{
|
||||||
// Active: active,
|
// Active: active,
|
||||||
// Ids: []int{2},
|
// Ids: []int{2},
|
||||||
// Sites: []string{"main"},
|
// Sites: []string{"main"},
|
||||||
@ -6204,15 +6204,15 @@ func (c *Client) GetLoyalties(req LoyaltiesRequest) (LoyaltiesResponse, int, err
|
|||||||
return result, status, nil
|
return result, status, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetLoyaltyById calculations of the maximum discount
|
// GetLoyaltyByID return program of loyalty by id
|
||||||
//
|
//
|
||||||
// For more information see https://docs.retailcrm.ru/Developers/API/APIVersions/APIv5#get--api-v5-loyalty-loyalties
|
// For more information see https://docs.retailcrm.ru/Developers/API/APIVersions/APIv5#get--api-v5-loyalty-loyalties-id
|
||||||
//
|
//
|
||||||
// Example:
|
// Example:
|
||||||
//
|
//
|
||||||
// var client = retailcrm.New("https://demo.url", "09jIJ")
|
// var client = retailcrm.New("https://demo.url", "09jIJ")
|
||||||
//
|
//
|
||||||
// data, status, err := client.GetLoyaltyById(2)
|
// data, status, err := client.GetLoyaltyByID(2)
|
||||||
//
|
//
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// if apiErr, ok := retailcrm.AsAPIError(err); ok {
|
// if apiErr, ok := retailcrm.AsAPIError(err); ok {
|
||||||
@ -6226,10 +6226,10 @@ func (c *Client) GetLoyalties(req LoyaltiesRequest) (LoyaltiesResponse, int, err
|
|||||||
// log.Printf("%v", res.Loyalty.ID)
|
// log.Printf("%v", res.Loyalty.ID)
|
||||||
// log.Printf("%v", res.Loyalty.Active)
|
// log.Printf("%v", res.Loyalty.Active)
|
||||||
// }
|
// }
|
||||||
func (c *Client) GetLoyaltyById(ID int) (LoyaltyResponse, int, error) {
|
func (c *Client) GetLoyaltyByID(id int) (LoyaltyResponse, int, error) {
|
||||||
var result LoyaltyResponse
|
var result LoyaltyResponse
|
||||||
|
|
||||||
resp, status, err := c.GetRequest(fmt.Sprintf("/loyalty/loyalties/%d", ID))
|
resp, status, err := c.GetRequest(fmt.Sprintf("/loyalty/loyalties/%d", id))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, status, err
|
return result, status, err
|
||||||
@ -6244,10 +6244,36 @@ func (c *Client) GetLoyaltyById(ID int) (LoyaltyResponse, int, error) {
|
|||||||
return result, status, nil
|
return result, status, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) OrderIntegrationDeliveryCancel(by string, force bool, ID string) (SuccessfulResponse, int, error) {
|
// OrderIntegrationDeliveryCancel cancels of integration delivery
|
||||||
|
//
|
||||||
|
// For more information see https://docs.retailcrm.ru/Developers/API/APIVersions/APIv5#post--api-v5-orders-externalId-delivery-cancel
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var client = retailcrm.New("https://demo.url", "09jIJ")
|
||||||
|
//
|
||||||
|
// data, status, err := client.OrderIntegrationDeliveryCancel("externalId", false, "1001C")
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// if apiErr, ok := retailcrm.AsAPIError(err); ok {
|
||||||
|
// log.Fatalf("http status: %d, %s", status, apiErr.String())
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// log.Fatalf("http status: %d, error: %s", status, err)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if data.Success == true {
|
||||||
|
// log.Printf("%v", res.Success)
|
||||||
|
// }
|
||||||
|
func (c *Client) OrderIntegrationDeliveryCancel(by string, force bool, id string) (SuccessfulResponse, int, error) {
|
||||||
var result SuccessfulResponse
|
var result SuccessfulResponse
|
||||||
|
|
||||||
resp, status, err := c.PostRequest(fmt.Sprintf("/orders/%s/delivery/cancel?by=%s&force=%t", ID, checkBy(by), force), strings.NewReader(""))
|
p := url.Values{
|
||||||
|
"by": {checkBy(by)},
|
||||||
|
"force": {fmt.Sprintf("%t", force)},
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, status, err := c.PostRequest(fmt.Sprintf("/orders/%s/delivery/cancel?%s", id, p.Encode()), strings.NewReader(""))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, status, err
|
return result, status, err
|
||||||
@ -6261,3 +6287,159 @@ func (c *Client) OrderIntegrationDeliveryCancel(by string, force bool, ID string
|
|||||||
|
|
||||||
return result, status, nil
|
return result, status, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateProductsGroup adds a product group
|
||||||
|
//
|
||||||
|
// For more information see https://docs.retailcrm.ru/Developers/API/APIVersions/APIv5#post--api-v5-store-product-groups-create
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var client = retailcrm.New("https://demo.url", "09jIJ")
|
||||||
|
//
|
||||||
|
// group := ProductGroup{
|
||||||
|
// ParentID: 125,
|
||||||
|
// Name: "Фрукты",
|
||||||
|
// Site: "main",
|
||||||
|
// Active: true,
|
||||||
|
// ExternalID: "abc22",
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// data, status, err := client.CreateProductsGroup(group)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// if apiErr, ok := retailcrm.AsAPIError(err); ok {
|
||||||
|
// log.Fatalf("http status: %d, %s", status, apiErr.String())
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// log.Fatalf("http status: %d, error: %s", status, err)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if data.Success == true {
|
||||||
|
// log.Printf("%v", res.ID)
|
||||||
|
// }
|
||||||
|
func (c *Client) CreateProductsGroup(group ProductGroup) (ActionProductsGroupResponse, int, error) {
|
||||||
|
var result ActionProductsGroupResponse
|
||||||
|
|
||||||
|
groupJSON, _ := json.Marshal(group)
|
||||||
|
|
||||||
|
p := url.Values{
|
||||||
|
"productGroup": {string(groupJSON)},
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, status, err := c.PostRequest("/store/product-groups/create", p)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return result, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal(resp, &result)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return result, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, status, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditProductsGroup edits a product group
|
||||||
|
//
|
||||||
|
// For more information see https://docs.retailcrm.ru/Developers/API/APIVersions/APIv5#post--api-v5-store-product-groups-externalId-edit
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var client = retailcrm.New("https://demo.url", "09jIJ")
|
||||||
|
//
|
||||||
|
// group := ProductGroup{
|
||||||
|
// Name: "Овощи",
|
||||||
|
// Active: true,
|
||||||
|
// ExternalID: "abc22",
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// data, status, err := client.EditProductsGroup("by", "125", "main", group)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// if apiErr, ok := retailcrm.AsAPIError(err); ok {
|
||||||
|
// log.Fatalf("http status: %d, %s", status, apiErr.String())
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// log.Fatalf("http status: %d, error: %s", status, err)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if data.Success == true {
|
||||||
|
// log.Printf("%v", res.ID)
|
||||||
|
// }
|
||||||
|
func (c *Client) EditProductsGroup(by, id, site string, group ProductGroup) (ActionProductsGroupResponse, int, error) {
|
||||||
|
var result ActionProductsGroupResponse
|
||||||
|
|
||||||
|
groupJSON, _ := json.Marshal(group)
|
||||||
|
|
||||||
|
p := url.Values{
|
||||||
|
"by": {checkBy(by)},
|
||||||
|
"site": {site},
|
||||||
|
"productGroup": {string(groupJSON)},
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, status, err := c.PostRequest(fmt.Sprintf("/store/product-groups/%s/edit", id), p)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return result, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal(resp, &result)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return result, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, status, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) GetOrderPlate(by, orderID, site string, plateID int) (io.ReadCloser, int, error) {
|
||||||
|
p := url.Values{
|
||||||
|
"by": {checkBy(by)},
|
||||||
|
"site": {site},
|
||||||
|
}
|
||||||
|
|
||||||
|
requestURL := fmt.Sprintf("%s/api/v5/orders/%s/plates/%d/print?%s", c.URL, orderID, plateID, p.Encode())
|
||||||
|
req, err := http.NewRequest("GET", requestURL, nil)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Set("X-API-KEY", c.Key)
|
||||||
|
|
||||||
|
if c.Debug {
|
||||||
|
c.writeLog("API Request: %s %s", requestURL, c.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := c.httpClient.Do(req)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode >= http.StatusInternalServerError {
|
||||||
|
return nil, resp.StatusCode, CreateGenericAPIError(
|
||||||
|
fmt.Sprintf("HTTP request error. Status code: %d.", resp.StatusCode))
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode >= http.StatusBadRequest && resp.StatusCode < http.StatusInternalServerError {
|
||||||
|
res, err := buildRawResponse(resp)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, resp.StatusCode, CreateAPIError(res)
|
||||||
|
}
|
||||||
|
|
||||||
|
reader := resp.Body
|
||||||
|
err = reader.Close()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return reader, resp.StatusCode, nil
|
||||||
|
}
|
||||||
|
176
client_test.go
176
client_test.go
@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/google/go-querystring/query"
|
"github.com/google/go-querystring/query"
|
||||||
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
@ -523,7 +524,7 @@ func TestClient_CustomersUpload(t *testing.T) {
|
|||||||
func TestClient_CustomersUpload_Fail(t *testing.T) {
|
func TestClient_CustomersUpload_Fail(t *testing.T) {
|
||||||
c := client()
|
c := client()
|
||||||
|
|
||||||
customers := []Customer{{ExternalID: strconv.Itoa(iCodeFail)}}
|
customers := []Customer{{ExternalID: strconv.Itoa(iCodeFail)}, {FirstName: "John"}}
|
||||||
|
|
||||||
defer gock.Off()
|
defer gock.Off()
|
||||||
|
|
||||||
@ -531,13 +532,29 @@ func TestClient_CustomersUpload_Fail(t *testing.T) {
|
|||||||
p := url.Values{
|
p := url.Values{
|
||||||
"customers": {string(str)},
|
"customers": {string(str)},
|
||||||
}
|
}
|
||||||
|
// TODO ???
|
||||||
gock.New(crmURL).
|
gock.New(crmURL).
|
||||||
Post("/api/v5/customers/upload").
|
Post("/api/v5/customers/upload").
|
||||||
MatchType("url").
|
MatchType("url").
|
||||||
BodyString(p.Encode()).
|
BodyString(p.Encode()).
|
||||||
Reply(460).
|
Reply(460).
|
||||||
BodyString(`{"success": false, "errorMsg": "Customers are loaded with ErrorsList"}`)
|
BodyString(fmt.Sprintf(`{
|
||||||
|
"success": false,
|
||||||
|
"uploadedCustomers": [
|
||||||
|
{
|
||||||
|
"id": 132
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"failedCustomers": [
|
||||||
|
{
|
||||||
|
"externalId": "%d"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"errorMsg": "Customers are loaded with errors",
|
||||||
|
"errors": {
|
||||||
|
"managerId": "Something went wrong"
|
||||||
|
}
|
||||||
|
}`, iCodeFail))
|
||||||
|
|
||||||
data, _, err := c.CustomersUpload(customers)
|
data, _, err := c.CustomersUpload(customers)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -5176,9 +5193,19 @@ func TestClient_IntegrationModule(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
integrations, err := json.Marshal(integrationModule.Integrations)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
jsonData := fmt.Sprintf(
|
jsonData := fmt.Sprintf(
|
||||||
`{"code":"%s","integrationCode":"%s","active":false,"name":"%s","logo":"%s","clientId":"%s","baseUrl":"%s","accountUrl":"%s"}`,
|
`{"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,
|
code,
|
||||||
|
code,
|
||||||
|
integrationModule.Name,
|
||||||
|
integrationModule.Logo,
|
||||||
|
integrationModule.ClientID,
|
||||||
|
integrationModule.BaseURL,
|
||||||
|
integrationModule.AccountURL,
|
||||||
|
integrations,
|
||||||
)
|
)
|
||||||
|
|
||||||
pr := url.Values{
|
pr := url.Values{
|
||||||
@ -7302,13 +7329,13 @@ func TestClient_LoyaltyAccounts(t *testing.T) {
|
|||||||
defer gock.Off()
|
defer gock.Off()
|
||||||
|
|
||||||
req := LoyaltyAccountsRequest{
|
req := LoyaltyAccountsRequest{
|
||||||
Filter: LoyaltyAccountApiFilter{
|
Filter: LoyaltyAccountAPIFilter{
|
||||||
Status: "activated",
|
Status: "activated",
|
||||||
PhoneNumber: "89185556363",
|
PhoneNumber: "89185556363",
|
||||||
Ids: []int{14},
|
Ids: []int{14},
|
||||||
Level: 5,
|
Level: 5,
|
||||||
Loyalties: []int{2},
|
Loyalties: []int{2},
|
||||||
CustomerId: "109",
|
CustomerID: "109",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7413,7 +7440,7 @@ func TestClient_GetLoyalties(t *testing.T) {
|
|||||||
*active = 1
|
*active = 1
|
||||||
|
|
||||||
req := LoyaltiesRequest{
|
req := LoyaltiesRequest{
|
||||||
Filter: LoyaltyApiFilter{
|
Filter: LoyaltyAPIFilter{
|
||||||
Active: active,
|
Active: active,
|
||||||
Ids: []int{2},
|
Ids: []int{2},
|
||||||
Sites: []string{"main"},
|
Sites: []string{"main"},
|
||||||
@ -7463,7 +7490,7 @@ func TestClient_GetLoyaltyById(t *testing.T) {
|
|||||||
Reply(http.StatusOK).
|
Reply(http.StatusOK).
|
||||||
JSON(getLoyaltyResponse())
|
JSON(getLoyaltyResponse())
|
||||||
|
|
||||||
res, status, err := client().GetLoyaltyById(2)
|
res, status, err := client().GetLoyaltyByID(2)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%v", err)
|
t.Errorf("%v", err)
|
||||||
@ -7514,3 +7541,134 @@ func TestClient_OrderIntegrationDeliveryCancel(t *testing.T) {
|
|||||||
t.Errorf("%v", err)
|
t.Errorf("%v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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).
|
||||||
|
Body(io.NopCloser(strings.NewReader("PDF")))
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
10
filters.go
10
filters.go
@ -440,11 +440,11 @@ type AccountBonusOperationsFilter struct {
|
|||||||
CreatedAtTo string `url:"createdAtTo,omitempty"`
|
CreatedAtTo string `url:"createdAtTo,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type LoyaltyBonusApiFilterType struct {
|
type LoyaltyBonusAPIFilterType struct {
|
||||||
Date string `url:"date,omitempty"`
|
Date string `url:"date,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type LoyaltyAccountApiFilter struct {
|
type LoyaltyAccountAPIFilter struct {
|
||||||
ID string `url:"id,omitempty"`
|
ID string `url:"id,omitempty"`
|
||||||
Status string `url:"status,,omitempty"`
|
Status string `url:"status,,omitempty"`
|
||||||
Customer string `url:"customer,omitempty"`
|
Customer string `url:"customer,omitempty"`
|
||||||
@ -463,11 +463,11 @@ type LoyaltyAccountApiFilter struct {
|
|||||||
BurnDateFrom string `url:"burnDateFrom,omitempty"`
|
BurnDateFrom string `url:"burnDateFrom,omitempty"`
|
||||||
BurnDateTo string `url:"burnDateTo,omitempty"`
|
BurnDateTo string `url:"burnDateTo,omitempty"`
|
||||||
CustomFields []string `url:"customFields,omitempty,brackets"`
|
CustomFields []string `url:"customFields,omitempty,brackets"`
|
||||||
CustomerId string `url:"customerId,omitempty"`
|
CustomerID string `url:"customerId,omitempty"`
|
||||||
CustomerExternalId string `url:"customerExternalId,omitempty"`
|
CustomerExternalID string `url:"customerExternalId,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type LoyaltyApiFilter struct {
|
type LoyaltyAPIFilter struct {
|
||||||
Active *int `url:"active,omitempty"`
|
Active *int `url:"active,omitempty"`
|
||||||
Blocked *int `url:"blocked,omitempty"`
|
Blocked *int `url:"blocked,omitempty"`
|
||||||
Ids []int `url:"ids,omitempty,brackets"`
|
Ids []int `url:"ids,omitempty,brackets"`
|
||||||
|
@ -256,13 +256,13 @@ type LoyaltyBonusCreditRequest struct {
|
|||||||
type LoyaltyBonusStatusDetailsRequest struct {
|
type LoyaltyBonusStatusDetailsRequest struct {
|
||||||
Limit int `url:"limit,omitempty"`
|
Limit int `url:"limit,omitempty"`
|
||||||
Page int `url:"page,omitempty"`
|
Page int `url:"page,omitempty"`
|
||||||
Filter LoyaltyBonusApiFilterType `url:"filter,omitempty"`
|
Filter LoyaltyBonusAPIFilterType `url:"filter,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type LoyaltyAccountsRequest struct {
|
type LoyaltyAccountsRequest struct {
|
||||||
Limit int `url:"limit,omitempty"`
|
Limit int `url:"limit,omitempty"`
|
||||||
Page int `url:"limit,omitempty"`
|
Page int `url:"limit,omitempty"`
|
||||||
Filter LoyaltyAccountApiFilter `url:"filter,omitempty"`
|
Filter LoyaltyAccountAPIFilter `url:"filter,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type LoyaltyCalculateRequest struct {
|
type LoyaltyCalculateRequest struct {
|
||||||
@ -274,7 +274,7 @@ type LoyaltyCalculateRequest struct {
|
|||||||
type LoyaltiesRequest struct {
|
type LoyaltiesRequest struct {
|
||||||
Limit int `url:"limit,omitempty"`
|
Limit int `url:"limit,omitempty"`
|
||||||
Page int `url:"page,omitempty"`
|
Page int `url:"page,omitempty"`
|
||||||
Filter LoyaltyApiFilter `url:"filter,omitempty"`
|
Filter LoyaltyAPIFilter `url:"filter,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SystemURL returns system URL from the connection request without trailing slash.
|
// SystemURL returns system URL from the connection request without trailing slash.
|
||||||
|
@ -644,3 +644,8 @@ type LoyaltyResponse struct {
|
|||||||
SuccessfulResponse
|
SuccessfulResponse
|
||||||
Loyalty Loyalty `json:"loyalty"`
|
Loyalty Loyalty `json:"loyalty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ActionProductsGroupResponse struct {
|
||||||
|
SuccessfulResponse
|
||||||
|
ID int `json:"id"`
|
||||||
|
}
|
||||||
|
5
types.go
5
types.go
@ -927,7 +927,7 @@ type Site struct {
|
|||||||
DefaultForCRM bool `json:"defaultForCrm,omitempty"`
|
DefaultForCRM bool `json:"defaultForCrm,omitempty"`
|
||||||
Ordering int `json:"ordering,omitempty"`
|
Ordering int `json:"ordering,omitempty"`
|
||||||
IsDemo bool `json:"isDemo,omitempty"`
|
IsDemo bool `json:"isDemo,omitempty"`
|
||||||
CatalogId string `json:"catalogId,omitempty"`
|
CatalogID string `json:"catalogId,omitempty"`
|
||||||
IsCatalogMainSite bool `json:"isCatalogMainSite,omitempty"`
|
IsCatalogMainSite bool `json:"isCatalogMainSite,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -953,6 +953,9 @@ type ProductGroup struct {
|
|||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
Site string `json:"site,omitempty"`
|
Site string `json:"site,omitempty"`
|
||||||
Active bool `json:"active,omitempty"`
|
Active bool `json:"active,omitempty"`
|
||||||
|
Description string `json:"description,omitempty"`
|
||||||
|
ExternalID string `json:"externalId,omitempty"`
|
||||||
|
ParentExternalID string `json:"parentExternalId,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// BaseProduct type.
|
// BaseProduct type.
|
||||||
|
Loading…
Reference in New Issue
Block a user