Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@

### 🔧 Internal changes
- Fixed flaky test `can bulk assign duplicated TAs to grade entry students` in `/spec/models/grade_entry_student_spec.rb` (#7958)
- Added tests for `GroupsController` to fully cover `global_actions` (#7955)
- Added tests for `graders_controller` to fully cover `grader_criteria_mapping` function (#7949)
- Added tests for `GradersController` to fully cover `grader_groupers_mapping` (#7946)
- Added seed task to assign TAs to A1 groupings and criteria (#7867)
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/groups_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -713,7 +713,7 @@ def add_member(student, grouping, assignment)
# Generate a warning if a member is added to a group and they
# have fewer grace days credits than already used by that group
if student.remaining_grace_credits < grouping.grace_period_deduction_single
@warning_grace_day = I18n.t('groups.grace_day_over_limit', group: grouping.group.group_name)
flash_message(:warning, I18n.t('groups.grace_day_over_limit', group: grouping.group.group_name))
end

grouping.reload
Expand Down
1 change: 1 addition & 0 deletions doc/markus-contributors.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
Aaron Lee
Aayush Karki
Abdelhamid Benmouffok
Adam Goucher
Aimen Khan
Expand Down
89 changes: 89 additions & 0 deletions spec/controllers/groups_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -797,6 +797,15 @@
describe '#validate_groupings' do
let(:grouping) { create(:grouping_with_inviter) }

it 'should return a bad request when no grouping is selected.' do
post_as instructor, :global_actions, params: { course_id: course.id,
assignment_id: grouping.assignment.id,
groupings: [],
global_actions: 'valid' }
expect(response).to have_http_status(:bad_request)
expect(flash[:error]).to have_message(I18n.t('groups.select_a_group'))
end

it 'should validate groupings' do
post_as instructor, :global_actions, params: { course_id: course.id,
assignment_id: grouping.assignment.id,
Expand Down Expand Up @@ -844,6 +853,7 @@

describe '#add_members' do
let(:grouping) { create(:grouping_with_inviter) }
let(:grouping2) { create(:grouping_with_inviter, assignment: grouping.assignment) }
let(:student1) { create(:student) }
let(:student2) { create(:student) }

Expand All @@ -856,6 +866,85 @@

expect(grouping.students.size).to eq 3
end

it 'should return bad request when more than one grouping is selected' do
post_as instructor, :global_actions, params: { course_id: course.id,
assignment_id: grouping.assignment.id,
groupings: [grouping, grouping2],
students: [student1.id],
global_actions: 'assign' }
expect(response).to have_http_status(:bad_request)
expect(flash[:error]).to have_message(I18n.t('groups.select_only_one_group'))
end

it 'should return bad request when no students are selected' do
post_as instructor, :global_actions, params: { course_id: course.id,
assignment_id: grouping.assignment.id,
groupings: [grouping],
students: [],
global_actions: 'assign' }
expect(response).to have_http_status(:bad_request)
expect(flash[:error]).to have_message(I18n.t('groups.select_a_student'))
end

it 'should return bad request when assigning would exceed group_max' do
grouping.assignment.update!(group_max: 1, student_form_groups: true)
post_as instructor, :global_actions, params: { course_id: course.id,
assignment_id: grouping.assignment.id,
groupings: [grouping],
students: [student1.id],
global_actions: 'assign' }
expect(response).to have_http_status(:bad_request)
expect(flash[:error]).to have_message(I18n.t('groups.assign_over_limit', group: grouping.group.group_name))
end

it 'should assign inviter status when grouping has no members' do
empty_grouping = create(:grouping)
post_as instructor, :global_actions, params: { course_id: course.id,
assignment_id: empty_grouping.assignment.id,
groupings: [empty_grouping],
students: [student1.id],
global_actions: 'assign' }
expect(empty_grouping.student_memberships.reload.find_by(role: student1).membership_status)
.to eq(StudentMembership::STATUSES[:inviter])
end

it 'should return bad request when student is already in a group for this assignment' do
create(:grouping_with_inviter, assignment: grouping.assignment, inviter: student1)
post_as instructor, :global_actions, params: { course_id: course.id,
assignment_id: grouping.assignment.id,
groupings: [grouping],
students: [student1.id],
global_actions: 'assign' }
expect(response).to have_http_status(:bad_request)
expect(flash[:error]).to have_message(I18n.t('groups.invite_member.errors.already_grouped',
user_name: student1.user_name))
end

it 'should return bad request when student cannot be invited' do
diff_course_student = create(:student)
diff_course_student.update!(course: create(:course))
post_as instructor, :global_actions, params: { course_id: course.id,
assignment_id: grouping.assignment.id,
groupings: [grouping],
students: [diff_course_student.id],
global_actions: 'assign' }
expect(response).to have_http_status(:bad_request)
expect(flash[:error]).to have_message(I18n.t('groups.invite_member.errors.not_found',
user_name: diff_course_student.user_name))
end

it 'should flash a warning when student has insufficient grace credits' do
student1.update!(grace_credits: 0)
allow_any_instance_of(Grouping).to receive(:grace_period_deduction_single).and_return(1)
post_as instructor, :global_actions, params: { course_id: course.id,
assignment_id: grouping.assignment.id,
groupings: [grouping],
students: [student1.id],
global_actions: 'assign' }
expect(flash[:warning]).to have_message(I18n.t('groups.grace_day_over_limit', group: grouping.group.group_name))
expect(grouping.student_memberships.reload.find_by(role: student1)).to be_present
end
end

describe '#remove_members' do
Expand Down
Loading