test/service_test.rb in service_contract-0.0.10 vs test/service_test.rb in service_contract-0.1.0

- old
+ new

@@ -1,21 +1,76 @@ require 'test_helper' class ServiceTest < Minitest::Test def test_all - assert_equal(1, SampleService.all.length) + assert_equal(2, SampleService.all.length) end def test_find service = SampleService.find(1) assert service, "expect to find a service by version" assert_equal "1", service.version - assert_equal 2, service.protocols.length + assert_equal 3, service.protocols.length protocol = service.protocol("location") assert_equal "location", protocol.name assert_equal 3, protocol.endpoints.length + end + + def test_null_params + # the member? method would error if the endpoint method had no parameters. This test verifies the fix. + service = SampleService.find(1) + protocol = service.protocol("city_state") + + # find the endpoint with no parameters. + empty_param_endpoints = protocol.endpoints.select{|e| e.parameters.empty?} + assert !empty_param_endpoints.empty? + + empty_param_endpoints.each do |endpoint| + assert_equal(false, endpoint.send("member?")) + end + end + + # The member? method determines if an endpoint is a "member" by looking at its first parameter. If that parameter + # is equal to the 'main_type' then it is a member, otherwise it is not a member. Main_type is nothing more than the + # classname of the protocol. + def test_member_endpoint + service = SampleService.find(1) + protocol = service.protocol("city_state") + + # only one endpoint is a member method, "member_method" + member_names = protocol.endpoints.select{|e| e.send("member?")}.map(&:name) + assert_equal(1, member_names.length) + assert_equal('member_method', member_names.first) + end + + def test_non_member_endpoint + service = SampleService.find(1) + protocol = service.protocol("city_state") + + # two endpoints are non member method, "bogus" and "non_member_method" + non_member_names = protocol.endpoints.select{|e| !e.send("member?")}.map(&:name) + assert_equal(2, non_member_names.length) + assert non_member_names.include?('non_member_method') + assert non_member_names.include?('bogus') + end + + def test_union_types + service = SampleService.find(2) + protocol = service.protocol('search_param') + + type = protocol.type('SearchParam') + assert(type, 'expected to find a SearchParam type') + + field = type.fields.detect{|field| field.name == 'customer_id'} + assert(field, 'expected to find a customer_id field') + + field_type = field.type + + assert_equal('union', field_type.name) + assert_equal('null, int, Array(int)', field_type.to_s) + assert_equal([NilClass, Fixnum, Array], field_type.valid_ruby_types) end end \ No newline at end of file