Skip to content

Commit 6fc4b2e

Browse files
authored
Merge pull request #251 from alphagov/remove-early-access-users-from-questions
Remove Early Access Users from Questions/Conversations
2 parents 8e59675 + 4dd7146 commit 6fc4b2e

8 files changed

Lines changed: 6 additions & 224 deletions

File tree

app/controllers/admin/questions_controller.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ def index
55
end
66

77
def show
8-
@question = Question.includes(conversation: %i[user signon_user], answer: %i[feedback sources])
8+
@question = Question.includes(conversation: :signon_user, answer: %i[feedback sources])
99
.find(params[:id])
1010
@answer = @question.answer
1111
@question_number = Question.where(conversation: @question.conversation)
@@ -26,7 +26,6 @@ def filter_params
2626
:question_routing_label,
2727
:page,
2828
:sort,
29-
:user_id,
3029
:signon_user_id,
3130
:conversation_id,
3231
)

app/helpers/admin/questions_helper.rb

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -61,29 +61,6 @@ def question_show_summary_list_rows(question, answer, question_number, total_que
6161
},
6262
].compact
6363

64-
user = conversation.user
65-
if user.present?
66-
rows << {
67-
field: "Early access user",
68-
value: safe_join([
69-
link_to(user.email, admin_early_access_user_path(user), class: "govuk-link"),
70-
" (",
71-
link_to("View all questions", admin_questions_path(user_id: user.id), class: "govuk-link"),
72-
")",
73-
]),
74-
}
75-
elsif conversation.early_access_user_id
76-
rows << {
77-
field: "Early access user",
78-
value: safe_join([
79-
"Deleted user",
80-
" (",
81-
link_to("View all questions", admin_questions_path(user_id: conversation.early_access_user_id), class: "govuk-link"),
82-
")",
83-
]),
84-
}
85-
end
86-
8764
signon_user = conversation.signon_user
8865
if signon_user.present? && conversation.source_api?
8966
rows << {

app/models/admin/filters/questions_filter.rb

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ class Admin::Filters::QuestionsFilter < Admin::Filters::BaseFilter
77
attribute :conversation_id
88
attribute :answer_feedback_useful, :boolean
99
attribute :question_routing_label
10-
attribute :user_id
1110
attribute :signon_user_id
1211

1312
validate :validate_dates
@@ -38,19 +37,12 @@ def results
3837
scope = conversation_scope(scope)
3938
scope = question_routing_label_scope(scope)
4039
scope = ordering_scope(scope)
41-
scope = user_scope(scope)
4240
scope = signon_user_scope(scope)
4341
scope.page(page)
4442
.per(25)
4543
end
4644
end
4745

48-
def user
49-
return @user if defined?(@user)
50-
51-
@user = EarlyAccessUser.includes(:conversations).find_by_id(user_id)
52-
end
53-
5446
def signon_user
5547
return @signon_user if defined?(@signon_user)
5648

@@ -73,7 +65,6 @@ def pagination_query_params
7365
filters[:end_date_params] = end_date_params if end_date_params.values.any?(&:present?)
7466
filters[:sort] = sort if sort != self.class.default_sort
7567
filters[:answer_feedback_useful] = answer_feedback_useful unless answer_feedback_useful.nil?
76-
filters[:user_id] = user_id if user_id.present?
7768
filters[:conversation_id] = conversation.id if conversation.present?
7869

7970
filters
@@ -125,14 +116,8 @@ def conversation_scope(scope)
125116
scope.where(conversation_id: conversation.id)
126117
end
127118

128-
def user_scope(scope)
129-
return scope if user_id.blank?
130-
131-
scope.joins(:conversation).where("conversations.early_access_user_id = ?", user_id)
132-
end
133-
134119
def signon_user_scope(scope)
135-
return scope if signon_user_id.blank? || user_id.present?
120+
return scope if signon_user_id.blank?
136121

137122
scope.joins(:conversation).where(conversation: { signon_user_id: signon_user_id, source: :api })
138123
end

app/views/admin/questions/_question_filters.html.erb

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,17 @@
11
<%
2-
user = filter.user
32
conversation = filter.conversation
43
signon_user = filter.signon_user
54
%>
65

76
<%= form_with(url: admin_questions_path, method: :get) do %>
8-
<% if params[:user_id].present? %>
9-
<p class="govuk-body">
10-
Filtering by user:
11-
<% if user.present? %>
12-
<%= link_to user.email, admin_early_access_user_path(user), class: "govuk-link" %>
13-
<% else %>
14-
<%= params[:user_id] %> (Deleted user)
15-
<% end %>
16-
</p>
17-
<%= hidden_field_tag(:user_id, params[:user_id]) %>
18-
<% elsif signon_user.present? %>
7+
<% if signon_user.present? %>
198
<p class="govuk-body">
209
Filtering by API user: <%= signon_user.name %>
2110
</p>
2211
<%= hidden_field_tag(:signon_user_id, params[:signon_user_id]) %>
2312
<% end %>
2413

25-
<% if user.present? %>
26-
<%= render "govuk_publishing_components/components/select", {
27-
id: "conversation_id",
28-
name: "conversation_id",
29-
label: "Conversation",
30-
heading_size: "s",
31-
full_width: true,
32-
options: [{ text: "", value: "" }] +
33-
user.conversations.map.with_index(1) do |conversation, index|
34-
{
35-
text: index.ordinalize,
36-
value: conversation.id,
37-
selected: params[:conversation_id] == conversation.id,
38-
}
39-
end,
40-
} %>
41-
<% elsif conversation.present? %>
14+
<% if conversation.present? %>
4215
<p class="govuk-body govuk-!-font-weight-bold govuk-!-margin-bottom-2">
4316
Filtering by conversation ID:
4417
</p>

spec/helpers/admin/questions_helper_spec.rb

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
result = helper.question_show_summary_list_rows(question, nil, 1, 1)
4949
expected_keys = [
5050
"Conversation id",
51-
"Early access user",
5251
"Question number",
5352
"Question id",
5453
"Question created at",
@@ -72,7 +71,6 @@
7271
"Question created at",
7372
"Question",
7473
"Show search results",
75-
"Early access user",
7674
"Source",
7775
"Rephrased question",
7876
"Status",
@@ -143,32 +141,6 @@
143141
expect(row[:value]).to eq("Advice, opinions, predictions")
144142
end
145143

146-
it "returns a row with a link to the user's details" do
147-
result = helper.question_show_summary_list_rows(question, nil, 1, 1)
148-
149-
row = result.find { |r| r[:field] == "Early access user" }
150-
value = row[:value]
151-
152-
expect(value)
153-
.to have_link(conversation.user.email, href: admin_early_access_user_path(conversation.user))
154-
.and have_link("View all questions", href: admin_questions_path(user_id: conversation.user.id))
155-
end
156-
157-
it "returns a row with a link to the deleted user's details" do
158-
user_id = conversation.user.id
159-
conversation.user.destroy!
160-
conversation.reload
161-
162-
result = helper.question_show_summary_list_rows(question, nil, 1, 1)
163-
164-
row = result.find { |r| r[:field] == "Early access user" }
165-
value = row[:value]
166-
167-
expect(value).to include("Deleted user")
168-
169-
expect(value).to have_link("View all questions", href: admin_questions_path(user_id:))
170-
end
171-
172144
it "doesn't return a 'Early access user' field when the conversation is not associated with one" do
173145
conversation.update!(user: nil)
174146

spec/models/admin/filters/questions_filter_spec.rb

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -218,19 +218,6 @@
218218
expect(filter.results).to eq([useless_question])
219219
end
220220

221-
it "filters the results by user" do
222-
alice = create(:early_access_user, email: "alice@example.com")
223-
bob = create(:early_access_user, email: "bob@example.com")
224-
alice_question = create(:question, conversation: create(:conversation, user: alice))
225-
bob_question = create(:question, conversation: create(:conversation, user: bob))
226-
227-
filter = described_class.new(user_id: alice.id)
228-
expect(filter.results).to eq([alice_question])
229-
230-
filter = described_class.new(user_id: bob.id)
231-
expect(filter.results).to eq([bob_question])
232-
end
233-
234221
it "filters the results by signon user" do
235222
alice = create(:signon_user, email: "alice@example.com")
236223
bob = create(:signon_user, email: "bob@example.com")
@@ -253,16 +240,6 @@
253240
expect(filter.results).to eq([])
254241
end
255242

256-
it "doesn't filter the results by signon user if signon_user_id and user_id are passed in" do
257-
alice = create(:signon_user, email: "alice@example.com")
258-
bob = create(:early_access_user, email: "bob@example.com")
259-
create(:question, conversation: create(:conversation, signon_user: alice))
260-
bob_question = create(:question, conversation: create(:conversation, user: bob))
261-
262-
filter = described_class.new(signon_user_id: alice.id, user_id: bob.id)
263-
expect(filter.results).to eq([bob_question])
264-
end
265-
266243
it "filters the results by question routing label" do
267244
create(:question, answer: build(:answer, question_routing_label: "genuine_rag"))
268245
non_english_question = create(:question, answer: build(:answer, question_routing_label: "non_english"))
@@ -293,25 +270,6 @@
293270
end
294271
end
295272

296-
describe "#user" do
297-
it "returns the user if user_id is passed in" do
298-
user = create(:early_access_user)
299-
filter = described_class.new(user_id: user.id)
300-
301-
expect(filter.user).to eq(user)
302-
end
303-
304-
it "returns nil if user_id is not passed in" do
305-
filter = described_class.new
306-
expect(filter.user).to be_nil
307-
end
308-
309-
it "returns nil if user_id is passed in but the user does not exist" do
310-
filter = described_class.new(user_id: "invalid_id")
311-
expect(filter.user).to be_nil
312-
end
313-
end
314-
315273
describe "#signon_user" do
316274
it "returns the signon_user if signon_user_id is passed in" do
317275
signon_user = create(:signon_user)
@@ -354,8 +312,7 @@
354312

355313
describe "#previous_page_params" do
356314
it "retains all other query params when constructing the params" do
357-
user = create(:early_access_user)
358-
conversation = create(:conversation, user:)
315+
conversation = create(:conversation)
359316
26.times do
360317
question = create(:question, conversation:)
361318
create(:answer, :with_feedback, question:)
@@ -371,7 +328,6 @@
371328
start_date_params:,
372329
end_date_params:,
373330
answer_feedback_useful: "true",
374-
user_id: user.id,
375331
conversation_id: conversation.id,
376332
)
377333

@@ -383,7 +339,6 @@
383339
answer_feedback_useful: true,
384340
start_date_params:,
385341
end_date_params:,
386-
user_id: user.id,
387342
conversation_id: conversation.id,
388343
},
389344
)
@@ -392,8 +347,7 @@
392347

393348
describe "#next_page_params" do
394349
it "retains all other query params when constructing the params" do
395-
user = create(:early_access_user)
396-
conversation = create(:conversation, user:)
350+
conversation = create(:conversation)
397351
26.times do
398352
question = create(:question, conversation:)
399353
create(:answer, :with_feedback, question:)
@@ -408,7 +362,6 @@
408362
start_date_params:,
409363
end_date_params:,
410364
answer_feedback_useful: "true",
411-
user_id: user.id,
412365
conversation_id: conversation.id,
413366
)
414367

@@ -421,7 +374,6 @@
421374
page: 2,
422375
start_date_params:,
423376
end_date_params:,
424-
user_id: user.id,
425377
conversation_id: conversation.id,
426378
},
427379
)

spec/requests/admin/questions_spec.rb

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -79,31 +79,6 @@
7979
expect_unprocessible_entity_with_date_errors
8080
end
8181

82-
it "renders the user's details when filtering by a non-deleted user" do
83-
user = create(:early_access_user)
84-
get admin_questions_path(user_id: user.id)
85-
86-
expect(response.body.squish).to have_content("Filtering by user: #{user.email}")
87-
end
88-
89-
it "renders the user's ID when filtering by a deleted user" do
90-
user = create(:early_access_user)
91-
user.destroy!
92-
get admin_questions_path(user_id: user.id)
93-
94-
expect(response.body.squish).to have_content("Filtering by user: #{user.id} (Deleted user)")
95-
end
96-
97-
it "renders a conversation_id select filter when filtering by a user" do
98-
user = create(:early_access_user)
99-
create(:conversation, user:)
100-
create(:conversation, user:)
101-
102-
get admin_questions_path(user_id: user.id)
103-
104-
expect(response.body).to have_select("conversation_id", options: ["", "1st", "2nd"])
105-
end
106-
10782
it "renders a conversation_id when filtering by a conversation_id" do
10883
conversation = create(:conversation)
10984
get admin_questions_path(conversation_id: conversation.id)
@@ -119,21 +94,6 @@
11994
expect(response.body.squish)
12095
.to have_content("Filtering by API user: #{signon_user.name}")
12196
end
122-
123-
context "and filter params are present for user and signon user" do
124-
it "doesn't render the signon user's details" do
125-
signon_user = create(:signon_user)
126-
create(:conversation, signon_user:)
127-
128-
get admin_questions_path(
129-
signon_user_id: signon_user.id,
130-
user_id: SecureRandom.uuid,
131-
)
132-
133-
expect(response.body.squish)
134-
.not_to have_content("Filtering by API user: #{signon_user.name}")
135-
end
136-
end
13797
end
13898

13999
context "when the sort param is not the default value" do

0 commit comments

Comments
 (0)