sms_aero 0.0.11 → 0.1.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.
- checksums.yaml +4 -4
 - data/.rubocop.yml +3 -6
 - data/CHANGELOG.md +15 -10
 - data/README.md +25 -30
 - data/lib/sms_aero.rb +119 -34
 - data/lib/sms_aero/birthday.rb +12 -0
 - data/lib/sms_aero/callable.rb +6 -0
 - data/lib/sms_aero/channel.rb +15 -0
 - data/lib/sms_aero/digital.rb +7 -0
 - data/lib/sms_aero/filled_string.rb +11 -0
 - data/lib/sms_aero/future.rb +16 -0
 - data/lib/sms_aero/group.rb +11 -0
 - data/lib/sms_aero/optional.rb +15 -0
 - data/lib/sms_aero/phone.rb +11 -0
 - data/lib/sms_aero/response.rb +30 -0
 - data/lib/sms_aero/response/with_balance.rb +5 -0
 - data/lib/sms_aero/response/with_groups.rb +5 -0
 - data/lib/sms_aero/response/with_id.rb +9 -0
 - data/lib/sms_aero/response/with_senders.rb +5 -0
 - data/lib/sms_aero/response/with_statuses.rb +5 -0
 - data/lib/sms_aero/response/with_tariff.rb +5 -0
 - data/lib/sms_aero/tariff.rb +8 -0
 - data/sms_aero.gemspec +2 -4
 - data/spec/{sms_aero/types → models}/birthday_spec.rb +2 -2
 - data/spec/{sms_aero/types → models}/channel_spec.rb +2 -2
 - data/spec/{sms_aero/types → models}/digital_spec.rb +1 -1
 - data/spec/{sms_aero/types → models}/future_spec.rb +5 -5
 - data/spec/{sms_aero/types → models}/phone_spec.rb +1 -1
 - data/spec/{sms_aero/operations → operations}/add_blacklist_spec.rb +19 -3
 - data/spec/{sms_aero/operations → operations}/add_group_spec.rb +4 -4
 - data/spec/{sms_aero/operations → operations}/add_phone_spec.rb +39 -76
 - data/spec/{sms_aero/operations → operations}/check_balance_spec.rb +2 -4
 - data/spec/{sms_aero/operations → operations}/check_groups_spec.rb +0 -0
 - data/spec/{sms_aero/operations → operations}/check_senders_spec.rb +5 -5
 - data/spec/{sms_aero/operations → operations}/check_sending_spec.rb +3 -3
 - data/spec/{sms_aero/operations → operations}/check_sign_spec.rb +2 -2
 - data/spec/{sms_aero/operations → operations}/check_status_spec.rb +3 -3
 - data/spec/{sms_aero/operations → operations}/check_tariff_spec.rb +1 -1
 - data/spec/{sms_aero/operations → operations}/delete_group_spec.rb +3 -3
 - data/spec/{sms_aero/operations → operations}/delete_phone_spec.rb +4 -4
 - data/spec/{sms_aero/operations → operations}/send_sms_spec.rb +49 -11
 - data/spec/spec_helper.rb +4 -1
 - data/spec/support/en.yml +8 -0
 - metadata +61 -101
 - data/lib/sms_aero/models/answer.rb +0 -8
 - data/lib/sms_aero/models/sms.rb +0 -16
 - data/lib/sms_aero/models/tariff.rb +0 -8
 - data/lib/sms_aero/operations/add_blacklist.rb +0 -11
 - data/lib/sms_aero/operations/add_group.rb +0 -11
 - data/lib/sms_aero/operations/add_phone.rb +0 -17
 - data/lib/sms_aero/operations/check_balance.rb +0 -11
 - data/lib/sms_aero/operations/check_groups.rb +0 -12
 - data/lib/sms_aero/operations/check_senders.rb +0 -15
 - data/lib/sms_aero/operations/check_sending.rb +0 -11
 - data/lib/sms_aero/operations/check_sign.rb +0 -15
 - data/lib/sms_aero/operations/check_status.rb +0 -11
 - data/lib/sms_aero/operations/check_tariff.rb +0 -12
 - data/lib/sms_aero/operations/delete_group.rb +0 -11
 - data/lib/sms_aero/operations/delete_phone.rb +0 -12
 - data/lib/sms_aero/operations/hlr.rb +0 -36
 - data/lib/sms_aero/operations/send_sms.rb +0 -22
 - data/lib/sms_aero/operations/send_to_group.rb +0 -15
 - data/lib/sms_aero/types/birthday.rb +0 -20
 - data/lib/sms_aero/types/channel.rb +0 -4
 - data/lib/sms_aero/types/digital.rb +0 -8
 - data/lib/sms_aero/types/filled_string.rb +0 -3
 - data/lib/sms_aero/types/future.rb +0 -16
 - data/lib/sms_aero/types/password.rb +0 -6
 - data/lib/sms_aero/types/phone.rb +0 -12
 - data/lib/sms_aero/types/sign_status.rb +0 -9
 - data/spec/sms_aero/operations/hlr_spec.rb +0 -96
 - data/spec/sms_aero/operations/send_to_group_spec.rb +0 -185
 - data/spec/sms_aero/types/sign_status_spec.rb +0 -19
 
    
        data/lib/sms_aero/models/sms.rb
    DELETED
    
    | 
         @@ -1,16 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Describes an SMS that can be send to either a phone or a group
         
     | 
| 
       2 
     | 
    
         
            -
            class SmsAero
         
     | 
| 
       3 
     | 
    
         
            -
              class Sms < Evil::Struct
         
     | 
| 
       4 
     | 
    
         
            -
                attribute :from,    Types::FilledString
         
     | 
| 
       5 
     | 
    
         
            -
                attribute :text,    Types::FilledString
         
     | 
| 
       6 
     | 
    
         
            -
                attribute :date,    Types::Future,  optional: true
         
     | 
| 
       7 
     | 
    
         
            -
                attribute :digital, Types::Digital, optional: true
         
     | 
| 
       8 
     | 
    
         
            -
                attribute :type,    Types::Channel, default: -> (*) do
         
     | 
| 
       9 
     | 
    
         
            -
                                                               if digital == 1
         
     | 
| 
       10 
     | 
    
         
            -
                                                                 Dry::Initializer::UNDEFINED
         
     | 
| 
       11 
     | 
    
         
            -
                                                               else
         
     | 
| 
       12 
     | 
    
         
            -
                                                                 2
         
     | 
| 
       13 
     | 
    
         
            -
                                                               end
         
     | 
| 
       14 
     | 
    
         
            -
                                                             end
         
     | 
| 
       15 
     | 
    
         
            -
              end
         
     | 
| 
       16 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,17 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class SmsAero
         
     | 
| 
       2 
     | 
    
         
            -
              operation :add_phone do
         
     | 
| 
       3 
     | 
    
         
            -
                documentation "https://smsaero.ru/api/description/#contacts"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
                path { "addphone" }
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                query do
         
     | 
| 
       8 
     | 
    
         
            -
                  attribute :phone, Types::Phone
         
     | 
| 
       9 
     | 
    
         
            -
                  attribute :group, Types::FilledString, optional: true
         
     | 
| 
       10 
     | 
    
         
            -
                  attribute :lname, Types::FilledString, optional: true
         
     | 
| 
       11 
     | 
    
         
            -
                  attribute :fname, Types::FilledString, optional: true
         
     | 
| 
       12 
     | 
    
         
            -
                  attribute :sname, Types::FilledString, optional: true
         
     | 
| 
       13 
     | 
    
         
            -
                  attribute :param, Types::FilledString, optional: true
         
     | 
| 
       14 
     | 
    
         
            -
                  attribute :bday,  Types::Birthday,     optional: true
         
     | 
| 
       15 
     | 
    
         
            -
                end
         
     | 
| 
       16 
     | 
    
         
            -
              end
         
     | 
| 
       17 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,12 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class SmsAero
         
     | 
| 
       2 
     | 
    
         
            -
              operation :check_groups do
         
     | 
| 
       3 
     | 
    
         
            -
                documentation "https://smsaero.ru/api/description/#groups"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
                path { "checkgroup" }
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                response :success, 200, format: :json do
         
     | 
| 
       8 
     | 
    
         
            -
                  attribute :result, Types::FilledString
         
     | 
| 
       9 
     | 
    
         
            -
                  attribute :reason, Types::Hash, as: :channels
         
     | 
| 
       10 
     | 
    
         
            -
                end
         
     | 
| 
       11 
     | 
    
         
            -
              end
         
     | 
| 
       12 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,15 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class SmsAero
         
     | 
| 
       2 
     | 
    
         
            -
              operation :check_senders do
         
     | 
| 
       3 
     | 
    
         
            -
                documentation "https://smsaero.ru/api/description/#signs"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
                path { "senders" }
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                query do
         
     | 
| 
       8 
     | 
    
         
            -
                  attribute :sign, Types::FilledString
         
     | 
| 
       9 
     | 
    
         
            -
                end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                response :success, 200, format: :json, model: Answer do
         
     | 
| 
       12 
     | 
    
         
            -
                  attribute :data, Types::Array.member(Types::FilledString)
         
     | 
| 
       13 
     | 
    
         
            -
                end
         
     | 
| 
       14 
     | 
    
         
            -
              end
         
     | 
| 
       15 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,15 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class SmsAero
         
     | 
| 
       2 
     | 
    
         
            -
              operation :check_sign do
         
     | 
| 
       3 
     | 
    
         
            -
                documentation "https://smsaero.ru/api/description/#signs"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
                path { "sign" }
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                query do
         
     | 
| 
       8 
     | 
    
         
            -
                  attribute :sign, Types::FilledString
         
     | 
| 
       9 
     | 
    
         
            -
                end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                response :success, 200, format: :json do
         
     | 
| 
       12 
     | 
    
         
            -
                  attribute :data, Types::Array.member(Types::SignStatus), as: :statuses
         
     | 
| 
       13 
     | 
    
         
            -
                end
         
     | 
| 
       14 
     | 
    
         
            -
              end
         
     | 
| 
       15 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,12 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class SmsAero
         
     | 
| 
       2 
     | 
    
         
            -
              operation :check_tariff do
         
     | 
| 
       3 
     | 
    
         
            -
                documentation "https://smsaero.ru/api/description/#get-balance"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
                path { "checktarif" }
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                response :success, 200, format: :json do
         
     | 
| 
       8 
     | 
    
         
            -
                  attribute :result, Types::FilledString
         
     | 
| 
       9 
     | 
    
         
            -
                  attribute :reason, Tariff, as: :tariff
         
     | 
| 
       10 
     | 
    
         
            -
                end
         
     | 
| 
       11 
     | 
    
         
            -
              end
         
     | 
| 
       12 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,36 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class SmsAero
         
     | 
| 
       2 
     | 
    
         
            -
              HLR_STATUSES = {
         
     | 
| 
       3 
     | 
    
         
            -
                1 => :available,
         
     | 
| 
       4 
     | 
    
         
            -
                2 => :unavailable,
         
     | 
| 
       5 
     | 
    
         
            -
                3 => :nonexistent
         
     | 
| 
       6 
     | 
    
         
            -
              }.freeze
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              operation :hlr do
         
     | 
| 
       9 
     | 
    
         
            -
                documentation "https://smsaero.ru/api/description/#hlr"
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                path { "hlr" }
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                query { attribute :phone, Types::Phone }
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                response :success, 200, format: :json, model: Answer do
         
     | 
| 
       16 
     | 
    
         
            -
                  attribute :id, proc(&:to_s)
         
     | 
| 
       17 
     | 
    
         
            -
                  attribute :success, default: proc { id != "" }
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                response :failure, 200, format: :json, model: Answer do
         
     | 
| 
       21 
     | 
    
         
            -
                  attribute :success, default: proc { false }
         
     | 
| 
       22 
     | 
    
         
            -
                end
         
     | 
| 
       23 
     | 
    
         
            -
              end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
              operation :hlr_status do
         
     | 
| 
       26 
     | 
    
         
            -
                documentation "https://smsaero.ru/api/description/#hlr"
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                path { "hlrStatus" }
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                query { attribute :id, Types::Coercible::String.constrained(filled: true) }
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                response :success, 200, format: :json, model: Answer do
         
     | 
| 
       33 
     | 
    
         
            -
                  attribute :status, -> (s) { HLR_STATUSES[s.to_i] }
         
     | 
| 
       34 
     | 
    
         
            -
                end
         
     | 
| 
       35 
     | 
    
         
            -
              end
         
     | 
| 
       36 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,22 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class SmsAero
         
     | 
| 
       2 
     | 
    
         
            -
              operation :send_sms do |settings|
         
     | 
| 
       3 
     | 
    
         
            -
                documentation "https://smsaero.ru/api/description/#send-sms"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
                path do |test: false, **|
         
     | 
| 
       6 
     | 
    
         
            -
                  settings.test || test ? "testsend" : "send"
         
     | 
| 
       7 
     | 
    
         
            -
                end
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                query model: Sms do
         
     | 
| 
       10 
     | 
    
         
            -
                  attribute :to, Types::Phone
         
     | 
| 
       11 
     | 
    
         
            -
                end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                response :success, 200, format: :json, model: Answer do
         
     | 
| 
       14 
     | 
    
         
            -
                  attribute :id, proc(&:to_s)
         
     | 
| 
       15 
     | 
    
         
            -
                  attribute :success, default: proc { id != "" }
         
     | 
| 
       16 
     | 
    
         
            -
                end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                response :failure, 200, format: :json, model: Answer do
         
     | 
| 
       19 
     | 
    
         
            -
                  attribute :success, default: proc { false }
         
     | 
| 
       20 
     | 
    
         
            -
                end
         
     | 
| 
       21 
     | 
    
         
            -
              end
         
     | 
| 
       22 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,15 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class SmsAero
         
     | 
| 
       2 
     | 
    
         
            -
              operation :send_to_group do
         
     | 
| 
       3 
     | 
    
         
            -
                documentation "https://smsaero.ru/api/description/#send-sms"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
                path { "sendtogroup" }
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                query model: Sms do
         
     | 
| 
       8 
     | 
    
         
            -
                  attribute :group, Types::FilledString, default: proc { "all" }
         
     | 
| 
       9 
     | 
    
         
            -
                end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                response :success, 200, format: :json, model: Answer do
         
     | 
| 
       12 
     | 
    
         
            -
                  attribute :id, Types::Coercible::String, optional: true
         
     | 
| 
       13 
     | 
    
         
            -
                end
         
     | 
| 
       14 
     | 
    
         
            -
              end
         
     | 
| 
       15 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module SmsAero::Types
         
     | 
| 
       2 
     | 
    
         
            -
              # Describes a user's birthday in year-month-date format
         
     | 
| 
       3 
     | 
    
         
            -
              # Accepts dates, times, datetimes, and strings parceable to dates
         
     | 
| 
       4 
     | 
    
         
            -
              #
         
     | 
| 
       5 
     | 
    
         
            -
              # @example
         
     | 
| 
       6 
     | 
    
         
            -
              #   SmsAero::Types::Birthday["1901-12-9"]                   # => "1901-12-09"
         
     | 
| 
       7 
     | 
    
         
            -
              #   SmsAero::Types::Birthday[Time.new(1901, 12, 9, 10, 12)] # => "1901-12-09"
         
     | 
| 
       8 
     | 
    
         
            -
              #
         
     | 
| 
       9 
     | 
    
         
            -
              Birthday = Strict::String
         
     | 
| 
       10 
     | 
    
         
            -
                         .constrained(format: /\A\d{4}-\d{2}-\d{2}\z/)
         
     | 
| 
       11 
     | 
    
         
            -
                         .constructor do |value|
         
     | 
| 
       12 
     | 
    
         
            -
                           begin
         
     | 
| 
       13 
     | 
    
         
            -
                             date = value.to_date if value.respond_to? :to_date
         
     | 
| 
       14 
     | 
    
         
            -
                             date ||= ::Date.parse(value.to_s)
         
     | 
| 
       15 
     | 
    
         
            -
                             date.strftime "%Y-%m-%d"
         
     | 
| 
       16 
     | 
    
         
            -
                           rescue StandardError
         
     | 
| 
       17 
     | 
    
         
            -
                             raise TypeError, "#{value.inspect} cannot be coerced to date"
         
     | 
| 
       18 
     | 
    
         
            -
                           end
         
     | 
| 
       19 
     | 
    
         
            -
                         end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,16 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module SmsAero::Types
         
     | 
| 
       2 
     | 
    
         
            -
              # Describes coercible Unix time in future
         
     | 
| 
       3 
     | 
    
         
            -
              Future = Strict::Int.constructor do |value|
         
     | 
| 
       4 
     | 
    
         
            -
                begin
         
     | 
| 
       5 
     | 
    
         
            -
                  error = TypeError.new "#{value.inspect} is not a valid time in future"
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                  time = value.to_time              if     value.respond_to? :to_time
         
     | 
| 
       8 
     | 
    
         
            -
                  time ||= ::Time.parse(value.to_s) unless value.is_a? Numeric
         
     | 
| 
       9 
     | 
    
         
            -
                  number = time.to_i
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                  number > ::Time.now.to_i ? number : raise(error)
         
     | 
| 
       12 
     | 
    
         
            -
                rescue StandardError
         
     | 
| 
       13 
     | 
    
         
            -
                  raise error
         
     | 
| 
       14 
     | 
    
         
            -
                end
         
     | 
| 
       15 
     | 
    
         
            -
              end
         
     | 
| 
       16 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/sms_aero/types/phone.rb
    DELETED
    
    | 
         @@ -1,12 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module SmsAero::Types
         
     | 
| 
       2 
     | 
    
         
            -
              # Describes a valid phone containing digits without lead zeros
         
     | 
| 
       3 
     | 
    
         
            -
              #
         
     | 
| 
       4 
     | 
    
         
            -
              # @example
         
     | 
| 
       5 
     | 
    
         
            -
              #   SmsAero::Types::Phone["07 (123) 134-12-08"] # => "71231341208"
         
     | 
| 
       6 
     | 
    
         
            -
              #   SmsAero::Types::Phone["008"] # raises #<Dry::Types::ConstraintError ...>
         
     | 
| 
       7 
     | 
    
         
            -
              #
         
     | 
| 
       8 
     | 
    
         
            -
              Phone = Strict::String.constrained(format: /\A\d{11,13}\z/)
         
     | 
| 
       9 
     | 
    
         
            -
                                    .constructor do |value|
         
     | 
| 
       10 
     | 
    
         
            -
                                      value.to_s.scan(/\d/).join[/[^0].*/].to_s
         
     | 
| 
       11 
     | 
    
         
            -
                                    end
         
     | 
| 
       12 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,96 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            describe SmsAero do
         
     | 
| 
       2 
     | 
    
         
            -
              let(:settings) { { user: "LOGIN", password: "PASSWORD" } }
         
     | 
| 
       3 
     | 
    
         
            -
              let(:client)   { described_class.new(settings) }
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
              before { stub_request(:any, //).to_return(body: answer.to_json) }
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              describe "#hlr" do
         
     | 
| 
       8 
     | 
    
         
            -
                let(:params)   { { phone: "+7(002)034-5678" } }
         
     | 
| 
       9 
     | 
    
         
            -
                let(:answer) { { result: "accepted", id: 123 } }
         
     | 
| 
       10 
     | 
    
         
            -
                let(:url) do
         
     | 
| 
       11 
     | 
    
         
            -
                  "https://gate.smsaero.ru/hlr?answer=json&user=LOGIN&" \
         
     | 
| 
       12 
     | 
    
         
            -
                    "password=319f4d26e3c536b5dd871bb2c52e3178&phone=70020345678"
         
     | 
| 
       13 
     | 
    
         
            -
                end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                subject { client.hlr params }
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                it "sends a request" do
         
     | 
| 
       18 
     | 
    
         
            -
                  subject
         
     | 
| 
       19 
     | 
    
         
            -
                  expect(a_request(:post, url)).to have_been_made
         
     | 
| 
       20 
     | 
    
         
            -
                end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                it "returns success" do
         
     | 
| 
       23 
     | 
    
         
            -
                  expect(subject).to be_kind_of SmsAero::Answer
         
     | 
| 
       24 
     | 
    
         
            -
                  expect(subject.result).to eq "accepted"
         
     | 
| 
       25 
     | 
    
         
            -
                  expect(subject.id).to eq "123"
         
     | 
| 
       26 
     | 
    
         
            -
                end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                context "with invalid phone" do
         
     | 
| 
       29 
     | 
    
         
            -
                  let(:params) { { phone: "123" } }
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                  it "raises an exception" do
         
     | 
| 
       32 
     | 
    
         
            -
                    expect { subject }.to raise_error(TypeError, /123/)
         
     | 
| 
       33 
     | 
    
         
            -
                  end
         
     | 
| 
       34 
     | 
    
         
            -
                end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                context "without a phone" do
         
     | 
| 
       37 
     | 
    
         
            -
                  let(:params) { {} }
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                  it "raises an exception" do
         
     | 
| 
       40 
     | 
    
         
            -
                    expect { subject }.to raise_error(ArgumentError)
         
     | 
| 
       41 
     | 
    
         
            -
                  end
         
     | 
| 
       42 
     | 
    
         
            -
                end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                context "when rejected" do
         
     | 
| 
       45 
     | 
    
         
            -
                  let(:answer) { { result: "rejected" } }
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                  it "has success false" do
         
     | 
| 
       48 
     | 
    
         
            -
                    expect(subject.success).to be_falsey
         
     | 
| 
       49 
     | 
    
         
            -
                  end
         
     | 
| 
       50 
     | 
    
         
            -
                end
         
     | 
| 
       51 
     | 
    
         
            -
              end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
              describe "#hlr_status" do
         
     | 
| 
       54 
     | 
    
         
            -
                let(:params) { { id: 1 } }
         
     | 
| 
       55 
     | 
    
         
            -
                let(:status) { 1 }
         
     | 
| 
       56 
     | 
    
         
            -
                let(:answer) { { result: "accepted", status: status } }
         
     | 
| 
       57 
     | 
    
         
            -
                let(:url) do
         
     | 
| 
       58 
     | 
    
         
            -
                  "https://gate.smsaero.ru/hlrStatus?answer=json&user=LOGIN&" \
         
     | 
| 
       59 
     | 
    
         
            -
                    "password=319f4d26e3c536b5dd871bb2c52e3178&id=1"
         
     | 
| 
       60 
     | 
    
         
            -
                end
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                subject { client.hlr_status params }
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                it "sends a request" do
         
     | 
| 
       65 
     | 
    
         
            -
                  subject
         
     | 
| 
       66 
     | 
    
         
            -
                  expect(a_request(:post, url)).to have_been_made
         
     | 
| 
       67 
     | 
    
         
            -
                end
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                it "returns success" do
         
     | 
| 
       70 
     | 
    
         
            -
                  expect(subject).to be_kind_of SmsAero::Answer
         
     | 
| 
       71 
     | 
    
         
            -
                  expect(subject.result).to eq "accepted"
         
     | 
| 
       72 
     | 
    
         
            -
                end
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                it "converts status to sym" do
         
     | 
| 
       75 
     | 
    
         
            -
                  expect(subject.status).to eq :available
         
     | 
| 
       76 
     | 
    
         
            -
                end
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
                context "other statuses" do
         
     | 
| 
       79 
     | 
    
         
            -
                  context "unavailable" do
         
     | 
| 
       80 
     | 
    
         
            -
                    let(:status) { 2 }
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                    it "converts status to sym" do
         
     | 
| 
       83 
     | 
    
         
            -
                      expect(subject.status).to eq :unavailable
         
     | 
| 
       84 
     | 
    
         
            -
                    end
         
     | 
| 
       85 
     | 
    
         
            -
                  end
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
                  context "nonexistent" do
         
     | 
| 
       88 
     | 
    
         
            -
                    let(:status) { 3 }
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
                    it "converts status to sym" do
         
     | 
| 
       91 
     | 
    
         
            -
                      expect(subject.status).to eq :nonexistent
         
     | 
| 
       92 
     | 
    
         
            -
                    end
         
     | 
| 
       93 
     | 
    
         
            -
                  end
         
     | 
| 
       94 
     | 
    
         
            -
                end
         
     | 
| 
       95 
     | 
    
         
            -
              end
         
     | 
| 
       96 
     | 
    
         
            -
            end
         
     |