<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mfleader</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mfleader"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Mfleader"/>
	<updated>2026-05-26T15:21:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=121520</id>
		<title>E1875 Revision Planning Tool</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=121520"/>
		<updated>2018-12-14T13:36:51Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Files modified */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== What's it about? ==&lt;br /&gt;
In the first round of Expertiza reviews, we ask reviewers to give authors some guidance on how to improve their work.  Then in the second round, reviewers rate how well authors have followed their suggestions.  We could carry the interaction one step further if we asked authors to make up a revision plan based on the first-round reviews.  That is, authors would say what they were planning to do to improve their work.  Then second-round reviewers would assess how well they did it.  In essence, this means that authors would be adding criteria to the second-round rubric that applied only to their submission.  We are interested in having this implemented and used in a class so that we can study its effect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== What needs to be done? ==&lt;br /&gt;
* Develop UI for authors to create new questions to add to the second round-rubric. This should be a form that includes the following:&lt;br /&gt;
** A description of the revision plan. Eg: We will add feature X to address issues a,b and c. We will modify feature Y and expect it to resolve errors d, c and e.&lt;br /&gt;
** One or more questions for every proposed improvement. Example:&lt;br /&gt;
*** How effectively did feature X address / solve issues a, b and c?&lt;br /&gt;
*** Did modification of feature Y resolve error d?&lt;br /&gt;
* Every new question must be linked to the second-round questionnaire.&lt;br /&gt;
* Every new question must be linked to the author’s submission&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
In the 2nd round of reviews, the Author should be able to add a statement to direct towards Author selected improvements from Round 1 to Round 2.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Motivation ==&lt;br /&gt;
The OSS and Final projects are different for every team. From a reviewers perspective, not all questions make sense for all projects. The motivation behind this project is:&lt;br /&gt;
* Questions unique to each project gives the reviewers a perspective on the author’s objectives.&lt;br /&gt;
* Allow the Author to get feedback on whether or not they accomplished their self-directed goal.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Criteria for completion ==&lt;br /&gt;
# Direct user to Revision Improvement Questionnaire.&lt;br /&gt;
# Create a form for a Assignment Team to add Questions to a Questionnaire that are specific to that Submission.&lt;br /&gt;
# Append Revision Improvement Questionnaire to 2nd Round Review Questionnaire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UI mockups ===&lt;br /&gt;
The first image shows a mockup of what the Author will see on the submission page to submit new additional questions for review. &amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:E1875U1_1.jpg]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Second is a view of what the reviewer will see. It should blend in with the review questions submitted by the instructor for all similar projects.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:E1875UI_2.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files modified ==&lt;br /&gt;
&lt;br /&gt;
==== Controllers ====&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-a7ee7dddd7aedbc0b814d98f0cb34c25 grades_controller.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-b41fa84d1ee0c03c4e301f977fbe453d questionnaires_controller.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-7786ab741930f6bace28b7e5da61b8d6 response_controller.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-33d668958529875af7029d78e37aff60 submitted_content_controller.rb]&lt;br /&gt;
&lt;br /&gt;
==== Views ====&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-2213cf9074761b4121a9fb3ddcce6145 questionnaires/_questionnaire.html.erb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-6b83ba9473bd5cc58d3b7c620235a6c0 submitted_content/edit.html.erb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-6b83ba9473bd5cc58d3b7c620235a6c0 submitted_content/edit.html.erb]&lt;br /&gt;
&lt;br /&gt;
==== Models ====&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-a983bfc492e6d1982c673bc208afe459 answer.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-3dffd0131e1a14847e8c98376bae4984 questionnaire.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-f2caf2e29f94ec94cb27bdb86ec85d40 response.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-85f51952994f8162980c605efd60db44 revision_review_questionnaire.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-c6f2a3b3452f5a9effa4a2b023ed2322 submission_record.rb]&lt;br /&gt;
&lt;br /&gt;
==== Database ====&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-c2ba560985d8d1ea9184e04d71bf2c83 20181123004154_add_submission_record_to_questionnaire.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-1acd2e7e27a227829d5d14a91c863bb6 schema.rb]&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-ebb9ab8d49abf2b40d4aad426dad68e5 grades_controller_spec.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-df286dc963f50de24c47bacfb0b3a143 questionnaires_controller_spec.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-3a17ddf9d828caa60f11423f20fb88a9 factories.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-7d95010cdfe370a461e216ba1d724392 assignment_submission_spec.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-a68a7982922073b9602c0fd6097e0bd2 answer_spec.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-e162432910d3b3b29b3c9711d6e818bb revision_review_questionnaire_spec.rb]&lt;br /&gt;
&lt;br /&gt;
==== config ====&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1302/files#diff-21497849d8f00507c9c8dcaf6288b136 routes.rb]&lt;br /&gt;
&lt;br /&gt;
== Test Plan and Demo ==&lt;br /&gt;
&lt;br /&gt;
=== Test Plan ===&lt;br /&gt;
# Login as 'instructor6' with password 'password'.&lt;br /&gt;
# Create 2 new users named 'abc' and 'xyz'.&lt;br /&gt;
# Make an assignment with the name 'RPT'. Add abc and xyz as participants to RPT.&lt;br /&gt;
# Set 2 rounds of submissions and reviews in RPT.&lt;br /&gt;
# impersonate abc.&lt;br /&gt;
# submit for round 1.&lt;br /&gt;
# move to round 1 review stage.&lt;br /&gt;
# impersonate xyz.&lt;br /&gt;
# add review as xyz.&lt;br /&gt;
# move to round 2 submission stage&lt;br /&gt;
# impersonate abc.&lt;br /&gt;
# submit a revision plan through the submission page.&lt;br /&gt;
# move to round 2 review.&lt;br /&gt;
# impersonate xyz.&lt;br /&gt;
# verify that revision plan wuestions are added to the review and submit the review.&lt;br /&gt;
# impersonate abc.&lt;br /&gt;
# verify that review has been received on the revision plan questions.&lt;br /&gt;
&lt;br /&gt;
=== demo video ===&lt;br /&gt;
[https://www.youtube.com/watch?v=J1QeUd0b7RQ E1875]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=121514</id>
		<title>E1875 Revision Planning Tool</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=121514"/>
		<updated>2018-12-13T22:49:52Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Files to be modified */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== What's it about? ==&lt;br /&gt;
In the first round of Expertiza reviews, we ask reviewers to give authors some guidance on how to improve their work.  Then in the second round, reviewers rate how well authors have followed their suggestions.  We could carry the interaction one step further if we asked authors to make up a revision plan based on the first-round reviews.  That is, authors would say what they were planning to do to improve their work.  Then second-round reviewers would assess how well they did it.  In essence, this means that authors would be adding criteria to the second-round rubric that applied only to their submission.  We are interested in having this implemented and used in a class so that we can study its effect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== What needs to be done? ==&lt;br /&gt;
* Develop UI for authors to create new questions to add to the second round-rubric. This should be a form that includes the following:&lt;br /&gt;
** A description of the revision plan. Eg: We will add feature X to address issues a,b and c. We will modify feature Y and expect it to resolve errors d, c and e.&lt;br /&gt;
** One or more questions for every proposed improvement. Example:&lt;br /&gt;
*** How effectively did feature X address / solve issues a, b and c?&lt;br /&gt;
*** Did modification of feature Y resolve error d?&lt;br /&gt;
* Every new question must be linked to the second-round questionnaire.&lt;br /&gt;
* Every new question must be linked to the author’s submission&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
In the 2nd round of reviews, the Author should be able to add a statement to direct towards Author selected improvements from Round 1 to Round 2.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Motivation ==&lt;br /&gt;
The OSS and Final projects are different for every team. From a reviewers perspective, not all questions make sense for all projects. The motivation behind this project is:&lt;br /&gt;
* Questions unique to each project gives the reviewers a perspective on the author’s objectives.&lt;br /&gt;
* Allow the Author to get feedback on whether or not they accomplished their self-directed goal.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Criteria for completion ==&lt;br /&gt;
# Direct user to Revision Improvement Questionnaire.&lt;br /&gt;
# Create a form for a Assignment Team to add Questions to a Questionnaire that are specific to that Submission.&lt;br /&gt;
# Append Revision Improvement Questionnaire to 2nd Round Review Questionnaire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Implementation Plan ==&lt;br /&gt;
[[File:E1875UML.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Files to be modified ===&lt;br /&gt;
==== Bookmark Rating Questionnaire ====&lt;br /&gt;
Bookmark Rating Questionnaire Controller Code[https://github.com/rahuliyer95/expertiza/blob/157553470c420bafc17413978dfccc0a89790dee/app/controllers/bookmark_rating_questionnaire_controller.rb#L4]&lt;br /&gt;
&lt;br /&gt;
==== Questionnaire ====&lt;br /&gt;
* questionnaire_controller.rb&lt;br /&gt;
* questionnaire.rb&lt;br /&gt;
* author_review_questionnaire.rb ( doesn’t exist, needs to be created and named appropriately )&lt;br /&gt;
* questionnaires/*.erb&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
==== Submitted Content ====&lt;br /&gt;
* submitted_content_controller.rb&lt;br /&gt;
* submission_record.rb&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UI mockups ===&lt;br /&gt;
The first image shows a mockup of what the Author will see on the submission page to submit new additional questions for review. &amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:E1875U1_1.jpg]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Second is a view of what the reviewer will see. It should blend in with the review questions submitted by the instructor for all similar projects.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:E1875UI_2.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Test Plan ===&lt;br /&gt;
# Authors should be able to add additional review questions to their submission.&lt;br /&gt;
# Reviewers should be able to give feedback according to the review question written by the author.&lt;br /&gt;
# Authors should be able to view the feedback given on the questions they wrote.&lt;br /&gt;
# ''Stretch'': Instructors should be able to set requirements on the number of additional review questions authors are required to add.&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119286</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119286"/>
		<updated>2018-11-10T04:50:11Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Testing Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
To describe VMQuestionResponse&lt;br /&gt;
 &lt;br /&gt;
1) Test initialize&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with any other questionnaire type&lt;br /&gt;
&lt;br /&gt;
2) Test add questions&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is given a list of questions&lt;br /&gt;
&lt;br /&gt;
3) Test  add_reviews &lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a author feedback questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a teammate review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a metareview questionnaire&lt;br /&gt;
&lt;br /&gt;
4) Test display_team_members&lt;br /&gt;
&lt;br /&gt;
5) Test add_team_members&lt;br /&gt;
&lt;br /&gt;
6) Test listofteamparticipants&lt;br /&gt;
&lt;br /&gt;
7) Test max_score_for_questionnaire&lt;br /&gt;
&lt;br /&gt;
8) Test add_answer&lt;br /&gt;
&lt;br /&gt;
9) Test get_number_of_comments_greater_than_10_words&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
*''initialize'' : This tests that the VmQuestionResponse is initialized with the appropriate round number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 describe '#initialize' do&lt;br /&gt;
    context 'when intitialized with a review questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'initializes the instance variables' do&lt;br /&gt;
        expect(response.round).to eq 1&lt;br /&gt;
        expect(response.questionnaire_type).to eq &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
        expect(response.rounds).to eq 2&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when intitialized with any other questionnaire type' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(metareview_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'initializes the instance variables' do&lt;br /&gt;
        expect(response.round).to eq 1&lt;br /&gt;
        expect(response.questionnaire_type).to eq &amp;quot;MetareviewQuestionnaire&amp;quot;&lt;br /&gt;
        expect(response.rounds).to eq 2&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*''add_questions'': This tests that the VmQuestionResponse adds questions from a given review&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#add_questions' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
    it 'adds questions' do&lt;br /&gt;
      response.add_questions questions&lt;br /&gt;
      expect(response.max_score).to eq 5&lt;br /&gt;
      expect(response.list_of_rows.size).to eq 1&lt;br /&gt;
      expect(response.max_score_for_questionnaire()).to eq questions.size * review_questionnaire.max_question_score&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*''add_reviews'' : This tests that the VmQuestionResponse adds reviews and reviewers from a given review&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#add_reviews' do&lt;br /&gt;
    context 'when initialized with a review questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when initialized with a author feedback questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(author_feedback_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when initialized with a teammate review questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(teammate_review_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when initialized with a meta review type' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(metareview_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''display_team_members'' : This tests that the VmQuestionResponse can print out the appropriate team member names.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#display_team_members' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
    it 'displays the members of the team' do&lt;br /&gt;
      team = double('team')&lt;br /&gt;
      participant2 = double('participant2')&lt;br /&gt;
      allow(participant2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
      team_member_names = [participant0, participant1, participant2]&lt;br /&gt;
      allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
      out = 'Team members:'&lt;br /&gt;
      response.add_team_members(team)&lt;br /&gt;
      team.participants.each do |participant|&lt;br /&gt;
        out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      expect(response.display_team_members).to eq out&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''add_answer'' : This tests that the VmQuestionResponse adds all of the review scores from its reviews to VmQuestionResponseCells in VmQuestionResponseRows.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#add_answer' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(author_feedback_questionnaire, assignment, 1 ) }&lt;br /&gt;
    let(:tag_dep) do&lt;br /&gt;
      tag_dep = double('tag_dep')&lt;br /&gt;
      allow(tag_dep).to receive_messages(:question_type =&amp;gt; question.type,&lt;br /&gt;
                                         :answer_length_threshold =&amp;gt; 4,&lt;br /&gt;
                                         :tag_prompt_id =&amp;gt; 1)&lt;br /&gt;
      tag_dep&lt;br /&gt;
    end&lt;br /&gt;
    it 'adds an answer' do&lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [answer])&lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question)&lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
&lt;br /&gt;
      response.add_questions questions&lt;br /&gt;
      response.add_reviews(participant0, '', false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''get_number_of_comments_greater_than_10_words'' : This tests that VmQuestionResponse only finds comments that have at least 10 words.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#get_number_of_comments_greater_than_10_words' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(author_feedback_questionnaire, assignment, 1 ) }&lt;br /&gt;
    let(:tag_dep) do&lt;br /&gt;
      tag_dep = double('tag_dep')&lt;br /&gt;
      allow(tag_dep).to receive_messages(:question_type =&amp;gt; question.type,&lt;br /&gt;
                                         :answer_length_threshold =&amp;gt; 4,&lt;br /&gt;
                                         :tag_prompt_id =&amp;gt; 1)&lt;br /&gt;
      tag_dep&lt;br /&gt;
    end&lt;br /&gt;
    it 'returns number of comments greater than 10 words' do&lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [answer])&lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question)&lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
      &lt;br /&gt;
      row = double('row')&lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
&lt;br /&gt;
      response.add_questions questions&lt;br /&gt;
      response.add_reviews(participant0, '', false)&lt;br /&gt;
      expect(response.list_of_rows.size).to eq 1&lt;br /&gt;
      response.get_number_of_comments_greater_than_10_words&lt;br /&gt;
      expect(response.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 97.25% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/yDfhSqVOoOk Testing Video(YouTube)]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119285</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119285"/>
		<updated>2018-11-10T04:49:43Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Testing Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
To describe VMQuestionResponse&lt;br /&gt;
 &lt;br /&gt;
1) Test initialize&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with any other questionnaire type&lt;br /&gt;
&lt;br /&gt;
2) Test add questions&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is given a list of questions&lt;br /&gt;
&lt;br /&gt;
3) Test  add_reviews &lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a author feedback questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a teammate review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a metareview questionnaire&lt;br /&gt;
&lt;br /&gt;
4) Test display_team_members&lt;br /&gt;
&lt;br /&gt;
5) Test add_team_members&lt;br /&gt;
&lt;br /&gt;
6) Test listofteamparticipants&lt;br /&gt;
&lt;br /&gt;
7) Test max_score_for_questionnaire&lt;br /&gt;
&lt;br /&gt;
8) Test add_answer&lt;br /&gt;
&lt;br /&gt;
9) Test get_number_of_comments_greater_than_10_words&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
*''initialize'' : This tests that the VmQuestionResponse is initialized with the appropriate round number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 describe '#initialize' do&lt;br /&gt;
    context 'when intitialized with a review questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'initializes the instance variables' do&lt;br /&gt;
        expect(response.round).to eq 1&lt;br /&gt;
        expect(response.questionnaire_type).to eq &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
        expect(response.rounds).to eq 2&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when intitialized with any other questionnaire type' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(metareview_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'initializes the instance variables' do&lt;br /&gt;
        expect(response.round).to eq 1&lt;br /&gt;
        expect(response.questionnaire_type).to eq &amp;quot;MetareviewQuestionnaire&amp;quot;&lt;br /&gt;
        expect(response.rounds).to eq 2&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*''add_questions'': This tests that the VmQuestionResponse adds questions from a given review&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#add_questions' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
    it 'adds questions' do&lt;br /&gt;
      response.add_questions questions&lt;br /&gt;
      expect(response.max_score).to eq 5&lt;br /&gt;
      expect(response.list_of_rows.size).to eq 1&lt;br /&gt;
      expect(response.max_score_for_questionnaire()).to eq questions.size * review_questionnaire.max_question_score&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*''add_reviews'' : This tests that the VmQuestionResponse adds reviews and reviewers from a given review&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#add_reviews' do&lt;br /&gt;
    context 'when initialized with a review questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when initialized with a author feedback questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(author_feedback_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when initialized with a teammate review questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(teammate_review_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when initialized with a meta review type' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(metareview_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''display_team_members'' : This tests that the VmQuestionResponse can print out the appropriate team member names.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#display_team_members' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
    it 'displays the members of the team' do&lt;br /&gt;
      team = double('team')&lt;br /&gt;
      participant2 = double('participant2')&lt;br /&gt;
      allow(participant2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
      team_member_names = [participant0, participant1, participant2]&lt;br /&gt;
      allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
      out = 'Team members:'&lt;br /&gt;
      response.add_team_members(team)&lt;br /&gt;
      team.participants.each do |participant|&lt;br /&gt;
        out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      expect(response.display_team_members).to eq out&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''add_answer'' : This tests that the VmQuestionResponse adds all of the review scores from its reviews to VmQuestionResponseCells&lt;br /&gt;
in VmQuestionResponseRows.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#add_answer' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(author_feedback_questionnaire, assignment, 1 ) }&lt;br /&gt;
    let(:tag_dep) do&lt;br /&gt;
      tag_dep = double('tag_dep')&lt;br /&gt;
      allow(tag_dep).to receive_messages(:question_type =&amp;gt; question.type,&lt;br /&gt;
                                         :answer_length_threshold =&amp;gt; 4,&lt;br /&gt;
                                         :tag_prompt_id =&amp;gt; 1)&lt;br /&gt;
      tag_dep&lt;br /&gt;
    end&lt;br /&gt;
    it 'adds an answer' do&lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [answer])&lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question)&lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
&lt;br /&gt;
      response.add_questions questions&lt;br /&gt;
      response.add_reviews(participant0, '', false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''get_number_of_comments_greater_than_10_words'' : This tests that VmQuestionResponse only finds comments that have at least 10 words.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#get_number_of_comments_greater_than_10_words' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(author_feedback_questionnaire, assignment, 1 ) }&lt;br /&gt;
    let(:tag_dep) do&lt;br /&gt;
      tag_dep = double('tag_dep')&lt;br /&gt;
      allow(tag_dep).to receive_messages(:question_type =&amp;gt; question.type,&lt;br /&gt;
                                         :answer_length_threshold =&amp;gt; 4,&lt;br /&gt;
                                         :tag_prompt_id =&amp;gt; 1)&lt;br /&gt;
      tag_dep&lt;br /&gt;
    end&lt;br /&gt;
    it 'returns number of comments greater than 10 words' do&lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [answer])&lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question)&lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
      &lt;br /&gt;
      row = double('row')&lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
&lt;br /&gt;
      response.add_questions questions&lt;br /&gt;
      response.add_reviews(participant0, '', false)&lt;br /&gt;
      expect(response.list_of_rows.size).to eq 1&lt;br /&gt;
      response.get_number_of_comments_greater_than_10_words&lt;br /&gt;
      expect(response.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 97.25% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/yDfhSqVOoOk Testing Video(YouTube)]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119284</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119284"/>
		<updated>2018-11-10T04:49:26Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Testing Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
To describe VMQuestionResponse&lt;br /&gt;
 &lt;br /&gt;
1) Test initialize&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with any other questionnaire type&lt;br /&gt;
&lt;br /&gt;
2) Test add questions&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is given a list of questions&lt;br /&gt;
&lt;br /&gt;
3) Test  add_reviews &lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a author feedback questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a teammate review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a metareview questionnaire&lt;br /&gt;
&lt;br /&gt;
4) Test display_team_members&lt;br /&gt;
&lt;br /&gt;
5) Test add_team_members&lt;br /&gt;
&lt;br /&gt;
6) Test listofteamparticipants&lt;br /&gt;
&lt;br /&gt;
7) Test max_score_for_questionnaire&lt;br /&gt;
&lt;br /&gt;
8) Test add_answer&lt;br /&gt;
&lt;br /&gt;
9) Test get_number_of_comments_greater_than_10_words&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
*''initialize'' : This tests that the VmQuestionResponse is initialized with the appropriate round number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 describe '#initialize' do&lt;br /&gt;
    context 'when intitialized with a review questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'initializes the instance variables' do&lt;br /&gt;
        expect(response.round).to eq 1&lt;br /&gt;
        expect(response.questionnaire_type).to eq &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
        expect(response.rounds).to eq 2&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when intitialized with any other questionnaire type' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(metareview_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'initializes the instance variables' do&lt;br /&gt;
        expect(response.round).to eq 1&lt;br /&gt;
        expect(response.questionnaire_type).to eq &amp;quot;MetareviewQuestionnaire&amp;quot;&lt;br /&gt;
        expect(response.rounds).to eq 2&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*''add_questions'': This tests that the VmQuestionResponse adds questions from a given review&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#add_questions' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
    it 'adds questions' do&lt;br /&gt;
      response.add_questions questions&lt;br /&gt;
      expect(response.max_score).to eq 5&lt;br /&gt;
      expect(response.list_of_rows.size).to eq 1&lt;br /&gt;
      expect(response.max_score_for_questionnaire()).to eq questions.size * review_questionnaire.max_question_score&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*''add_reviews'' : This tests that the VmQuestionResponse adds reviews and reviewers from a given review&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#add_reviews' do&lt;br /&gt;
    context 'when initialized with a review questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when initialized with a author feedback questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(author_feedback_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when initialized with a teammate review questionnaire' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(teammate_review_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when initialized with a meta review type' do&lt;br /&gt;
      let(:response) { VmQuestionResponse.new(metareview_questionnaire, assignment, 1) }&lt;br /&gt;
      it 'adds reviews' do&lt;br /&gt;
        allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
        allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
        response.add_reviews(participant0, team, false)&lt;br /&gt;
        expect(response.list_of_reviews.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviewers.size).to eq 1&lt;br /&gt;
        expect(response.list_of_reviews).to eq [review]&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''display_team_members'' : This tests that the VmQuestionResponse can print out the appropriate team member names.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#display_team_members' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(review_questionnaire, assignment, 1) }&lt;br /&gt;
    it 'displays the members of the team' do&lt;br /&gt;
      team = double('team')&lt;br /&gt;
      participant2 = double('participant2')&lt;br /&gt;
      allow(participant2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
      team_member_names = [participant0, participant1, participant2]&lt;br /&gt;
      allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
      out = 'Team members:'&lt;br /&gt;
      response.add_team_members(team)&lt;br /&gt;
      team.participants.each do |participant|&lt;br /&gt;
        out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      expect(response.display_team_members).to eq out&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''add_answers'' : This tests that the VmQuestionResponse adds all of the review scores from its reviews to VmQuestionResponseCells&lt;br /&gt;
in VmQuestionResponseRows.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#add_answer' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(author_feedback_questionnaire, assignment, 1 ) }&lt;br /&gt;
    let(:tag_dep) do&lt;br /&gt;
      tag_dep = double('tag_dep')&lt;br /&gt;
      allow(tag_dep).to receive_messages(:question_type =&amp;gt; question.type,&lt;br /&gt;
                                         :answer_length_threshold =&amp;gt; 4,&lt;br /&gt;
                                         :tag_prompt_id =&amp;gt; 1)&lt;br /&gt;
      tag_dep&lt;br /&gt;
    end&lt;br /&gt;
    it 'adds an answer' do&lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [answer])&lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question)&lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
&lt;br /&gt;
      response.add_questions questions&lt;br /&gt;
      response.add_reviews(participant0, '', false)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''get_number_of_comments_greater_than_10_words'' : This tests that VmQuestionResponse only finds comments that have at least 10 words.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#get_number_of_comments_greater_than_10_words' do&lt;br /&gt;
    let(:response) { VmQuestionResponse.new(author_feedback_questionnaire, assignment, 1 ) }&lt;br /&gt;
    let(:tag_dep) do&lt;br /&gt;
      tag_dep = double('tag_dep')&lt;br /&gt;
      allow(tag_dep).to receive_messages(:question_type =&amp;gt; question.type,&lt;br /&gt;
                                         :answer_length_threshold =&amp;gt; 4,&lt;br /&gt;
                                         :tag_prompt_id =&amp;gt; 1)&lt;br /&gt;
      tag_dep&lt;br /&gt;
    end&lt;br /&gt;
    it 'returns number of comments greater than 10 words' do&lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; participant1)&lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [answer])&lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question)&lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
      &lt;br /&gt;
      row = double('row')&lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
&lt;br /&gt;
      response.add_questions questions&lt;br /&gt;
      response.add_reviews(participant0, '', false)&lt;br /&gt;
      expect(response.list_of_rows.size).to eq 1&lt;br /&gt;
      response.get_number_of_comments_greater_than_10_words&lt;br /&gt;
      expect(response.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 97.25% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/yDfhSqVOoOk Testing Video(YouTube)]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119274</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119274"/>
		<updated>2018-11-10T04:37:11Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Testing Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
To describe VMQuestionResponse&lt;br /&gt;
 &lt;br /&gt;
1) Test initialize&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with any other questionnaire type&lt;br /&gt;
&lt;br /&gt;
2) Test add questions&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is given a list of questions&lt;br /&gt;
&lt;br /&gt;
3) Test  add_reviews &lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a author feedback questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a teammate review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a metareview questionnaire&lt;br /&gt;
&lt;br /&gt;
4) Test display_team_members&lt;br /&gt;
&lt;br /&gt;
5) Test add_team_members&lt;br /&gt;
&lt;br /&gt;
6) Test listofteamparticipants&lt;br /&gt;
&lt;br /&gt;
7) Test max_score_for_questionnaire&lt;br /&gt;
&lt;br /&gt;
8) Test add_answer&lt;br /&gt;
&lt;br /&gt;
9) Test get_number_of_comments_greater_than_10_words&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
*''initialize'' : This tests that the VmQuestionResponse is initialized with the appropriate round number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''add_reviews'' : This tests that the add_review adds reviews and reviewers to the VmQuestionResponse from a given review&lt;br /&gt;
:- stub simulates the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''display_team_members'' : This tests that the VmQuestionResponse can print out the appropriate team member names.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''add_answers'' : This tests that the VmQuestionResponse adds all of the review scores from its reviews to VmQuestionResponseCells&lt;br /&gt;
in VmQuestionResponseRows.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''get_number_of_comments_greater_than_10_words'' : This tests that VmQuestionResponse only finds comments that have at least 10 words.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119268</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119268"/>
		<updated>2018-11-10T04:01:13Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Testing Strategy: Unit Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
To describe VMQuestionResponse&lt;br /&gt;
 &lt;br /&gt;
1) Test initialize&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with any other questionnaire type&lt;br /&gt;
&lt;br /&gt;
2) Test add questions&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is given a list of questions&lt;br /&gt;
&lt;br /&gt;
3) Test  add_reviews &lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a author feedback questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a teammate review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a metareview questionnaire&lt;br /&gt;
&lt;br /&gt;
4) Test display_team_members&lt;br /&gt;
&lt;br /&gt;
5) Test add_team_members&lt;br /&gt;
&lt;br /&gt;
6) Test listofteamparticipants&lt;br /&gt;
&lt;br /&gt;
7) Test max_score_for_questionnaire&lt;br /&gt;
&lt;br /&gt;
8) Test add_answer&lt;br /&gt;
&lt;br /&gt;
9) Test get_number_of_comments_greater_than_10_words&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, team, false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that the add_reviews method works when VMQuestionResponse has been initialized with @questionnaire_type = &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a team' do&lt;br /&gt;
 &lt;br /&gt;
      it 'displays the members of the team' do&lt;br /&gt;
 &lt;br /&gt;
        team = double('team')&lt;br /&gt;
 &lt;br /&gt;
        ppnt2 = double('ppnt2')&lt;br /&gt;
 &lt;br /&gt;
        allow(ppnt2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
 &lt;br /&gt;
        team_member_names = [ppnt0, ppnt1, ppnt2]&lt;br /&gt;
 &lt;br /&gt;
        allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
 &lt;br /&gt;
        out = 'Team members:'&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_team_members(team)&lt;br /&gt;
 &lt;br /&gt;
        team.participants.each do |participant|&lt;br /&gt;
 &lt;br /&gt;
          out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        end&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.display_team_members).to eq out&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that when VMQuestionResponse is initialized with a team the team members can be displayed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a list of valid questions' do&lt;br /&gt;
 &lt;br /&gt;
      let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
      it 'can calculate the max score for the questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score).to eq 5&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score_for_questionnaire()).to eq qs.size * rq.max_question_score&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests VMQuestionResponse knows the max score for the questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'has the round value of the given questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.round).to eq 1&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code checks that VMQuestionResponse knows the value of @round for the given questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    [mock setup omitted for brevity]&lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      # review = double('review1')&lt;br /&gt;
 &lt;br /&gt;
      # review.stub(:map_id =&amp;gt; 1, :response_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # allow(review).to receive_messages(:map_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # ppnt0 = double('ppnt0') &lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt0).to receive_messages(:feedback =&amp;gt; [review])&lt;br /&gt;
 &lt;br /&gt;
      # ppnt1 = double('ppnt1')&lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt1).to receive_messages(:fullname =&amp;gt; 'Python')&lt;br /&gt;
 &lt;br /&gt;
      # mapping = double&lt;br /&gt;
 &lt;br /&gt;
      # allow(mapping).to receive_messages(:first =&amp;gt; mapping, :reviewer_id =&amp;gt; 2)&lt;br /&gt;
 &lt;br /&gt;
      # allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      # allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews).to eq [ppnt1]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'adds answers' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'gets the number of comments greater than 10 words' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      &lt;br /&gt;
 &lt;br /&gt;
      row = double('row')&lt;br /&gt;
 &lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
 &lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.get_number_of_comments_greater_than_10_words&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The above tests cover the scenario in which VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;AuthorFeedbackQuestionnaire&amp;quot;. We check that VMQuestionResponse can add revews, add answers, and retrieve the number of comments greater than 10 words in length. Here the test for add_reviews is commented out because it is still being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an TeammateReviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:tmrq) { create(:questionnaire, name: &amp;quot;TeammateReviewQuestionnaire&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
                        type: 'TeammateReviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( tmrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: tmrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;TeammateReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an MetareviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:mrq) { create(:questionnaire, name: &amp;quot;MetareviewQuestionnaire&amp;quot;, type: 'MetareviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: mrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( mrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;MetaReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119267</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119267"/>
		<updated>2018-11-10T03:57:55Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Testing Strategy: Unit Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
To describe VMQuestionResponse&lt;br /&gt;
 &lt;br /&gt;
1) Test initialize&lt;br /&gt;
&lt;br /&gt;
 1.1) in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
 1.2) in the context when VMQuestionResponse is initialized with any other questionnaire type&lt;br /&gt;
&lt;br /&gt;
2) Test add questions&lt;br /&gt;
&lt;br /&gt;
 2.1) in the context when VMQuestionResponse is given a list of questions&lt;br /&gt;
&lt;br /&gt;
3) Test  add_reviews &lt;br /&gt;
&lt;br /&gt;
 3.1) in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
 3.2) in the context when VMQuestionResponse is initialized with a author feedback questionnaire&lt;br /&gt;
&lt;br /&gt;
 3.3) in the context when VMQuestionResponse is initialized with a teammate review questionnaire&lt;br /&gt;
&lt;br /&gt;
 3.4) in the context when VMQuestionResponse is initialized with a metareview questionnaire&lt;br /&gt;
&lt;br /&gt;
4) Test display_team_members&lt;br /&gt;
&lt;br /&gt;
5) Test add_team_members&lt;br /&gt;
&lt;br /&gt;
6) Test listofteamparticipants&lt;br /&gt;
&lt;br /&gt;
7) Test max_score_for_questionnaire&lt;br /&gt;
&lt;br /&gt;
8) Test add_answer&lt;br /&gt;
&lt;br /&gt;
9) Test get_number_of_comments_greater_than_10_words&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, team, false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that the add_reviews method works when VMQuestionResponse has been initialized with @questionnaire_type = &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a team' do&lt;br /&gt;
 &lt;br /&gt;
      it 'displays the members of the team' do&lt;br /&gt;
 &lt;br /&gt;
        team = double('team')&lt;br /&gt;
 &lt;br /&gt;
        ppnt2 = double('ppnt2')&lt;br /&gt;
 &lt;br /&gt;
        allow(ppnt2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
 &lt;br /&gt;
        team_member_names = [ppnt0, ppnt1, ppnt2]&lt;br /&gt;
 &lt;br /&gt;
        allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
 &lt;br /&gt;
        out = 'Team members:'&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_team_members(team)&lt;br /&gt;
 &lt;br /&gt;
        team.participants.each do |participant|&lt;br /&gt;
 &lt;br /&gt;
          out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        end&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.display_team_members).to eq out&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that when VMQuestionResponse is initialized with a team the team members can be displayed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a list of valid questions' do&lt;br /&gt;
 &lt;br /&gt;
      let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
      it 'can calculate the max score for the questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score).to eq 5&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score_for_questionnaire()).to eq qs.size * rq.max_question_score&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests VMQuestionResponse knows the max score for the questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'has the round value of the given questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.round).to eq 1&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code checks that VMQuestionResponse knows the value of @round for the given questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    [mock setup omitted for brevity]&lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      # review = double('review1')&lt;br /&gt;
 &lt;br /&gt;
      # review.stub(:map_id =&amp;gt; 1, :response_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # allow(review).to receive_messages(:map_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # ppnt0 = double('ppnt0') &lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt0).to receive_messages(:feedback =&amp;gt; [review])&lt;br /&gt;
 &lt;br /&gt;
      # ppnt1 = double('ppnt1')&lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt1).to receive_messages(:fullname =&amp;gt; 'Python')&lt;br /&gt;
 &lt;br /&gt;
      # mapping = double&lt;br /&gt;
 &lt;br /&gt;
      # allow(mapping).to receive_messages(:first =&amp;gt; mapping, :reviewer_id =&amp;gt; 2)&lt;br /&gt;
 &lt;br /&gt;
      # allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      # allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews).to eq [ppnt1]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'adds answers' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'gets the number of comments greater than 10 words' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      &lt;br /&gt;
 &lt;br /&gt;
      row = double('row')&lt;br /&gt;
 &lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
 &lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.get_number_of_comments_greater_than_10_words&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The above tests cover the scenario in which VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;AuthorFeedbackQuestionnaire&amp;quot;. We check that VMQuestionResponse can add revews, add answers, and retrieve the number of comments greater than 10 words in length. Here the test for add_reviews is commented out because it is still being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an TeammateReviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:tmrq) { create(:questionnaire, name: &amp;quot;TeammateReviewQuestionnaire&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
                        type: 'TeammateReviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( tmrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: tmrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;TeammateReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an MetareviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:mrq) { create(:questionnaire, name: &amp;quot;MetareviewQuestionnaire&amp;quot;, type: 'MetareviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: mrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( mrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;MetaReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119266</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119266"/>
		<updated>2018-11-10T03:56:42Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Testing Strategy: Unit Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
To describe VMQuestionResponse&lt;br /&gt;
 &lt;br /&gt;
1) Test initialize&lt;br /&gt;
&lt;br /&gt;
1.1) in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
1.2) in the context when VMQuestionResponse is initialized with any other questionnaire type&lt;br /&gt;
&lt;br /&gt;
2) Test add questions&lt;br /&gt;
&lt;br /&gt;
2.1) in the context when VMQuestionResponse is given a list of questions&lt;br /&gt;
&lt;br /&gt;
3) Test  add_reviews &lt;br /&gt;
&lt;br /&gt;
3.1) in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
3.2) in the context when VMQuestionResponse is initialized with a author feedback questionnaire&lt;br /&gt;
&lt;br /&gt;
3.3) in the context when VMQuestionResponse is initialized with a teammate review questionnaire&lt;br /&gt;
&lt;br /&gt;
3.4) in the context when VMQuestionResponse is initialized with a metareview questionnaire&lt;br /&gt;
&lt;br /&gt;
4) Test display_team_members&lt;br /&gt;
&lt;br /&gt;
5) Test add_team_members&lt;br /&gt;
&lt;br /&gt;
6) Test listofteamparticipants&lt;br /&gt;
&lt;br /&gt;
7) Test max_score_for_questionnaire&lt;br /&gt;
&lt;br /&gt;
8) Test add_answer&lt;br /&gt;
&lt;br /&gt;
9) Test get_number_of_comments_greater_than_10_words&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, team, false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that the add_reviews method works when VMQuestionResponse has been initialized with @questionnaire_type = &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a team' do&lt;br /&gt;
 &lt;br /&gt;
      it 'displays the members of the team' do&lt;br /&gt;
 &lt;br /&gt;
        team = double('team')&lt;br /&gt;
 &lt;br /&gt;
        ppnt2 = double('ppnt2')&lt;br /&gt;
 &lt;br /&gt;
        allow(ppnt2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
 &lt;br /&gt;
        team_member_names = [ppnt0, ppnt1, ppnt2]&lt;br /&gt;
 &lt;br /&gt;
        allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
 &lt;br /&gt;
        out = 'Team members:'&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_team_members(team)&lt;br /&gt;
 &lt;br /&gt;
        team.participants.each do |participant|&lt;br /&gt;
 &lt;br /&gt;
          out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        end&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.display_team_members).to eq out&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that when VMQuestionResponse is initialized with a team the team members can be displayed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a list of valid questions' do&lt;br /&gt;
 &lt;br /&gt;
      let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
      it 'can calculate the max score for the questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score).to eq 5&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score_for_questionnaire()).to eq qs.size * rq.max_question_score&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests VMQuestionResponse knows the max score for the questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'has the round value of the given questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.round).to eq 1&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code checks that VMQuestionResponse knows the value of @round for the given questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    [mock setup omitted for brevity]&lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      # review = double('review1')&lt;br /&gt;
 &lt;br /&gt;
      # review.stub(:map_id =&amp;gt; 1, :response_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # allow(review).to receive_messages(:map_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # ppnt0 = double('ppnt0') &lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt0).to receive_messages(:feedback =&amp;gt; [review])&lt;br /&gt;
 &lt;br /&gt;
      # ppnt1 = double('ppnt1')&lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt1).to receive_messages(:fullname =&amp;gt; 'Python')&lt;br /&gt;
 &lt;br /&gt;
      # mapping = double&lt;br /&gt;
 &lt;br /&gt;
      # allow(mapping).to receive_messages(:first =&amp;gt; mapping, :reviewer_id =&amp;gt; 2)&lt;br /&gt;
 &lt;br /&gt;
      # allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      # allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews).to eq [ppnt1]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'adds answers' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'gets the number of comments greater than 10 words' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      &lt;br /&gt;
 &lt;br /&gt;
      row = double('row')&lt;br /&gt;
 &lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
 &lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.get_number_of_comments_greater_than_10_words&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The above tests cover the scenario in which VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;AuthorFeedbackQuestionnaire&amp;quot;. We check that VMQuestionResponse can add revews, add answers, and retrieve the number of comments greater than 10 words in length. Here the test for add_reviews is commented out because it is still being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an TeammateReviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:tmrq) { create(:questionnaire, name: &amp;quot;TeammateReviewQuestionnaire&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
                        type: 'TeammateReviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( tmrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: tmrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;TeammateReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an MetareviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:mrq) { create(:questionnaire, name: &amp;quot;MetareviewQuestionnaire&amp;quot;, type: 'MetareviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: mrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( mrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;MetaReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119264</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119264"/>
		<updated>2018-11-10T03:53:16Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
To describe VMQuestionResponse&lt;br /&gt;
 &lt;br /&gt;
1) Test initialize&lt;br /&gt;
1.1) in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
1.2) in the context when VMQuestionResponse is initialized with any other questionnaire type&lt;br /&gt;
2) Test add questions&lt;br /&gt;
2.1) in the context when VMQuestionResponse is given a list of questions&lt;br /&gt;
3) Test  add_reviews &lt;br /&gt;
3.1) in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
3.2) in the context when VMQuestionResponse is initialized with a author feedback questionnaire&lt;br /&gt;
3.3) in the context when VMQuestionResponse is initialized with a teammate review questionnaire&lt;br /&gt;
3.4) in the context when VMQuestionResponse is initialized with a metareview questionnaire&lt;br /&gt;
4) Test display_team_members&lt;br /&gt;
5) Test add_team_members&lt;br /&gt;
6) Test listofteamparticipants&lt;br /&gt;
7) Test max_score_for_questionnaire&lt;br /&gt;
8) Test add_answer&lt;br /&gt;
9) Test get_number_of_comments_greater_than_10_words&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, team, false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that the add_reviews method works when VMQuestionResponse has been initialized with @questionnaire_type = &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a team' do&lt;br /&gt;
 &lt;br /&gt;
      it 'displays the members of the team' do&lt;br /&gt;
 &lt;br /&gt;
        team = double('team')&lt;br /&gt;
 &lt;br /&gt;
        ppnt2 = double('ppnt2')&lt;br /&gt;
 &lt;br /&gt;
        allow(ppnt2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
 &lt;br /&gt;
        team_member_names = [ppnt0, ppnt1, ppnt2]&lt;br /&gt;
 &lt;br /&gt;
        allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
 &lt;br /&gt;
        out = 'Team members:'&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_team_members(team)&lt;br /&gt;
 &lt;br /&gt;
        team.participants.each do |participant|&lt;br /&gt;
 &lt;br /&gt;
          out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        end&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.display_team_members).to eq out&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that when VMQuestionResponse is initialized with a team the team members can be displayed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a list of valid questions' do&lt;br /&gt;
 &lt;br /&gt;
      let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
      it 'can calculate the max score for the questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score).to eq 5&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score_for_questionnaire()).to eq qs.size * rq.max_question_score&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests VMQuestionResponse knows the max score for the questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'has the round value of the given questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.round).to eq 1&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code checks that VMQuestionResponse knows the value of @round for the given questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    [mock setup omitted for brevity]&lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      # review = double('review1')&lt;br /&gt;
 &lt;br /&gt;
      # review.stub(:map_id =&amp;gt; 1, :response_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # allow(review).to receive_messages(:map_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # ppnt0 = double('ppnt0') &lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt0).to receive_messages(:feedback =&amp;gt; [review])&lt;br /&gt;
 &lt;br /&gt;
      # ppnt1 = double('ppnt1')&lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt1).to receive_messages(:fullname =&amp;gt; 'Python')&lt;br /&gt;
 &lt;br /&gt;
      # mapping = double&lt;br /&gt;
 &lt;br /&gt;
      # allow(mapping).to receive_messages(:first =&amp;gt; mapping, :reviewer_id =&amp;gt; 2)&lt;br /&gt;
 &lt;br /&gt;
      # allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      # allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews).to eq [ppnt1]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'adds answers' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'gets the number of comments greater than 10 words' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      &lt;br /&gt;
 &lt;br /&gt;
      row = double('row')&lt;br /&gt;
 &lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
 &lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.get_number_of_comments_greater_than_10_words&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The above tests cover the scenario in which VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;AuthorFeedbackQuestionnaire&amp;quot;. We check that VMQuestionResponse can add revews, add answers, and retrieve the number of comments greater than 10 words in length. Here the test for add_reviews is commented out because it is still being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an TeammateReviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:tmrq) { create(:questionnaire, name: &amp;quot;TeammateReviewQuestionnaire&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
                        type: 'TeammateReviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( tmrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: tmrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;TeammateReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an MetareviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:mrq) { create(:questionnaire, name: &amp;quot;MetareviewQuestionnaire&amp;quot;, type: 'MetareviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: mrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( mrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;MetaReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119218</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119218"/>
		<updated>2018-11-10T02:08:39Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
 describe VMQuestionResponse do&lt;br /&gt;
 &lt;br /&gt;
  context 'when initialized with a valid assignment questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a team'&lt;br /&gt;
 &lt;br /&gt;
    it 'displays the members of the team'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a list of valid questions'&lt;br /&gt;
 &lt;br /&gt;
    it 'can calculate the max score for the questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'has the round value of the given questionnaire'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds answers'&lt;br /&gt;
 &lt;br /&gt;
   it 'get the number of comments greater than 10 words'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a TeammateReviewQuestionnair'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a MetaReviewQuesionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, team, false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that the add_reviews method works when VMQuestionResponse has been initialized with @questionnaire_type = &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a team' do&lt;br /&gt;
 &lt;br /&gt;
      it 'displays the members of the team' do&lt;br /&gt;
 &lt;br /&gt;
        team = double('team')&lt;br /&gt;
 &lt;br /&gt;
        ppnt2 = double('ppnt2')&lt;br /&gt;
 &lt;br /&gt;
        allow(ppnt2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
 &lt;br /&gt;
        team_member_names = [ppnt0, ppnt1, ppnt2]&lt;br /&gt;
 &lt;br /&gt;
        allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
 &lt;br /&gt;
        out = 'Team members:'&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_team_members(team)&lt;br /&gt;
 &lt;br /&gt;
        team.participants.each do |participant|&lt;br /&gt;
 &lt;br /&gt;
          out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        end&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.display_team_members).to eq out&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that when VMQuestionResponse is initialized with a team the team members can be displayed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a list of valid questions' do&lt;br /&gt;
 &lt;br /&gt;
      let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
      it 'can calculate the max score for the questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score).to eq 5&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score_for_questionnaire()).to eq qs.size * rq.max_question_score&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests VMQuestionResponse knows the max score for the questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'has the round value of the given questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.round).to eq 1&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code checks that VMQuestionResponse knows the value of @round for the given questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    [mock setup omitted for brevity]&lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      # review = double('review1')&lt;br /&gt;
 &lt;br /&gt;
      # review.stub(:map_id =&amp;gt; 1, :response_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # allow(review).to receive_messages(:map_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # ppnt0 = double('ppnt0') &lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt0).to receive_messages(:feedback =&amp;gt; [review])&lt;br /&gt;
 &lt;br /&gt;
      # ppnt1 = double('ppnt1')&lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt1).to receive_messages(:fullname =&amp;gt; 'Python')&lt;br /&gt;
 &lt;br /&gt;
      # mapping = double&lt;br /&gt;
 &lt;br /&gt;
      # allow(mapping).to receive_messages(:first =&amp;gt; mapping, :reviewer_id =&amp;gt; 2)&lt;br /&gt;
 &lt;br /&gt;
      # allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      # allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews).to eq [ppnt1]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'adds answers' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'gets the number of comments greater than 10 words' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      &lt;br /&gt;
 &lt;br /&gt;
      row = double('row')&lt;br /&gt;
 &lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
 &lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.get_number_of_comments_greater_than_10_words&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The above tests cover the scenario in which VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;AuthorFeedbackQuestionnaire&amp;quot;. We check that VMQuestionResponse can add revews, add answers, and retrieve the number of comments greater than 10 words in length. Here the test for add_reviews is commented out because it is still being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an TeammateReviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:tmrq) { create(:questionnaire, name: &amp;quot;TeammateReviewQuestionnaire&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
                        type: 'TeammateReviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( tmrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: tmrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;TeammateReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an MetareviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:mrq) { create(:questionnaire, name: &amp;quot;MetareviewQuestionnaire&amp;quot;, type: 'MetareviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: mrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( mrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;MetaReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119216</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119216"/>
		<updated>2018-11-10T02:06:55Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Testing Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
 describe VMQuestionResponse do&lt;br /&gt;
 &lt;br /&gt;
  context 'when initialized with a valid assignment questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a team'&lt;br /&gt;
 &lt;br /&gt;
    it 'displays the members of the team'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a list of valid questions'&lt;br /&gt;
 &lt;br /&gt;
    it 'can calculate the max score for the questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'has the round value of the given questionnaire'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds answers'&lt;br /&gt;
 &lt;br /&gt;
   it 'get the number of comments greater than 10 words'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a TeammateReviewQuestionnair'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a MetaReviewQuesionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, team, false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that the add_reviews method works when VMQuestionResponse has been initialized with @questionnaire_type = &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a team' do&lt;br /&gt;
 &lt;br /&gt;
      it 'displays the members of the team' do&lt;br /&gt;
 &lt;br /&gt;
        team = double('team')&lt;br /&gt;
 &lt;br /&gt;
        ppnt2 = double('ppnt2')&lt;br /&gt;
 &lt;br /&gt;
        allow(ppnt2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
 &lt;br /&gt;
        team_member_names = [ppnt0, ppnt1, ppnt2]&lt;br /&gt;
 &lt;br /&gt;
        allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
 &lt;br /&gt;
        out = 'Team members:'&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_team_members(team)&lt;br /&gt;
 &lt;br /&gt;
        team.participants.each do |participant|&lt;br /&gt;
 &lt;br /&gt;
          out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        end&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.display_team_members).to eq out&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that when VMQuestionResponse is initialized with a team the team members can be displayed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a list of valid questions' do&lt;br /&gt;
 &lt;br /&gt;
      let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
      it 'can calculate the max score for the questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score).to eq 5&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score_for_questionnaire()).to eq qs.size * rq.max_question_score&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests VMQuestionResponse knows the max score for the questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'has the round value of the given questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.round).to eq 1&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code checks that VMQuestionResponse knows the value of @round for the given questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    [mock setup omitted for brevity]&lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      # review = double('review1')&lt;br /&gt;
 &lt;br /&gt;
      # review.stub(:map_id =&amp;gt; 1, :response_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # allow(review).to receive_messages(:map_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # ppnt0 = double('ppnt0') &lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt0).to receive_messages(:feedback =&amp;gt; [review])&lt;br /&gt;
 &lt;br /&gt;
      # ppnt1 = double('ppnt1')&lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt1).to receive_messages(:fullname =&amp;gt; 'Python')&lt;br /&gt;
 &lt;br /&gt;
      # mapping = double&lt;br /&gt;
 &lt;br /&gt;
      # allow(mapping).to receive_messages(:first =&amp;gt; mapping, :reviewer_id =&amp;gt; 2)&lt;br /&gt;
 &lt;br /&gt;
      # allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      # allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews).to eq [ppnt1]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'adds answers' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'gets the number of comments greater than 10 words' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      &lt;br /&gt;
 &lt;br /&gt;
      row = double('row')&lt;br /&gt;
 &lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
 &lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.get_number_of_comments_greater_than_10_words&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The above tests cover the scenario in which VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;AuthorFeedbackQuestionnaire&amp;quot;. We check that VMQuestionResponse can add revews, add answers, and retrieve the number of comments greater than 10 words in length. Here the test for add_reviews is commented out because it is still being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an TeammateReviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:tmrq) { create(:questionnaire, name: &amp;quot;TeammateReviewQuestionnaire&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
                        type: 'TeammateReviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( tmrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: tmrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;TeammateReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an MetareviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:mrq) { create(:questionnaire, name: &amp;quot;MetareviewQuestionnaire&amp;quot;, type: 'MetareviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: mrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( mrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;MetaReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119211</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119211"/>
		<updated>2018-11-10T02:02:29Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Style: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
 describe VMQuestionResponse do&lt;br /&gt;
 &lt;br /&gt;
  context 'when initialized with a valid assignment questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a team'&lt;br /&gt;
 &lt;br /&gt;
    it 'displays the members of the team'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a list of valid questions'&lt;br /&gt;
 &lt;br /&gt;
    it 'can calculate the max score for the questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'has the round value of the given questionnaire'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds answers'&lt;br /&gt;
 &lt;br /&gt;
   it 'get the number of comments greater than 10 words'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a TeammateReviewQuestionnair'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a MetaReviewQuesionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, team, false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that the add_reviews method works when VMQuestionResponse has been initialized with @questionnaire_type = &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a team' do&lt;br /&gt;
 &lt;br /&gt;
      it 'displays the members of the team' do&lt;br /&gt;
 &lt;br /&gt;
        team = double('team')&lt;br /&gt;
 &lt;br /&gt;
        ppnt2 = double('ppnt2')&lt;br /&gt;
 &lt;br /&gt;
        allow(ppnt2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
 &lt;br /&gt;
        team_member_names = [ppnt0, ppnt1, ppnt2]&lt;br /&gt;
 &lt;br /&gt;
        allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
 &lt;br /&gt;
        out = 'Team members:'&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_team_members(team)&lt;br /&gt;
 &lt;br /&gt;
        team.participants.each do |participant|&lt;br /&gt;
 &lt;br /&gt;
          out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        end&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.display_team_members).to eq out&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that when VMQuestionResponse is initialized with a team the team members can be displayed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a list of valid questions' do&lt;br /&gt;
 &lt;br /&gt;
      let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
      it 'can calculate the max score for the questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score).to eq 5&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score_for_questionnaire()).to eq qs.size * rq.max_question_score&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests VMQuestionResponse knows the max score for the questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'has the round value of the given questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.round).to eq 1&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code checks that VMQuestionResponse knows the value of @round for the given questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    [mock setup omitted for brevity]&lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      # review = double('review1')&lt;br /&gt;
 &lt;br /&gt;
      # review.stub(:map_id =&amp;gt; 1, :response_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # allow(review).to receive_messages(:map_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # ppnt0 = double('ppnt0') &lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt0).to receive_messages(:feedback =&amp;gt; [review])&lt;br /&gt;
 &lt;br /&gt;
      # ppnt1 = double('ppnt1')&lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt1).to receive_messages(:fullname =&amp;gt; 'Python')&lt;br /&gt;
 &lt;br /&gt;
      # mapping = double&lt;br /&gt;
 &lt;br /&gt;
      # allow(mapping).to receive_messages(:first =&amp;gt; mapping, :reviewer_id =&amp;gt; 2)&lt;br /&gt;
 &lt;br /&gt;
      # allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      # allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews).to eq [ppnt1]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'adds answers' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'gets the number of comments greater than 10 words' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      &lt;br /&gt;
 &lt;br /&gt;
      row = double('row')&lt;br /&gt;
 &lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
 &lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.get_number_of_comments_greater_than_10_words&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The above tests cover the scenario in which VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;AuthorFeedbackQuestionnaire&amp;quot;. We check that VMQuestionResponse can add revews, add answers, and retrieve the number of comments greater than 10 words in length. Here the test for add_reviews is commented out because it is still being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an TeammateReviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:tmrq) { create(:questionnaire, name: &amp;quot;TeammateReviewQuestionnaire&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
                        type: 'TeammateReviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( tmrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: tmrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;TeammateReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an MetareviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:mrq) { create(:questionnaire, name: &amp;quot;MetareviewQuestionnaire&amp;quot;, type: 'MetareviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: mrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( mrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;MetaReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119196</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119196"/>
		<updated>2018-11-10T01:37:31Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
=== Testing Style: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
 describe VMQuestionResponse do&lt;br /&gt;
 &lt;br /&gt;
  context 'when initialized with a valid assignment questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a team'&lt;br /&gt;
 &lt;br /&gt;
    it 'displays the members of the team'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a list of valid questions'&lt;br /&gt;
 &lt;br /&gt;
    it 'can calculate the max score for the questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'has the round value of the given questionnaire'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds answers'&lt;br /&gt;
 &lt;br /&gt;
   it 'get the number of comments greater than 10 words'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a TeammateReviewQuestionnair'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a MetaReviewQuesionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, team, false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that the add_reviews method works when VMQuestionResponse has been initialized with @questionnaire_type = &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a team' do&lt;br /&gt;
 &lt;br /&gt;
      it 'displays the members of the team' do&lt;br /&gt;
 &lt;br /&gt;
        team = double('team')&lt;br /&gt;
 &lt;br /&gt;
        ppnt2 = double('ppnt2')&lt;br /&gt;
 &lt;br /&gt;
        allow(ppnt2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
 &lt;br /&gt;
        team_member_names = [ppnt0, ppnt1, ppnt2]&lt;br /&gt;
 &lt;br /&gt;
        allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
 &lt;br /&gt;
        out = 'Team members:'&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_team_members(team)&lt;br /&gt;
 &lt;br /&gt;
        team.participants.each do |participant|&lt;br /&gt;
 &lt;br /&gt;
          out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        end&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.display_team_members).to eq out&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that when VMQuestionResponse is initialized with a team the team members can be displayed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a list of valid questions' do&lt;br /&gt;
 &lt;br /&gt;
      let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
      it 'can calculate the max score for the questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score).to eq 5&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score_for_questionnaire()).to eq qs.size * rq.max_question_score&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests VMQuestionResponse knows the max score for the questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'has the round value of the given questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.round).to eq 1&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code checks that VMQuestionResponse knows the value of @round for the given questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    [mock setup omitted for brevity]&lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      # review = double('review1')&lt;br /&gt;
 &lt;br /&gt;
      # review.stub(:map_id =&amp;gt; 1, :response_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # allow(review).to receive_messages(:map_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # ppnt0 = double('ppnt0') &lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt0).to receive_messages(:feedback =&amp;gt; [review])&lt;br /&gt;
 &lt;br /&gt;
      # ppnt1 = double('ppnt1')&lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt1).to receive_messages(:fullname =&amp;gt; 'Python')&lt;br /&gt;
 &lt;br /&gt;
      # mapping = double&lt;br /&gt;
 &lt;br /&gt;
      # allow(mapping).to receive_messages(:first =&amp;gt; mapping, :reviewer_id =&amp;gt; 2)&lt;br /&gt;
 &lt;br /&gt;
      # allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      # allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews).to eq [ppnt1]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'adds answers' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'gets the number of comments greater than 10 words' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      &lt;br /&gt;
 &lt;br /&gt;
      row = double('row')&lt;br /&gt;
 &lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
 &lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.get_number_of_comments_greater_than_10_words&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The above tests cover the scenario in which VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;AuthorFeedbackQuestionnaire&amp;quot;. We check that VMQuestionResponse can add revews, add answers, and retrieve the number of comments greater than 10 words in length. Here the test for add_reviews is commented out because it is still being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an TeammateReviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:tmrq) { create(:questionnaire, name: &amp;quot;TeammateReviewQuestionnaire&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
                        type: 'TeammateReviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( tmrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: tmrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;TeammateReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an MetareviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:mrq) { create(:questionnaire, name: &amp;quot;MetareviewQuestionnaire&amp;quot;, type: 'MetareviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: mrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( mrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;MetaReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119194</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119194"/>
		<updated>2018-11-10T01:33:17Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
=== Testing Style: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests for this model with a coverage of at least 90%.&lt;br /&gt;
&lt;br /&gt;
'''Team'''&lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
'''Files Involved'''&lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
 describe VMQuestionResponse do&lt;br /&gt;
 &lt;br /&gt;
  context 'when initialized with a valid assignment questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a team'&lt;br /&gt;
 &lt;br /&gt;
    it 'displays the members of the team'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a list of valid questions'&lt;br /&gt;
 &lt;br /&gt;
    it 'can calculate the max score for the questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'has the round value of the given questionnaire'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds answers'&lt;br /&gt;
 &lt;br /&gt;
   it 'get the number of comments greater than 10 words'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a TeammateReviewQuestionnair'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a MetaReviewQuesionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, team, false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that the add_reviews method works when VMQuestionResponse has been initialized with @questionnaire_type = &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a team' do&lt;br /&gt;
 &lt;br /&gt;
      it 'displays the members of the team' do&lt;br /&gt;
 &lt;br /&gt;
        team = double('team')&lt;br /&gt;
 &lt;br /&gt;
        ppnt2 = double('ppnt2')&lt;br /&gt;
 &lt;br /&gt;
        allow(ppnt2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
 &lt;br /&gt;
        team_member_names = [ppnt0, ppnt1, ppnt2]&lt;br /&gt;
 &lt;br /&gt;
        allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
 &lt;br /&gt;
        out = 'Team members:'&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_team_members(team)&lt;br /&gt;
 &lt;br /&gt;
        team.participants.each do |participant|&lt;br /&gt;
 &lt;br /&gt;
          out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        end&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.display_team_members).to eq out&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that when VMQuestionResponse is initialized with a team the team members can be displayed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a list of valid questions' do&lt;br /&gt;
 &lt;br /&gt;
      let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
      it 'can calculate the max score for the questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score).to eq 5&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score_for_questionnaire()).to eq qs.size * rq.max_question_score&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests VMQuestionResponse knows the max score for the questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'has the round value of the given questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.round).to eq 1&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code checks that VMQuestionResponse knows the value of @round for the given questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    [mock setup omitted for brevity]&lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      # review = double('review1')&lt;br /&gt;
 &lt;br /&gt;
      # review.stub(:map_id =&amp;gt; 1, :response_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # allow(review).to receive_messages(:map_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # ppnt0 = double('ppnt0') &lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt0).to receive_messages(:feedback =&amp;gt; [review])&lt;br /&gt;
 &lt;br /&gt;
      # ppnt1 = double('ppnt1')&lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt1).to receive_messages(:fullname =&amp;gt; 'Python')&lt;br /&gt;
 &lt;br /&gt;
      # mapping = double&lt;br /&gt;
 &lt;br /&gt;
      # allow(mapping).to receive_messages(:first =&amp;gt; mapping, :reviewer_id =&amp;gt; 2)&lt;br /&gt;
 &lt;br /&gt;
      # allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      # allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews).to eq [ppnt1]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'adds answers' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'gets the number of comments greater than 10 words' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      &lt;br /&gt;
 &lt;br /&gt;
      row = double('row')&lt;br /&gt;
 &lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
 &lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.get_number_of_comments_greater_than_10_words&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The above tests cover the scenario in which VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;AuthorFeedbackQuestionnaire&amp;quot;. We check that VMQuestionResponse can add revews, add answers, and retrieve the number of comments greater than 10 words in length. Here the test for add_reviews is commented out because it is still being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an TeammateReviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:tmrq) { create(:questionnaire, name: &amp;quot;TeammateReviewQuestionnaire&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
                        type: 'TeammateReviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( tmrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: tmrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;TeammateReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an MetareviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:mrq) { create(:questionnaire, name: &amp;quot;MetareviewQuestionnaire&amp;quot;, type: 'MetareviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: mrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( mrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;MetaReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119193</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119193"/>
		<updated>2018-11-10T01:31:44Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
'''VMQuestionResponse in Brief'''&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
'''Testing Style: Unit Test'''&lt;br /&gt;
&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests for this model with a coverage of at least 90%.&lt;br /&gt;
&lt;br /&gt;
'''Team'''&lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
'''Files Involved'''&lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
 describe VMQuestionResponse do&lt;br /&gt;
 &lt;br /&gt;
  context 'when initialized with a valid assignment questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a team'&lt;br /&gt;
 &lt;br /&gt;
    it 'displays the members of the team'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a list of valid questions'&lt;br /&gt;
 &lt;br /&gt;
    it 'can calculate the max score for the questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'has the round value of the given questionnaire'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds answers'&lt;br /&gt;
 &lt;br /&gt;
   it 'get the number of comments greater than 10 words'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a TeammateReviewQuestionnair'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a MetaReviewQuesionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, team, false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that the add_reviews method works when VMQuestionResponse has been initialized with @questionnaire_type = &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a team' do&lt;br /&gt;
 &lt;br /&gt;
      it 'displays the members of the team' do&lt;br /&gt;
 &lt;br /&gt;
        team = double('team')&lt;br /&gt;
 &lt;br /&gt;
        ppnt2 = double('ppnt2')&lt;br /&gt;
 &lt;br /&gt;
        allow(ppnt2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
 &lt;br /&gt;
        team_member_names = [ppnt0, ppnt1, ppnt2]&lt;br /&gt;
 &lt;br /&gt;
        allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
 &lt;br /&gt;
        out = 'Team members:'&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_team_members(team)&lt;br /&gt;
 &lt;br /&gt;
        team.participants.each do |participant|&lt;br /&gt;
 &lt;br /&gt;
          out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        end&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.display_team_members).to eq out&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that when VMQuestionResponse is initialized with a team the team members can be displayed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a list of valid questions' do&lt;br /&gt;
 &lt;br /&gt;
      let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
      it 'can calculate the max score for the questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score).to eq 5&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score_for_questionnaire()).to eq qs.size * rq.max_question_score&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests VMQuestionResponse knows the max score for the questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'has the round value of the given questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.round).to eq 1&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code checks that VMQuestionResponse knows the value of @round for the given questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    [mock setup omitted for brevity]&lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      # review = double('review1')&lt;br /&gt;
 &lt;br /&gt;
      # review.stub(:map_id =&amp;gt; 1, :response_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # allow(review).to receive_messages(:map_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # ppnt0 = double('ppnt0') &lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt0).to receive_messages(:feedback =&amp;gt; [review])&lt;br /&gt;
 &lt;br /&gt;
      # ppnt1 = double('ppnt1')&lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt1).to receive_messages(:fullname =&amp;gt; 'Python')&lt;br /&gt;
 &lt;br /&gt;
      # mapping = double&lt;br /&gt;
 &lt;br /&gt;
      # allow(mapping).to receive_messages(:first =&amp;gt; mapping, :reviewer_id =&amp;gt; 2)&lt;br /&gt;
 &lt;br /&gt;
      # allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      # allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews).to eq [ppnt1]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'adds answers' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'gets the number of comments greater than 10 words' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      &lt;br /&gt;
 &lt;br /&gt;
      row = double('row')&lt;br /&gt;
 &lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
 &lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.get_number_of_comments_greater_than_10_words&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The above tests cover the scenario in which VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;AuthorFeedbackQuestionnaire&amp;quot;. We check that VMQuestionResponse can add revews, add answers, and retrieve the number of comments greater than 10 words in length. Here the test for add_reviews is commented out because it is still being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an TeammateReviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:tmrq) { create(:questionnaire, name: &amp;quot;TeammateReviewQuestionnaire&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
                        type: 'TeammateReviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( tmrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: tmrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;TeammateReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an MetareviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:mrq) { create(:questionnaire, name: &amp;quot;MetareviewQuestionnaire&amp;quot;, type: 'MetareviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: mrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( mrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;MetaReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1849_vm_question_response_spec&amp;diff=118042</id>
		<title>E1849 vm question response spec</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1849_vm_question_response_spec&amp;diff=118042"/>
		<updated>2018-11-02T18:25:07Z</updated>

		<summary type="html">&lt;p&gt;Mfleader: VM Question Response Tests in RSpec&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;VM Question Response Tests in RSpec&lt;/div&gt;</summary>
		<author><name>Mfleader</name></author>
	</entry>
</feed>