# # profile_service_spec.rb # Crowdskout # # Copyright (c) 2016 Kyle Schutt. All rights reserved.require 'spec_helper' require 'spec_helper' describe Crowdskout::Services::ProfileService do before(:each) do @request = double('http request', :user => nil, :password => nil, :url => 'http://example.com', :redirection_history => nil) end describe "#get_profile" do it "returns a profile" do json = load_file('profile_response.json') net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK') response = RestClient::Response.create(json, net_http_resp, {}, @request) RestClient.stub(:get).and_return(response) profile = Crowdskout::Services::ProfileService.get_profile(1, "Names,Genders") profile.should be_kind_of(Crowdskout::Components::Profile) profile.collections[1].should be_kind_of(Crowdskout::Components::Collection) profile.collections[1].key_name.should eq 'Genders' profile.collections[1].items[0].should be_kind_of(Crowdskout::Components::Item) profile.collections[1].items[0].id.should eq 1 profile.collections[1].items[0].fields[0].should be_kind_of(Crowdskout::Components::Field) profile.collections[1].items[0].fields[0].key_name.should eq "Gender" profile.collections[1].items[0].fields[0].value.should be_kind_of(Crowdskout::Components::Value) profile.collections[1].items[0].fields[0].value.id.should eq 1 profile.collections[1].items[0].fields[0].value.value.should eq "Male" profile.collections[1].items[0].fields[1].key_name.should eq "TestValue" profile.collections[1].items[0].fields[1].value.should eq "value" end end describe "#create_profile" do it "adds a profile" do json = load_file('profile_response.json') net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK') response = RestClient::Response.create(json, net_http_resp, {}, @request) RestClient.stub(:post).and_return(response) new_profile = Crowdskout::Components::Profile.create(JSON.parse(json)["data"]) profile = Crowdskout::Services::ProfileService.create_profile(new_profile) profile.should be_kind_of(Crowdskout::Components::Profile) profile.collections[1].should be_kind_of(Crowdskout::Components::Collection) profile.collections[1].key_name.should eq 'Genders' profile.collections[1].items[0].should be_kind_of(Crowdskout::Components::Item) profile.collections[1].items[0].id.should eq 1 profile.collections[1].items[0].fields[0].should be_kind_of(Crowdskout::Components::Field) profile.collections[1].items[0].fields[0].key_name.should eq "Gender" profile.collections[1].items[0].fields[0].value.should be_kind_of(Crowdskout::Components::Value) profile.collections[1].items[0].fields[0].value.id.should eq 1 profile.collections[1].items[0].fields[0].value.value.should eq "Male" profile.collections[1].items[0].fields[1].key_name.should eq "TestValue" profile.collections[1].items[0].fields[1].value.should eq "value" end end describe "#create_profiles_bulk" do it "adds a profile" do json = load_file('profile_bulk_response.json') net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK') response = RestClient::Response.create(json, net_http_resp, {}, @request) RestClient.stub(:post).and_return(response) profiles = [] body = JSON.parse(json) body['data'].each do |profile| profiles << Crowdskout::Components::Profile.create(profile) end if body['data'].count > 0 profiles = Crowdskout::Services::ProfileService.create_profiles_bulk(profiles) profile = profiles.results[0] profiles.should be_kind_of(Crowdskout::Components::ResultSet) profile.should be_kind_of(Crowdskout::Components::Profile) profile.collections[0].should be_kind_of(Crowdskout::Components::Collection) profile.collections[0].key_name.should eq 'Genders' profile.collections[0].items[0].should be_kind_of(Crowdskout::Components::Item) profile.collections[0].items[0].id.should eq 1 profile.collections[0].items[0].fields[0].should be_kind_of(Crowdskout::Components::Field) profile.collections[0].items[0].fields[0].key_name.should eq "Gender" profile.collections[0].items[0].fields[0].value.should be_kind_of(Crowdskout::Components::Value) profile.collections[0].items[0].fields[0].value.id.should eq 1 profile.collections[0].items[0].fields[0].value.value.should eq "Male" end end describe "#update_profile" do it "updates a profile" do json = load_file('profile_response.json') net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK') response = RestClient::Response.create(json, net_http_resp, {}, @request) RestClient.stub(:put).and_return(response) profile = Crowdskout::Components::Profile.create(JSON.parse(json)["data"]) result = Crowdskout::Services::ProfileService.update_profile(profile) result.should be_kind_of(Crowdskout::Components::Profile) result.collections[1].should be_kind_of(Crowdskout::Components::Collection) result.collections[1].key_name.should eq 'Genders' result.collections[1].items[0].should be_kind_of(Crowdskout::Components::Item) result.collections[1].items[0].id.should eq 1 result.collections[1].items[0].fields[0].should be_kind_of(Crowdskout::Components::Field) result.collections[1].items[0].fields[0].key_name.should eq "Gender" result.collections[1].items[0].fields[0].value.should be_kind_of(Crowdskout::Components::Value) result.collections[1].items[0].fields[0].value.id.should eq 1 result.collections[1].items[0].fields[0].value.value.should eq "Male" result.collections[1].items[0].fields[1].key_name.should eq "TestValue" result.collections[1].items[0].fields[1].value.should eq "value" end end describe "#update_profiles_bulk" do it "adds a profile" do json = load_file('profile_bulk_response.json') net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK') response = RestClient::Response.create(json, net_http_resp, {}, @request) RestClient.stub(:put).and_return(response) profiles = [] body = JSON.parse(json) body['data'].each do |profile| profiles << Crowdskout::Components::Profile.create(profile) end if body['data'].count > 0 profiles = Crowdskout::Services::ProfileService.update_profiles_bulk(profiles) profile = profiles.results[0] profiles.should be_kind_of(Crowdskout::Components::ResultSet) profile.collections[0].should be_kind_of(Crowdskout::Components::Collection) profile.collections[0].key_name.should eq 'Genders' profile.collections[0].items[0].should be_kind_of(Crowdskout::Components::Item) profile.collections[0].items[0].id.should eq 1 profile.collections[0].items[0].fields[0].should be_kind_of(Crowdskout::Components::Field) profile.collections[0].items[0].fields[0].key_name.should eq "Gender" profile.collections[0].items[0].fields[0].value.should be_kind_of(Crowdskout::Components::Value) profile.collections[0].items[0].fields[0].value.id.should eq 1 profile.collections[0].items[0].fields[0].value.value.should eq "Male" end end describe "#check_for_non_match" do it "is a non-match" do json = load_file('check_for_non_match_true_response.json') net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK') response = RestClient::Response.create(json, net_http_resp, {}, @request) RestClient.stub(:post).and_return(response) profile = Crowdskout::Components::Profile.create(JSON.parse(load_file('profile_response.json'))["data"]) non_match_response = Crowdskout::Services::ProfileService.check_for_non_match(profile) non_match_response.should eq true end it "is a not non-match" do json = load_file('check_for_non_match_false_response.json') net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK') response = RestClient::Response.create(json, net_http_resp, {}, @request) RestClient.stub(:post).and_return(response) profile = Crowdskout::Components::Profile.create(JSON.parse(load_file('profile_response.json'))["data"]) non_match_response = Crowdskout::Services::ProfileService.check_for_non_match(profile) non_match_response.should eq false end end end