bill_forward 1.2014.296

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/.gitignore +27 -0
  2. data/.idea/.name +1 -0
  3. data/.idea/compiler.xml +23 -0
  4. data/.idea/copyright/profiles_settings.xml +3 -0
  5. data/.idea/encodings.xml +5 -0
  6. data/.idea/inspectionProfiles/Project_Default.xml +11 -0
  7. data/.idea/inspectionProfiles/profiles_settings.xml +7 -0
  8. data/.idea/misc.xml +23 -0
  9. data/.idea/modules.xml +9 -0
  10. data/.idea/scopes/scope_settings.xml +5 -0
  11. data/.idea/vcs.xml +7 -0
  12. data/.rspec +2 -0
  13. data/Gemfile +9 -0
  14. data/LICENSE.md +22 -0
  15. data/README.md +227 -0
  16. data/Rakefile +73 -0
  17. data/bill_forward.gemspec +29 -0
  18. data/bill_forward.iml +28 -0
  19. data/lib/bill_forward.rb +18 -0
  20. data/lib/bill_forward/billing_entity.rb +263 -0
  21. data/lib/bill_forward/client.rb +355 -0
  22. data/lib/bill_forward/custom_hash.rb +14 -0
  23. data/lib/bill_forward/deny_method.rb +4 -0
  24. data/lib/bill_forward/entities/account.rb +19 -0
  25. data/lib/bill_forward/entities/address.rb +25 -0
  26. data/lib/bill_forward/entities/amendments/amendment.rb +11 -0
  27. data/lib/bill_forward/entities/amendments/invoice_recalculation_amendment.rb +10 -0
  28. data/lib/bill_forward/entities/api_configuration.rb +11 -0
  29. data/lib/bill_forward/entities/authorize_net_token.rb +9 -0
  30. data/lib/bill_forward/entities/credit_note.rb +13 -0
  31. data/lib/bill_forward/entities/invoice.rb +25 -0
  32. data/lib/bill_forward/entities/invoice_parts/invoice_line.rb +37 -0
  33. data/lib/bill_forward/entities/invoice_parts/invoice_payment.rb +29 -0
  34. data/lib/bill_forward/entities/invoice_parts/tax_line.rb +23 -0
  35. data/lib/bill_forward/entities/invoice_parts/taxation_link.rb +5 -0
  36. data/lib/bill_forward/entities/organisation.rb +37 -0
  37. data/lib/bill_forward/entities/payment_method.rb +5 -0
  38. data/lib/bill_forward/entities/payment_method_subscription_link.rb +5 -0
  39. data/lib/bill_forward/entities/pricing_component.rb +21 -0
  40. data/lib/bill_forward/entities/pricing_component_tier.rb +5 -0
  41. data/lib/bill_forward/entities/pricing_component_value.rb +5 -0
  42. data/lib/bill_forward/entities/pricing_component_value_change.rb +5 -0
  43. data/lib/bill_forward/entities/product.rb +5 -0
  44. data/lib/bill_forward/entities/product_rate_plan.rb +19 -0
  45. data/lib/bill_forward/entities/profile.rb +15 -0
  46. data/lib/bill_forward/entities/role.rb +4 -0
  47. data/lib/bill_forward/entities/subscription.rb +53 -0
  48. data/lib/bill_forward/entities/unit_of_measure.rb +5 -0
  49. data/lib/bill_forward/insertable_entity.rb +32 -0
  50. data/lib/bill_forward/mutable_entity.rb +47 -0
  51. data/lib/bill_forward/resource_path.rb +11 -0
  52. data/lib/bill_forward/type_check.rb +21 -0
  53. data/lib/bill_forward/version.rb +4 -0
  54. data/spec/component/account_spec.rb +200 -0
  55. data/spec/component/billing_entity_spec.rb +153 -0
  56. data/spec/component/invoice_spec.rb +155 -0
  57. data/spec/component/subscription_spec.rb +357 -0
  58. data/spec/functional/account_spec.rb +25 -0
  59. data/spec/functional/bad_citizen/account_spec.rb +103 -0
  60. data/spec/functional/bad_citizen/credit_note_spec.rb +41 -0
  61. data/spec/functional/bad_citizen/payment_method_spec.rb +34 -0
  62. data/spec/functional/bad_citizen/product_rate_plan_spec.rb +105 -0
  63. data/spec/functional/bad_citizen/product_spec.rb +22 -0
  64. data/spec/functional/bad_citizen/situational/authorize_net_token_spec.rb +27 -0
  65. data/spec/functional/bad_citizen/situational/invoice_recalculation_amendment_spec.rb +27 -0
  66. data/spec/functional/bad_citizen/situational/invoice_spec.rb +22 -0
  67. data/spec/functional/bad_citizen/situational/malordered_entity_spec.rb +43 -0
  68. data/spec/functional/bad_citizen/situational/organisation_spec.rb +39 -0
  69. data/spec/functional/bad_citizen/situational/payment_method_spec.rb +47 -0
  70. data/spec/functional/bad_citizen/situational/subscription_chargeable_spec.rb +255 -0
  71. data/spec/functional/bad_citizen/subscription_spec.rb +179 -0
  72. data/spec/functional/bad_citizen/subscription_with_credit_spec.rb +240 -0
  73. data/spec/functional/bad_citizen/unit_of_measure_spec.rb +20 -0
  74. data/spec/functional/billing_entity_spec.rb +22 -0
  75. data/spec/functional/client_spec.rb +24 -0
  76. data/spec/functional/organisation_spec.rb +28 -0
  77. data/spec/setup_test_constants.rb +73 -0
  78. data/spec/spec_helper.rb +11 -0
  79. data/spec/syntax/account_spec.rb +24 -0
  80. data/spec/syntax/address_spec.rb +19 -0
  81. data/spec/syntax/api_configuration_spec.rb +13 -0
  82. data/spec/syntax/billing_entity_spec.rb +93 -0
  83. data/spec/syntax/client_spec.rb +8 -0
  84. metadata +287 -0
@@ -0,0 +1,39 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), "..", "..", "..", "spec_helper")
2
+
3
+ describe BillForward::Organisation do
4
+ before :all do
5
+ @client = BillForwardTest::TEST_CLIENT
6
+ BillForward::Client.default_client = @client
7
+
8
+ # Authorize.Net credentials used to test adding a payment gateway
9
+ @authorize_net_login_id = BillForwardTest::AUTHORIZE_NET_LOGIN_ID
10
+ @authorize_net_transaction_key = BillForwardTest::AUTHORIZE_NET_TRANSACTION_KEY
11
+ end
12
+ describe '.api_configurations' do
13
+ it "can be updated" do
14
+ organisations = BillForward::Organisation.get_mine
15
+ first_org = organisations.first
16
+
17
+
18
+ # remove all existing AuthorizeNetConfigurations (if any)
19
+ filtered = first_org.apiConfigurations.reject do |config|
20
+ config['@type'] == 'AuthorizeNetConfiguration'
21
+ end
22
+
23
+ first_org.apiConfigurations = filtered
24
+
25
+
26
+ #add a new AuthorizeNetConfiguration
27
+ first_org.apiConfigurations.push BillForward::APIConfiguration.new({
28
+ "@type" => "AuthorizeNetConfiguration",
29
+ "APILoginID" => @authorize_net_login_id,
30
+ "transactionKey" => @authorize_net_transaction_key,
31
+ "environment" => "Sandbox"
32
+ })
33
+ updated_org = first_org.save
34
+
35
+ added_config = updated_org.apiConfigurations.last
36
+ expect(added_config.APILoginID).to eq(@authorize_net_login_id)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,47 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), "..", "..", "..", "spec_helper")
2
+
3
+ describe BillForward::PaymentMethod do
4
+ before :all do
5
+ @client = BillForwardTest::TEST_CLIENT
6
+ BillForward::Client.default_client = @client
7
+
8
+ # Authorize.Net credentials used to test tokenizing a card
9
+ @authorize_net_customer_profile_id = BillForwardTest::AUTHORIZE_NET_CUSTOMER_PROFILE_ID
10
+ @authorize_net_customer_payment_profile_id = BillForwardTest::AUTHORIZE_NET_CUSTOMER_PAYMENT_PROFILE_ID
11
+ @authorize_net_card_last_4_digits = BillForwardTest::AUTHORIZE_NET_CARD_LAST_4_DIGITS
12
+ end
13
+ describe '::create' do
14
+ context 'account exists' do
15
+ context 'using Authorize.Net payment gateway' do
16
+ before :all do
17
+ @created_account = BillForward::Account.create
18
+ authorize_net_token = BillForward::AuthorizeNetToken.new({
19
+ 'accountID' => @created_account.id,
20
+ 'customerProfileID' => @authorize_net_customer_profile_id,
21
+ 'customerPaymentProfileID' => @authorize_net_customer_payment_profile_id,
22
+ 'lastFourDigits' => @authorize_net_card_last_4_digits,
23
+ })
24
+
25
+ @created_token = BillForward::AuthorizeNetToken.create(authorize_net_token)
26
+ end
27
+ subject (:token) { @created_token }
28
+ subject (:account) { @created_account }
29
+ it 'creates a payment method' do
30
+ payment_method = BillForward::PaymentMethod.new({
31
+ 'accountID' => account.id,
32
+ 'linkID' => token.id,
33
+ 'name' => 'Authorize.Net',
34
+ 'description' => 'Pay via Authorize.Net',
35
+ 'gateway' => 'authorizeNet',
36
+ 'userEditable' => 0,
37
+ 'priority' => 100,
38
+ 'reusable' => 1,
39
+ })
40
+ created_payment_method = BillForward::PaymentMethod::create(payment_method)
41
+
42
+ expect(created_payment_method['@type']).to eq(BillForward::PaymentMethod.resource_path.entity_name)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,255 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), "..", "..", "..", "spec_helper")
2
+
3
+ describe BillForward::Subscription do
4
+ before :all do
5
+ @client = BillForwardTest::TEST_CLIENT
6
+ BillForward::Client.default_client = @client
7
+
8
+ # Authorize.Net credentials used to test adding a payment gateway
9
+ @authorize_net_login_id = BillForwardTest::AUTHORIZE_NET_LOGIN_ID
10
+ @authorize_net_transaction_key = BillForwardTest::AUTHORIZE_NET_TRANSACTION_KEY
11
+
12
+ # Authorize.Net credentials used to test adding a payment gateway
13
+ @authorize_net_customer_profile_id = BillForwardTest::AUTHORIZE_NET_CUSTOMER_PROFILE_ID
14
+ @authorize_net_customer_payment_profile_id = BillForwardTest::AUTHORIZE_NET_CUSTOMER_PAYMENT_PROFILE_ID
15
+ @authorize_net_card_last_4_digits = BillForwardTest::AUTHORIZE_NET_CARD_LAST_4_DIGITS
16
+ end
17
+ context 'upon creating required entities for chargeable Subscription' do
18
+ before :all do
19
+ # get our organisation
20
+ organisations = BillForward::Organisation.get_mine
21
+ first_org = organisations.first
22
+
23
+
24
+ # remove from our organisation all existing AuthorizeNetConfigurations (if any)
25
+ filtered = first_org.apiConfigurations.reject do |config|
26
+ config['@type'] == 'AuthorizeNetConfiguration'
27
+ end
28
+ first_org.apiConfigurations = filtered
29
+
30
+
31
+ # add to our organisation: a new AuthorizeNetConfiguration
32
+ first_org.apiConfigurations.push BillForward::APIConfiguration.new({
33
+ "@type" => "AuthorizeNetConfiguration",
34
+ "APILoginID" => @authorize_net_login_id,
35
+ "transactionKey" => @authorize_net_transaction_key,
36
+ "environment" => "Sandbox"
37
+ })
38
+ updated_org = first_org.save
39
+
40
+
41
+ # create an account
42
+ # requires (optionally):
43
+ # - profile
44
+ # - - addresses
45
+ addresses = Array.new()
46
+ addresses.push(
47
+ BillForward::Address.new({
48
+ 'addressLine1' => 'address line 1',
49
+ 'addressLine2' => 'address line 2',
50
+ 'addressLine3' => 'address line 3',
51
+ 'city' => 'London',
52
+ 'province' => 'London',
53
+ 'country' => 'United Kingdom',
54
+ 'postcode' => 'SW1 1AS',
55
+ 'landline' => '02000000000',
56
+ 'primaryAddress' => true
57
+ }))
58
+ profile = BillForward::Profile.new({
59
+ 'email' => 'always@testing.is.moe',
60
+ 'firstName' => 'Test',
61
+ 'addresses' => addresses
62
+ })
63
+ account = BillForward::Account.new({
64
+ 'profile' => profile
65
+ })
66
+ created_account = BillForward::Account.create account
67
+
68
+
69
+ # create for our account: a tokenized card from Authorize.Net
70
+ authorize_net_token = BillForward::AuthorizeNetToken.new({
71
+ 'accountID' => created_account.id,
72
+ 'customerProfileID' => @authorize_net_customer_profile_id,
73
+ 'customerPaymentProfileID' => @authorize_net_customer_payment_profile_id,
74
+ 'lastFourDigits' => @authorize_net_card_last_4_digits,
75
+ })
76
+ created_token = BillForward::AuthorizeNetToken.create(authorize_net_token)
77
+
78
+
79
+ # create for our account: a new payment method, using Authorize.Net token
80
+ payment_method = BillForward::PaymentMethod.new({
81
+ 'accountID' => created_account.id,
82
+ 'linkID' => created_token.id,
83
+ 'name' => 'Authorize.Net',
84
+ 'description' => 'Pay via Authorize.Net',
85
+ 'gateway' => 'authorizeNet',
86
+ 'userEditable' => 0,
87
+ 'priority' => 100,
88
+ 'reusable' => 1,
89
+ })
90
+ created_payment_method = BillForward::PaymentMethod::create(payment_method)
91
+
92
+
93
+ # create a unit of measure
94
+ unit_of_measure = BillForward::UnitOfMeasure.new({
95
+ 'name' => 'Devices',
96
+ 'displayedAs' => 'Devices',
97
+ 'roundingScheme' => 'UP',
98
+ })
99
+ created_uom = BillForward::UnitOfMeasure.create(unit_of_measure)
100
+
101
+
102
+ # create a product
103
+ product = BillForward::Product.new({
104
+ 'productType' => 'non-recurring',
105
+ 'state' => 'prod',
106
+ 'name' => 'Month of Paracetamoxyfrusebendroneomycin',
107
+ 'description' => 'It can cure the common cold and being struck by lightning',
108
+ 'durationPeriod' => 'days',
109
+ 'duration' => 28,
110
+ })
111
+ created_product = BillForward::Product::create(product)
112
+
113
+
114
+ # make product rate plan..
115
+ # requires:
116
+ # - product,
117
+ # - pricing components..
118
+ # .. - which require pricing component tiers
119
+
120
+ # create tiers..
121
+ # for a flat pricing component:
122
+ tiers_for_flat_component_1 = Array.new()
123
+ tiers_for_flat_component_1.push(
124
+ BillForward::PricingComponentTier.new({
125
+ 'lowerThreshold' => 1,
126
+ 'upperThreshold' => 1,
127
+ 'pricingType' => 'fixed',
128
+ 'price' => 1,
129
+ }))
130
+
131
+ # for a tiered pricing component:
132
+ tiers_for_tiered_component_1 = Array.new()
133
+ tiers_for_tiered_component_1.push(
134
+ BillForward::PricingComponentTier.new({
135
+ 'lowerThreshold' => 1,
136
+ 'upperThreshold' => 1,
137
+ 'pricingType' => 'fixed',
138
+ 'price' => 10,
139
+ }),
140
+ BillForward::PricingComponentTier.new({
141
+ 'lowerThreshold' => 2,
142
+ 'upperThreshold' => 10,
143
+ 'pricingType' => 'unit',
144
+ 'price' => 5
145
+ }),
146
+ BillForward::PricingComponentTier.new({
147
+ 'lowerThreshold' => 11,
148
+ 'upperThreshold' => 100,
149
+ 'pricingType' => 'unit',
150
+ 'price' => 2
151
+ }))
152
+
153
+
154
+ # create pricing components, based on these tiers
155
+ pricing_components = Array.new()
156
+ pricing_components.push(
157
+ BillForward::PricingComponent.new({
158
+ '@type' => 'flatPricingComponent',
159
+ 'chargeModel' => 'flat',
160
+ 'name' => 'Devices used, fixed',
161
+ 'description' => 'How many devices you use, I guess',
162
+ 'unitOfMeasureID' => created_uom.id,
163
+ 'chargeType' => 'subscription',
164
+ 'upgradeMode' => 'immediate',
165
+ 'downgradeMode' => 'immediate',
166
+ 'defaultQuantity' => 1,
167
+ 'tiers' => tiers_for_flat_component_1
168
+ }),
169
+ BillForward::PricingComponent.new({
170
+ '@type' => 'tieredPricingComponent',
171
+ 'chargeModel' => 'tiered',
172
+ 'name' => 'Devices used, tiered',
173
+ 'description' => 'How many devices you use, but with a tiering system',
174
+ 'unitOfMeasureID' => created_uom.id,
175
+ 'chargeType' => 'subscription',
176
+ 'upgradeMode' => 'immediate',
177
+ 'downgradeMode' => 'immediate',
178
+ 'defaultQuantity' => 10,
179
+ 'tiers' => tiers_for_tiered_component_1
180
+ }))
181
+
182
+
183
+ # create product rate plan, using pricing components and product
184
+ prp = BillForward::ProductRatePlan.new({
185
+ 'currency' => 'USD',
186
+ 'name' => 'A sound plan',
187
+ 'pricingComponents' => pricing_components,
188
+ 'productID' => created_product.id,
189
+ })
190
+ created_prp = BillForward::ProductRatePlan.create(prp)
191
+
192
+
193
+ # create references for tests to use
194
+ @created_account = created_account
195
+ @created_prp = created_prp
196
+ @created_payment_method = created_payment_method
197
+ @updated_org = updated_org
198
+ end
199
+ subject(:account) { @created_account }
200
+ subject(:prp) { @created_prp }
201
+ subject(:payment_method) { @created_payment_method }
202
+ subject(:organisation) { @updated_org }
203
+ describe '::create' do
204
+ it 'creates Subscription' do
205
+ # make subscription..
206
+ # requires:
207
+ # - account [we have this already]
208
+ # - product rate plan [we have this already]
209
+ # - pricing component value instances (for every pricing component on the PRP)
210
+ # - payment method subscription links (for every payment method on the account)
211
+
212
+ # create PaymentMethodSubscriptionLink from payment method and organisation
213
+ payment_method_subscription_links = Array.new
214
+ payment_method_subscription_links.push(
215
+ BillForward::PaymentMethodSubscriptionLink.new({
216
+ 'paymentMethodID' => payment_method.id,
217
+ 'organizationID' => organisation.id,
218
+ }))
219
+
220
+
221
+ pricing_components = prp.pricingComponents
222
+ # get references to each pricing component we made
223
+ flat_pricing_component_1 = pricing_components[0]
224
+ tiered_pricing_component_1 = pricing_components[1]
225
+
226
+ # create PricingComponentValue instances for every PricingComponent on the PRP
227
+ pricing_component_values = Array.new
228
+ pricing_component_values.push(
229
+ BillForward::PricingComponentValue.new({
230
+ 'pricingComponentID' => flat_pricing_component_1.id,
231
+ 'value' => 1,
232
+ }),
233
+ BillForward::PricingComponentValue.new({
234
+ 'pricingComponentID' => tiered_pricing_component_1.id,
235
+ 'value' => 5,
236
+ }))
237
+
238
+
239
+ # create subscription
240
+ subscription = BillForward::Subscription.new({
241
+ 'type' => 'Subscription',
242
+ 'productRatePlanID' => prp.id,
243
+ 'accountID' => account.id,
244
+ 'name' => 'Memorable Subscription',
245
+ 'description' => 'Memorable Subscription Description',
246
+ 'paymentMethodSubscriptionLinks' => payment_method_subscription_links,
247
+ 'pricingComponentValues' => pricing_component_values
248
+ })
249
+ created_sub = BillForward::Subscription.create(subscription)
250
+
251
+ expect(created_sub['@type']).to eq(BillForward::Subscription.resource_path.entity_name)
252
+ end
253
+ end
254
+ end
255
+ end
@@ -0,0 +1,179 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), "..", "..", "spec_helper")
2
+ # we want unique numbers to test updates with
3
+ require 'SecureRandom'
4
+
5
+ describe BillForward::Subscription do
6
+ before :all do
7
+ @client = BillForwardTest::TEST_CLIENT
8
+ BillForward::Client.default_client = @client
9
+ end
10
+ describe '::get_by_account_id' do
11
+ context 'an account exists' do
12
+ before :all do
13
+ created_account = BillForward::Account.create
14
+
15
+
16
+ # create references for tests to use
17
+ @created_account = created_account
18
+ end
19
+ context 'all entities required for a subscription exist' do
20
+ before :all do
21
+ # create a unit of measure
22
+ unit_of_measure = BillForward::UnitOfMeasure.new({
23
+ 'name' => 'Devices',
24
+ 'displayedAs' => 'Devices',
25
+ 'roundingScheme' => 'UP',
26
+ })
27
+ created_uom = BillForward::UnitOfMeasure.create(unit_of_measure)
28
+
29
+
30
+ # create a product
31
+ product = BillForward::Product.new({
32
+ 'productType' => 'non-recurring',
33
+ 'state' => 'prod',
34
+ 'name' => 'Month of Paracetamoxyfrusebendroneomycin',
35
+ 'description' => 'It can cure the common cold and being struck by lightning',
36
+ 'durationPeriod' => 'minutes',
37
+ 'duration' => 1,
38
+ })
39
+ created_product = BillForward::Product::create(product)
40
+
41
+
42
+ # make product rate plan..
43
+ # requires:
44
+ # - product,
45
+ # - pricing components, which require..
46
+ # .. - pricing component tiers
47
+ # .. - and unit of measure
48
+
49
+ # create tiers..
50
+ # for a flat pricing component:
51
+ tiers_for_flat_component_1 = Array.new()
52
+ tiers_for_flat_component_1.push(
53
+ BillForward::PricingComponentTier.new({
54
+ 'lowerThreshold' => 1,
55
+ 'upperThreshold' => 1,
56
+ 'pricingType' => 'fixed',
57
+ 'price' => 1,
58
+ }))
59
+
60
+ # for a tiered pricing component:
61
+ tiers_for_tiered_component_1 = Array.new()
62
+ tiers_for_tiered_component_1.push(
63
+ BillForward::PricingComponentTier.new({
64
+ 'lowerThreshold' => 1,
65
+ 'upperThreshold' => 1,
66
+ 'pricingType' => 'fixed',
67
+ 'price' => 10,
68
+ }),
69
+ BillForward::PricingComponentTier.new({
70
+ 'lowerThreshold' => 2,
71
+ 'upperThreshold' => 10,
72
+ 'pricingType' => 'unit',
73
+ 'price' => 5
74
+ }),
75
+ BillForward::PricingComponentTier.new({
76
+ 'lowerThreshold' => 11,
77
+ 'upperThreshold' => 100,
78
+ 'pricingType' => 'unit',
79
+ 'price' => 2
80
+ }))
81
+
82
+
83
+ # create pricing components, based on these tiers
84
+ pricing_components = Array.new()
85
+ pricing_components.push(
86
+ BillForward::PricingComponent.new({
87
+ '@type' => 'flatPricingComponent',
88
+ 'chargeModel' => 'flat',
89
+ 'name' => 'Devices used, fixed',
90
+ 'description' => 'How many devices you use, I guess',
91
+ 'unitOfMeasureID' => created_uom.id,
92
+ 'chargeType' => 'subscription',
93
+ 'upgradeMode' => 'immediate',
94
+ 'downgradeMode' => 'immediate',
95
+ 'defaultQuantity' => 1,
96
+ 'tiers' => tiers_for_flat_component_1
97
+ }),
98
+ BillForward::PricingComponent.new({
99
+ '@type' => 'tieredPricingComponent',
100
+ 'chargeModel' => 'tiered',
101
+ 'name' => 'Devices used, tiered',
102
+ 'description' => 'How many devices you use, but with a tiering system',
103
+ 'unitOfMeasureID' => created_uom.id,
104
+ 'chargeType' => 'usage',
105
+ 'upgradeMode' => 'immediate',
106
+ 'downgradeMode' => 'immediate',
107
+ 'defaultQuantity' => 10,
108
+ 'tiers' => tiers_for_tiered_component_1
109
+ }))
110
+
111
+
112
+ # create product rate plan, using pricing components and product
113
+ prp = BillForward::ProductRatePlan.new({
114
+ 'currency' => 'USD',
115
+ 'name' => 'A sound plan',
116
+ 'pricingComponents' => pricing_components,
117
+ 'productID' => created_product.id,
118
+ })
119
+ created_prp = BillForward::ProductRatePlan.create(prp)
120
+
121
+
122
+ # create references for tests to use
123
+ @created_prp = created_prp
124
+ end
125
+ context 'a subscription exists for the account' do
126
+ before :all do
127
+ # make subscription..
128
+ # requires:
129
+ # - account [we have this already]
130
+ # - product rate plan [we have this already]
131
+ # - pricing component value instances (for every pricing component on the PRP)
132
+
133
+
134
+ pricing_components = @created_prp.pricingComponents
135
+ # get references to each pricing component we made
136
+ flat_pricing_component_1 = pricing_components[0]
137
+ tiered_pricing_component_1 = pricing_components[1]
138
+
139
+ # create PricingComponentValue instances for every PricingComponent on the PRP
140
+ pricing_component_values = Array.new
141
+ pricing_component_values.push(
142
+ BillForward::PricingComponentValue.new({
143
+ 'pricingComponentID' => flat_pricing_component_1.id,
144
+ 'value' => 1,
145
+ }),
146
+ BillForward::PricingComponentValue.new({
147
+ 'pricingComponentID' => tiered_pricing_component_1.id,
148
+ 'value' => 5,
149
+ }))
150
+
151
+
152
+ # create subscription
153
+ subscription = BillForward::Subscription.new({
154
+ 'type' => 'Subscription',
155
+ 'productRatePlanID' => @created_prp.id,
156
+ 'accountID' => @created_account.id,
157
+ 'name' => 'Memorable Subscription',
158
+ 'description' => 'Memorable Subscription Description',
159
+ 'pricingComponentValues' => pricing_component_values
160
+ })
161
+ created_sub = BillForward::Subscription.create(subscription)
162
+
163
+
164
+ # create references for tests to use
165
+ @created_sub = created_sub
166
+ end
167
+ subject (:account) { @created_account }
168
+ subject (:subscription) { @created_sub }
169
+ describe 'the subscription' do
170
+ it 'can be gotten' do
171
+ subscriptions = BillForward::Subscription.get_by_account_id(account.id)
172
+ expect(subscriptions.first.id).to eq(subscription.id)
173
+ end
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
179
+ end