Skip to content

Commit

Permalink
Add cancellation time to PlayStore subscription purchase object (#43)
Browse files Browse the repository at this point in the history
* Add cancellation time to PlayStore subscription purchase object

* Peer review updates
  • Loading branch information
SergeyKishenin committed Jul 1, 2020
1 parent 1d7a7b7 commit 9c418e2
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,13 @@ def expiry_time_millis
@subscription_purchase.expiry_time_millis
end

# Get cancellation time for subscription in milliseconds since Epoch.
# Only present if cancelReason is 0.
# @return [Integer]
def user_cancellation_time_millis
@subscription_purchase.user_cancellation_time_millis if canceled_by_user?
end

# Get start time in UTC
# @return [DateTime]
def starts_at
Expand All @@ -135,6 +142,12 @@ def starts_at
def expires_at
Time.at(expiry_time_millis / 1000).utc.to_datetime
end

# Get cancellation time in UTC
# @return [DateTime]
def canceled_at
Time.at(user_cancellation_time_millis / 1000).utc.to_datetime if user_cancellation_time_millis
end
end
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,61 @@
end
end

describe "subscription cancelation by user" do
describe "when subscription is not canceled" do
let(:fake_subscription_purchase) do
FakeSubscriptionPurchase.new(
kind: "androidpublisher#subscriptionPurchase",
start_time_millis: 1459540113244,
expiry_time_millis: 1462132088610,
auto_renewing: true,
developer_payload: "payload that gets stored and returned",
payment_state: 1,
)
end

it "is not canceled?" do
subject.canceled_by_user?.must_be_false
end

it "returns blank user_cancellation_time_millis" do
subject.user_cancellation_time_millis.must_be_nil
end

it "returns blank canceled_at" do
subject.canceled_at.must_be_nil
end
end

describe "when subscription is canceled" do
let(:fake_subscription_purchase) do
FakeSubscriptionPurchase.new(
kind: "androidpublisher#subscriptionPurchase",
start_time_millis: 1459540113244,
expiry_time_millis: 1462132088610,
user_cancellation_time_millis: 1461872888000,
auto_renewing: true,
developer_payload: "payload that gets stored and returned",
cancel_reason: 0,
payment_state: 1,
)
end

it "is canceled?" do
subject.canceled_by_user?.must_be_true
end

it "returns the user_cancellation_time_millis" do
subject.user_cancellation_time_millis.must_equal 1_461_872_888_000
end

it "returns the starts_at" do
expected = DateTime.new(2016, 4, 28, 19, 48, 8)
subject.canceled_at.must_equal expected
end
end
end

describe "expired with pending payment" do
let(:fake_subscription_purchase) do
FakeSubscriptionPurchase.new(
Expand Down Expand Up @@ -162,6 +217,7 @@ class FakeSubscriptionPurchase
:kind,
:start_time_millis,
:expiry_time_millis,
:user_cancellation_time_millis,
:auto_renewing,
:developer_payload,
:cancel_reason,
Expand Down

0 comments on commit 9c418e2

Please sign in to comment.