E1850. Write unit tests for review response map.rb team100: Difference between revisions
No edit summary |
No edit summary |
||
Line 20: | Line 20: | ||
We mock the necessary instance for all test in the beginning of test file. | We mock the necessary instance for all test in the beginning of test file. | ||
<pre> | <pre> | ||
let(:team) { build(:assignment_team, id: 1, name: 'team no name', assignment: assignment, users: [student], parent_id: 1) } | let(:team) { build(:assignment_team, id: 1, name: 'team no name', assignment: assignment, users: [student], parent_id: 1) } | ||
let(:team1) { build(:assignment_team, id: 2, name: 'team has name', assignment: assignment, users: [student]) } | let(:team1) { build(:assignment_team, id: 2, name: 'team has name', assignment: assignment, users: [student]) } | ||
let(:review_response_map) { build(:review_response_map, id: 1, assignment: assignment, reviewer: participant, reviewee: team, reviewed_object_id: 1) } | let(:review_response_map) { build(:review_response_map, id: 1, assignment: assignment, reviewer: participant, reviewee: team, reviewed_object_id: 1) } | ||
Line 48: | Line 48: | ||
let(:assignment_participant1) { AssignmentParticipant.new(id: 1, user_id: 2, parent_id: 1) } | let(:assignment_participant1) { AssignmentParticipant.new(id: 1, user_id: 2, parent_id: 1) } | ||
let(:teams_users) {TeamsUser.new(user_id: 1, team_id: 1)} | let(:teams_users) {TeamsUser.new(user_id: 1, team_id: 1)} | ||
</pre> | |||
=== questionnaire === | |||
Test the questionnaire using find_by to get specific questionnaire of map. | |||
<pre> | |||
it '#questionnaire' do | |||
round = 1 | |||
allow(assignment).to receive(:review_questionnaire_id).with(1).and_return(1) | |||
allow(Questionnaire).to receive(:find_by).with(id: 1).and_return(questionnaire1) | |||
expect(review_response_map.questionnaire(1)).to eq(questionnaire1) | |||
end | |||
</pre> | |||
=== get title === | |||
Test the get_title method. | |||
<pre> | |||
it '#get_title' do | |||
expect(review_response_map.get_title).to eq("Review") | |||
end | |||
</pre> | |||
=== delete === | |||
Test the delete method of review_response_map which contains delete feedback_response_map. | |||
<pre> | |||
it '#delete' do | |||
response_map = double("ResponseMap", :reviewed_object_id => 2) | |||
expect(review_response_map.delete).to equal(review_response_map) | |||
end | |||
</pre> | |||
=== export fields === | |||
Test the export_fields method which show the title of export csv file should be "contributor" and "reviewed by". | |||
<pre> | |||
it '#export_fields' do | |||
expect(ReviewResponseMap.export_fields('Missing "_options"')).to eq(["contributor", "reviewed by"]) | |||
end | |||
</pre> | |||
=== export === | |||
Test the export method. | |||
<pre> | |||
it '#export' do | |||
csv = [] | |||
parent_id = 1 | |||
_options = _options | |||
allow(ReviewResponseMap).to receive(:where).with(reviewed_object_id: 1).and_return([review_response_map, review_response_map1]) | |||
expect(ReviewResponseMap.export(csv, parent_id, _options)).to eq([review_response_map1, review_response_map]) | |||
end | |||
</pre> | </pre> | ||
Revision as of 03:17, 6 November 2018
This wiki page is for the description of unit test for E1850 OSS assignment for Fall 2018, CSC/ECE 517.
Background
Expertiza is an open source web based peer review system developed and maintained by students and faculty members at North Carolina State University. It enables students enrolled in a particular course to form online teams, complete assignments, review other's work and receive feedbacks of your work.
Problem
Review_response_map.rb is used to prepare data for peer review. But there are no unit tests for it.
Work to be done
- Create a new file named review_response_map_spec.rb under spec/models folder
- Write RSpec unit tests to make the path coverage above 90%.
- Coverage as many edge cases as we can.
- Achieve as high branch coverage as we can. Use the mutant-rspec gem to measure test thoroughness and fault-finding capability of our tests.
Files Created
- spec/models/review_response_map_spec.rb
Unit Test
mock instance
We mock the necessary instance for all test in the beginning of test file.
let(:team) { build(:assignment_team, id: 1, name: 'team no name', assignment: assignment, users: [student], parent_id: 1) } let(:team1) { build(:assignment_team, id: 2, name: 'team has name', assignment: assignment, users: [student]) } let(:review_response_map) { build(:review_response_map, id: 1, assignment: assignment, reviewer: participant, reviewee: team, reviewed_object_id: 1) } let(:review_response_map1) { build(:review_response_map, id: 2, assignment: assignment, reviewer: participant1, reviewee: team1, reviewed_object_id: 1) } let(:feed_back_response_map) { double('feed_back_response_map', reviewed_object_id: 1) } let(:participant) { build(:participant, id: 1, parent_id: 1, user: build(:student, parent_id: 1, name: 'no name', fullname: 'no one')) } let(:participant1) { build(:participant, id: 2, parent_id: 2, user: build(:student, parent_id: 1, name: 'has name', fullname: 'has one')) } let(:questionnaire) { ReviewQuestionnaire.new(id: 1, questions: [question], max_question_score: 5) } let(:assignment) { build(:assignment, id: 1, name: 'Test Assgt', rounds_of_reviews: 2 ) } let(:assignment1) { build(:assignment, id: 2, name: 'Test Assgt', rounds_of_reviews: 1 ) } let(:response) { build(:response, id: 1, map_id: 1, round: 1, response_map: review_response_map, scores: [answer], is_submitted: true) } let(:response1) { build(:response, id: 2, map_id: 1, round: 2, response_map: review_response_map, scores: [answer]) } let(:response2) { build(:response, id: 3, map_id: 1, round: nil, response_map: review_response_map, scores: [answer], is_submitted: true) } let(:answer) { Answer.new(answer: 1, comments: 'Answer text', question_id: 1) } let(:question) { Criterion.new(id: 1, weight: 2, break_before: true) } let(:feedback) { FeedbackResponseMap.new(id: 1, reviewed_object_id: 1, reviewer_id: 1, reviewee_id: 1) } let(:metareview_response_map) { double('metareviewmap')} let(:metareview_response_map1) { MetareviewResponseMap.new(reviewed_object_id: 1)} let(:student) {build(:student, id: 1, fullname: 'no one', email: 'expertiza@mailinator.com') } let(:assignment_questionnaire){ AssignmentQuestionnaire.new(assignment_id: 1, used_in_round: 1, questionnaire_id: 1) } let(:assignment_questionnaire1){ AssignmentQuestionnaire.new(assignment_id: 1, used_in_round: 2, questionnaire_id: 1) } let(:questionnaire1) { Questionnaire.new(id: 1, type: 'ReviewQuestionnaire') } let(:response_map) { ResponseMap.new(id: 1, reviewed_object_id: 1, reviewee_id: 1, reviewer_id: 1, type: "ReviewResponseMap", response: [response], calibrate_to: 0) } let(:user) {User.new(id:1 , name: "name", fullname: 'fullname') } let(:user1) { User.new(id: 2, name: "name1", fullname: 'fullname') } let(:assignment_participant) { AssignmentParticipant.new(user_id: 1, parent_id: 1) } let(:assignment_participant1) { AssignmentParticipant.new(id: 1, user_id: 2, parent_id: 1) } let(:teams_users) {TeamsUser.new(user_id: 1, team_id: 1)}
questionnaire
Test the questionnaire using find_by to get specific questionnaire of map.
it '#questionnaire' do round = 1 allow(assignment).to receive(:review_questionnaire_id).with(1).and_return(1) allow(Questionnaire).to receive(:find_by).with(id: 1).and_return(questionnaire1) expect(review_response_map.questionnaire(1)).to eq(questionnaire1) end
get title
Test the get_title method.
it '#get_title' do expect(review_response_map.get_title).to eq("Review") end
delete
Test the delete method of review_response_map which contains delete feedback_response_map.
it '#delete' do response_map = double("ResponseMap", :reviewed_object_id => 2) expect(review_response_map.delete).to equal(review_response_map) end
export fields
Test the export_fields method which show the title of export csv file should be "contributor" and "reviewed by".
it '#export_fields' do expect(ReviewResponseMap.export_fields('Missing "_options"')).to eq(["contributor", "reviewed by"]) end
export
Test the export method.
it '#export' do csv = [] parent_id = 1 _options = _options allow(ReviewResponseMap).to receive(:where).with(reviewed_object_id: 1).and_return([review_response_map, review_response_map1]) expect(ReviewResponseMap.export(csv, parent_id, _options)).to eq([review_response_map1, review_response_map]) end
Running Rspec
The tests can be run on the terminal from inside the expertiza folder using following commands:
rspec spec/models/review_response_map_spec.rb