Skip to content

Commit

Permalink
CDPT-2256 List inactive earlybird members (#1123)
Browse files Browse the repository at this point in the history
  • Loading branch information
vertism authored Nov 25, 2024
1 parent e598e46 commit 0fb8a1c
Show file tree
Hide file tree
Showing 9 changed files with 48 additions and 21 deletions.
7 changes: 4 additions & 3 deletions app/controllers/early_bird_members_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ class EarlyBirdMembersController < ApplicationController
before_action :authenticate_user!

def index
@early_bird_members = EarlyBirdMember.active_list
.all
.order(Arel.sql("lower(name)"))
@show_inactive = (params[:show_inactive] == "true")
list = @show_inactive ? EarlyBirdMember.inactive_list : EarlyBirdMember.active_list
@early_bird_members = list.order(Arel.sql("lower(name)"))

update_page_title("Early bird members")
end

Expand Down
8 changes: 8 additions & 0 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,12 @@ def action_officer_toggle_link(show_inactive)
link_to "View inactive action officers", action_officers_path(show_inactive: true), { class: "button-secondary" }
end
end

def early_bird_member_toggle_link(show_inactive)
if show_inactive
link_to "View active early bird members", early_bird_members_path, { class: "button-secondary" }
else
link_to "View inactive early bird members", early_bird_members_path(show_inactive: true), { class: "button-secondary" }
end
end
end
5 changes: 3 additions & 2 deletions app/models/action_officer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ class ActionOfficer < ApplicationRecord
belongs_to :deputy_director
belongs_to :press_desk

scope :inactive_list, -> { where(deleted: true) }
scope :active_list, -> { where(deleted: false) }

before_validation Validators::Whitespace.new

def self.by_name(name)
Expand All @@ -51,6 +54,4 @@ def name_with_div
"#{name} (#{deputy_director.division.name})"
end
end
scope :inactive_list, -> { where("action_officers.deleted = ?", true) }
scope :active_list, -> { where("action_officers.deleted = ? OR action_officers.deleted = ? AND action_officers.updated_at > ?", false, true, 2.days.ago) }
end
5 changes: 4 additions & 1 deletion app/models/early_bird_member.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ class EarlyBirdMember < ApplicationRecord
validates :name, presence: true
validates :email, presence: true, uniqueness: true, on: :create # rubocop:disable Rails/UniqueValidationWithoutIndex
validates :email, format: { with: Devise.email_regexp }
scope :active_list, -> { where("early_bird_members.deleted = ? OR early_bird_members.deleted = ? AND early_bird_members.updated_at > ?", false, true, 2.days.ago) }

scope :active_list, -> { where(deleted: false) }
scope :inactive_list, -> { where(deleted: true) }

before_validation Validators::Whitespace.new
end
3 changes: 2 additions & 1 deletion app/views/early_bird_members/index.html.slim
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ h1.govuk-heading-l Early bird members
div
ul#admin-button-bar
li= link_to ('Send early bird info'), {controller: 'early_bird_send_emails', action: 'send_emails'}, {class: 'button' }
li= link_to ('Add early bird member'), new_early_bird_member_path, {class: 'button-secondary'}
li= link_to ('Early bird preview'), {controller: 'early_bird_dashboard', action: 'preview'}, {class: 'button-secondary'}
li= link_to ('Add early bird member'), new_early_bird_member_path, {class: 'button-secondary'}
li= early_bird_member_toggle_link(@show_inactive)
table.table aria-label="early bird members"
thead
tr
Expand Down
4 changes: 0 additions & 4 deletions spec/controllers/action_officers_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,5 @@ def expected_order_of_action_officers
"Carrie Carroll",
"Kent Holloway",
"Lisa May",
"Jae Young",
"Sylvia Ware",
"Evangeline Cowan",
"Xavier Freeman",
]
end
2 changes: 1 addition & 1 deletion spec/factories/early_bird_members.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
FactoryBot.define do
factory :early_bird_member do
name { "Early Bird Member 1" }
email { "member.one@earlybird.com" }
sequence(:email) { |n| "member.one.#{n}@earlybird.com" }
deleted { false }
end
end
18 changes: 9 additions & 9 deletions spec/models/action_officer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,20 +50,20 @@
end
end

describe "Get index" do
let!(:ao_today_deleted) { create(:action_officer, updated_at: Time.zone.now, deleted: false) }
let!(:ao_today_active) { create(:action_officer, updated_at: Time.zone.now, deleted: true) }
let!(:ao_yesterday_deleted) { create(:action_officer, updated_at: 1.day.ago, deleted: false) }
let!(:ao_yesterday_active) { create(:action_officer, updated_at: 1.day.ago, deleted: true) }
let!(:ao_three_days_ago_active) { create(:action_officer, updated_at: 3.days.ago, deleted: false) }
describe "scopes" do
let!(:ao_today_deleted) { create(:action_officer, updated_at: Time.zone.now, deleted: true) }
let!(:ao_today_active) { create(:action_officer, updated_at: Time.zone.now, deleted: false) }
let!(:ao_yesterday_deleted) { create(:action_officer, updated_at: 1.day.ago, deleted: true) }
let!(:ao_yesterday_active) { create(:action_officer, updated_at: 1.day.ago, deleted: false) }
let!(:ao_three_days_ago_deleted) { create(:action_officer, updated_at: 3.days.ago, deleted: true) }
let!(:ao_three_days_ago_active) { create(:action_officer, updated_at: 3.days.ago, deleted: false) }

it "lists all active Action Officers and those made inactive withing the last two days" do
expect(described_class.active_list).to contain_exactly(ao_today_deleted, ao_today_active, ao_yesterday_deleted, ao_yesterday_active, ao_three_days_ago_active)
it "lists all active Action Officers" do
expect(described_class.active_list).to contain_exactly(ao_today_active, ao_yesterday_active, ao_three_days_ago_active)
end

it "lists all inactive Action Officers" do
expect(described_class.inactive_list).to contain_exactly(ao_today_active, ao_yesterday_active, ao_three_days_ago_deleted)
expect(described_class.inactive_list).to contain_exactly(ao_today_deleted, ao_yesterday_deleted, ao_three_days_ago_deleted)
end
end
end
17 changes: 17 additions & 0 deletions spec/models/early_bird_member_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,21 @@
expect(duplicate).to be_invalid
end
end

describe "scopes" do
let!(:eb_today_deleted) { create(:early_bird_member, updated_at: Time.zone.now, deleted: true) }
let!(:eb_today_active) { create(:early_bird_member, updated_at: Time.zone.now, deleted: false) }
let!(:eb_yesterday_deleted) { create(:early_bird_member, updated_at: 1.day.ago, deleted: true) }
let!(:eb_yesterday_active) { create(:early_bird_member, updated_at: 1.day.ago, deleted: false) }
let!(:eb_three_days_ago_deleted) { create(:early_bird_member, updated_at: 3.days.ago, deleted: true) }
let!(:eb_three_days_ago_active) { create(:early_bird_member, updated_at: 3.days.ago, deleted: false) }

it "lists all active Early Bird Members" do
expect(described_class.active_list).to contain_exactly(eb_today_active, eb_yesterday_active, eb_three_days_ago_active)
end

it "lists all inactive Early Bird Members" do
expect(described_class.inactive_list).to contain_exactly(eb_today_deleted, eb_yesterday_deleted, eb_three_days_ago_deleted)
end
end
end

0 comments on commit 0fb8a1c

Please sign in to comment.