Skip to content

Commit

Permalink
Merge branch 'filter_modal' of github.com:khushiagl/Markus into filte…
Browse files Browse the repository at this point in the history
…r_modal
  • Loading branch information
DanielDervishi committed Jul 13, 2023
2 parents aba563d + 294debf commit fd6f827
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 16 deletions.
28 changes: 15 additions & 13 deletions app/assets/javascripts/Components/Modals/filter_modal.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,15 +68,20 @@ export class FilterModal extends React.Component {
};

renderTasDropdown = () => {
return (
<MultiSelectDropdown
id={"Tas"}
options={this.props.tas}
selected={this.state.currentTas}
toggleOption={this.toggleOptionTas}
clearSelection={this.clearSelectionTAs}
/>
);
if (this.props.role !== "Ta") {
return (
<div className={"filter"}>
<p>{I18n.t("results.filters.tas")}</p>
<MultiSelectDropdown
id={"Tas"}
options={this.props.tas}
selected={this.state.currentTas}
toggleOption={this.toggleOptionTas}
clearSelection={this.clearSelectionTAs}
/>
</div>
);
}
};

renderTagsDropdown = () => {
Expand Down Expand Up @@ -302,10 +307,7 @@ export class FilterModal extends React.Component {
</div>
</div>
<div className={"modal-container"}>
<div className={"filter"}>
<p>{I18n.t("results.filters.tas")}</p>
{this.renderTasDropdown()}
</div>
{this.renderTasDropdown()}
<label className={"annotation-input"}>
<p>{I18n.t("results.filters.annotation")}</p>
<input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ export class SubmissionSelector extends React.Component {
available_tags={this.props.available_tags}
current_tags={this.props.current_tags}
loading={this.props.loading}
role={this.props.role}
/>
</div>
);
Expand Down
6 changes: 3 additions & 3 deletions app/models/grouping.rb
Original file line number Diff line number Diff line change
Expand Up @@ -720,7 +720,7 @@ def get_next_grouping(current_role, reversed, filter_data = nil)
end
results = results.joins(grouping: :group)
if !filter_data.nil?
results = filter_groupings(results, filter_data)
results = filter_groupings(current_role, results, filter_data)
order_and_get_next_grouping(results, filter_data, reversed)
else
results = results.order('groups.group_name')
Expand All @@ -747,7 +747,7 @@ def get_random_incomplete(current_role)

private

def filter_groupings(results, filter_data)
def filter_groupings(current_role, results, filter_data)
unless filter_data['annotationValue'].nil? || filter_data['annotationValue'] == ''
results = results.joins(annotations: :annotation_text)
.where('annotation_texts.content LIKE ?',
Expand All @@ -773,7 +773,7 @@ def filter_groupings(results, filter_data)
.where('results.marking_state' => Result::MARKING_STATES[:incomplete])
end
end
unless filter_data['tas'].nil? || filter_data['tas'] == []
unless current_role.ta? || filter_data['tas'].nil? || filter_data['tas'] == []
results = results.joins(grouping: { tas: :user }).where('user.user_name': filter_data['tas'])
end
unless filter_data['tags'].nil? || filter_data['tags'] == []
Expand Down
100 changes: 100 additions & 0 deletions spec/controllers/results_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,47 @@ def self.test_unauthorized(route_name)
# end
# end
# end

context 'filter by tags' do
let!(:tag1) { create :tag, groupings: [grouping1, grouping3] }
let!(:tag2) { create :tag, groupings: [grouping2, grouping3] }

context 'when a tag has been picked' do
it 'should return the next group with a larger group name that satisfies the constraints' do
get :next_grouping, params: { course_id: course.id, grouping_id: grouping1.id,
id: grouping1.current_result.id,
direction: 1, filterData: { tags: [tag1.name] } }
expect(response.parsed_body['next_grouping']['id']).to eq(grouping3.id)
end

it 'should not return the next group that doesn\'t satisfy the constraint' do
get :next_grouping, params: { course_id: course.id, grouping_id: grouping1.id,
id: grouping1.current_result.id,
direction: 1, filterData: { tags: [tag1.name] } }
expect(response.parsed_body['next_grouping']['id']).not_to eq(grouping2.id)
end
end

context 'when multiple tags have been picked' do
it 'should return the next group with a larger group name that has atleast one of the tags' do
get :next_grouping, params: { course_id: course.id, grouping_id: grouping1.id,
id: grouping1.current_result.id,
direction: 1, filterData: { tags: [tag1.name, tag2.name] } }
expect(response.parsed_body['next_grouping']['id']).to eq(grouping2.id)
end
end

context 'when no tag has been picked' do
it 'should return the next grouping without constraints' do
get :next_grouping, params: { course_id: course.id, grouping_id: grouping1.id,
id: grouping1.current_result.id,
direction: 1, filterData: { tags: [] } }
expect(response.parsed_body['next_grouping']['id']).to eq(grouping2.id)
end
end
end
end

shared_examples 'shared ta and instructor tests' do
context 'accessing next_grouping' do
it 'should receive 200 when current grouping has a submission' do
Expand Down Expand Up @@ -1060,6 +1100,49 @@ def self.test_unauthorized(route_name)

context 'accessing next_grouping' do
include_examples 'ta and instructor #next_grouping with filters'

context 'filter by tas' do
let(:ta1) { create :ta }
let(:ta2) { create :ta }
let!(:ta_membership1) { create :ta_membership, role: ta1, grouping: grouping1 }
let!(:ta_membership2) { create :ta_membership, role: ta1, grouping: grouping3 }
let!(:ta_membership3) { create :ta_membership, role: ta2, grouping: grouping3 }
let!(:ta_membership4) { create :ta_membership, role: ta2, grouping: grouping2 }

context 'when a ta has been picked' do
it 'should return the next group with a larger group name that satisfies the constraints' do
get :next_grouping, params: { course_id: course.id, grouping_id: grouping1.id,
id: grouping1.current_result.id,
direction: 1, filterData: { tas: [ta1.user.user_name] } }
expect(response.parsed_body['next_grouping']['id']).to eq(grouping3.id)
end

it 'should not return the next group that doesn\'t satisfy the constraint' do
get :next_grouping, params: { course_id: course.id, grouping_id: grouping1.id,
id: grouping1.current_result.id,
direction: 1, filterData: { tas: [ta1.user.user_name] } }
expect(response.parsed_body['next_grouping']['id']).not_to eq(grouping2.id)
end
end

context 'when multiple tas have been picked' do
it 'should return the next group with a larger group name that has atleast one of the tas' do
get :next_grouping, params: { course_id: course.id, grouping_id: grouping1.id,
id: grouping1.current_result.id,
direction: 1, filterData: { tas: [ta1.user.user_name, ta2.user.user_name] } }
expect(response.parsed_body['next_grouping']['id']).to eq(grouping2.id)
end
end

context 'when no Ta is picked' do
it 'should return the next grouping without constraints' do
get :next_grouping, params: { course_id: course.id, grouping_id: grouping1.id,
id: grouping1.current_result.id,
direction: 1, filterData: { tas: [] } }
expect(response.parsed_body['next_grouping']['id']).to eq(grouping2.id)
end
end
end
end

describe '#random_incomplete_submission' do
Expand Down Expand Up @@ -1359,6 +1442,23 @@ def self.test_unauthorized(route_name)
end
context 'accessing next_grouping with valid permissions' do
include_examples 'ta and instructor #next_grouping with filters'
context 'filter by tas' do
let(:ta1) { create :ta }
let(:ta2) { create :ta }
let!(:ta_membership1) { create :ta_membership, role: ta1, grouping: grouping1 }
let!(:ta_membership2) { create :ta_membership, role: ta1, grouping: grouping3 }
let!(:ta_membership3) { create :ta_membership, role: ta2, grouping: grouping3 }
let!(:ta_membership4) { create :ta_membership, role: ta2, grouping: grouping2 }

context 'when a ta has been picked' do
it 'should return the next group with a larger group name and not filter by selected ta' do
get :next_grouping, params: { course_id: course.id, grouping_id: grouping1.id,
id: grouping1.current_result.id,
direction: 1, filterData: { tas: [ta1.user.user_name] } }
expect(response.parsed_body['next_grouping']['id']).to eq(grouping2.id)
end
end
end
end
end
end
Expand Down

0 comments on commit fd6f827

Please sign in to comment.