freeclimb 4.3.0 → 4.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +20 -4
  5. data/docs/DefaultApi.md +433 -0
  6. data/docs/IncomingNumberRequest.md +3 -1
  7. data/docs/SMSTenDLCBrand.md +78 -0
  8. data/docs/SMSTenDLCBrandsListResult.md +32 -0
  9. data/docs/SMSTenDLCBrandsListResultAllOf.md +18 -0
  10. data/docs/SMSTenDLCCampaign.md +78 -0
  11. data/docs/SMSTenDLCCampaignsListResult.md +32 -0
  12. data/docs/SMSTenDLCCampaignsListResultAllOf.md +18 -0
  13. data/docs/SMSTenDLCPartnerCampaign.md +74 -0
  14. data/docs/SMSTenDLCPartnerCampaignBrand.md +38 -0
  15. data/docs/SMSTenDLCPartnerCampaignsListResult.md +32 -0
  16. data/docs/SMSTenDLCPartnerCampaignsListResultAllOf.md +18 -0
  17. data/lib/freeclimb/api/default_api.rb +360 -0
  18. data/lib/freeclimb/models/incoming_number_request.rb +15 -4
  19. data/lib/freeclimb/models/sms_ten_dlc_brand.rb +960 -0
  20. data/lib/freeclimb/models/sms_ten_dlc_brands_list_result.rb +306 -0
  21. data/lib/freeclimb/models/sms_ten_dlc_brands_list_result_all_of.rb +221 -0
  22. data/lib/freeclimb/models/sms_ten_dlc_campaign.rb +814 -0
  23. data/lib/freeclimb/models/sms_ten_dlc_campaigns_list_result.rb +306 -0
  24. data/lib/freeclimb/models/sms_ten_dlc_campaigns_list_result_all_of.rb +221 -0
  25. data/lib/freeclimb/models/sms_ten_dlc_partner_campaign.rb +807 -0
  26. data/lib/freeclimb/models/sms_ten_dlc_partner_campaign_brand.rb +445 -0
  27. data/lib/freeclimb/models/sms_ten_dlc_partner_campaigns_list_result.rb +306 -0
  28. data/lib/freeclimb/models/sms_ten_dlc_partner_campaigns_list_result_all_of.rb +221 -0
  29. data/lib/freeclimb/version.rb +1 -1
  30. data/lib/freeclimb.rb +10 -0
  31. data/openapi.json +1277 -12
  32. data/spec/api/default_api_spec.rb +151 -1
  33. data/spec/models/account_request_spec.rb +143 -2
  34. data/spec/models/account_result_spec.rb +377 -13
  35. data/spec/models/account_status_spec.rb +39 -6
  36. data/spec/models/account_type_spec.rb +26 -4
  37. data/spec/models/add_to_conference_spec.rb +343 -10
  38. data/spec/models/answered_by_spec.rb +26 -4
  39. data/spec/models/application_list_spec.rb +293 -8
  40. data/spec/models/application_request_spec.rb +268 -7
  41. data/spec/models/application_result_spec.rb +418 -13
  42. data/spec/models/available_number_list_spec.rb +293 -8
  43. data/spec/models/available_number_spec.rb +263 -7
  44. data/spec/models/buy_incoming_number_request_spec.rb +168 -3
  45. data/spec/models/call_direction_spec.rb +39 -6
  46. data/spec/models/call_list_spec.rb +293 -8
  47. data/spec/models/call_result_spec.rb +603 -22
  48. data/spec/models/call_status_spec.rb +104 -16
  49. data/spec/models/capabilities_spec.rb +218 -5
  50. data/spec/models/conference_list_spec.rb +293 -8
  51. data/spec/models/conference_participant_list_spec.rb +293 -8
  52. data/spec/models/conference_participant_result_spec.rb +343 -10
  53. data/spec/models/conference_result_spec.rb +464 -16
  54. data/spec/models/conference_status_spec.rb +52 -8
  55. data/spec/models/create_conference_request_spec.rb +228 -6
  56. data/spec/models/create_conference_spec.rb +253 -7
  57. data/spec/models/enqueue_spec.rb +193 -4
  58. data/spec/models/filter_logs_request_spec.rb +118 -1
  59. data/spec/models/get_digits_spec.rb +318 -9
  60. data/spec/models/get_speech_reason_spec.rb +78 -12
  61. data/spec/models/get_speech_spec.rb +388 -14
  62. data/spec/models/grammar_file_built_in_spec.rb +195 -30
  63. data/spec/models/grammar_type_spec.rb +26 -4
  64. data/spec/models/hangup_spec.rb +118 -1
  65. data/spec/models/if_machine_spec.rb +26 -4
  66. data/spec/models/incoming_number_list_spec.rb +293 -8
  67. data/spec/models/incoming_number_request_spec.rb +173 -2
  68. data/spec/models/incoming_number_result_spec.rb +488 -16
  69. data/spec/models/language_spec.rb +338 -52
  70. data/spec/models/log_level_spec.rb +39 -6
  71. data/spec/models/log_list_spec.rb +293 -8
  72. data/spec/models/log_result_spec.rb +275 -8
  73. data/spec/models/machine_type_spec.rb +26 -4
  74. data/spec/models/make_call_request_spec.rb +343 -10
  75. data/spec/models/message_direction_spec.rb +26 -4
  76. data/spec/models/message_request_spec.rb +318 -9
  77. data/spec/models/message_result_spec.rb +431 -13
  78. data/spec/models/message_status_spec.rb +143 -22
  79. data/spec/models/messages_list_spec.rb +293 -8
  80. data/spec/models/mutable_resource_model_spec.rb +193 -4
  81. data/spec/models/out_dial_spec.rb +345 -11
  82. data/spec/models/pagination_model_spec.rb +268 -7
  83. data/spec/models/park_spec.rb +168 -3
  84. data/spec/models/pause_spec.rb +118 -1
  85. data/spec/models/percl_command_spec.rb +132 -3
  86. data/spec/models/percl_script_spec.rb +118 -1
  87. data/spec/models/play_beep_spec.rb +52 -8
  88. data/spec/models/play_early_media_spec.rb +118 -1
  89. data/spec/models/play_spec.rb +193 -4
  90. data/spec/models/queue_list_spec.rb +293 -8
  91. data/spec/models/queue_member_list_spec.rb +293 -8
  92. data/spec/models/queue_member_spec.rb +218 -5
  93. data/spec/models/queue_request_spec.rb +143 -2
  94. data/spec/models/queue_result_spec.rb +369 -11
  95. data/spec/models/queue_result_status_spec.rb +52 -8
  96. data/spec/models/record_utterance_spec.rb +268 -7
  97. data/spec/models/record_utterance_term_reason_spec.rb +52 -8
  98. data/spec/models/recording_list_spec.rb +293 -8
  99. data/spec/models/recording_result_spec.rb +318 -9
  100. data/spec/models/redirect_spec.rb +118 -1
  101. data/spec/models/reject_spec.rb +118 -1
  102. data/spec/models/remove_from_conference_spec.rb +118 -1
  103. data/spec/models/request_type_spec.rb +299 -46
  104. data/spec/models/say_spec.rb +218 -5
  105. data/spec/models/send_digits_spec.rb +168 -3
  106. data/spec/models/set_listen_spec.rb +143 -2
  107. data/spec/models/set_talk_spec.rb +143 -2
  108. data/spec/models/sms_spec.rb +193 -4
  109. data/spec/models/sms_ten_dlc_brand_spec.rb +1240 -0
  110. data/spec/models/sms_ten_dlc_brands_list_result_spec.rb +361 -0
  111. data/spec/models/sms_ten_dlc_campaign_spec.rb +1055 -0
  112. data/spec/models/sms_ten_dlc_campaigns_list_result_spec.rb +361 -0
  113. data/spec/models/sms_ten_dlc_partner_campaign_brand_spec.rb +448 -0
  114. data/spec/models/sms_ten_dlc_partner_campaign_spec.rb +994 -0
  115. data/spec/models/sms_ten_dlc_partner_campaigns_list_result_spec.rb +361 -0
  116. data/spec/models/terminate_conference_spec.rb +118 -1
  117. data/spec/models/update_call_request_spec.rb +120 -2
  118. data/spec/models/update_call_request_status_spec.rb +26 -4
  119. data/spec/models/update_conference_participant_request_spec.rb +143 -2
  120. data/spec/models/update_conference_request_spec.rb +180 -5
  121. data/spec/models/update_conference_request_status_spec.rb +26 -4
  122. metadata +102 -68
@@ -0,0 +1,1055 @@
1
+ =begin
2
+ #FreeClimb API
3
+
4
+ #FreeClimb is a cloud-based application programming interface (API) that puts the power of the Vail platform in your hands. FreeClimb simplifies the process of creating applications that can use a full range of telephony features without requiring specialized or on-site telephony equipment. Using the FreeClimb REST API to write applications is easy! You have the option to use the language of your choice or hit the API directly. Your application can execute a command by issuing a RESTful request to the FreeClimb API. The base URL to send HTTP requests to the FreeClimb REST API is: /apiserver. FreeClimb authenticates and processes your request.
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+ Contact: support@freeclimb.com
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 5.4.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Freeclimb::SMSTenDLCCampaign
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Freeclimb::SMSTenDLCCampaign do
21
+ let(:instance) { Freeclimb::SMSTenDLCCampaign.new }
22
+
23
+ describe 'test an instance of SMSTenDLCCampaign' do
24
+ it 'should create an instance of SMSTenDLCCampaign' do
25
+ expect(instance).to be_instance_of(Freeclimb::SMSTenDLCCampaign)
26
+ end
27
+ end
28
+ describe 'test attribute "account_id"' do
29
+ it 'should work' do
30
+ instance.account_id = "TEST_STRING"
31
+ expect(instance.account_id).to eq("TEST_STRING")
32
+ end
33
+ end
34
+
35
+ describe 'test attribute "campaign_id"' do
36
+ it 'should work' do
37
+ instance.campaign_id = "TEST_STRING"
38
+ expect(instance.campaign_id).to eq("TEST_STRING")
39
+ end
40
+ end
41
+
42
+ describe 'test attribute "csp_id"' do
43
+ it 'should work' do
44
+ instance.csp_id = "TEST_STRING"
45
+ expect(instance.csp_id).to eq("TEST_STRING")
46
+ end
47
+ end
48
+
49
+
50
+ describe 'test attribute "reseller_id"' do
51
+ it 'should work with length 8' do
52
+ instance.reseller_id = "TEST_STR"
53
+ expect(instance.reseller_id).to eq("TEST_STR")
54
+ end
55
+ it 'should not work with length > 8' do
56
+ expect{instance.reseller_id = "TEST_STRING"}.to raise_error(ArgumentError)
57
+ end
58
+ end
59
+
60
+ describe 'test attribute "status"' do
61
+ it 'assigns value ACTIVE' do
62
+ instance.status = "ACTIVE"
63
+ expect(instance.status).to eq("ACTIVE")
64
+ end
65
+ it 'assigns value EXPIRED' do
66
+ instance.status = "EXPIRED"
67
+ expect(instance.status).to eq("EXPIRED")
68
+ end
69
+ it 'throws error on invalid enum' do
70
+ instance = Freeclimb::SMSTenDLCCampaign.new
71
+ expect{instance.status = "INVALID_ENUM"}.to raise_error(ArgumentError)
72
+ end
73
+ end
74
+
75
+ describe 'test attribute "create_date"' do
76
+ it 'should work' do
77
+ instance.create_date = "2022-07-05T15:17:05Z"
78
+ expect(instance.create_date).to eq("2022-07-05T15:17:05Z")
79
+ end
80
+ end
81
+
82
+ describe 'test attribute "auto_renewal"' do
83
+ it 'should work' do
84
+ instance.auto_renewal = false
85
+ expect(instance.auto_renewal).to eq(false)
86
+ end
87
+ end
88
+
89
+ describe 'test attribute "billed_date"' do
90
+ it 'should work' do
91
+ instance.billed_date = "2022-07-05T15:17:05Z"
92
+ expect(instance.billed_date).to eq("2022-07-05T15:17:05Z")
93
+ end
94
+ end
95
+
96
+
97
+ describe 'test attribute "brand_id"' do
98
+ it 'should work with length 8' do
99
+ instance.brand_id = "TEST_STR"
100
+ expect(instance.brand_id).to eq("TEST_STR")
101
+ end
102
+ it 'should not work with length > 8' do
103
+ expect{instance.brand_id = "TEST_STRING"}.to raise_error(ArgumentError)
104
+ end
105
+ end
106
+
107
+ describe 'test attribute "usecase"' do
108
+ it 'should work' do
109
+ instance.usecase = "TEST_STRING"
110
+ expect(instance.usecase).to eq("TEST_STRING")
111
+ end
112
+ end
113
+
114
+ describe 'test attribute "sub_usecases"' do
115
+ it 'should work' do
116
+ instance.sub_usecases = ["ELEMENT_1", "ELEMENT_2"]
117
+ expect(instance.sub_usecases).to eq(["ELEMENT_1", "ELEMENT_2"])
118
+ end
119
+ end
120
+
121
+ describe 'test attribute "description"' do
122
+ it 'should work' do
123
+ instance.description = "TEST_STRING"
124
+ expect(instance.description).to eq("TEST_STRING")
125
+ end
126
+ end
127
+
128
+ describe 'test attribute "embedded_link"' do
129
+ it 'should work' do
130
+ instance.embedded_link = false
131
+ expect(instance.embedded_link).to eq(false)
132
+ end
133
+ end
134
+
135
+ describe 'test attribute "embedded_phone"' do
136
+ it 'should work' do
137
+ instance.embedded_phone = false
138
+ expect(instance.embedded_phone).to eq(false)
139
+ end
140
+ end
141
+
142
+ describe 'test attribute "affiliate_marketing"' do
143
+ it 'should work' do
144
+ instance.affiliate_marketing = false
145
+ expect(instance.affiliate_marketing).to eq(false)
146
+ end
147
+ end
148
+
149
+ describe 'test attribute "number_pool"' do
150
+ it 'should work' do
151
+ instance.number_pool = false
152
+ expect(instance.number_pool).to eq(false)
153
+ end
154
+ end
155
+
156
+ describe 'test attribute "age_gated"' do
157
+ it 'should work' do
158
+ instance.age_gated = false
159
+ expect(instance.age_gated).to eq(false)
160
+ end
161
+ end
162
+
163
+ describe 'test attribute "direct_lending"' do
164
+ it 'should work' do
165
+ instance.direct_lending = false
166
+ expect(instance.direct_lending).to eq(false)
167
+ end
168
+ end
169
+
170
+ describe 'test attribute "subscriber_optin"' do
171
+ it 'should work' do
172
+ instance.subscriber_optin = false
173
+ expect(instance.subscriber_optin).to eq(false)
174
+ end
175
+ end
176
+
177
+ describe 'test attribute "subscriber_optout"' do
178
+ it 'should work' do
179
+ instance.subscriber_optout = false
180
+ expect(instance.subscriber_optout).to eq(false)
181
+ end
182
+ end
183
+
184
+ describe 'test attribute "subscriber_help"' do
185
+ it 'should work' do
186
+ instance.subscriber_help = false
187
+ expect(instance.subscriber_help).to eq(false)
188
+ end
189
+ end
190
+
191
+ describe 'test attribute "sample1"' do
192
+ it 'should work' do
193
+ instance.sample1 = "TEST_STRING"
194
+ expect(instance.sample1).to eq("TEST_STRING")
195
+ end
196
+ end
197
+
198
+ describe 'test attribute "sample2"' do
199
+ it 'should work' do
200
+ instance.sample2 = "TEST_STRING"
201
+ expect(instance.sample2).to eq("TEST_STRING")
202
+ end
203
+ end
204
+
205
+ describe 'test attribute "sample3"' do
206
+ it 'should work' do
207
+ instance.sample3 = "TEST_STRING"
208
+ expect(instance.sample3).to eq("TEST_STRING")
209
+ end
210
+ end
211
+
212
+ describe 'test attribute "sample4"' do
213
+ it 'should work' do
214
+ instance.sample4 = "TEST_STRING"
215
+ expect(instance.sample4).to eq("TEST_STRING")
216
+ end
217
+ end
218
+
219
+ describe 'test attribute "sample5"' do
220
+ it 'should work' do
221
+ instance.sample5 = "TEST_STRING"
222
+ expect(instance.sample5).to eq("TEST_STRING")
223
+ end
224
+ end
225
+
226
+ describe 'test attribute "message_flow"' do
227
+ it 'should work' do
228
+ instance.message_flow = "TEST_STRING"
229
+ expect(instance.message_flow).to eq("TEST_STRING")
230
+ end
231
+ end
232
+
233
+ describe 'test attribute "help_message"' do
234
+ it 'should work' do
235
+ instance.help_message = "TEST_STRING"
236
+ expect(instance.help_message).to eq("TEST_STRING")
237
+ end
238
+ end
239
+
240
+ describe 'test attribute "reference_id"' do
241
+ it 'should work' do
242
+ instance.reference_id = "TEST_STRING"
243
+ expect(instance.reference_id).to eq("TEST_STRING")
244
+ end
245
+ end
246
+
247
+ describe 'test attribute "mock"' do
248
+ it 'should work' do
249
+ instance.mock = false
250
+ expect(instance.mock).to eq(false)
251
+ end
252
+ end
253
+
254
+ describe 'test attribute "next_renewal_or_expiration_date"' do
255
+ it 'should work' do
256
+ instance.next_renewal_or_expiration_date = "2000-01-01"
257
+ expect(instance.next_renewal_or_expiration_date).to eq("2000-01-01")
258
+ end
259
+ end
260
+
261
+ describe 'test method "initialize"' do
262
+ it 'properly initializes with values' do
263
+ expect{instance = Freeclimb::SMSTenDLCCampaign.new(
264
+ account_id: "TS",
265
+ campaign_id: "TS",
266
+ csp_id: "TS",
267
+ reseller_id: "TS",
268
+ status: "ACTIVE",
269
+ create_date: "2022-07-05T15:17:05Z",
270
+ auto_renewal: true,
271
+ billed_date: "2022-07-05T15:17:05Z",
272
+ brand_id: "TS",
273
+ usecase: "TS",
274
+ sub_usecases: Array.new(),
275
+ description: "TS",
276
+ embedded_link: true,
277
+ embedded_phone: true,
278
+ affiliate_marketing: true,
279
+ number_pool: true,
280
+ age_gated: true,
281
+ direct_lending: true,
282
+ subscriber_optin: true,
283
+ subscriber_optout: true,
284
+ subscriber_help: true,
285
+ sample1: "TS",
286
+ sample2: "TS",
287
+ sample3: "TS",
288
+ sample4: "TS",
289
+ sample5: "TS",
290
+ message_flow: "TS",
291
+ help_message: "TS",
292
+ reference_id: "TS",
293
+ mock: true,
294
+ next_renewal_or_expiration_date: "2000-01-01",
295
+ )}.not_to raise_error()
296
+ end
297
+ it 'fails to initialize with input argument that is not a hash in Freeclimb::SMSTenDLCCampaign' do
298
+ expect{instance = Freeclimb::SMSTenDLCCampaign.new(
299
+ account_id: "TS",
300
+ campaign_id: "TS",
301
+ csp_id: "TS",
302
+ reseller_id: "TS",
303
+ status: "ACTIVE",
304
+ create_date: "2022-07-05T15:17:05Z",
305
+ auto_renewal: true,
306
+ billed_date: "2022-07-05T15:17:05Z",
307
+ brand_id: "TS",
308
+ usecase: "TS",
309
+ sub_usecases: Array.new(),
310
+ description: "TS",
311
+ embedded_link: true,
312
+ embedded_phone: true,
313
+ affiliate_marketing: true,
314
+ number_pool: true,
315
+ age_gated: true,
316
+ direct_lending: true,
317
+ subscriber_optin: true,
318
+ subscriber_optout: true,
319
+ subscriber_help: true,
320
+ sample1: "TS",
321
+ sample2: "TS",
322
+ sample3: "TS",
323
+ sample4: "TS",
324
+ sample5: "TS",
325
+ message_flow: "TS",
326
+ help_message: "TS",
327
+ reference_id: "TS",
328
+ mock: true,
329
+ next_renewal_or_expiration_date: "2000-01-01",
330
+ invalid_attribute: true
331
+ )}.to raise_error(ArgumentError)
332
+ end
333
+ it 'fails to initialize with invalid attribute' do
334
+ expect{instance = Freeclimb::SMSTenDLCCampaign.new(
335
+ account_id: "TS",
336
+ campaign_id: "TS",
337
+ csp_id: "TS",
338
+ reseller_id: "TS",
339
+ status: "ACTIVE",
340
+ create_date: "2022-07-05T15:17:05Z",
341
+ auto_renewal: true,
342
+ billed_date: "2022-07-05T15:17:05Z",
343
+ brand_id: "TS",
344
+ usecase: "TS",
345
+ sub_usecases: Array.new(),
346
+ description: "TS",
347
+ embedded_link: true,
348
+ embedded_phone: true,
349
+ affiliate_marketing: true,
350
+ number_pool: true,
351
+ age_gated: true,
352
+ direct_lending: true,
353
+ subscriber_optin: true,
354
+ subscriber_optout: true,
355
+ subscriber_help: true,
356
+ sample1: "TS",
357
+ sample2: "TS",
358
+ sample3: "TS",
359
+ sample4: "TS",
360
+ sample5: "TS",
361
+ message_flow: "TS",
362
+ help_message: "TS",
363
+ reference_id: "TS",
364
+ mock: true,
365
+ next_renewal_or_expiration_date: "2000-01-01",
366
+ invalid_attribute: true
367
+ )}.to raise_error(ArgumentError)
368
+ end
369
+ end
370
+
371
+ describe 'test method "valid"' do
372
+ it 'checks if properties are valid' do
373
+ instance = Freeclimb::SMSTenDLCCampaign.new(
374
+ account_id: "TS",
375
+ campaign_id: "TS",
376
+ csp_id: "TS",
377
+ reseller_id: "TS",
378
+ status: "ACTIVE",
379
+ create_date: "2022-07-05T15:17:05Z",
380
+ auto_renewal: true,
381
+ billed_date: "2022-07-05T15:17:05Z",
382
+ brand_id: "TS",
383
+ usecase: "TS",
384
+ sub_usecases: Array.new(),
385
+ description: "TS",
386
+ embedded_link: true,
387
+ embedded_phone: true,
388
+ affiliate_marketing: true,
389
+ number_pool: true,
390
+ age_gated: true,
391
+ direct_lending: true,
392
+ subscriber_optin: true,
393
+ subscriber_optout: true,
394
+ subscriber_help: true,
395
+ sample1: "TS",
396
+ sample2: "TS",
397
+ sample3: "TS",
398
+ sample4: "TS",
399
+ sample5: "TS",
400
+ message_flow: "TS",
401
+ help_message: "TS",
402
+ reference_id: "TS",
403
+ mock: true,
404
+ next_renewal_or_expiration_date: "2000-01-01",
405
+ )
406
+ expect(instance.valid?).to eq(true)
407
+ end
408
+ end
409
+
410
+ describe 'test method "eql?"' do
411
+ it 'checks if objects are equal' do
412
+ obj = Object.new()
413
+ instance_1 = Freeclimb::SMSTenDLCCampaign.new(
414
+ account_id: "TS",
415
+ campaign_id: "TS",
416
+ csp_id: "TS",
417
+ reseller_id: "TS",
418
+ status: "ACTIVE",
419
+ auto_renewal: true,
420
+ brand_id: "TS",
421
+ usecase: "TS",
422
+ sub_usecases: [],
423
+ description: "TS",
424
+ embedded_link: true,
425
+ embedded_phone: true,
426
+ affiliate_marketing: true,
427
+ number_pool: true,
428
+ age_gated: true,
429
+ direct_lending: true,
430
+ subscriber_optin: true,
431
+ subscriber_optout: true,
432
+ subscriber_help: true,
433
+ sample1: "TS",
434
+ sample2: "TS",
435
+ sample3: "TS",
436
+ sample4: "TS",
437
+ sample5: "TS",
438
+ message_flow: "TS",
439
+ help_message: "TS",
440
+ reference_id: "TS",
441
+ mock: true,
442
+ )
443
+ instance_2 = Freeclimb::SMSTenDLCCampaign.new(
444
+ account_id: "TS",
445
+ campaign_id: "TS",
446
+ csp_id: "TS",
447
+ reseller_id: "TS",
448
+ status: "ACTIVE",
449
+ auto_renewal: true,
450
+ brand_id: "TS",
451
+ usecase: "TS",
452
+ sub_usecases: [],
453
+ description: "TS",
454
+ embedded_link: true,
455
+ embedded_phone: true,
456
+ affiliate_marketing: true,
457
+ number_pool: true,
458
+ age_gated: true,
459
+ direct_lending: true,
460
+ subscriber_optin: true,
461
+ subscriber_optout: true,
462
+ subscriber_help: true,
463
+ sample1: "TS",
464
+ sample2: "TS",
465
+ sample3: "TS",
466
+ sample4: "TS",
467
+ sample5: "TS",
468
+ message_flow: "TS",
469
+ help_message: "TS",
470
+ reference_id: "TS",
471
+ mock: true,
472
+ )
473
+ expect(instance_1.eql?(instance_2)).to eq(true)
474
+ end
475
+ it 'checks if objects are not equal' do
476
+ instance_1 = Freeclimb::SMSTenDLCCampaign.new(
477
+ account_id: "TS",
478
+ campaign_id: "TS",
479
+ csp_id: "TS",
480
+ reseller_id: "TS",
481
+ status: "ACTIVE",
482
+ auto_renewal: true,
483
+ brand_id: "TS",
484
+ usecase: "TS",
485
+ sub_usecases: [],
486
+ description: "TS",
487
+ embedded_link: true,
488
+ embedded_phone: true,
489
+ affiliate_marketing: true,
490
+ number_pool: true,
491
+ age_gated: true,
492
+ direct_lending: true,
493
+ subscriber_optin: true,
494
+ subscriber_optout: true,
495
+ subscriber_help: true,
496
+ sample1: "TS",
497
+ sample2: "TS",
498
+ sample3: "TS",
499
+ sample4: "TS",
500
+ sample5: "TS",
501
+ message_flow: "TS",
502
+ help_message: "TS",
503
+ reference_id: "TS",
504
+ mock: true,
505
+ )
506
+ instance_2 = Freeclimb::SMSTenDLCCampaign.new(
507
+ account_id: "ST",
508
+ campaign_id: "ST",
509
+ csp_id: "ST",
510
+ reseller_id: "ST",
511
+ status: "EXPIRED",
512
+ auto_renewal: false,
513
+ brand_id: "ST",
514
+ usecase: "ST",
515
+ sub_usecases: nil,
516
+ description: "ST",
517
+ embedded_link: false,
518
+ embedded_phone: false,
519
+ affiliate_marketing: false,
520
+ number_pool: false,
521
+ age_gated: false,
522
+ direct_lending: false,
523
+ subscriber_optin: false,
524
+ subscriber_optout: false,
525
+ subscriber_help: false,
526
+ sample1: "ST",
527
+ sample2: "ST",
528
+ sample3: "ST",
529
+ sample4: "ST",
530
+ sample5: "ST",
531
+ message_flow: "ST",
532
+ help_message: "ST",
533
+ reference_id: "ST",
534
+ mock: false,
535
+ )
536
+ expect(instance_1.eql?(instance_2)).to eq(false)
537
+ end
538
+ end
539
+
540
+ describe 'test method "hash"' do
541
+ it 'calculates hash code' do
542
+ instance = Freeclimb::SMSTenDLCCampaign.new(
543
+ account_id: "TS",
544
+ campaign_id: "TS",
545
+ csp_id: "TS",
546
+ reseller_id: "TS",
547
+ status: "ACTIVE",
548
+ create_date: "2022-07-05T15:17:05Z",
549
+ auto_renewal: true,
550
+ billed_date: "2022-07-05T15:17:05Z",
551
+ brand_id: "TS",
552
+ usecase: "TS",
553
+ sub_usecases: Array.new(),
554
+ description: "TS",
555
+ embedded_link: true,
556
+ embedded_phone: true,
557
+ affiliate_marketing: true,
558
+ number_pool: true,
559
+ age_gated: true,
560
+ direct_lending: true,
561
+ subscriber_optin: true,
562
+ subscriber_optout: true,
563
+ subscriber_help: true,
564
+ sample1: "TS",
565
+ sample2: "TS",
566
+ sample3: "TS",
567
+ sample4: "TS",
568
+ sample5: "TS",
569
+ message_flow: "TS",
570
+ help_message: "TS",
571
+ reference_id: "TS",
572
+ mock: true,
573
+ next_renewal_or_expiration_date: "2000-01-01",
574
+ )
575
+ expect(instance.hash).to be_a_kind_of(Integer)
576
+ end
577
+ end
578
+
579
+ describe 'test method "build_from_hash"' do
580
+ it 'builds equivalent model from hash code' do
581
+ instance_1 = Freeclimb::SMSTenDLCCampaign.new(
582
+ account_id: "TS",
583
+ campaign_id: "TS",
584
+ csp_id: "TS",
585
+ reseller_id: "TS",
586
+ status: "ACTIVE",
587
+ create_date: "2022-07-05T15:17:05Z",
588
+ auto_renewal: true,
589
+ billed_date: "2022-07-05T15:17:05Z",
590
+ brand_id: "TS",
591
+ usecase: "TS",
592
+ sub_usecases: Array.new(),
593
+ description: "TS",
594
+ embedded_link: true,
595
+ embedded_phone: true,
596
+ affiliate_marketing: true,
597
+ number_pool: true,
598
+ age_gated: true,
599
+ direct_lending: true,
600
+ subscriber_optin: true,
601
+ subscriber_optout: true,
602
+ subscriber_help: true,
603
+ sample1: "TS",
604
+ sample2: "TS",
605
+ sample3: "TS",
606
+ sample4: "TS",
607
+ sample5: "TS",
608
+ message_flow: "TS",
609
+ help_message: "TS",
610
+ reference_id: "TS",
611
+ mock: true,
612
+ next_renewal_or_expiration_date: "2000-01-01",
613
+ )
614
+ instance_2 = Freeclimb::SMSTenDLCCampaign.new
615
+ expect(instance_2.build_from_hash(instance_1.hash)).to eq(instance_1.build_from_hash(instance_1.hash))
616
+ end
617
+ end
618
+
619
+ describe 'test method "_deserialize"' do
620
+ instance = Freeclimb::SMSTenDLCCampaign.new(
621
+ account_id: "TS",
622
+ campaign_id: "TS",
623
+ csp_id: "TS",
624
+ reseller_id: "TS",
625
+ status: "ACTIVE",
626
+ create_date: "2022-07-05T15:17:05Z",
627
+ auto_renewal: true,
628
+ billed_date: "2022-07-05T15:17:05Z",
629
+ brand_id: "TS",
630
+ usecase: "TS",
631
+ sub_usecases: Array.new(),
632
+ description: "TS",
633
+ embedded_link: true,
634
+ embedded_phone: true,
635
+ affiliate_marketing: true,
636
+ number_pool: true,
637
+ age_gated: true,
638
+ direct_lending: true,
639
+ subscriber_optin: true,
640
+ subscriber_optout: true,
641
+ subscriber_help: true,
642
+ sample1: "TS",
643
+ sample2: "TS",
644
+ sample3: "TS",
645
+ sample4: "TS",
646
+ sample5: "TS",
647
+ message_flow: "TS",
648
+ help_message: "TS",
649
+ reference_id: "TS",
650
+ mock: true,
651
+ next_renewal_or_expiration_date: "2000-01-01",
652
+ )
653
+ it 'deserializes the data of account_id' do
654
+ expect(instance._deserialize("String", instance.account_id)).to be_a_kind_of(String)
655
+ end
656
+ it 'deserializes the data of campaign_id' do
657
+ expect(instance._deserialize("String", instance.campaign_id)).to be_a_kind_of(String)
658
+ end
659
+ it 'deserializes the data of csp_id' do
660
+ expect(instance._deserialize("String", instance.csp_id)).to be_a_kind_of(String)
661
+ end
662
+ it 'deserializes the data of reseller_id' do
663
+ expect(instance._deserialize("String", instance.reseller_id)).to be_a_kind_of(String)
664
+ end
665
+ it 'deserializes the data of status' do
666
+ expect(instance._deserialize("String", instance.status)).to be_a_kind_of(String)
667
+ end
668
+ it 'deserializes the data of create_date' do
669
+ expect(instance._deserialize("Time", instance.create_date)).to be_a_kind_of(Time)
670
+ end
671
+ it 'deserializes the data of auto_renewal' do
672
+ expect(instance._deserialize("Boolean", instance.auto_renewal)).to be_a_kind_of(TrueClass)
673
+ end
674
+ it 'deserializes the data of billed_date' do
675
+ expect(instance._deserialize("Time", instance.billed_date)).to be_a_kind_of(Time)
676
+ end
677
+ it 'deserializes the data of brand_id' do
678
+ expect(instance._deserialize("String", instance.brand_id)).to be_a_kind_of(String)
679
+ end
680
+ it 'deserializes the data of usecase' do
681
+ expect(instance._deserialize("String", instance.usecase)).to be_a_kind_of(String)
682
+ end
683
+ it 'deserializes the data of sub_usecases' do
684
+ expect(instance._deserialize("Array<String>", instance.sub_usecases)).to be_a_kind_of(Array)
685
+ end
686
+ it 'deserializes the data of description' do
687
+ expect(instance._deserialize("String", instance.description)).to be_a_kind_of(String)
688
+ end
689
+ it 'deserializes the data of embedded_link' do
690
+ expect(instance._deserialize("Boolean", instance.embedded_link)).to be_a_kind_of(TrueClass)
691
+ end
692
+ it 'deserializes the data of embedded_phone' do
693
+ expect(instance._deserialize("Boolean", instance.embedded_phone)).to be_a_kind_of(TrueClass)
694
+ end
695
+ it 'deserializes the data of affiliate_marketing' do
696
+ expect(instance._deserialize("Boolean", instance.affiliate_marketing)).to be_a_kind_of(TrueClass)
697
+ end
698
+ it 'deserializes the data of number_pool' do
699
+ expect(instance._deserialize("Boolean", instance.number_pool)).to be_a_kind_of(TrueClass)
700
+ end
701
+ it 'deserializes the data of age_gated' do
702
+ expect(instance._deserialize("Boolean", instance.age_gated)).to be_a_kind_of(TrueClass)
703
+ end
704
+ it 'deserializes the data of direct_lending' do
705
+ expect(instance._deserialize("Boolean", instance.direct_lending)).to be_a_kind_of(TrueClass)
706
+ end
707
+ it 'deserializes the data of subscriber_optin' do
708
+ expect(instance._deserialize("Boolean", instance.subscriber_optin)).to be_a_kind_of(TrueClass)
709
+ end
710
+ it 'deserializes the data of subscriber_optout' do
711
+ expect(instance._deserialize("Boolean", instance.subscriber_optout)).to be_a_kind_of(TrueClass)
712
+ end
713
+ it 'deserializes the data of subscriber_help' do
714
+ expect(instance._deserialize("Boolean", instance.subscriber_help)).to be_a_kind_of(TrueClass)
715
+ end
716
+ it 'deserializes the data of sample1' do
717
+ expect(instance._deserialize("String", instance.sample1)).to be_a_kind_of(String)
718
+ end
719
+ it 'deserializes the data of sample2' do
720
+ expect(instance._deserialize("String", instance.sample2)).to be_a_kind_of(String)
721
+ end
722
+ it 'deserializes the data of sample3' do
723
+ expect(instance._deserialize("String", instance.sample3)).to be_a_kind_of(String)
724
+ end
725
+ it 'deserializes the data of sample4' do
726
+ expect(instance._deserialize("String", instance.sample4)).to be_a_kind_of(String)
727
+ end
728
+ it 'deserializes the data of sample5' do
729
+ expect(instance._deserialize("String", instance.sample5)).to be_a_kind_of(String)
730
+ end
731
+ it 'deserializes the data of message_flow' do
732
+ expect(instance._deserialize("String", instance.message_flow)).to be_a_kind_of(String)
733
+ end
734
+ it 'deserializes the data of help_message' do
735
+ expect(instance._deserialize("String", instance.help_message)).to be_a_kind_of(String)
736
+ end
737
+ it 'deserializes the data of reference_id' do
738
+ expect(instance._deserialize("String", instance.reference_id)).to be_a_kind_of(String)
739
+ end
740
+ it 'deserializes the data of mock' do
741
+ expect(instance._deserialize("Boolean", instance.mock)).to be_a_kind_of(TrueClass)
742
+ end
743
+ it 'deserializes the data of next_renewal_or_expiration_date' do
744
+ expect(instance._deserialize("Date", instance.next_renewal_or_expiration_date)).to be_a_kind_of(Date)
745
+ end
746
+ end
747
+
748
+ describe 'test method "to_s"' do
749
+ it 'returns the string representation of the object' do
750
+ instance = Freeclimb::SMSTenDLCCampaign.new(
751
+ account_id: "TS",
752
+ campaign_id: "TS",
753
+ csp_id: "TS",
754
+ reseller_id: "TS",
755
+ status: "ACTIVE",
756
+ create_date: "2022-07-05T15:17:05Z",
757
+ auto_renewal: true,
758
+ billed_date: "2022-07-05T15:17:05Z",
759
+ brand_id: "TS",
760
+ usecase: "TS",
761
+ sub_usecases: Array.new(),
762
+ description: "TS",
763
+ embedded_link: true,
764
+ embedded_phone: true,
765
+ affiliate_marketing: true,
766
+ number_pool: true,
767
+ age_gated: true,
768
+ direct_lending: true,
769
+ subscriber_optin: true,
770
+ subscriber_optout: true,
771
+ subscriber_help: true,
772
+ sample1: "TS",
773
+ sample2: "TS",
774
+ sample3: "TS",
775
+ sample4: "TS",
776
+ sample5: "TS",
777
+ message_flow: "TS",
778
+ help_message: "TS",
779
+ reference_id: "TS",
780
+ mock: true,
781
+ next_renewal_or_expiration_date: "2000-01-01",
782
+ )
783
+ expect(instance.to_s).to eq(instance.to_hash.to_s)
784
+ end
785
+ end
786
+
787
+ describe 'test method "to_hash"' do
788
+ it 'returns the object in the form of hash' do
789
+ instance = Freeclimb::SMSTenDLCCampaign.new(
790
+ account_id: "TS",
791
+ campaign_id: "TS",
792
+ csp_id: "TS",
793
+ reseller_id: "TS",
794
+ status: "ACTIVE",
795
+ create_date: "2022-07-05T15:17:05Z",
796
+ auto_renewal: true,
797
+ billed_date: "2022-07-05T15:17:05Z",
798
+ brand_id: "TS",
799
+ usecase: "TS",
800
+ sub_usecases: Array.new(),
801
+ description: "TS",
802
+ embedded_link: true,
803
+ embedded_phone: true,
804
+ affiliate_marketing: true,
805
+ number_pool: true,
806
+ age_gated: true,
807
+ direct_lending: true,
808
+ subscriber_optin: true,
809
+ subscriber_optout: true,
810
+ subscriber_help: true,
811
+ sample1: "TS",
812
+ sample2: "TS",
813
+ sample3: "TS",
814
+ sample4: "TS",
815
+ sample5: "TS",
816
+ message_flow: "TS",
817
+ help_message: "TS",
818
+ reference_id: "TS",
819
+ mock: true,
820
+ next_renewal_or_expiration_date: "2000-01-01",
821
+ )
822
+ expect(instance.to_hash).to be_a_kind_of(Hash)
823
+ end
824
+ it 'creates equal hash for two equal objects' do
825
+ obj = Object.new()
826
+ instance_1 = Freeclimb::SMSTenDLCCampaign.new(
827
+ account_id: "TS",
828
+ campaign_id: "TS",
829
+ csp_id: "TS",
830
+ reseller_id: "TS",
831
+ status: "ACTIVE",
832
+ create_date: "2022-07-05T15:17:05Z",
833
+ auto_renewal: true,
834
+ billed_date: "2022-07-05T15:17:05Z",
835
+ brand_id: "TS",
836
+ usecase: "TS",
837
+ sub_usecases: Array.new(),
838
+ description: "TS",
839
+ embedded_link: true,
840
+ embedded_phone: true,
841
+ affiliate_marketing: true,
842
+ number_pool: true,
843
+ age_gated: true,
844
+ direct_lending: true,
845
+ subscriber_optin: true,
846
+ subscriber_optout: true,
847
+ subscriber_help: true,
848
+ sample1: "TS",
849
+ sample2: "TS",
850
+ sample3: "TS",
851
+ sample4: "TS",
852
+ sample5: "TS",
853
+ message_flow: "TS",
854
+ help_message: "TS",
855
+ reference_id: "TS",
856
+ mock: true,
857
+ next_renewal_or_expiration_date: "2000-01-01",
858
+ )
859
+ instance_2 = Freeclimb::SMSTenDLCCampaign.new(
860
+ account_id: "TS",
861
+ campaign_id: "TS",
862
+ csp_id: "TS",
863
+ reseller_id: "TS",
864
+ status: "ACTIVE",
865
+ create_date: "2022-07-05T15:17:05Z",
866
+ auto_renewal: true,
867
+ billed_date: "2022-07-05T15:17:05Z",
868
+ brand_id: "TS",
869
+ usecase: "TS",
870
+ sub_usecases: Array.new(),
871
+ description: "TS",
872
+ embedded_link: true,
873
+ embedded_phone: true,
874
+ affiliate_marketing: true,
875
+ number_pool: true,
876
+ age_gated: true,
877
+ direct_lending: true,
878
+ subscriber_optin: true,
879
+ subscriber_optout: true,
880
+ subscriber_help: true,
881
+ sample1: "TS",
882
+ sample2: "TS",
883
+ sample3: "TS",
884
+ sample4: "TS",
885
+ sample5: "TS",
886
+ message_flow: "TS",
887
+ help_message: "TS",
888
+ reference_id: "TS",
889
+ mock: true,
890
+ next_renewal_or_expiration_date: "2000-01-01",
891
+ )
892
+ expect(instance_1.to_hash).to eq(instance_2.to_hash)
893
+ end
894
+ end
895
+
896
+ describe 'test method "_to_hash"' do
897
+ instance = Freeclimb::SMSTenDLCCampaign.new(
898
+ account_id: "TS",
899
+
900
+ campaign_id: "TS",
901
+
902
+ csp_id: "TS",
903
+
904
+ reseller_id: "TS",
905
+
906
+ status: "ACTIVE",
907
+
908
+ create_date: "2022-07-05T15:17:05Z",
909
+
910
+ auto_renewal: true,
911
+
912
+ billed_date: "2022-07-05T15:17:05Z",
913
+
914
+ brand_id: "TS",
915
+
916
+ usecase: "TS",
917
+
918
+ sub_usecases: Array.new(),
919
+
920
+ description: "TS",
921
+
922
+ embedded_link: true,
923
+
924
+ embedded_phone: true,
925
+
926
+ affiliate_marketing: true,
927
+
928
+ number_pool: true,
929
+
930
+ age_gated: true,
931
+
932
+ direct_lending: true,
933
+
934
+ subscriber_optin: true,
935
+
936
+ subscriber_optout: true,
937
+
938
+ subscriber_help: true,
939
+
940
+ sample1: "TS",
941
+
942
+ sample2: "TS",
943
+
944
+ sample3: "TS",
945
+
946
+ sample4: "TS",
947
+
948
+ sample5: "TS",
949
+
950
+ message_flow: "TS",
951
+
952
+ help_message: "TS",
953
+
954
+ reference_id: "TS",
955
+
956
+ mock: true,
957
+
958
+ next_renewal_or_expiration_date: "2000-01-01",
959
+ )
960
+ it 'returns account_id in the form of hash' do
961
+ expect(instance._to_hash(instance.account_id)).to eq(instance.account_id)
962
+ end
963
+ it 'returns campaign_id in the form of hash' do
964
+ expect(instance._to_hash(instance.campaign_id)).to eq(instance.campaign_id)
965
+ end
966
+ it 'returns csp_id in the form of hash' do
967
+ expect(instance._to_hash(instance.csp_id)).to eq(instance.csp_id)
968
+ end
969
+ it 'returns reseller_id in the form of hash' do
970
+ expect(instance._to_hash(instance.reseller_id)).to eq(instance.reseller_id)
971
+ end
972
+ it 'returns status in the form of hash' do
973
+ expect(instance._to_hash(instance.status)).to eq(instance.status)
974
+ end
975
+ it 'returns create_date in the form of hash' do
976
+ expect(instance._to_hash(instance.create_date)).to eq(instance.create_date)
977
+ end
978
+ it 'returns auto_renewal in the form of hash' do
979
+ expect(instance._to_hash(instance.auto_renewal)).to eq(instance.auto_renewal)
980
+ end
981
+ it 'returns billed_date in the form of hash' do
982
+ expect(instance._to_hash(instance.billed_date)).to eq(instance.billed_date)
983
+ end
984
+ it 'returns brand_id in the form of hash' do
985
+ expect(instance._to_hash(instance.brand_id)).to eq(instance.brand_id)
986
+ end
987
+ it 'returns usecase in the form of hash' do
988
+ expect(instance._to_hash(instance.usecase)).to eq(instance.usecase)
989
+ end
990
+ it 'returns sub_usecases in the form of hash' do
991
+ expect(instance._to_hash(instance.sub_usecases)).to eq(instance.sub_usecases)
992
+ end
993
+ it 'returns description in the form of hash' do
994
+ expect(instance._to_hash(instance.description)).to eq(instance.description)
995
+ end
996
+ it 'returns embedded_link in the form of hash' do
997
+ expect(instance._to_hash(instance.embedded_link)).to eq(instance.embedded_link)
998
+ end
999
+ it 'returns embedded_phone in the form of hash' do
1000
+ expect(instance._to_hash(instance.embedded_phone)).to eq(instance.embedded_phone)
1001
+ end
1002
+ it 'returns affiliate_marketing in the form of hash' do
1003
+ expect(instance._to_hash(instance.affiliate_marketing)).to eq(instance.affiliate_marketing)
1004
+ end
1005
+ it 'returns number_pool in the form of hash' do
1006
+ expect(instance._to_hash(instance.number_pool)).to eq(instance.number_pool)
1007
+ end
1008
+ it 'returns age_gated in the form of hash' do
1009
+ expect(instance._to_hash(instance.age_gated)).to eq(instance.age_gated)
1010
+ end
1011
+ it 'returns direct_lending in the form of hash' do
1012
+ expect(instance._to_hash(instance.direct_lending)).to eq(instance.direct_lending)
1013
+ end
1014
+ it 'returns subscriber_optin in the form of hash' do
1015
+ expect(instance._to_hash(instance.subscriber_optin)).to eq(instance.subscriber_optin)
1016
+ end
1017
+ it 'returns subscriber_optout in the form of hash' do
1018
+ expect(instance._to_hash(instance.subscriber_optout)).to eq(instance.subscriber_optout)
1019
+ end
1020
+ it 'returns subscriber_help in the form of hash' do
1021
+ expect(instance._to_hash(instance.subscriber_help)).to eq(instance.subscriber_help)
1022
+ end
1023
+ it 'returns sample1 in the form of hash' do
1024
+ expect(instance._to_hash(instance.sample1)).to eq(instance.sample1)
1025
+ end
1026
+ it 'returns sample2 in the form of hash' do
1027
+ expect(instance._to_hash(instance.sample2)).to eq(instance.sample2)
1028
+ end
1029
+ it 'returns sample3 in the form of hash' do
1030
+ expect(instance._to_hash(instance.sample3)).to eq(instance.sample3)
1031
+ end
1032
+ it 'returns sample4 in the form of hash' do
1033
+ expect(instance._to_hash(instance.sample4)).to eq(instance.sample4)
1034
+ end
1035
+ it 'returns sample5 in the form of hash' do
1036
+ expect(instance._to_hash(instance.sample5)).to eq(instance.sample5)
1037
+ end
1038
+ it 'returns message_flow in the form of hash' do
1039
+ expect(instance._to_hash(instance.message_flow)).to eq(instance.message_flow)
1040
+ end
1041
+ it 'returns help_message in the form of hash' do
1042
+ expect(instance._to_hash(instance.help_message)).to eq(instance.help_message)
1043
+ end
1044
+ it 'returns reference_id in the form of hash' do
1045
+ expect(instance._to_hash(instance.reference_id)).to eq(instance.reference_id)
1046
+ end
1047
+ it 'returns mock in the form of hash' do
1048
+ expect(instance._to_hash(instance.mock)).to eq(instance.mock)
1049
+ end
1050
+ it 'returns next_renewal_or_expiration_date in the form of hash' do
1051
+ expect(instance._to_hash(instance.next_renewal_or_expiration_date)).to eq(instance.next_renewal_or_expiration_date)
1052
+ end
1053
+ end
1054
+
1055
+ end