Skip to content

Commit

Permalink
feat: add missing fields support to RegisterFeedback
Browse files Browse the repository at this point in the history
Adds support to specifying expires_at, session_token and request_token.
  • Loading branch information
figueredo committed Jul 20, 2024
1 parent 6a209a2 commit fd78175
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 2 deletions.
19 changes: 17 additions & 2 deletions incognia.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ type Login struct {

type FeedbackIdentifiers struct {
InstallationID string
SessionToken string
RequestToken string
LoginID string
PaymentID string
SignupID string
Expand Down Expand Up @@ -241,20 +243,33 @@ func (c *Client) RegisterFeedback(feedbackEvent FeedbackType, occurredAt *time.T
}
}()

return c.registerFeedback(feedbackEvent, occurredAt, feedbackIdentifiers)
return c.registerFeedback(feedbackEvent, occurredAt, nil, feedbackIdentifiers)
}

func (c *Client) registerFeedback(feedbackEvent FeedbackType, occurredAt *time.Time, feedbackIdentifiers *FeedbackIdentifiers) (err error) {
func (c *Client) RegisterFeedbackWithExpiration(feedbackEvent FeedbackType, occurredAt *time.Time, expiresAt *time.Time, feedbackIdentifiers *FeedbackIdentifiers) (err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("%v", r)
}
}()

return c.registerFeedback(feedbackEvent, occurredAt, expiresAt, feedbackIdentifiers)
}

func (c *Client) registerFeedback(feedbackEvent FeedbackType, occurredAt *time.Time, expiresAt *time.Time, feedbackIdentifiers *FeedbackIdentifiers) (err error) {
if !isValidFeedbackType(feedbackEvent) {
return ErrInvalidFeedbackType
}

requestBody := postFeedbackRequestBody{
Event: feedbackEvent,
OccurredAt: occurredAt,
ExpiresAt: expiresAt,
}
if feedbackIdentifiers != nil {
requestBody.InstallationID = feedbackIdentifiers.InstallationID
requestBody.SessionToken = feedbackIdentifiers.SessionToken
requestBody.RequestToken = feedbackIdentifiers.RequestToken
requestBody.LoginID = feedbackIdentifiers.LoginID
requestBody.PaymentID = feedbackIdentifiers.PaymentID
requestBody.SignupID = feedbackIdentifiers.SignupID
Expand Down
75 changes: 75 additions & 0 deletions incognia_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ const (

var (
now = time.Now()
nowMinusSeconds = now.Add(-1 * time.Second)
installationId = "installation-id"
sessionToken = "session-token"
shouldEval bool = true
Expand Down Expand Up @@ -111,6 +112,21 @@ var (
Event: SignupAccepted,
OccurredAt: &now,
InstallationID: "some-installation-id",
SessionToken: "some-session-token",
RequestToken: "some-request-token",
LoginID: "some-login-id",
PaymentID: "some-payment-id",
SignupID: "some-signup-id",
AccountID: "some-account-id",
ExternalID: "some-external-id",
}
postFeedbackRequestWithExpirationBodyFixture = &postFeedbackRequestBody{
Event: SignupAccepted,
OccurredAt: &now,
ExpiresAt: &nowMinusSeconds,
InstallationID: "some-installation-id",
SessionToken: "some-session-token",
RequestToken: "some-request-token",
LoginID: "some-login-id",
PaymentID: "some-payment-id",
SignupID: "some-signup-id",
Expand All @@ -122,6 +138,8 @@ var (
}
feedbackIdentifiersFixture = &FeedbackIdentifiers{
InstallationID: "some-installation-id",
SessionToken: "some-session-token",
RequestToken: "some-request-token",
LoginID: "some-login-id",
PaymentID: "some-payment-id",
SignupID: "some-signup-id",
Expand Down Expand Up @@ -681,6 +699,63 @@ func (suite *IncogniaTestSuite) TestErrorsRegisterFeedback() {
}
}

func (suite *IncogniaTestSuite) TestSuccessRegisterFeedbackWithExpiration() {
feedbackServer := suite.mockFeedbackEndpoint(token, postFeedbackRequestWithExpirationBodyFixture)
defer feedbackServer.Close()

err := suite.client.RegisterFeedbackWithExpiration(postFeedbackRequestWithExpirationBodyFixture.Event, postFeedbackRequestWithExpirationBodyFixture.OccurredAt, postFeedbackRequestWithExpirationBodyFixture.ExpiresAt, feedbackIdentifiersFixture)
suite.NoError(err)
}

func (suite *IncogniaTestSuite) TestSuccessRegisterFeedbackWithExpirationNilOptional() {
feedbackServer := suite.mockFeedbackEndpoint(token, postFeedbackRequestBodyRequiredFieldsFixture)
defer feedbackServer.Close()

err := suite.client.RegisterFeedbackWithExpiration(postFeedbackRequestBodyRequiredFieldsFixture.Event, nil, nil, nil)
suite.NoError(err)
}

func (suite *IncogniaTestSuite) TestSuccessRegisterFeedbackWithExpirationAfterTokenExpiration() {
feedbackServer := suite.mockFeedbackEndpoint(token, postFeedbackRequestWithExpirationBodyFixture)
defer feedbackServer.Close()

err := suite.client.RegisterFeedbackWithExpiration(postFeedbackRequestWithExpirationBodyFixture.Event, postFeedbackRequestWithExpirationBodyFixture.OccurredAt, postFeedbackRequestWithExpirationBodyFixture.ExpiresAt, feedbackIdentifiersFixture)
suite.NoError(err)

token, _ := suite.client.tokenProvider.GetToken()
token.(*accessToken).ExpiresIn = 0

err = suite.client.RegisterFeedbackWithExpiration(postFeedbackRequestWithExpirationBodyFixture.Event, postFeedbackRequestWithExpirationBodyFixture.OccurredAt, postFeedbackRequestWithExpirationBodyFixture.ExpiresAt, feedbackIdentifiersFixture)
suite.NoError(err)
}

func (suite *IncogniaTestSuite) TestForbiddenRegisterFeedbackWithExpiration() {
feedbackServer := suite.mockFeedbackEndpoint("some-other-token", postFeedbackRequestWithExpirationBodyFixture)
defer feedbackServer.Close()

err := suite.client.RegisterFeedbackWithExpiration(postFeedbackRequestWithExpirationBodyFixture.Event, postFeedbackRequestWithExpirationBodyFixture.OccurredAt, postFeedbackRequestWithExpirationBodyFixture.ExpiresAt, feedbackIdentifiersFixture)
suite.EqualError(err, "403 Forbidden")
}

func (suite *IncogniaTestSuite) TestErrorRegisterFeedbackWithExpirationInvalidFeedbackType() {
feedbackServer := suite.mockFeedbackEndpoint(token, postFeedbackRequestWithExpirationBodyFixture)
defer feedbackServer.Close()

err := suite.client.RegisterFeedbackWithExpiration("invalid-type", postFeedbackRequestWithExpirationBodyFixture.OccurredAt, postFeedbackRequestWithExpirationBodyFixture.ExpiresAt, feedbackIdentifiersFixture)
suite.EqualError(err, ErrInvalidFeedbackType.Error())
}

func (suite *IncogniaTestSuite) TestErrorsRegisterFeedbackWithExpiration() {
errors := []int{http.StatusBadRequest, http.StatusInternalServerError}
for _, status := range errors {
statusServer := mockStatusServer(status)
suite.client.endpoints.Feedback = statusServer.URL

err := suite.client.RegisterFeedbackWithExpiration(postFeedbackRequestWithExpirationBodyFixture.Event, postFeedbackRequestWithExpirationBodyFixture.OccurredAt, postFeedbackRequestWithExpirationBodyFixture.ExpiresAt, feedbackIdentifiersFixture)
suite.Contains(err.Error(), strconv.Itoa(status))
}
}

func (suite *IncogniaTestSuite) TestSuccessRegisterPayment() {
transactionServer := suite.mockPostTransactionsEndpoint(token, postPaymentRequestBodyFixture, transactionAssessmentFixture, emptyQueryString)
defer transactionServer.Close()
Expand Down
3 changes: 3 additions & 0 deletions request_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,10 @@ const (
type postFeedbackRequestBody struct {
Event FeedbackType `json:"event"`
OccurredAt *time.Time `json:"occurred_at,omitempty"`
ExpiresAt *time.Time `json:"expires_at,omitempty"`
InstallationID string `json:"installation_id,omitempty"`
SessionToken string `json:"session_token,omitempty"`
RequestToken string `json:"request_token,omitempty"`
LoginID string `json:"login_id,omitempty"`
PaymentID string `json:"payment_id,omitempty"`
SignupID string `json:"signup_id,omitempty"`
Expand Down

0 comments on commit fd78175

Please sign in to comment.