From 67b35a601ad88cd052ceae8d99c1e6df199cf50b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 15 Oct 2016 13:48:38 +0200 Subject: [PATCH] Exclude blocked users from follow suggestions, fix tests --- .travis.yml | 5 ++++- app/assets/javascripts/components/reducers/timelines.jsx | 4 ++++ app/models/follow_suggestion.rb | 2 +- spec/rails_helper.rb | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index a06c8100e..a2e309d98 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,8 @@ env: - LOCAL_DOMAIN=cb6e6126.ngrok.io - LOCAL_HTTPS=true - RAILS_ENV=test + - NEO4J_HOST=localhost + - NEO4J_PORT=7575 addons: postgresql: 9.4 @@ -20,8 +22,9 @@ bundler_args: --without development production --retry=3 --jobs=3 install: - npm install -g npm@3 - - npm install + - npm install -g yarn - bundle install + - yarn install before_script: - bundle exec rails db:create db:migrate diff --git a/app/assets/javascripts/components/reducers/timelines.jsx b/app/assets/javascripts/components/reducers/timelines.jsx index 9fb84b585..d4c6d43b4 100644 --- a/app/assets/javascripts/components/reducers/timelines.jsx +++ b/app/assets/javascripts/components/reducers/timelines.jsx @@ -164,6 +164,10 @@ function normalizeAccount(state, account, relationship) { }; function normalizeRelationship(state, relationship) { + if (state.get('suggestions').includes(relationship.get('id')) && (relationship.get('following') || relationship.get('blocking'))) { + state = state.update('suggestions', list => list.filterNot(id => id === relationship.get('id'))); + } + return state.setIn(['relationships', relationship.get('id')], relationship); }; diff --git a/app/models/follow_suggestion.rb b/app/models/follow_suggestion.rb index c14dba672..108a948a2 100644 --- a/app/models/follow_suggestion.rb +++ b/app/models/follow_suggestion.rb @@ -2,7 +2,7 @@ class FollowSuggestion def self.get(for_account_id, limit = 6) neo = Neography::Rest.new account_ids = neo.execute_query('START a=node:account_index(Account={id}) MATCH (a)-[:follows]->(b)-[:follows]->(c) WHERE a <> c AND NOT (a)-[:follows]->(c) RETURN DISTINCT c.account_id', id: for_account_id) - Account.where(id: account_ids['data'].map(&:first)).limit(limit) unless account_ids.empty? + Account.where(id: account_ids['data'].map(&:first) - Block.where(account_id: for_account_id).pluck(:target_account_id)).limit(limit) unless account_ids.empty? rescue Neography::NeographyError, Excon::Error::Socket => e Rails.logger.error e [] diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index c83051d62..18917f2d9 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -9,7 +9,7 @@ require 'webmock/rspec' require 'paperclip/matchers' ActiveRecord::Migration.maintain_test_schema! -WebMock.disable_net_connect! +WebMock.disable_net_connect!(allow: 'localhost:7575') Sidekiq::Testing.inline! RSpec.configure do |config|