Skip to content

Commit

Permalink
Merge pull request #29 from belong-inc/implements-hsint-unmarshaler-a…
Browse files Browse the repository at this point in the history
…nd-stringer

Implements Unmarshaler and Stringer interface for HsInt
  • Loading branch information
kk-no authored Jan 11, 2024
2 parents 993402a + 954c673 commit d426e53
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 4 deletions.
51 changes: 49 additions & 2 deletions company_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,13 +223,13 @@ func TestCompanyServiceOp_Get(t *testing.T) {
wantErr error
}{
{
name: "Successfully get a company",
name: "Get a company",
fields: fields{
companyPath: hubspot.ExportCompanyBasePath,
client: hubspot.NewMockClient(&hubspot.MockConfig{
Status: http.StatusOK,
Header: http.Header{},
Body: []byte(`{"id":"company001","properties":{"city":"Cambridge","createdate":"2019-10-30T03:30:17.883Z","domain":"biglytics.net","hs_lastmodifieddate":"2019-12-07T16:50:06.678Z","industry":"Technology","name":"Biglytics","phone":"(877)929-0687","state":"Massachusetts","custom_name":"biglytics","custom_date":"2019-10-30T03:30:17.883Z"},"createdAt":"2019-10-30T03:30:17.883Z","updatedAt":"2019-12-07T16:50:06.678Z"}`),
Body: []byte(`{"id":"company001","properties":{"annualrevenue":"1000000","city":"Cambridge","createdate":"2019-10-30T03:30:17.883Z","domain":"biglytics.net","hs_lastmodifieddate":"2019-12-07T16:50:06.678Z","industry":"Technology","name":"Biglytics","phone":"(877)929-0687","state":"Massachusetts","custom_name":"biglytics","custom_date":"2019-10-30T03:30:17.883Z","hs_created_by_user_id":""},"createdAt":"2019-10-30T03:30:17.883Z","updatedAt":"2019-12-07T16:50:06.678Z"}`),
}),
},
args: args{
Expand All @@ -247,6 +247,7 @@ func TestCompanyServiceOp_Get(t *testing.T) {
Archived: false,
Properties: &CustomFields{
Company: hubspot.Company{
Annualrevenue: hubspot.NewInt(1000000),
City: hubspot.NewString("Cambridge"),
Createdate: &createdAt,
Domain: hubspot.NewString("biglytics.net"),
Expand All @@ -255,6 +256,52 @@ func TestCompanyServiceOp_Get(t *testing.T) {
Name: hubspot.NewString("Biglytics"),
Phone: hubspot.NewString("(877)929-0687"),
State: hubspot.NewString("Massachusetts"),
HsCreatedByUserId: hubspot.NewInt(0),
},
CustomName: hubspot.NewString("biglytics"),
CustomDate: &createdAt,
},
CreatedAt: &createdAt,
UpdatedAt: &updatedAt,
},
wantErr: nil,
},
{
name: "If the API returns a numeric value when getting a company",
fields: fields{
companyPath: hubspot.ExportCompanyBasePath,
client: hubspot.NewMockClient(&hubspot.MockConfig{
Status: http.StatusOK,
Header: http.Header{},
// NOTE: Normally, numeric types in the HubSpot API are returned as strings (e.g. "", "12345"), but this is to confirm when they are returned as numbers.
Body: []byte(`{"id":"company001","properties":{"annualrevenue":1000000,"city":"Cambridge","createdate":"2019-10-30T03:30:17.883Z","domain":"biglytics.net","hs_lastmodifieddate":"2019-12-07T16:50:06.678Z","industry":"Technology","name":"Biglytics","phone":"(877)929-0687","state":"Massachusetts","custom_name":"biglytics","custom_date":"2019-10-30T03:30:17.883Z","hs_created_by_user_id":0},"createdAt":"2019-10-30T03:30:17.883Z","updatedAt":"2019-12-07T16:50:06.678Z"}`),
}),
},
args: args{
companyID: "company001",
company: &CustomFields{},
option: &hubspot.RequestQueryOption{
Properties: []string{
"custom_name",
"custom_date",
},
},
},
want: &hubspot.ResponseResource{
ID: "company001",
Archived: false,
Properties: &CustomFields{
Company: hubspot.Company{
Annualrevenue: hubspot.NewInt(1000000),
City: hubspot.NewString("Cambridge"),
Createdate: &createdAt,
Domain: hubspot.NewString("biglytics.net"),
HsLastmodifieddate: &updatedAt,
Industry: hubspot.NewString("Technology"),
Name: hubspot.NewString("Biglytics"),
Phone: hubspot.NewString("(877)929-0687"),
State: hubspot.NewString("Massachusetts"),
HsCreatedByUserId: hubspot.NewInt(0),
},
CustomName: hubspot.NewString("biglytics"),
CustomDate: &createdAt,
Expand Down
24 changes: 22 additions & 2 deletions type.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package hubspot

import (
"encoding/json"
"strconv"
"strings"
"time"
)

Expand Down Expand Up @@ -57,9 +59,8 @@ func NewTime(t time.Time) *HsTime {
// This is because there are cases where the Time value returned by HubSpot is null or empty string.
// The time.Time does not support Parse with empty string.
func (ht *HsTime) UnmarshalJSON(b []byte) error {
// FIXME: Initialization is performed on empty string.
if len(b) == 0 || string(b) == `""` {
return nil
return nil // NOTE: Initialization is performed on empty string.
}
v := &time.Time{}
if err := json.Unmarshal(b, v); err != nil {
Expand Down Expand Up @@ -100,3 +101,22 @@ func NewInt(v int) *HsInt {
val := HsInt(v)
return &val
}

// UnmarshalJSON implemented json.Unmarshaler.
// This is because there are cases where the Int value returned by HubSpot is "" or "12345".
func (hi *HsInt) UnmarshalJSON(b []byte) error {
if len(b) == 0 || string(b) == `""` {
return nil // NOTE: Initialization is performed on 0.
}
i, err := strconv.Atoi(strings.Replace(string(b), `"`, ``, -1))
if err != nil {
return err
}
*hi = HsInt(i)
return nil
}

// String implemented Stringer.
func (hi *HsInt) String() string {
return strconv.Itoa(int(*hi))
}

0 comments on commit d426e53

Please sign in to comment.