candy_check 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +1 -0
  3. data/.rubocop.yml +10 -0
  4. data/.ruby-version +1 -1
  5. data/Gemfile +1 -1
  6. data/Guardfile +5 -3
  7. data/Rakefile +5 -5
  8. data/candy_check.gemspec +10 -10
  9. data/lib/candy_check/app_store/client.rb +7 -7
  10. data/lib/candy_check/app_store/config.rb +7 -9
  11. data/lib/candy_check/app_store/receipt.rb +16 -16
  12. data/lib/candy_check/app_store/receipt_collection.rb +2 -2
  13. data/lib/candy_check/app_store/subscription_verification.rb +5 -5
  14. data/lib/candy_check/app_store/verification.rb +3 -3
  15. data/lib/candy_check/app_store/verification_failure.rb +25 -21
  16. data/lib/candy_check/app_store/verifier.rb +4 -5
  17. data/lib/candy_check/app_store.rb +8 -8
  18. data/lib/candy_check/cli/app.rb +1 -1
  19. data/lib/candy_check/cli/commands/app_store.rb +1 -1
  20. data/lib/candy_check/cli/commands.rb +4 -4
  21. data/lib/candy_check/cli/out.rb +1 -3
  22. data/lib/candy_check/cli.rb +3 -3
  23. data/lib/candy_check/play_store/product_acknowledgements/acknowledgement.rb +2 -1
  24. data/lib/candy_check/play_store/product_purchases/product_purchase.rb +3 -3
  25. data/lib/candy_check/play_store/product_purchases/product_verification.rb +1 -1
  26. data/lib/candy_check/play_store/subscription_purchases/subscription_purchase.rb +2 -1
  27. data/lib/candy_check/play_store/subscription_purchases/subscription_verification.rb +1 -0
  28. data/lib/candy_check/play_store/verification_failure.rb +2 -2
  29. data/lib/candy_check/utils/attribute_reader.rb +3 -2
  30. data/lib/candy_check/utils/config.rb +2 -0
  31. data/lib/candy_check/utils.rb +2 -2
  32. data/lib/candy_check/version.rb +1 -1
  33. data/lib/candy_check.rb +4 -4
  34. data/spec/app_store/client_spec.rb +18 -18
  35. data/spec/app_store/config_spec.rb +9 -9
  36. data/spec/app_store/receipt_collection_spec.rb +38 -40
  37. data/spec/app_store/receipt_spec.rb +47 -47
  38. data/spec/app_store/subscription_verification_spec.rb +35 -32
  39. data/spec/app_store/verifcation_failure_spec.rb +7 -7
  40. data/spec/app_store/verification_spec.rb +23 -11
  41. data/spec/app_store/verifier_spec.rb +40 -48
  42. data/spec/cli/app_spec.rb +11 -13
  43. data/spec/cli/commands/app_store_spec.rb +22 -23
  44. data/spec/cli/commands/play_store_spec.rb +3 -1
  45. data/spec/cli/commands/version_spec.rb +2 -2
  46. data/spec/cli/out_spec.rb +9 -9
  47. data/spec/play_store/acknowledger_spec.rb +4 -0
  48. data/spec/play_store/product_acknowledgements/acknowledgement_spec.rb +4 -0
  49. data/spec/play_store/product_acknowledgements/response_spec.rb +16 -15
  50. data/spec/play_store/product_purchases/product_purchase_spec.rb +6 -27
  51. data/spec/play_store/subscription_purchases/subscription_purchase_spec.rb +22 -46
  52. data/spec/play_store/verification_failure_spec.rb +6 -4
  53. data/spec/play_store/verifier_spec.rb +4 -2
  54. data/spec/spec_helper.rb +5 -7
  55. metadata +76 -76
@@ -1,4 +1,4 @@
1
- require 'date'
1
+ require "date"
2
2
 
3
3
  module CandyCheck
4
4
  module Utils
@@ -23,7 +23,8 @@ module CandyCheck
23
23
  def read_bool(field)
24
24
  val = read(field).to_s
25
25
  return nil unless %w(false true).include?(val)
26
- val == 'true'
26
+
27
+ val == "true"
27
28
  end
28
29
 
29
30
  def read_datetime_from_string(field)
@@ -26,6 +26,7 @@ module CandyCheck
26
26
  # @raise [ArgumentError] if attribute is missing
27
27
  def validates_presence(name)
28
28
  return if send(name)
29
+
29
30
  raise ArgumentError, "Configuration field #{name} is missing"
30
31
  end
31
32
 
@@ -34,6 +35,7 @@ module CandyCheck
34
35
  # @param values [Array] of possible values
35
36
  def validates_inclusion(name, *values)
36
37
  return if values.include?(send(name))
38
+
37
39
  raise ArgumentError, "Configuration field #{name} should be "\
38
40
  "one of: #{values.join(', ')}"
39
41
  end
@@ -1,2 +1,2 @@
1
- require 'candy_check/utils/attribute_reader'
2
- require 'candy_check/utils/config'
1
+ require "candy_check/utils/attribute_reader"
2
+ require "candy_check/utils/config"
@@ -1,4 +1,4 @@
1
1
  module CandyCheck
2
2
  # The current gem's version
3
- VERSION = "0.5.0".freeze
3
+ VERSION = "0.6.0".freeze
4
4
  end
data/lib/candy_check.rb CHANGED
@@ -1,7 +1,7 @@
1
- require 'candy_check/version'
2
- require 'candy_check/utils'
3
- require 'candy_check/app_store'
4
- require 'candy_check/play_store'
1
+ require "candy_check/version"
2
+ require "candy_check/utils"
3
+ require "candy_check/app_store"
4
+ require "candy_check/play_store"
5
5
 
6
6
  # Module to check and verify in-app receipts
7
7
  module CandyCheck
@@ -1,12 +1,12 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe CandyCheck::AppStore::Client do
4
- let(:endpoint_url) { 'https://some.endpoint.com/verify' }
4
+ let(:endpoint_url) { "https://some.endpoint.com/verify" }
5
5
  let(:receipt_data) do
6
- 'some_very_long_receipt_information_which_is_normaly_base64_encoded'
6
+ "some_very_long_receipt_information_which_is_normaly_base64_encoded"
7
7
  end
8
8
  let(:password) do
9
- 'some_secret_password'
9
+ "some_secret_password"
10
10
  end
11
11
  let(:response) do
12
12
  '{
@@ -18,40 +18,40 @@ describe CandyCheck::AppStore::Client do
18
18
  end
19
19
  let(:expected) do
20
20
  {
21
- 'status' => 0,
22
- 'receipt' => {
23
- 'item_id' => '521129812'
24
- }
21
+ "status" => 0,
22
+ "receipt" => {
23
+ "item_id" => "521129812",
24
+ },
25
25
  }
26
26
  end
27
27
 
28
28
  subject { CandyCheck::AppStore::Client.new(endpoint_url) }
29
29
 
30
- describe 'valid response' do
31
- it 'sends JSON and parses the JSON response without a secret' do
30
+ describe "valid response" do
31
+ it "sends JSON and parses the JSON response without a secret" do
32
32
  stub_endpoint
33
33
  .with(
34
34
  body: {
35
- 'receipt-data' => receipt_data
36
- }
35
+ "receipt-data" => receipt_data,
36
+ },
37
37
  )
38
38
  .to_return(
39
- body: response
39
+ body: response,
40
40
  )
41
41
  result = subject.verify(receipt_data)
42
42
  _(result).must_equal expected
43
43
  end
44
44
 
45
- it 'sends JSON and parses the JSON response with a secret' do
45
+ it "sends JSON and parses the JSON response with a secret" do
46
46
  stub_endpoint
47
47
  .with(
48
48
  body: {
49
- 'receipt-data' => receipt_data,
50
- 'password' => password
51
- }
49
+ "receipt-data" => receipt_data,
50
+ "password" => password,
51
+ },
52
52
  )
53
53
  .to_return(
54
- body: response
54
+ body: response,
55
55
  )
56
56
  result = subject.verify(receipt_data, password)
57
57
  _(result).must_equal expected
@@ -1,39 +1,39 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe CandyCheck::AppStore::Config do
4
4
  subject { CandyCheck::AppStore::Config.new(attributes) }
5
5
 
6
- describe 'valid' do
6
+ describe "valid" do
7
7
  let(:attributes) do
8
8
  {
9
- environment: :sandbox
9
+ environment: :sandbox,
10
10
  }
11
11
  end
12
12
 
13
- it 'returns environment' do
13
+ it "returns environment" do
14
14
  _(subject.environment).must_equal :sandbox
15
15
  end
16
16
 
17
- it 'checks for production?' do
17
+ it "checks for production?" do
18
18
  _(subject.production?).must_be_false
19
19
 
20
20
  other = CandyCheck::AppStore::Config.new(
21
- environment: :production
21
+ environment: :production,
22
22
  )
23
23
  _(other.production?).must_be_true
24
24
  end
25
25
  end
26
26
 
27
- describe 'invalid' do
27
+ describe "invalid" do
28
28
  let(:attributes) do
29
29
  {}
30
30
  end
31
31
 
32
- it 'needs an environment' do
32
+ it "needs an environment" do
33
33
  _(proc { subject }).must_raise ArgumentError
34
34
  end
35
35
 
36
- it 'needs an included environment' do
36
+ it "needs an included environment" do
37
37
  attributes[:environment] = :invalid
38
38
  _(proc { subject }).must_raise ArgumentError
39
39
  end
@@ -1,98 +1,96 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe CandyCheck::AppStore::ReceiptCollection do
4
4
  subject { CandyCheck::AppStore::ReceiptCollection.new(attributes) }
5
5
 
6
- describe 'overdue subscription' do
6
+ describe "overdue subscription" do
7
7
  let(:attributes) do
8
8
  [{
9
- 'expires_date' => '2014-04-15 12:52:40 Etc/GMT',
10
- 'expires_date_pst' => '2014-04-15 05:52:40 America/Los_Angeles',
11
- 'purchase_date' => '2014-04-14 12:52:40 Etc/GMT',
12
- 'is_trial_period' => 'false'
9
+ "expires_date" => "2014-04-15 12:52:40 Etc/GMT",
10
+ "expires_date_pst" => "2014-04-15 05:52:40 America/Los_Angeles",
11
+ "purchase_date" => "2014-04-14 12:52:40 Etc/GMT",
12
+ "is_trial_period" => "false",
13
13
  }, {
14
- 'expires_date' => '2015-04-15 12:52:40 Etc/GMT',
15
- 'expires_date_pst' => '2015-04-15 05:52:40 America/Los_Angeles',
16
- 'purchase_date' => '2015-04-14 12:52:40 Etc/GMT',
17
- 'is_trial_period' => 'false'
14
+ "expires_date" => "2015-04-15 12:52:40 Etc/GMT",
15
+ "expires_date_pst" => "2015-04-15 05:52:40 America/Los_Angeles",
16
+ "purchase_date" => "2015-04-14 12:52:40 Etc/GMT",
17
+ "is_trial_period" => "false",
18
18
  }]
19
19
  end
20
20
 
21
- it 'is expired' do
21
+ it "is expired" do
22
22
  _(subject.expired?).must_be_true
23
23
  end
24
24
 
25
- it 'is not a trial' do
25
+ it "is not a trial" do
26
26
  _(subject.trial?).must_be_false
27
27
  end
28
28
 
29
- it 'has positive overdue days' do
29
+ it "has positive overdue days" do
30
30
  overdue = subject.overdue_days
31
31
  _(overdue).must_be_instance_of Integer
32
32
  assert overdue > 0
33
33
  end
34
34
 
35
- it 'has a last expires date' do
35
+ it "has a last expires date" do
36
36
  expected = DateTime.new(2015, 4, 15, 12, 52, 40)
37
37
  _(subject.expires_at).must_equal expected
38
38
  end
39
39
 
40
- it 'is expired? at same pointin time' do
40
+ it "is expired? at same pointin time" do
41
41
  Timecop.freeze(Time.utc(2015, 4, 15, 12, 52, 40)) do
42
42
  _(subject.expired?).must_be_true
43
43
  end
44
44
  end
45
45
  end
46
46
 
47
- describe 'unordered receipts' do
47
+ describe "unordered receipts" do
48
48
  let(:attributes) do
49
49
  [{
50
- 'expires_date' => '2015-04-15 12:52:40 Etc/GMT',
51
- 'expires_date_pst' => '2015-04-15 05:52:40 America/Los_Angeles',
52
- 'purchase_date' => '2015-04-14 12:52:40 Etc/GMT',
53
- 'is_trial_period' => 'false'
54
- }, {
55
- 'expires_date' => '2014-04-15 12:52:40 Etc/GMT',
56
- 'expires_date_pst' => '2014-04-15 05:52:40 America/Los_Angeles',
57
- 'purchase_date' => '2014-04-14 12:52:40 Etc/GMT',
58
- 'is_trial_period' => 'false'
59
- }]
50
+ "expires_date" => "2015-04-15 12:52:40 Etc/GMT",
51
+ "expires_date_pst" => "2015-04-15 05:52:40 America/Los_Angeles",
52
+ "purchase_date" => "2015-04-14 12:52:40 Etc/GMT",
53
+ "is_trial_period" => "false",
54
+ }, {
55
+ "expires_date" => "2014-04-15 12:52:40 Etc/GMT",
56
+ "expires_date_pst" => "2014-04-15 05:52:40 America/Los_Angeles",
57
+ "purchase_date" => "2014-04-14 12:52:40 Etc/GMT",
58
+ "is_trial_period" => "false",
59
+ }]
60
60
  end
61
61
 
62
- it 'the expires date is the latest one in time' do
62
+ it "the expires date is the latest one in time" do
63
63
  expected = DateTime.new(2015, 4, 15, 12, 52, 40)
64
64
  _(subject.expires_at).must_equal expected
65
65
  end
66
-
67
66
  end
68
67
 
69
- describe 'unexpired trial subscription' do
68
+ describe "unexpired trial subscription" do
70
69
  two_days_from_now = DateTime.now + 2
71
70
 
72
71
  let(:attributes) do
73
72
  [{
74
- 'expires_date' => '2016-04-15 12:52:40 Etc/GMT',
75
- 'purchase_date' => '2016-04-15 12:52:40 Etc/GMT',
76
- 'is_trial_period' => 'true'
73
+ "expires_date" => "2016-04-15 12:52:40 Etc/GMT",
74
+ "purchase_date" => "2016-04-15 12:52:40 Etc/GMT",
75
+ "is_trial_period" => "true",
77
76
  }, {
78
- 'expires_date' =>
79
- two_days_from_now.strftime('%Y-%m-%d %H:%M:%S Etc/GMT'),
80
- 'purchase_date' => '2016-04-15 12:52:40 Etc/GMT',
81
- 'is_trial_period' => 'true'
77
+ "expires_date" =>
78
+ two_days_from_now.strftime("%Y-%m-%d %H:%M:%S Etc/GMT"),
79
+ "purchase_date" => "2016-04-15 12:52:40 Etc/GMT",
80
+ "is_trial_period" => "true",
82
81
  }]
83
82
  end
84
83
 
85
- it 'has not expired' do
84
+ it "has not expired" do
86
85
  _(subject.expired?).must_be_false
87
86
  end
88
87
 
89
- it 'it is a trial' do
88
+ it "it is a trial" do
90
89
  _(subject.trial?).must_be_true
91
90
  end
92
91
 
93
- it 'expires in two days' do
92
+ it "expires in two days" do
94
93
  _(subject.overdue_days).must_equal(-2)
95
94
  end
96
95
  end
97
-
98
96
  end
@@ -1,105 +1,105 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe CandyCheck::AppStore::Receipt do
4
4
  subject { CandyCheck::AppStore::Receipt.new(attributes) }
5
5
 
6
6
  let(:attributes) do
7
7
  {
8
- 'original_purchase_date_pst' => '2015-01-08 03:40:46' \
9
- ' America/Los_Angeles',
10
- 'purchase_date_ms' => '1420803646868',
11
- 'unique_identifier' => 'some_uniq_identifier_from_apple' \
12
- '_for_this',
13
- 'original_transaction_id' => 'some_original_transaction_id',
14
- 'bvrs' => '2.0',
15
- 'transaction_id' => 'some_transaction_id',
16
- 'quantity' => '1',
17
- 'unique_vendor_identifier' => '00000000-1111-2222-3333-' \
18
- '444444444444',
19
- 'item_id' => 'some_item_id',
20
- 'product_id' => 'some_product',
21
- 'purchase_date' => '2015-01-09 11:40:46 Etc/GMT',
22
- 'original_purchase_date' => '2015-01-08 11:40:46 Etc/GMT',
23
- 'purchase_date_pst' => '2015-01-09 03:40:46' \
24
- ' America/Los_Angeles',
25
- 'bid' => 'some.test.app',
26
- 'original_purchase_date_ms' => '1420717246868',
27
- 'expires_date' => '2016-06-09 13:59:40 Etc/GMT',
28
- 'is_trial_period' => 'false'
8
+ "original_purchase_date_pst" => "2015-01-08 03:40:46" \
9
+ " America/Los_Angeles",
10
+ "purchase_date_ms" => "1420803646868",
11
+ "unique_identifier" => "some_uniq_identifier_from_apple" \
12
+ "_for_this",
13
+ "original_transaction_id" => "some_original_transaction_id",
14
+ "bvrs" => "2.0",
15
+ "transaction_id" => "some_transaction_id",
16
+ "quantity" => "1",
17
+ "unique_vendor_identifier" => "00000000-1111-2222-3333-" \
18
+ "444444444444",
19
+ "item_id" => "some_item_id",
20
+ "product_id" => "some_product",
21
+ "purchase_date" => "2015-01-09 11:40:46 Etc/GMT",
22
+ "original_purchase_date" => "2015-01-08 11:40:46 Etc/GMT",
23
+ "purchase_date_pst" => "2015-01-09 03:40:46" \
24
+ " America/Los_Angeles",
25
+ "bid" => "some.test.app",
26
+ "original_purchase_date_ms" => "1420717246868",
27
+ "expires_date" => "2016-06-09 13:59:40 Etc/GMT",
28
+ "is_trial_period" => "false",
29
29
  }
30
30
  end
31
31
 
32
- describe 'valid transaction' do
33
- it 'is valid' do
32
+ describe "valid transaction" do
33
+ it "is valid" do
34
34
  _(subject.valid?).must_be_true
35
35
  end
36
36
 
37
- it 'returns the item\'s id' do
38
- _(subject.item_id).must_equal 'some_item_id'
37
+ it "returns the item's id" do
38
+ _(subject.item_id).must_equal "some_item_id"
39
39
  end
40
40
 
41
- it 'returns the item\'s product_id' do
42
- _(subject.product_id).must_equal 'some_product'
41
+ it "returns the item's product_id" do
42
+ _(subject.product_id).must_equal "some_product"
43
43
  end
44
44
 
45
- it 'returns the quantity' do
45
+ it "returns the quantity" do
46
46
  _(subject.quantity).must_equal 1
47
47
  end
48
48
 
49
- it 'returns the app version' do
50
- _(subject.app_version).must_equal '2.0'
49
+ it "returns the app version" do
50
+ _(subject.app_version).must_equal "2.0"
51
51
  end
52
52
 
53
- it 'returns the bundle identifier' do
54
- _(subject.bundle_identifier).must_equal 'some.test.app'
53
+ it "returns the bundle identifier" do
54
+ _(subject.bundle_identifier).must_equal "some.test.app"
55
55
  end
56
56
 
57
- it 'returns the purchase date' do
57
+ it "returns the purchase date" do
58
58
  expected = DateTime.new(2015, 1, 9, 11, 40, 46)
59
59
  _(subject.purchase_date).must_equal expected
60
60
  end
61
61
 
62
- it 'returns the original purchase date' do
62
+ it "returns the original purchase date" do
63
63
  expected = DateTime.new(2015, 1, 8, 11, 40, 46)
64
64
  _(subject.original_purchase_date).must_equal expected
65
65
  end
66
66
 
67
- it 'returns the transaction id' do
68
- _(subject.transaction_id).must_equal 'some_transaction_id'
67
+ it "returns the transaction id" do
68
+ _(subject.transaction_id).must_equal "some_transaction_id"
69
69
  end
70
70
 
71
- it 'returns the original transaction id' do
72
- _(subject.original_transaction_id).must_equal 'some_original_transaction_id'
71
+ it "returns the original transaction id" do
72
+ _(subject.original_transaction_id).must_equal "some_original_transaction_id"
73
73
  end
74
74
 
75
- it 'return nil for cancellation date' do
75
+ it "return nil for cancellation date" do
76
76
  _(subject.cancellation_date).must_be_nil
77
77
  end
78
78
 
79
- it 'returns raw attributes' do
79
+ it "returns raw attributes" do
80
80
  _(subject.attributes).must_be_same_as attributes
81
81
  end
82
82
 
83
- it 'returns the subscription expiration date' do
83
+ it "returns the subscription expiration date" do
84
84
  expected = DateTime.new(2016, 6, 9, 13, 59, 40)
85
85
  _(subject.expires_date).must_equal expected
86
86
  end
87
87
 
88
- it 'returns the trial status' do
88
+ it "returns the trial status" do
89
89
  _(subject.is_trial_period).must_be_false
90
90
  end
91
91
  end
92
92
 
93
- describe 'valid transaction' do
93
+ describe "valid transaction" do
94
94
  before do
95
- attributes['cancellation_date'] = '2015-01-12 11:40:46 Etc/GMT'
95
+ attributes["cancellation_date"] = "2015-01-12 11:40:46 Etc/GMT"
96
96
  end
97
97
 
98
- it 'isn\'t valid' do
98
+ it "isn't valid" do
99
99
  _(subject.valid?).must_be_false
100
100
  end
101
101
 
102
- it 'return nil for cancellation date' do
102
+ it "return nil for cancellation date" do
103
103
  expected = DateTime.new(2015, 1, 12, 11, 40, 46)
104
104
  _(subject.cancellation_date).must_equal expected
105
105
  end
@@ -1,15 +1,15 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe CandyCheck::AppStore::SubscriptionVerification do
4
4
  subject do
5
5
  CandyCheck::AppStore::SubscriptionVerification.new(endpoint, data, secret)
6
6
  end
7
- let(:endpoint) { 'https://some.endpoint' }
8
- let(:data) { 'some_data' }
9
- let(:secret) { 'some_secret' }
7
+ let(:endpoint) { "https://some.endpoint" }
8
+ let(:data) { "some_data" }
9
+ let(:secret) { "some_secret" }
10
10
 
11
- it 'returns a verification failure for status != 0' do
12
- with_mocked_response('status' => 21_000) do |client, recorded|
11
+ it "returns a verification failure for status != 0" do
12
+ with_mocked_response("status" => 21_000) do |client, recorded|
13
13
  result = subject.call!
14
14
  _(client.receipt_data).must_equal data
15
15
  _(client.secret).must_equal secret
@@ -21,7 +21,7 @@ describe CandyCheck::AppStore::SubscriptionVerification do
21
21
  end
22
22
  end
23
23
 
24
- it 'returns a verification failure when receipt is missing' do
24
+ it "returns a verification failure when receipt is missing" do
25
25
  with_mocked_response({}) do |client, recorded|
26
26
  result = subject.call!
27
27
  _(client.receipt_data).must_equal data
@@ -34,13 +34,13 @@ describe CandyCheck::AppStore::SubscriptionVerification do
34
34
  end
35
35
  end
36
36
 
37
- it 'returns a collection of receipt when status is 0 and receipts exists' do
37
+ it "returns a collection of receipt when status is 0 and receipts exists" do
38
38
  response = {
39
- 'status' => 0,
40
- 'latest_receipt_info' => [
41
- { 'item_id' => 'some_id', 'purchase_date' => '2016-04-15 12:52:40 Etc/GMT' },
42
- { 'item_id' => 'some_other_id', 'purchase_date' => '2016-04-15 12:52:40 Etc/GMT' }
43
- ]
39
+ "status" => 0,
40
+ "latest_receipt_info" => [
41
+ { "item_id" => "some_id", "purchase_date" => "2016-04-15 12:52:40 Etc/GMT" },
42
+ { "item_id" => "some_other_id", "purchase_date" => "2016-04-15 12:52:40 Etc/GMT" },
43
+ ],
44
44
  }
45
45
  with_mocked_response(response) do
46
46
  result = subject.call!
@@ -49,29 +49,30 @@ describe CandyCheck::AppStore::SubscriptionVerification do
49
49
  _(result.receipts.size).must_equal(2)
50
50
  last = result.receipts.last
51
51
  _(last).must_be_instance_of CandyCheck::AppStore::Receipt
52
- _(last.item_id).must_equal('some_other_id')
52
+ _(last.item_id).must_equal("some_other_id")
53
53
  end
54
54
  end
55
55
 
56
- describe 'filtered product_ids' do
56
+ describe "filtered product_ids" do
57
57
  subject do
58
58
  CandyCheck::AppStore::SubscriptionVerification.new(
59
59
  endpoint,
60
60
  data,
61
61
  secret,
62
- product_ids
62
+ product_ids,
63
63
  )
64
64
  end
65
- let(:product_ids) { ['product_1'] }
65
+ let(:product_ids) { ["product_1"] }
66
66
 
67
- it 'returns only filtered reciepts when specifc product_ids are reqested' do
67
+ it "returns only filtered reciepts when specifc product_ids are reqested" do
68
68
  response = {
69
- 'status' => 0,
70
- 'latest_receipt_info' => [
71
- { 'item_id' => 'some_id', 'product_id' => 'product_1', 'purchase_date' => '2016-04-15 12:52:40 Etc/GMT' },
72
- { 'item_id' => 'some_other_id', 'product_id' => 'product_1', 'purchase_date' => '2016-04-15 12:52:40 Etc/GMT' },
73
- { 'item_id' => 'some_id', 'product_id' => 'product_2', 'purchase_date' => '2016-04-15 12:52:40 Etc/GMT' }
74
- ]
69
+ "status" => 0,
70
+ "latest_receipt_info" => [
71
+ { "item_id" => "some_id", "product_id" => "product_1", "purchase_date" => "2016-04-15 12:52:40 Etc/GMT" },
72
+ { "item_id" => "some_other_id", "product_id" => "product_1",
73
+ "purchase_date" => "2016-04-15 12:52:40 Etc/GMT" },
74
+ { "item_id" => "some_id", "product_id" => "product_2", "purchase_date" => "2016-04-15 12:52:40 Etc/GMT" },
75
+ ],
75
76
  }
76
77
  with_mocked_response(response) do
77
78
  result = subject.call!
@@ -80,26 +81,28 @@ describe CandyCheck::AppStore::SubscriptionVerification do
80
81
  _(result.receipts.size).must_equal(2)
81
82
  last = result.receipts.last
82
83
  _(last).must_be_instance_of CandyCheck::AppStore::Receipt
83
- _(last.item_id).must_equal('some_other_id')
84
+ _(last.item_id).must_equal("some_other_id")
84
85
  end
85
86
  end
86
87
  end
87
88
 
88
89
  private
89
90
 
90
- DummyClient = Struct.new(:response) do
91
- attr_reader :receipt_data, :secret
91
+ let(:dummy_client_class) do
92
+ Struct.new(:response) do
93
+ attr_reader :receipt_data, :secret
92
94
 
93
- def verify(receipt_data, secret)
94
- @receipt_data = receipt_data
95
- @secret = secret
96
- response
95
+ def verify(receipt_data, secret)
96
+ @receipt_data = receipt_data
97
+ @secret = secret
98
+ response
99
+ end
97
100
  end
98
101
  end
99
102
 
100
103
  def with_mocked_response(response)
101
104
  recorded = []
102
- dummy = DummyClient.new(response)
105
+ dummy = dummy_client_class.new(response)
103
106
  stub = proc do |*args|
104
107
  recorded << args
105
108
  dummy
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe CandyCheck::AppStore::VerificationFailure do
4
4
  subject { CandyCheck::AppStore::VerificationFailure }
@@ -6,23 +6,23 @@ describe CandyCheck::AppStore::VerificationFailure do
6
6
  [21_000, 21_002, 21_003, 21_004, 21_005, 21_006, 21_007, 21_008]
7
7
  end
8
8
 
9
- it 'fetched an failure with message for every known code' do
9
+ it "fetched an failure with message for every known code" do
10
10
  known.each do |code|
11
11
  got = subject.fetch(code)
12
12
  _(got.code).must_equal code
13
- _(got.message).wont_equal 'Unknown error'
13
+ _(got.message).wont_equal "Unknown error"
14
14
  end
15
15
  end
16
16
 
17
- it 'fetched an failure for unknown codes' do
17
+ it "fetched an failure for unknown codes" do
18
18
  got = subject.fetch(1234)
19
19
  _(got.code).must_equal 1234
20
- _(got.message).must_equal 'Unknown error'
20
+ _(got.message).must_equal "Unknown error"
21
21
  end
22
22
 
23
- it 'fetched an failure for nil code' do
23
+ it "fetched an failure for nil code" do
24
24
  got = subject.fetch(nil)
25
25
  _(got.code).must_equal(-1)
26
- _(got.message).must_equal 'Unknown error'
26
+ _(got.message).must_equal "Unknown error"
27
27
  end
28
28
  end