and-son 0.6.1 → 0.7.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.
- data/and-son.gemspec +1 -1
 - data/lib/and-son/call_runner.rb +142 -0
 - data/lib/and-son/client.rb +68 -100
 - data/lib/and-son/stored_responses.rb +25 -7
 - data/lib/and-son/version.rb +1 -1
 - data/test/helper.rb +3 -2
 - data/test/support/factory.rb +6 -0
 - data/test/system/making_requests_tests.rb +1 -1
 - data/test/unit/call_runner_tests.rb +287 -0
 - data/test/unit/client_tests.rb +219 -84
 - data/test/unit/stored_responses_tests.rb +67 -56
 - metadata +13 -10
 - data/test/support/fake_connection.rb +0 -29
 
| 
         @@ -0,0 +1,287 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'assert'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'and-son/call_runner'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            require 'sanford-protocol/fake_connection'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            class AndSon::CallRunner
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              class UnitTests < Assert::Context
         
     | 
| 
      
 9 
     | 
    
         
            +
                desc "AndSon::CallRunner"
         
     | 
| 
      
 10 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @host = Factory.string
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @port = Factory.integer
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  @call_runner_class = AndSon::CallRunner
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
                subject{ @call_runner_class }
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                should "include the call runner instance methods" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                  assert_includes AndSon::CallRunner::InstanceMethods, subject
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              class InitTests < UnitTests
         
     | 
| 
      
 25 
     | 
    
         
            +
                desc "when init"
         
     | 
| 
      
 26 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 27 
     | 
    
         
            +
                  @call_runner = @call_runner_class.new(@host, @port)
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
                subject{ @call_runner }
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                should have_readers :host, :port
         
     | 
| 
      
 32 
     | 
    
         
            +
                should have_accessors :params_value, :timeout_value, :logger_value
         
     | 
| 
      
 33 
     | 
    
         
            +
                should have_imeths :call_runner
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                should "know its host and port" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                  assert_equal @host, subject.host
         
     | 
| 
      
 37 
     | 
    
         
            +
                  assert_equal @port, subject.port
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                should "default its params, timeout and logger" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                  assert_equal({}, subject.params_value)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  assert_equal 60, subject.timeout_value
         
     | 
| 
      
 43 
     | 
    
         
            +
                  assert_instance_of NullLogger, subject.logger_value
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                should "return itself using `call_runner`" do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  assert_same subject, subject.call_runner
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                should "be comparable" do
         
     | 
| 
      
 51 
     | 
    
         
            +
                  matching = @call_runner_class.new(@host, @port)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  assert_equal matching, subject
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                  not_matching = @call_runner_class.new(Factory.string, @port)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  assert_not_equal not_matching, subject
         
     | 
| 
      
 56 
     | 
    
         
            +
                  not_matching = @call_runner_class.new(@host, Factory.integer)
         
     | 
| 
      
 57 
     | 
    
         
            +
                  assert_not_equal not_matching, subject
         
     | 
| 
      
 58 
     | 
    
         
            +
                  params = { Factory.string => Factory.string }
         
     | 
| 
      
 59 
     | 
    
         
            +
                  not_matching = @call_runner_class.new(@host, @port).params(params)
         
     | 
| 
      
 60 
     | 
    
         
            +
                  assert_not_equal not_matching, subject
         
     | 
| 
      
 61 
     | 
    
         
            +
                  not_matching = @call_runner_class.new(@host, @port).logger(Factory.string)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  assert_not_equal not_matching, subject
         
     | 
| 
      
 63 
     | 
    
         
            +
                  not_matching = @call_runner_class.new(@host, @port).timeout(Factory.integer)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  assert_not_equal not_matching, subject
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                should "be hash comparable" do
         
     | 
| 
      
 68 
     | 
    
         
            +
                  assert_equal subject.call_runner.hash, subject.hash
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                  matching = @call_runner_class.new(@host, @port)
         
     | 
| 
      
 71 
     | 
    
         
            +
                  assert_true subject.eql?(matching)
         
     | 
| 
      
 72 
     | 
    
         
            +
                  not_matching = @call_runner_class.new(Factory.string, Factory.integer)
         
     | 
| 
      
 73 
     | 
    
         
            +
                  assert_false subject.eql?(not_matching)
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
              class InitWithTimeoutEnvVarTests < UnitTests
         
     | 
| 
      
 79 
     | 
    
         
            +
                desc "when init with the timeout env var set"
         
     | 
| 
      
 80 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 81 
     | 
    
         
            +
                  @current_timeout = ENV['ANDSON_TIMEOUT']
         
     | 
| 
      
 82 
     | 
    
         
            +
                  ENV['ANDSON_TIMEOUT'] = Factory.integer.to_s
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                  @call_runner = @call_runner_class.new(@host, @port)
         
     | 
| 
      
 85 
     | 
    
         
            +
                end
         
     | 
| 
      
 86 
     | 
    
         
            +
                teardown do
         
     | 
| 
      
 87 
     | 
    
         
            +
                  ENV['ANDSON_TIMEOUT'] = @current_timeout
         
     | 
| 
      
 88 
     | 
    
         
            +
                end
         
     | 
| 
      
 89 
     | 
    
         
            +
                subject{ @call_runner }
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                should "set its timeout value using the env var" do
         
     | 
| 
      
 92 
     | 
    
         
            +
                  assert_equal ENV['ANDSON_TIMEOUT'].to_f, subject.timeout_value
         
     | 
| 
      
 93 
     | 
    
         
            +
                end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
              end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
              class InstanceMethodsTests < InitTests
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                should have_imeths :timeout, :params, :logger
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                should "set its timeout value and return its call runner using `timeout`" do
         
     | 
| 
      
 102 
     | 
    
         
            +
                  timeout_value = Factory.integer
         
     | 
| 
      
 103 
     | 
    
         
            +
                  result = subject.timeout(timeout_value)
         
     | 
| 
      
 104 
     | 
    
         
            +
                  assert_equal timeout_value, subject.timeout_value
         
     | 
| 
      
 105 
     | 
    
         
            +
                  assert_same subject, result
         
     | 
| 
      
 106 
     | 
    
         
            +
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                should "update its params value and return its call runner using `params`" do
         
     | 
| 
      
 109 
     | 
    
         
            +
                  params_value = { Factory.string => Factory.string }
         
     | 
| 
      
 110 
     | 
    
         
            +
                  result = subject.params(params_value)
         
     | 
| 
      
 111 
     | 
    
         
            +
                  assert_equal params_value, subject.params_value
         
     | 
| 
      
 112 
     | 
    
         
            +
                  assert_same subject, result
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                  new_key = Factory.string
         
     | 
| 
      
 115 
     | 
    
         
            +
                  new_value = Factory.string
         
     | 
| 
      
 116 
     | 
    
         
            +
                  subject.params({ new_key => new_value })
         
     | 
| 
      
 117 
     | 
    
         
            +
                  assert_equal 2, subject.params_value.keys.size
         
     | 
| 
      
 118 
     | 
    
         
            +
                  assert_equal new_value, subject.params_value[new_key]
         
     | 
| 
      
 119 
     | 
    
         
            +
                end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                should "stringify any values passed to `params`" do
         
     | 
| 
      
 122 
     | 
    
         
            +
                  key = Factory.string
         
     | 
| 
      
 123 
     | 
    
         
            +
                  value = Factory.string
         
     | 
| 
      
 124 
     | 
    
         
            +
                  subject.params({ key.to_sym => value })
         
     | 
| 
      
 125 
     | 
    
         
            +
                  assert_equal({ key => value }, subject.params_value)
         
     | 
| 
      
 126 
     | 
    
         
            +
                end
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                should "raise an argument error when `params` is not passed a hash" do
         
     | 
| 
      
 129 
     | 
    
         
            +
                  assert_raises(ArgumentError){ subject.params(Factory.string) }
         
     | 
| 
      
 130 
     | 
    
         
            +
                end
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                should "set its logger value and return its call runner using `logger`" do
         
     | 
| 
      
 133 
     | 
    
         
            +
                  logger_value = Factory.string
         
     | 
| 
      
 134 
     | 
    
         
            +
                  result = subject.logger(logger_value)
         
     | 
| 
      
 135 
     | 
    
         
            +
                  assert_equal logger_value, subject.logger_value
         
     | 
| 
      
 136 
     | 
    
         
            +
                  assert_same subject, result
         
     | 
| 
      
 137 
     | 
    
         
            +
                end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
              end
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
              class CallSetupTests < InitTests
         
     | 
| 
      
 142 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 143 
     | 
    
         
            +
                  @name = Factory.string
         
     | 
| 
      
 144 
     | 
    
         
            +
                  @params = { Factory.string => Factory.string }
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                  @logger_spy = LoggerSpy.new
         
     | 
| 
      
 147 
     | 
    
         
            +
                  @call_runner.logger(@logger_spy)
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
                  @protocol_response = Sanford::Protocol::Response.new(
         
     | 
| 
      
 150 
     | 
    
         
            +
                    [200, Factory.string],
         
     | 
| 
      
 151 
     | 
    
         
            +
                    Factory.string
         
     | 
| 
      
 152 
     | 
    
         
            +
                  )
         
     | 
| 
      
 153 
     | 
    
         
            +
                  @response = AndSon::Response.new(@protocol_response)
         
     | 
| 
      
 154 
     | 
    
         
            +
                end
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
              end
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
              class CallTests < CallSetupTests
         
     | 
| 
      
 159 
     | 
    
         
            +
                desc "call method"
         
     | 
| 
      
 160 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 161 
     | 
    
         
            +
                  @call_bang_name = nil
         
     | 
| 
      
 162 
     | 
    
         
            +
                  @call_bang_params = nil
         
     | 
| 
      
 163 
     | 
    
         
            +
                  @call_bang_called = false
         
     | 
| 
      
 164 
     | 
    
         
            +
                  Assert.stub(@call_runner, :call!) do |name, params|
         
     | 
| 
      
 165 
     | 
    
         
            +
                    @call_bang_name = name
         
     | 
| 
      
 166 
     | 
    
         
            +
                    @call_bang_params = params
         
     | 
| 
      
 167 
     | 
    
         
            +
                    @call_bang_called = true
         
     | 
| 
      
 168 
     | 
    
         
            +
                    @response
         
     | 
| 
      
 169 
     | 
    
         
            +
                  end
         
     | 
| 
      
 170 
     | 
    
         
            +
                end
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
                should "call `call!`" do
         
     | 
| 
      
 173 
     | 
    
         
            +
                  assert_false @call_bang_called
         
     | 
| 
      
 174 
     | 
    
         
            +
                  subject.call(@name, @params)
         
     | 
| 
      
 175 
     | 
    
         
            +
                  assert_equal @name, @call_bang_name
         
     | 
| 
      
 176 
     | 
    
         
            +
                  assert_equal @params, @call_bang_params
         
     | 
| 
      
 177 
     | 
    
         
            +
                  assert_true @call_bang_called
         
     | 
| 
      
 178 
     | 
    
         
            +
                end
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
                should "return the response data when a block isn't provided" do
         
     | 
| 
      
 181 
     | 
    
         
            +
                  result = subject.call(@name, @params)
         
     | 
| 
      
 182 
     | 
    
         
            +
                  assert_equal @response.data, result
         
     | 
| 
      
 183 
     | 
    
         
            +
                end
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
                should "yield the protocol response when a block is provided" do
         
     | 
| 
      
 186 
     | 
    
         
            +
                  yielded = nil
         
     | 
| 
      
 187 
     | 
    
         
            +
                  subject.call(@name, @params){ |response| yielded = response }
         
     | 
| 
      
 188 
     | 
    
         
            +
                  assert_equal @protocol_response, yielded
         
     | 
| 
      
 189 
     | 
    
         
            +
                end
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
      
 191 
     | 
    
         
            +
                should "default its params when they aren't provided" do
         
     | 
| 
      
 192 
     | 
    
         
            +
                  subject.call(@name)
         
     | 
| 
      
 193 
     | 
    
         
            +
                  assert_equal({}, @call_bang_params)
         
     | 
| 
      
 194 
     | 
    
         
            +
                end
         
     | 
| 
      
 195 
     | 
    
         
            +
             
     | 
| 
      
 196 
     | 
    
         
            +
                should "log a summary line of the call" do
         
     | 
| 
      
 197 
     | 
    
         
            +
                  subject.call(@name, @params)
         
     | 
| 
      
 198 
     | 
    
         
            +
                  assert_match /\A\[AndSon\]/, @logger_spy.output
         
     | 
| 
      
 199 
     | 
    
         
            +
                  assert_match /time=\d+.\d+/, @logger_spy.output
         
     | 
| 
      
 200 
     | 
    
         
            +
                  assert_match /status=#{@protocol_response.code}/, @logger_spy.output
         
     | 
| 
      
 201 
     | 
    
         
            +
                  host_and_port = "#{@host}:#{@port}"
         
     | 
| 
      
 202 
     | 
    
         
            +
                  assert_match /host=#{host_and_port.inspect}/, @logger_spy.output
         
     | 
| 
      
 203 
     | 
    
         
            +
                  assert_match /service=#{@name.inspect}/, @logger_spy.output
         
     | 
| 
      
 204 
     | 
    
         
            +
                  regex = Regexp.new(Regexp.escape("params=#{@params.inspect}"))
         
     | 
| 
      
 205 
     | 
    
         
            +
                  assert_match regex, @logger_spy.output
         
     | 
| 
      
 206 
     | 
    
         
            +
                end
         
     | 
| 
      
 207 
     | 
    
         
            +
             
     | 
| 
      
 208 
     | 
    
         
            +
                should "raise an argument error when not passed a hash for params" do
         
     | 
| 
      
 209 
     | 
    
         
            +
                  assert_raises(ArgumentError){ subject.call(@name, Factory.string) }
         
     | 
| 
      
 210 
     | 
    
         
            +
                end
         
     | 
| 
      
 211 
     | 
    
         
            +
             
     | 
| 
      
 212 
     | 
    
         
            +
              end
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
              class CallBangTests < CallSetupTests
         
     | 
| 
      
 215 
     | 
    
         
            +
                desc "the call! method"
         
     | 
| 
      
 216 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 217 
     | 
    
         
            +
                  @call_runner.params({ Factory.string => Factory.string })
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
                  @fake_connection = FakeConnection.new
         
     | 
| 
      
 220 
     | 
    
         
            +
                  @fake_connection.peek_data = Factory.string(1)
         
     | 
| 
      
 221 
     | 
    
         
            +
                  @fake_connection.read_data = @protocol_response.to_hash
         
     | 
| 
      
 222 
     | 
    
         
            +
                  Assert.stub(AndSon::Connection, :new).with(@host, @port){ @fake_connection }
         
     | 
| 
      
 223 
     | 
    
         
            +
                end
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                should "open a connection, write a request and close the write stream" do
         
     | 
| 
      
 226 
     | 
    
         
            +
                  subject.call!(@name, @params)
         
     | 
| 
      
 227 
     | 
    
         
            +
             
     | 
| 
      
 228 
     | 
    
         
            +
                  protocol_connection = @fake_connection.protocol_connection
         
     | 
| 
      
 229 
     | 
    
         
            +
                  params = @call_runner.params_value.merge(@params)
         
     | 
| 
      
 230 
     | 
    
         
            +
                  expected = Sanford::Protocol::Request.new(@name, params).to_hash
         
     | 
| 
      
 231 
     | 
    
         
            +
                  assert_equal expected, protocol_connection.write_data
         
     | 
| 
      
 232 
     | 
    
         
            +
                  assert_true protocol_connection.closed_write
         
     | 
| 
      
 233 
     | 
    
         
            +
                end
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
      
 235 
     | 
    
         
            +
                should "build a response from reading the server response on the connection" do
         
     | 
| 
      
 236 
     | 
    
         
            +
                  response = subject.call!(@name, @params)
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
      
 238 
     | 
    
         
            +
                  protocol_connection = @fake_connection.protocol_connection
         
     | 
| 
      
 239 
     | 
    
         
            +
                  assert_equal @call_runner.timeout_value, protocol_connection.peek_timeout
         
     | 
| 
      
 240 
     | 
    
         
            +
                  assert_equal @call_runner.timeout_value, protocol_connection.read_timeout
         
     | 
| 
      
 241 
     | 
    
         
            +
                  assert_equal @response, response
         
     | 
| 
      
 242 
     | 
    
         
            +
                end
         
     | 
| 
      
 243 
     | 
    
         
            +
             
     | 
| 
      
 244 
     | 
    
         
            +
                should "raise a connection closed error if the server doesn't write a response" do
         
     | 
| 
      
 245 
     | 
    
         
            +
                  @fake_connection.peek_data = "" # simulate the server not writing a response
         
     | 
| 
      
 246 
     | 
    
         
            +
                  assert_raise(AndSon::ConnectionClosedError) do
         
     | 
| 
      
 247 
     | 
    
         
            +
                    subject.call!(@name, @params)
         
     | 
| 
      
 248 
     | 
    
         
            +
                  end
         
     | 
| 
      
 249 
     | 
    
         
            +
                end
         
     | 
| 
      
 250 
     | 
    
         
            +
             
     | 
| 
      
 251 
     | 
    
         
            +
              end
         
     | 
| 
      
 252 
     | 
    
         
            +
             
     | 
| 
      
 253 
     | 
    
         
            +
              class FakeConnection
         
     | 
| 
      
 254 
     | 
    
         
            +
                attr_reader :protocol_connection
         
     | 
| 
      
 255 
     | 
    
         
            +
             
     | 
| 
      
 256 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 257 
     | 
    
         
            +
                  @protocol_connection = Sanford::Protocol::FakeConnection.new
         
     | 
| 
      
 258 
     | 
    
         
            +
                end
         
     | 
| 
      
 259 
     | 
    
         
            +
             
     | 
| 
      
 260 
     | 
    
         
            +
                def open
         
     | 
| 
      
 261 
     | 
    
         
            +
                  yield @protocol_connection if block_given?
         
     | 
| 
      
 262 
     | 
    
         
            +
                ensure
         
     | 
| 
      
 263 
     | 
    
         
            +
                  @protocol_connection.close if @protocol_connection
         
     | 
| 
      
 264 
     | 
    
         
            +
                end
         
     | 
| 
      
 265 
     | 
    
         
            +
             
     | 
| 
      
 266 
     | 
    
         
            +
                def peek_data=(value)
         
     | 
| 
      
 267 
     | 
    
         
            +
                  @protocol_connection.peek_data = value
         
     | 
| 
      
 268 
     | 
    
         
            +
                end
         
     | 
| 
      
 269 
     | 
    
         
            +
             
     | 
| 
      
 270 
     | 
    
         
            +
                def read_data=(value)
         
     | 
| 
      
 271 
     | 
    
         
            +
                  @protocol_connection.read_data = value
         
     | 
| 
      
 272 
     | 
    
         
            +
                end
         
     | 
| 
      
 273 
     | 
    
         
            +
              end
         
     | 
| 
      
 274 
     | 
    
         
            +
             
     | 
| 
      
 275 
     | 
    
         
            +
              class LoggerSpy
         
     | 
| 
      
 276 
     | 
    
         
            +
                attr_reader :output
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
      
 278 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 279 
     | 
    
         
            +
                  @output = ""
         
     | 
| 
      
 280 
     | 
    
         
            +
                end
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
      
 282 
     | 
    
         
            +
                def info(message)
         
     | 
| 
      
 283 
     | 
    
         
            +
                  @output += "#{message}\n"
         
     | 
| 
      
 284 
     | 
    
         
            +
                end
         
     | 
| 
      
 285 
     | 
    
         
            +
              end
         
     | 
| 
      
 286 
     | 
    
         
            +
             
     | 
| 
      
 287 
     | 
    
         
            +
            end
         
     | 
    
        data/test/unit/client_tests.rb
    CHANGED
    
    | 
         @@ -1,135 +1,270 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'assert'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'and-son/client'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            require 'test/support/fake_connection'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'test/support/fake_server'
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            class AndSon::Client
         
     | 
| 
      
 4 
     | 
    
         
            +
            module AndSon::Client
         
     | 
| 
       9 
5 
     | 
    
         | 
| 
       10 
6 
     | 
    
         
             
              class UnitTests < Assert::Context
         
     | 
| 
       11 
     | 
    
         
            -
                include FakeServer::Helper
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
7 
     | 
    
         
             
                desc "AndSon::Client"
         
     | 
| 
       14 
8 
     | 
    
         
             
                setup do
         
     | 
| 
       15 
     | 
    
         
            -
                  @ 
     | 
| 
       16 
     | 
    
         
            -
                   
     | 
| 
      
 9 
     | 
    
         
            +
                  @current_timeout = ENV['ANDSON_TEST_MODE']
         
     | 
| 
      
 10 
     | 
    
         
            +
                  ENV['ANDSON_TEST_MODE'] = 'yes'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  @host = Factory.string
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @port = Factory.integer
         
     | 
| 
       17 
14 
     | 
    
         
             
                end
         
     | 
| 
       18 
     | 
    
         
            -
                 
     | 
| 
      
 15 
     | 
    
         
            +
                teardown do
         
     | 
| 
      
 16 
     | 
    
         
            +
                  ENV['ANDSON_TEST_MODE'] = @current_timeout
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
                subject{ AndSon::Client }
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                should have_imeths : 
     | 
| 
       21 
     | 
    
         
            -
                should have_imeths :call_runner, :call, :timeout, :logger, :params
         
     | 
| 
      
 20 
     | 
    
         
            +
                should have_imeths :new
         
     | 
| 
       22 
21 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                should " 
     | 
| 
       24 
     | 
    
         
            -
                   
     | 
| 
      
 22 
     | 
    
         
            +
                should "return an and-son client using `new`" do
         
     | 
| 
      
 23 
     | 
    
         
            +
                  ENV.delete('ANDSON_TEST_MODE')
         
     | 
| 
      
 24 
     | 
    
         
            +
                  client = subject.new(@host, @port)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  assert_instance_of AndSon::AndSonClient, client
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
       25 
27 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                   
     | 
| 
       28 
     | 
    
         
            -
                   
     | 
| 
       29 
     | 
    
         
            -
                  assert_instance_of AndSon::NullLogger, default_runner.logger_value
         
     | 
| 
      
 28 
     | 
    
         
            +
                should "return a test client using `new` in test mode" do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  client = subject.new(@host, @port)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  assert_instance_of AndSon::TestClient, client
         
     | 
| 
       30 
31 
     | 
    
         
             
                end
         
     | 
| 
       31 
32 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                  prev = ENV['ANDSON_TIMEOUT']
         
     | 
| 
       34 
     | 
    
         
            -
                  ENV['ANDSON_TIMEOUT'] = '20'
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
       35 
34 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
      
 35 
     | 
    
         
            +
              class MixinTests < UnitTests
         
     | 
| 
      
 36 
     | 
    
         
            +
                desc "as a mixin"
         
     | 
| 
      
 37 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 38 
     | 
    
         
            +
                  @client_class = Class.new do
         
     | 
| 
      
 39 
     | 
    
         
            +
                    include AndSon::Client
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
                subject{ @client_class }
         
     | 
| 
       37 
43 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
      
 44 
     | 
    
         
            +
                should "include the call runner instance methods" do
         
     | 
| 
      
 45 
     | 
    
         
            +
                  assert_includes AndSon::CallRunner::InstanceMethods, subject
         
     | 
| 
       39 
46 
     | 
    
         
             
                end
         
     | 
| 
       40 
47 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                  runner = subject.timeout(10)
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
       43 
49 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
      
 50 
     | 
    
         
            +
              class InitTests < MixinTests
         
     | 
| 
      
 51 
     | 
    
         
            +
                desc "when init"
         
     | 
| 
      
 52 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 53 
     | 
    
         
            +
                  @client = @client_class.new(@host, @port)
         
     | 
| 
       47 
54 
     | 
    
         
             
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
                subject{ @client }
         
     | 
| 
       48 
56 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
                should  
     | 
| 
       50 
     | 
    
         
            -
                       "the params hash" do
         
     | 
| 
       51 
     | 
    
         
            -
                  runner = subject.params({ :api_key => 12345 })
         
     | 
| 
      
 57 
     | 
    
         
            +
                should have_readers :host, :port
         
     | 
| 
       52 
58 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                   
     | 
| 
       55 
     | 
    
         
            -
                  assert_equal 
     | 
| 
      
 59 
     | 
    
         
            +
                should "know its host and port" do
         
     | 
| 
      
 60 
     | 
    
         
            +
                  assert_equal @host, subject.host
         
     | 
| 
      
 61 
     | 
    
         
            +
                  assert_equal @port, subject.port
         
     | 
| 
       56 
62 
     | 
    
         
             
                end
         
     | 
| 
       57 
63 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                  runner = subject.logger(logger = Logger.new(STDOUT))
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
       60 
65 
     | 
    
         | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
      
 66 
     | 
    
         
            +
              class AndSonClientTests < UnitTests
         
     | 
| 
      
 67 
     | 
    
         
            +
                desc "AndSonClient"
         
     | 
| 
      
 68 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 69 
     | 
    
         
            +
                  @client = AndSon::AndSonClient.new(@host, @port)
         
     | 
| 
       64 
70 
     | 
    
         
             
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
                subject{ @client }
         
     | 
| 
       65 
72 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
                should  
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                   
     | 
| 
      
 73 
     | 
    
         
            +
                should have_imeths :call, :call_runner
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                should "know its call runner" do
         
     | 
| 
      
 76 
     | 
    
         
            +
                  runner = subject.call_runner
         
     | 
| 
      
 77 
     | 
    
         
            +
                  assert_instance_of AndSon::CallRunner, runner
         
     | 
| 
      
 78 
     | 
    
         
            +
                  assert_equal subject.host, runner.host
         
     | 
| 
      
 79 
     | 
    
         
            +
                  assert_equal subject.port, runner.port
         
     | 
| 
      
 80 
     | 
    
         
            +
                  assert_not_same runner, subject.call_runner
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                should "be comparable" do
         
     | 
| 
      
 84 
     | 
    
         
            +
                  matching = AndSon::AndSonClient.new(@host, @port)
         
     | 
| 
      
 85 
     | 
    
         
            +
                  assert_equal matching, subject
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  not_matching = AndSon::AndSonClient.new(Factory.string, Factory.integer)
         
     | 
| 
      
 88 
     | 
    
         
            +
                  assert_not_equal not_matching, subject
         
     | 
| 
       70 
89 
     | 
    
         
             
                end
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                should "be hash comparable" do
         
     | 
| 
      
 92 
     | 
    
         
            +
                  assert_equal subject.call_runner.hash, subject.hash
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                  matching = AndSon::AndSonClient.new(@host, @port)
         
     | 
| 
      
 95 
     | 
    
         
            +
                  assert_true subject.eql?(matching)
         
     | 
| 
      
 96 
     | 
    
         
            +
                  not_matching = AndSon::AndSonClient.new(Factory.string, Factory.integer)
         
     | 
| 
      
 97 
     | 
    
         
            +
                  assert_false subject.eql?(not_matching)
         
     | 
| 
       73 
98 
     | 
    
         
             
                end
         
     | 
| 
       74 
99 
     | 
    
         | 
| 
       75 
100 
     | 
    
         
             
              end
         
     | 
| 
       76 
101 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
              class  
     | 
| 
       78 
     | 
    
         
            -
                desc "call"
         
     | 
| 
      
 102 
     | 
    
         
            +
              class AndSonClientCallTests < AndSonClientTests
         
     | 
| 
      
 103 
     | 
    
         
            +
                desc "call method"
         
     | 
| 
       79 
104 
     | 
    
         
             
                setup do
         
     | 
| 
       80 
     | 
    
         
            -
                  @ 
     | 
| 
       81 
     | 
    
         
            -
                   
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
                   
     | 
| 
      
 105 
     | 
    
         
            +
                  @call_runner_spy = CallRunnerSpy.new
         
     | 
| 
      
 106 
     | 
    
         
            +
                  Assert.stub(AndSon::CallRunner, :new){ @call_runner_spy }
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                  @service_name = Factory.string
         
     | 
| 
      
 109 
     | 
    
         
            +
                  @service_params = { Factory.string => Factory.string }
         
     | 
| 
      
 110 
     | 
    
         
            +
                  @response_block = proc{ Factory.string }
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                  @response = subject.call(@service_name, @service_params, &@response_block)
         
     | 
| 
       84 
113 
     | 
    
         
             
                end
         
     | 
| 
       85 
114 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
                should " 
     | 
| 
       87 
     | 
    
         
            -
                   
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
      
 115 
     | 
    
         
            +
                should "call `call` on its call runner and return its response" do
         
     | 
| 
      
 116 
     | 
    
         
            +
                  assert_equal [@service_name, @service_params], @call_runner_spy.call_args
         
     | 
| 
      
 117 
     | 
    
         
            +
                  assert_equal @response_block, @call_runner_spy.call_block
         
     | 
| 
      
 118 
     | 
    
         
            +
                  assert_equal @call_runner_spy.call_response, @response
         
     | 
| 
      
 119 
     | 
    
         
            +
                end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
              end
         
     | 
| 
       91 
122 
     | 
    
         | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
      
 123 
     | 
    
         
            +
              class TestClientTests < UnitTests
         
     | 
| 
      
 124 
     | 
    
         
            +
                desc "TestClient"
         
     | 
| 
      
 125 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 126 
     | 
    
         
            +
                  @name = Factory.string
         
     | 
| 
      
 127 
     | 
    
         
            +
                  @params = { Factory.string => Factory.string }
         
     | 
| 
       95 
128 
     | 
    
         | 
| 
       96 
     | 
    
         
            -
                   
     | 
| 
       97 
     | 
    
         
            -
                   
     | 
| 
       98 
     | 
    
         
            -
                   
     | 
| 
      
 129 
     | 
    
         
            +
                  @client = AndSon::TestClient.new(@host, @port)
         
     | 
| 
      
 130 
     | 
    
         
            +
                  data = Factory.string
         
     | 
| 
      
 131 
     | 
    
         
            +
                  @client.add_response(@name, @params){ data }
         
     | 
| 
      
 132 
     | 
    
         
            +
                  @response = @client.responses.get(@name, @params)
         
     | 
| 
       99 
133 
     | 
    
         
             
                end
         
     | 
| 
      
 134 
     | 
    
         
            +
                subject{ @client }
         
     | 
| 
       100 
135 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
                should  
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
      
 136 
     | 
    
         
            +
                should have_accessors :timeout_value, :params_value, :logger_value
         
     | 
| 
      
 137 
     | 
    
         
            +
                should have_readers :calls, :responses
         
     | 
| 
      
 138 
     | 
    
         
            +
                should have_imeths :add_response, :remove_response, :reset
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                should "default its params value" do
         
     | 
| 
      
 141 
     | 
    
         
            +
                  assert_equal({}, subject.params_value)
         
     | 
| 
      
 142 
     | 
    
         
            +
                end
         
     | 
| 
       106 
143 
     | 
    
         | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
      
 144 
     | 
    
         
            +
                should "know its stored responses" do
         
     | 
| 
      
 145 
     | 
    
         
            +
                  assert_instance_of AndSon::StoredResponses, subject.responses
         
     | 
| 
      
 146 
     | 
    
         
            +
                end
         
     | 
| 
       110 
147 
     | 
    
         | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
      
 148 
     | 
    
         
            +
                should "know its call runner" do
         
     | 
| 
      
 149 
     | 
    
         
            +
                  subject
         
     | 
| 
       112 
150 
     | 
    
         
             
                end
         
     | 
| 
       113 
151 
     | 
    
         | 
| 
       114 
     | 
    
         
            -
                should " 
     | 
| 
       115 
     | 
    
         
            -
                   
     | 
| 
       116 
     | 
    
         
            -
                   
     | 
| 
      
 152 
     | 
    
         
            +
                should "store each call made in its `calls`" do
         
     | 
| 
      
 153 
     | 
    
         
            +
                  assert_equal [], subject.calls
         
     | 
| 
      
 154 
     | 
    
         
            +
                  subject.call(@name, @params)
         
     | 
| 
      
 155 
     | 
    
         
            +
                  assert_equal 1, subject.calls.size
         
     | 
| 
       117 
156 
     | 
    
         | 
| 
       118 
     | 
    
         
            -
                   
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                   
     | 
| 
      
 157 
     | 
    
         
            +
                  call = subject.calls.last
         
     | 
| 
      
 158 
     | 
    
         
            +
                  assert_instance_of AndSon::TestClient::Call, call
         
     | 
| 
      
 159 
     | 
    
         
            +
                  assert_equal @name, call.request_name
         
     | 
| 
      
 160 
     | 
    
         
            +
                  assert_equal @params, call.request_params
         
     | 
| 
      
 161 
     | 
    
         
            +
                  assert_equal @response.protocol_response, call.response
         
     | 
| 
       121 
162 
     | 
    
         
             
                end
         
     | 
| 
       122 
163 
     | 
    
         | 
| 
       123 
     | 
    
         
            -
                should " 
     | 
| 
       124 
     | 
    
         
            -
                   
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
      
 164 
     | 
    
         
            +
                should "return a stored response using `call`" do
         
     | 
| 
      
 165 
     | 
    
         
            +
                  assert_equal @response.data, subject.call(@name, @params)
         
     | 
| 
      
 166 
     | 
    
         
            +
                end
         
     | 
| 
       126 
167 
     | 
    
         | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
                   
     | 
| 
      
 168 
     | 
    
         
            +
                should "yield a stored response using `call` with a block" do
         
     | 
| 
      
 169 
     | 
    
         
            +
                  yielded = nil
         
     | 
| 
      
 170 
     | 
    
         
            +
                  subject.call(@name, @params){ |response| yielded = response }
         
     | 
| 
      
 171 
     | 
    
         
            +
                  assert_equal @response.protocol_response, yielded
         
     | 
| 
      
 172 
     | 
    
         
            +
                end
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
                should "allow adding/removing stored responses" do
         
     | 
| 
      
 175 
     | 
    
         
            +
                  data = Factory.string
         
     | 
| 
      
 176 
     | 
    
         
            +
                  subject.add_response(@name, @params){ data }
         
     | 
| 
      
 177 
     | 
    
         
            +
                  response = subject.responses.get(@name, @params)
         
     | 
| 
      
 178 
     | 
    
         
            +
                  assert_equal data, response.data
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
                  subject.remove_response(@name, @params)
         
     | 
| 
      
 181 
     | 
    
         
            +
                  response = subject.responses.get(@name, @params)
         
     | 
| 
      
 182 
     | 
    
         
            +
                  assert_not_equal data, response.data
         
     | 
| 
      
 183 
     | 
    
         
            +
                end
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
                should "clear its calls and remove all its configured responses using `reset`" do
         
     | 
| 
      
 186 
     | 
    
         
            +
                  subject.call(@name, @params)
         
     | 
| 
      
 187 
     | 
    
         
            +
                  assert_not_equal [], subject.calls
         
     | 
| 
      
 188 
     | 
    
         
            +
                  assert_equal @response, subject.responses.get(@name, @params)
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
                  subject.reset
         
     | 
| 
      
 191 
     | 
    
         
            +
                  assert_equal [], subject.calls
         
     | 
| 
      
 192 
     | 
    
         
            +
                  assert_not_equal @response, subject.responses.get(@name, @params)
         
     | 
| 
      
 193 
     | 
    
         
            +
                end
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
                should "be comparable" do
         
     | 
| 
      
 196 
     | 
    
         
            +
                  matching = AndSon::TestClient.new(@host, @port)
         
     | 
| 
      
 197 
     | 
    
         
            +
                  assert_equal matching, subject
         
     | 
| 
      
 198 
     | 
    
         
            +
             
     | 
| 
      
 199 
     | 
    
         
            +
                  not_matching = AndSon::TestClient.new(Factory.string, @port)
         
     | 
| 
      
 200 
     | 
    
         
            +
                  assert_not_equal not_matching, subject
         
     | 
| 
      
 201 
     | 
    
         
            +
                  not_matching = AndSon::TestClient.new(@host, Factory.integer)
         
     | 
| 
      
 202 
     | 
    
         
            +
                  assert_not_equal not_matching, subject
         
     | 
| 
      
 203 
     | 
    
         
            +
                  params = { Factory.string => Factory.string }
         
     | 
| 
      
 204 
     | 
    
         
            +
                  not_matching = AndSon::TestClient.new(@host, @port).params(params)
         
     | 
| 
      
 205 
     | 
    
         
            +
                  assert_not_equal not_matching, subject
         
     | 
| 
      
 206 
     | 
    
         
            +
                  not_matching = AndSon::TestClient.new(@host, @port).logger(Factory.string)
         
     | 
| 
      
 207 
     | 
    
         
            +
                  assert_not_equal not_matching, subject
         
     | 
| 
      
 208 
     | 
    
         
            +
                  not_matching = AndSon::TestClient.new(@host, @port).timeout(Factory.integer)
         
     | 
| 
      
 209 
     | 
    
         
            +
                  assert_not_equal not_matching, subject
         
     | 
| 
      
 210 
     | 
    
         
            +
                end
         
     | 
| 
      
 211 
     | 
    
         
            +
             
     | 
| 
      
 212 
     | 
    
         
            +
                should "be hash comparable" do
         
     | 
| 
      
 213 
     | 
    
         
            +
                  assert_equal subject.call_runner.hash, subject.hash
         
     | 
| 
      
 214 
     | 
    
         
            +
             
     | 
| 
      
 215 
     | 
    
         
            +
                  matching = AndSon::TestClient.new(@host, @port)
         
     | 
| 
      
 216 
     | 
    
         
            +
                  assert_true subject.eql?(matching)
         
     | 
| 
      
 217 
     | 
    
         
            +
                  not_matching = AndSon::TestClient.new(Factory.string, Factory.integer)
         
     | 
| 
      
 218 
     | 
    
         
            +
                  assert_false subject.eql?(not_matching)
         
     | 
| 
       131 
219 
     | 
    
         
             
                end
         
     | 
| 
       132 
220 
     | 
    
         | 
| 
       133 
221 
     | 
    
         
             
              end
         
     | 
| 
       134 
222 
     | 
    
         | 
| 
      
 223 
     | 
    
         
            +
              class TestClientInstanceMethodsTests < TestClientTests
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                should "set its timeout value and return its call runner using `timeout`" do
         
     | 
| 
      
 226 
     | 
    
         
            +
                  timeout_value = Factory.integer
         
     | 
| 
      
 227 
     | 
    
         
            +
                  result = subject.timeout(timeout_value)
         
     | 
| 
      
 228 
     | 
    
         
            +
                  assert_equal timeout_value, subject.timeout_value
         
     | 
| 
      
 229 
     | 
    
         
            +
                  assert_same subject, result
         
     | 
| 
      
 230 
     | 
    
         
            +
                end
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
                should "update its params value and return its call runner using `params`" do
         
     | 
| 
      
 233 
     | 
    
         
            +
                  params_value = { Factory.string => Factory.string }
         
     | 
| 
      
 234 
     | 
    
         
            +
                  result = subject.params(params_value)
         
     | 
| 
      
 235 
     | 
    
         
            +
                  assert_equal params_value, subject.params_value
         
     | 
| 
      
 236 
     | 
    
         
            +
                  assert_same subject, result
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
      
 238 
     | 
    
         
            +
                  new_key = Factory.string
         
     | 
| 
      
 239 
     | 
    
         
            +
                  new_value = Factory.string
         
     | 
| 
      
 240 
     | 
    
         
            +
                  subject.params({ new_key => new_value })
         
     | 
| 
      
 241 
     | 
    
         
            +
                  assert_equal 2, subject.params_value.keys.size
         
     | 
| 
      
 242 
     | 
    
         
            +
                  assert_equal new_value, subject.params_value[new_key]
         
     | 
| 
      
 243 
     | 
    
         
            +
                end
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
      
 245 
     | 
    
         
            +
                should "set its logger value and return its call runner using `logger`" do
         
     | 
| 
      
 246 
     | 
    
         
            +
                  logger_value = Factory.string
         
     | 
| 
      
 247 
     | 
    
         
            +
                  result = subject.logger(logger_value)
         
     | 
| 
      
 248 
     | 
    
         
            +
                  assert_equal logger_value, subject.logger_value
         
     | 
| 
      
 249 
     | 
    
         
            +
                  assert_same subject, result
         
     | 
| 
      
 250 
     | 
    
         
            +
                end
         
     | 
| 
      
 251 
     | 
    
         
            +
             
     | 
| 
      
 252 
     | 
    
         
            +
              end
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
      
 254 
     | 
    
         
            +
              class CallRunnerSpy
         
     | 
| 
      
 255 
     | 
    
         
            +
                attr_reader :call_args, :call_block, :call_response
         
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
| 
      
 257 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 258 
     | 
    
         
            +
                  @call_args = []
         
     | 
| 
      
 259 
     | 
    
         
            +
                  @call_block = nil
         
     | 
| 
      
 260 
     | 
    
         
            +
                  @call_response = Factory.string
         
     | 
| 
      
 261 
     | 
    
         
            +
                end
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
                def call(*args, &block)
         
     | 
| 
      
 264 
     | 
    
         
            +
                  @call_args = args
         
     | 
| 
      
 265 
     | 
    
         
            +
                  @call_block = block
         
     | 
| 
      
 266 
     | 
    
         
            +
                  @call_response
         
     | 
| 
      
 267 
     | 
    
         
            +
                end
         
     | 
| 
      
 268 
     | 
    
         
            +
              end
         
     | 
| 
      
 269 
     | 
    
         
            +
             
     | 
| 
       135 
270 
     | 
    
         
             
            end
         
     |