Skip to content

Commit 18526e1

Browse files
committed
update number
1 parent 8ab04f1 commit 18526e1

19 files changed

+1070
-120
lines changed

number/backorder.go

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package number
2+
3+
import (
4+
"fmt"
5+
messagebird "github.com/messagebird/go-rest-api/v9"
6+
"net/http"
7+
)
8+
9+
type BackOrderID string
10+
11+
type Backorder struct {
12+
ID string
13+
ProductID int
14+
Country string
15+
Prefix string
16+
Status string
17+
ReasonCodes []string
18+
}
19+
20+
type BackorderDocument struct {
21+
ID int
22+
Name string
23+
Description string
24+
Status string
25+
}
26+
27+
type BackorderDocuments struct {
28+
Limit, Count int
29+
Items []*BackorderDocument
30+
}
31+
32+
type EndUserDetail struct {
33+
ID string
34+
Label string
35+
}
36+
37+
type EndUserDetails struct {
38+
Items []*EndUserDetail
39+
}
40+
41+
type PlaceBackorderRequest struct {
42+
ProductID int `json:"productID"`
43+
Prefix string `json:"prefix"`
44+
Quantity int `json:"quantity"`
45+
}
46+
47+
type CreateBackorderDocumentRequest struct {
48+
ID int `json:"id"`
49+
Name string `json:"name"`
50+
MimeType string `json:"mimeType"`
51+
Content string `json:"content"`
52+
}
53+
54+
type CreateBackorderEndUserDetailRequest struct {
55+
CompanyName string
56+
Street string
57+
StreetNumber string
58+
ZipCode string
59+
City string
60+
Country string
61+
}
62+
63+
func PlaceBackorder(c messagebird.MessageBirdClient, req *PlaceBackorderRequest) (BackOrderID, error) {
64+
resp := &struct {
65+
Id string `json:"id"`
66+
}{}
67+
68+
if err := request(c, resp, http.MethodPost, pathBackorders, req); err != nil {
69+
return "", err
70+
}
71+
72+
return BackOrderID(resp.Id), nil
73+
}
74+
75+
func ReadBackorder(c messagebird.MessageBirdClient, backOrderID string) (*Backorder, error) {
76+
uri := fmt.Sprintf("%s/%s", pathBackorders, backOrderID)
77+
78+
bo := &Backorder{}
79+
if err := request(c, bo, http.MethodGet, uri, nil); err != nil {
80+
return nil, err
81+
}
82+
83+
return bo, nil
84+
}
85+
86+
func ListBackorderDocuments(c messagebird.MessageBirdClient, backOrderID string) (*BackorderDocuments, error) {
87+
uri := fmt.Sprintf("%s/%s/%s", pathBackorders, backOrderID, pathDocuments)
88+
89+
bd := &BackorderDocuments{}
90+
if err := request(c, bd, http.MethodGet, uri, nil); err != nil {
91+
return nil, err
92+
}
93+
94+
return bd, nil
95+
}
96+
97+
func CreateBackorderDocument(c messagebird.MessageBirdClient, backOrderID string, req *CreateBackorderDocumentRequest) error {
98+
uri := fmt.Sprintf("%s/%s/%s", pathBackorders, backOrderID, pathDocuments)
99+
100+
return request(c, nil, http.MethodPost, uri, req)
101+
}
102+
103+
func ListBackorderEndUserDetails(c messagebird.MessageBirdClient, backOrderID string) (*EndUserDetails, error) {
104+
uri := fmt.Sprintf("%s/%s/%s", pathBackorders, backOrderID, pathEndUserDetails)
105+
106+
eud := &EndUserDetails{}
107+
if err := request(c, eud, http.MethodGet, uri, nil); err != nil {
108+
return nil, err
109+
}
110+
111+
return eud, nil
112+
}
113+
114+
func CreateBackorderEndUserDetail(c messagebird.MessageBirdClient, backOrderID string, req *CreateBackorderEndUserDetailRequest) error {
115+
uri := fmt.Sprintf("%s/%s/%s", pathBackorders, backOrderID, pathEndUserDetails)
116+
117+
return request(c, nil, http.MethodPost, uri, req)
118+
}

number/backorder_test.go

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
package number
2+
3+
import (
4+
"github.com/messagebird/go-rest-api/v9/internal/mbtest"
5+
"github.com/stretchr/testify/assert"
6+
"net/http"
7+
"testing"
8+
)
9+
10+
func TestPlaceBackorder(t *testing.T) {
11+
mbtest.WillReturnTestdata(t, "placeBackorder.json", http.StatusOK)
12+
client := mbtest.Client(t)
13+
14+
backorderID, err := PlaceBackorder(client, &PlaceBackorderRequest{
15+
ProductID: 1993,
16+
Prefix: "31114",
17+
Quantity: 3,
18+
})
19+
assert.NoError(t, err)
20+
assert.Equal(t, "48f6057c21de42d4bbf73fb86caaf361", string(backorderID))
21+
22+
mbtest.AssertEndpointCalled(t, http.MethodPost, "/v1/backorders")
23+
}
24+
25+
func TestReadBackorder(t *testing.T) {
26+
mbtest.WillReturnTestdata(t, "readBackorder.json", http.StatusOK)
27+
client := mbtest.Client(t)
28+
29+
backorder, err := ReadBackorder(client, "vn4oor3c21de42d4bbf73fb86caaf361")
30+
assert.NoError(t, err)
31+
assert.Equal(t, "48f6057c21de42d4bbf73fb86caaf361", backorder.ID)
32+
assert.Equal(t, 1993, backorder.ProductID)
33+
assert.Equal(t, "GB", backorder.Country)
34+
assert.Equal(t, "44113", backorder.Prefix)
35+
assert.Equal(t, "blocked", backorder.Status)
36+
assert.Equal(t, []string{"MISSING_KYC", "MISSING_EUD"}, backorder.ReasonCodes)
37+
38+
mbtest.AssertEndpointCalled(t, http.MethodGet, "/v1/backorders/vn4oor3c21de42d4bbf73fb86caaf361")
39+
}
40+
41+
func TestListBackorderDocuments(t *testing.T) {
42+
mbtest.WillReturnTestdata(t, "listBackorderDocuments.json", http.StatusOK)
43+
client := mbtest.Client(t)
44+
45+
list, err := ListBackorderDocuments(client, "vn4oor3c21de42d4bbf73fb86caaf361")
46+
assert.NoError(t, err)
47+
assert.Equal(t, 20, list.Limit)
48+
assert.Equal(t, 1, list.Count)
49+
assert.Len(t, list.Items, 1)
50+
assert.Equal(t, 62, list.Items[0].ID)
51+
assert.Equal(t, "Proof of in region address (max 3 months old)", list.Items[0].Name)
52+
assert.Equal(t, "The number-user must provide proof that he has an address within the region of the prefix.", list.Items[0].Description)
53+
assert.Equal(t, "missing", list.Items[0].Status)
54+
55+
mbtest.AssertEndpointCalled(t, http.MethodGet, "/v1/backorders/vn4oor3c21de42d4bbf73fb86caaf361/documents")
56+
}
57+
58+
func TestCreateBackorderDocument(t *testing.T) {
59+
mbtest.WillReturnOnlyStatus(http.StatusNoContent)
60+
client := mbtest.Client(t)
61+
62+
err := CreateBackorderDocument(client, "vn4oor3c21de42d4bbf73fb86caaf361", &CreateBackorderDocumentRequest{
63+
ID: 62,
64+
Name: "messagebird-kyc-upload-test.txt",
65+
MimeType: "text/plain",
66+
Content: "aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQ==",
67+
})
68+
assert.NoError(t, err)
69+
mbtest.AssertEndpointCalled(t, http.MethodPost, "/v1/backorders/vn4oor3c21de42d4bbf73fb86caaf361/documents")
70+
}
71+
72+
func TestCreateBackorderDocumentError(t *testing.T) {
73+
mbtest.WillReturnOnlyStatus(http.StatusNotAcceptable)
74+
client := mbtest.Client(t)
75+
76+
err := CreateBackorderDocument(client, "vn4oor3c21de42d4bbf73fb86caaf361", &CreateBackorderDocumentRequest{
77+
ID: 62,
78+
Name: "messagebird-kyc-upload-test.txt",
79+
MimeType: "text/plain",
80+
Content: "aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQ==",
81+
})
82+
assert.Error(t, err)
83+
mbtest.AssertEndpointCalled(t, http.MethodPost, "/v1/backorders/vn4oor3c21de42d4bbf73fb86caaf361/documents")
84+
}
85+
86+
func TestListBackorderEndUserDetails(t *testing.T) {
87+
mbtest.WillReturnTestdata(t, "listBackorderEndUserDetails.json", http.StatusOK)
88+
client := mbtest.Client(t)
89+
90+
eud, err := ListBackorderEndUserDetails(client, "vn4oor3c21de42d4bbf73fb86caaf361")
91+
assert.NoError(t, err)
92+
assert.Len(t, eud.Items, 6)
93+
assert.Equal(t, []*EndUserDetail{
94+
{"CompanyName", "Company name"},
95+
{"Street", "Street"},
96+
{"StreetNumber", "Street number"},
97+
{"ZipCode", "Zip code"},
98+
{"City", "City"},
99+
{"Country", "Country"},
100+
}, eud.Items)
101+
102+
mbtest.AssertEndpointCalled(t, http.MethodGet, "/v1/backorders/vn4oor3c21de42d4bbf73fb86caaf361/end-user-details")
103+
}
104+
105+
func TestCreateBackorderEndUserDetail(t *testing.T) {
106+
mbtest.WillReturnOnlyStatus(http.StatusNoContent)
107+
client := mbtest.Client(t)
108+
109+
err := CreateBackorderEndUserDetail(client, "vn4oor3c21de42d4bbf73fb86caaf361", &CreateBackorderEndUserDetailRequest{
110+
CompanyName: "Messagebird",
111+
Street: "Burgwal",
112+
StreetNumber: "35",
113+
ZipCode: "2011",
114+
City: "Amsterdam",
115+
Country: "Netherlands",
116+
})
117+
assert.NoError(t, err)
118+
119+
mbtest.AssertEndpointCalled(t, http.MethodPost, "/v1/backorders/vn4oor3c21de42d4bbf73fb86caaf361/end-user-details")
120+
}

0 commit comments

Comments
 (0)