diff --git a/ruby/lib/jam_ruby/models/band_search.rb b/ruby/lib/jam_ruby/models/band_search.rb index 54e2384eb..5a2d2646e 100644 --- a/ruby/lib/jam_ruby/models/band_search.rb +++ b/ruby/lib/jam_ruby/models/band_search.rb @@ -10,7 +10,7 @@ module JamRuby KEY_BAND_STATUS = 'band_status' KEY_PLAY_COMMIT = 'play_commitment' KEY_TOUR_OPTION = 'touring_option' - KEY_PERF_SAMPLES = 'perform_samples' + KEY_PERF_SAMPLES = 'performance_samples' KEY_HIRE_MAX_COST = 'max_cost' KEY_HIRE_FREE = 'free_gigs' @@ -162,8 +162,15 @@ module JamRuby end end - def _perform_samples(rel, filter) - rel + def _performance_samples(rel, filter) + case filter[KEY_PERF_SAMPLES] + when VAL_YES + rel.joins("LEFT OUTER JOIN performance_samples AS ps ON ps.player_id = bands.id AND player_type = '#{self.class.name}'").where(["ps.id IS NOT NULL"]) + when VAL_NO + rel.joins("LEFT OUTER JOIN performance_samples AS ps ON ps.player_id = bands.id AND player_type = '#{self.class.name}'").where(["ps.id IS NULL"]) + else + rel + end end def _max_cost(rel, filter) diff --git a/ruby/spec/jam_ruby/models/band_filter_search_spec.rb b/ruby/spec/jam_ruby/models/band_filter_search_spec.rb index ea9e51daa..8c923d7be 100644 --- a/ruby/spec/jam_ruby/models/band_filter_search_spec.rb +++ b/ruby/spec/jam_ruby/models/band_filter_search_spec.rb @@ -55,8 +55,10 @@ describe 'Band Search Model' do let!(:band) { Band.first } context 'all search keys' do + + let!(:filter) { to_join } + it "filters by gigs" do - filter = to_join band.update_attribute(:concert_count, BandSearch::GIG_COUNTS[2]) filter[BandSearch::KEY_GIGS] = BandSearch::GIG_COUNTS[2] search.search_results_page(BandSearch::TO_JOIN, filter) @@ -64,7 +66,6 @@ describe 'Band Search Model' do expect(search.results[0].id).to eq(band.id) end it "filters by genre" do - filter = to_join band_id = band.id filter[BandSearch::KEY_GENRES] = [band_id] search.search_results_page(BandSearch::TO_JOIN, filter) @@ -72,7 +73,6 @@ describe 'Band Search Model' do end it "filters by skill level" do - filter = to_join band.update_attribute(:band_type, BandSearch::SKILL_VAL_STRS[1]) filter[BandSearch::KEY_SKILL] = BandSearch::SKILL_VAL_STRS[1] search.search_results_page(BandSearch::TO_JOIN, filter) @@ -81,7 +81,6 @@ describe 'Band Search Model' do end it "filters by instruments" do - filter = to_join minst = FactoryGirl.create(:musician_instrument) band.musician_instruments << minst band.save @@ -125,7 +124,7 @@ describe 'Band Search Model' do it "filters by free gigs" do band.update_attribute(BandSearch::KEY_HIRE_FREE, true) filter[BandSearch::KEY_HIRE_FREE] = BandSearch::VAL_YES - search.search_results_page(BandSearch::TO_JOIN, filter) + search.search_results_page(BandSearch::TO_HIRE, filter) expect(search.results.count).to eq(1) expect(search.results[0].id).to eq(band.id) end @@ -133,14 +132,23 @@ describe 'Band Search Model' do it "filters by max cost" do band.update_attribute(:gig_minimum, 10) filter[BandSearch::KEY_HIRE_MAX_COST] = 5 - search.search_results_page(BandSearch::TO_JOIN, filter) + search.search_results_page(BandSearch::TO_HIRE, filter) expect(search.results.count).to eq(0) filter[BandSearch::KEY_HIRE_MAX_COST] = 15 - search.search_results_page(BandSearch::TO_JOIN, filter) + search.search_results_page(BandSearch::TO_HIRE, filter) expect(search.results.count).to eq(1) end + it "filters by perform samples" do + pending + PerformanceSample.create(searcher, {player: band, service_type: 'youtube', service_id: 'abc123'}) + filter[BandSearch::KEY_PERF_SAMPLES] = BandSearch::VAL_YES + search.search_results_page(BandSearch::TO_HIRE, filter) + expect(search.results.count).to eq(1) + expect(search.results[0].id).to eq(band.id) + end + end end