Skip to content

Commit c11f338

Browse files
committed
Initial commit
This sets up a basic test case, controller, and a form for doing search. This will allow a calling service to find a member and then do something with them
1 parent f5de02f commit c11f338

File tree

7 files changed

+93
-0
lines changed

7 files changed

+93
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Admin::MemberSearchController < Admin::ApplicationController
2+
def index
3+
@params = params[:member_search] || {}
4+
@name = @params[:name]
5+
@members = @name.blank? ? Member.none : Member.find_members(@name).select(:id, :name, :surname, :pronouns)
6+
@callback_url = @params[:callback] || results_admin_member_search_index_path
7+
if (@members.size == 1) && @callback_url.present?
8+
query = { member_pick: { members: [@members.pluck(:id)] } }
9+
query_string = query.to_query
10+
@callback_url = "#{@callback_url}?#{query_string}"
11+
redirect_to @callback_url and return
12+
end
13+
14+
render 'index', locals: { members: @members, callback: @callback_url }
15+
end
16+
17+
def results
18+
@members = Member.find(params[:member_pick][:members])
19+
render 'show', locals: { members: @members }
20+
end
21+
end

app/models/member.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ def recent_notes
118118
member_notes.where('created_at > ?', notes_from_date)
119119
end
120120

121+
def self.find_members(name)
122+
where('name ILIKE ?', "%#{name}%").or(where('surname ILIKE ?', "%#{name}%"))
123+
end
124+
121125
private
122126

123127
def invitations_on(date)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
= simple_form_for :member_search, url: admin_member_search_index_path, method: :get, html: {multipart: true, novalidate: true } do |f|
2+
.row
3+
.col-12.col-md-6
4+
= f.input :name, label: 'Member Name', input_html: { placeholder: 'Enter member name' }
5+
= f.button :submit, 'Search', class: 'btn btn-primary mt-3', name: nil
6+
= f.hidden_field 'callback', :value => @callback_url
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
.container.py-4.py-lg-5
2+
.row.mb-4
3+
.col
4+
%h1 Member search
5+
6+
.row
7+
.col.col-md-10.col-lg-8
8+
= render partial: 'search_form'
9+
10+
.row
11+
.col.col-md-10.col-lg-8
12+
- if @members.present?
13+
%h2 Select Member
14+
= simple_form_for :member_pick, url: @callback_url, method: :get do |f|
15+
.row
16+
.col-12.col-md-6
17+
= f.label :members, 'Member Name'
18+
- @members.each do |member|
19+
.form-check
20+
= f.check_box :members, { multiple: true, checked: member.id }, member.id, nil
21+
= f.label "member_#{member.id}", member.name_and_surname, class: 'form-check-label'
22+
= f.button :submit, 'Take me back', class: 'btn btn-primary mt-3', name: nil
23+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
.container.py-4.py-lg-5
2+
.row.mb-4
3+
.col
4+
%h1 Results
5+
6+
.row
7+
.col.col-md-10.col-lg-8
8+
%h2 Search Results
9+
%ul.list-group
10+
- @members.each do |member|
11+
%li.list-group-item
12+
= link_to member.name_and_surname, admin_member_path(member)

config/routes.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,13 @@
140140
end
141141

142142
resources :testimonials, only: %i[index]
143+
144+
resources :member_search, path: 'member-search', only: [:index, :results] do
145+
collection do
146+
get 'index'
147+
get 'results'
148+
end
149+
end
143150
end
144151

145152
get '/login', to: 'auth_services#new'
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
require 'spec_helper'
2+
3+
RSpec.feature 'admin member search', type: :feature do
4+
scenario 'search returns single member to requesting service' do
5+
Fabricate(:member, :name => 'Romeo', :surname => 'Montague')
6+
Fabricate(:member, :name => 'Juliet', :surname => 'Capulet')
7+
member = Fabricate(:member)
8+
login_as_admin(member)
9+
visit admin_member_search_index_path(callback: results_admin_member_search_index_path)
10+
11+
fill_in 'member_search_name', with: 'Julie'
12+
click_button 'Search'
13+
14+
expect(page).to have_current_path(results_admin_member_search_index_path, ignore_query: true)
15+
16+
expect(page).to have_content('Juliet Capulet')
17+
end
18+
19+
20+
end

0 commit comments

Comments
 (0)