Skip to content

Commit f971f18

Browse files
committed
Update data returned, add tests
1 parent a84926b commit f971f18

4 files changed

Lines changed: 66 additions & 10 deletions

File tree

app/models/school_project.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ def transition_status_to!(new_status, user_id)
1919
state_machine.transition_to!(new_status, metadata: { changed_by: user_id })
2020
end
2121

22+
def unread_feedback?
23+
feedback.exists?(read_at: nil)
24+
end
25+
2226
# Add convenience methods for each state
2327
def unsubmitted?
2428
state_machine.in_state?(:unsubmitted)

app/views/api/lessons/student_index.json.jbuilder

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
json.array!(@lessons_with_users_and_remixes) do |lesson_with_user, remix|
44
lesson, user = lesson_with_user
55
json.partial! 'lesson', lesson: lesson, user: user
6-
json.status(lesson.project&.school_project&.status)
7-
json.unread_feedback_count(remix&.school_project&.feedback&.where(read_at: nil)&.count || 0)
6+
json.status(remix&.school_project&.status)
7+
json.has_unread_feedback(remix&.school_project&.unread_feedback?)
88
json.remix_identifier(remix.identifier) if remix.present?
99
end

spec/features/lesson/listing_lessons_spec.rb

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -259,9 +259,10 @@
259259
expect(data.size).to eq(0)
260260
end
261261

262-
it 'includes unread_feedback_count when the user is a student' do
262+
it 'includes has_unread_feedback when the user is a student' do
263263
authenticated_in_hydra_as(student)
264264
create(:class_student, school_class:, student_id: student.id)
265+
265266
student_project = create(
266267
:project,
267268
school:,
@@ -271,13 +272,17 @@
271272
user_id: student.id
272273
)
273274
school_project = student_project.school_project
275+
276+
# 1 unread feedback
274277
create(
275278
:feedback,
276279
school_project: school_project,
277280
user_id: teacher.id,
278281
content: 'Unread',
279282
read_at: nil
280283
)
284+
285+
# 1 read feedback
281286
create(
282287
:feedback,
283288
school_project: school_project,
@@ -288,16 +293,24 @@
288293

289294
get('/api/lessons', headers:)
290295
data = JSON.parse(response.body, symbolize_names: true)
291-
expect(data.first[:unread_feedback_count]).to eq(1)
296+
297+
expect(data.first[:has_unread_feedback]).to be(true)
292298
end
293299

294300
it 'includes status when the user is a student' do
295301
authenticated_in_hydra_as(student)
296302
create(:class_student, school_class:, student_id: student.id)
297303

298-
lesson.project.update!(school: school)
299-
school_project = lesson.project.school_project
304+
student_project = create(
305+
:project,
306+
school:,
307+
lesson:,
308+
parent: lesson.project,
309+
remixed_from_id: lesson.project.id,
310+
user_id: student.id
311+
)
300312

313+
school_project = student_project.school_project
301314
school_project.transition_status_to!(:submitted, teacher.id)
302315

303316
get('/api/lessons', headers:)
@@ -311,7 +324,14 @@
311324
authenticated_in_hydra_as(student)
312325
create(:class_student, school_class:, student_id: student.id)
313326

314-
lesson.project.update!(school: school)
327+
create(
328+
:project,
329+
school:,
330+
lesson:,
331+
parent: lesson.project,
332+
remixed_from_id: lesson.project.id,
333+
user_id: student.id
334+
)
315335

316336
get('/api/lessons', headers:)
317337
data = JSON.parse(response.body, symbolize_names: true)

spec/models/school_project_spec.rb

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44

55
RSpec.describe SchoolProject do
66
let(:state_machine) { instance_double(SchoolProjectStateMachine) }
7-
let(:school_project) { create(:school_project, school:, project:) }
8-
let(:project) { create(:project, school:, user_id: student.id) }
7+
let(:school_class) { create(:school_class, school:, teacher_ids: [teacher.id]) }
8+
let(:lesson) { create(:lesson, school:, school_class:, user_id: teacher.id) }
9+
let(:school_project) { create(:school_project, school:, project: remix) }
910
let(:student) { create(:student, school:) }
1011
let(:school) { create(:school) }
12+
let(:teacher) { create(:teacher, school:) }
13+
let(:teacher_project) { create(:project, school:, user_id: teacher.id, lesson:) }
14+
let(:remix) { create(:project, school:, user_id: student.id, remixed_from_id: teacher_project.id) }
1115

1216
before do
1317
allow(school_project).to receive(:state_machine).and_return(state_machine)
@@ -20,7 +24,7 @@
2024

2125
describe '#status' do
2226
it 'defaults to unsubmitted' do
23-
new_school_project = create(:school_project, school:, project:)
27+
new_school_project = create(:school_project, school:, project: teacher_project)
2428
expect(new_school_project.status).to eq('unsubmitted')
2529
end
2630

@@ -73,4 +77,32 @@
7377
expect(state_machine).to have_received(:history)
7478
end
7579
end
80+
81+
describe '#unread_feedback?' do
82+
it 'returns true if there is unread feedback for the school project' do
83+
create_list(
84+
:feedback,
85+
3,
86+
school_project: school_project,
87+
read_at: nil,
88+
content: 'Unread',
89+
user_id: teacher.id
90+
)
91+
92+
create_list(
93+
:feedback,
94+
2,
95+
school_project: school_project,
96+
read_at: Time.current,
97+
content: 'Read',
98+
user_id: teacher.id
99+
)
100+
101+
expect(school_project.unread_feedback?).to be true
102+
end
103+
104+
it 'returns false when there is no feedback' do
105+
expect(school_project.unread_feedback?).to be false
106+
end
107+
end
76108
end

0 commit comments

Comments
 (0)