Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implements Unmarshaler and Stringer interface for HsInt #29

Merged
merged 3 commits into from
Jan 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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))
}
Loading