diff --git a/app/assets/javascripts/contact-list.js b/app/assets/javascripts/contact-list.js index 2c56167ba..3dfa85dc5 100644 --- a/app/assets/javascripts/contact-list.js +++ b/app/assets/javascripts/contact-list.js @@ -15,9 +15,15 @@ var List = { }); streamEl.html(string); - $('.aspect_membership_dropdown').each(function(){ - new app.views.AspectMembership({el: this}); - }); + + if (data.contacts) { + var contacts = new app.collections.Contacts(data.contacts); + $(".aspect_membership_dropdown.placeholder").each(function() { + var personId = $(this).data("personId"); + var view = new app.views.AspectMembership({person: contacts.findWhere({"person_id": personId}).person}); + $(this).html(view.render().$el); + }); + } }, startSearchDelay: function (theSearch) { diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index 5029ccc62..25b397ea7 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -62,7 +62,7 @@ class PeopleController < ApplicationController self.formats = self.formats + [:html] @answer_html = render_to_string :partial => 'people/person', :locals => @hashes.first end - render :json => { :search_count => @people.count, :search_html => @answer_html }.to_json + render json: {search_html: @answer_html, contacts: gon.preloads[:contacts]}.to_json end # renders the persons user profile page diff --git a/features/desktop/search.feature b/features/desktop/search.feature index 8b436018f..03e8fc343 100644 --- a/features/desktop/search.feature +++ b/features/desktop/search.feature @@ -26,6 +26,13 @@ Scenario: search for a inexistent user and go to the search page Then I should see "Users matching Trinity" within "#search_title" +Scenario: search for a user in background + When I sign in as "bob@bob.bob" + And I search for "user@pod.tld" + And a person with ID "user@pod.tld" has been discovered + Then I should see "user@pod.tld" within ".stream .info.diaspora_handle" + And I should see a ".aspect_dropdown" within ".stream" + Scenario: search for a not searchable user When I sign in as "carol@example.com" And I go to the edit profile page diff --git a/features/step_definitions/user_steps.rb b/features/step_definitions/user_steps.rb index af59a406c..ed1abe5f1 100644 --- a/features/step_definitions/user_steps.rb +++ b/features/step_definitions/user_steps.rb @@ -229,3 +229,7 @@ end Then /^I should get a zipped file$/ do expect(page.response_headers["Content-Type"]).to eq("application/zip") end + +And /^a person with ID "([^\"]*)" has been discovered$/ do |diaspora_id| + FactoryGirl.create(:person, diaspora_handle: diaspora_id) +end diff --git a/features/support/poor_mans_webmock.rb b/features/support/poor_mans_webmock.rb index ce2bf4d9f..061441a8f 100644 --- a/features/support/poor_mans_webmock.rb +++ b/features/support/poor_mans_webmock.rb @@ -26,4 +26,10 @@ module Workers # don't post to services in cucumber end end + + class FetchWebfinger < Base + def perform(*_args) + # don't do real discovery in cucumber + end + end end diff --git a/spec/controllers/people_controller_spec.rb b/spec/controllers/people_controller_spec.rb index 8672b7547..d2ab1ecc2 100644 --- a/spec/controllers/people_controller_spec.rb +++ b/spec/controllers/people_controller_spec.rb @@ -472,19 +472,20 @@ describe PeopleController, :type => :controller do :profile => FactoryGirl.build(:profile, :first_name => "Evan", :last_name => "Korth")) end - describe 'via json' do - it 'returns a zero count when a search fails' do - get :refresh_search, :q => "weweweKorth", :format => 'json' - expect(response.body).to eq({:search_count=>0, :search_html=>""}.to_json) + describe "via json" do + it "returns no data when a search fails" do + get :refresh_search, q: "weweweKorth", format: "json" + expect(response.body).to eq({search_html: "", contacts: nil}.to_json) end - it 'returns with a zero count unless a fully composed name is sent' do - get :refresh_search, :q => "Korth" - expect(response.body).to eq({:search_count=>0, :search_html=>""}.to_json) + it "returns no data unless a fully composed name is sent" do + get :refresh_search, q: "Korth" + expect(response.body).to eq({search_html: "", contacts: nil}.to_json) end - it 'returns with a found name' do - get :refresh_search, :q => @korth.diaspora_handle - expect(JSON.parse( response.body )["search_count"]).to eq(1) + + it "returns with a found name" do + get :refresh_search, q: @korth.diaspora_handle + expect(JSON.parse(response.body)["contacts"].size).to eq(1) end end end