<?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=Bbryson</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=Bbryson"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Bbryson"/>
	<updated>2026-05-20T21:31:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UI_2.jpg&amp;diff=120882</id>
		<title>File:E1875UI 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UI_2.jpg&amp;diff=120882"/>
		<updated>2018-12-02T19:57:14Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: uploaded a new version of &amp;amp;quot;File:E1875UI 2.jpg&amp;amp;quot;: This is the correct image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UI_2.jpg&amp;diff=120881</id>
		<title>File:E1875UI 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UI_2.jpg&amp;diff=120881"/>
		<updated>2018-12-02T19:54:36Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: uploaded a new version of &amp;amp;quot;File:E1875UI 2.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UI_2.jpg&amp;diff=120880</id>
		<title>File:E1875UI 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UI_2.jpg&amp;diff=120880"/>
		<updated>2018-12-02T19:53:49Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: uploaded a new version of &amp;amp;quot;File:E1875UI 2.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UML.png&amp;diff=120645</id>
		<title>File:E1875UML.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UML.png&amp;diff=120645"/>
		<updated>2018-11-21T03:11:17Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: uploaded a new version of &amp;amp;quot;File:E1875UML.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UML.png&amp;diff=120644</id>
		<title>File:E1875UML.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UML.png&amp;diff=120644"/>
		<updated>2018-11-21T03:10:48Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: uploaded a new version of &amp;amp;quot;File:E1875UML.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UML.png&amp;diff=120643</id>
		<title>File:E1875UML.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UML.png&amp;diff=120643"/>
		<updated>2018-11-21T03:09:26Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: uploaded a new version of &amp;amp;quot;File:E1875UML.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=120642</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=120642"/>
		<updated>2018-11-21T03:08:40Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &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;
==== 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;
=== 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>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UML.png&amp;diff=120641</id>
		<title>File:E1875UML.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UML.png&amp;diff=120641"/>
		<updated>2018-11-21T03:07:54Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=120096</id>
		<title>CSC/ECE 517 Fall 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=120096"/>
		<updated>2018-11-16T00:08:48Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2018- Project E1846. OSS Project Navy: Character Issues]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2018/OSS E1848 Write unit tests for assignment team.rb]]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1839_Review_Requirements_and_Thresholds CSC/ECE 517 Fall 2018 E1839 Review Requirements and Thresholds]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1848_Write_unit_tests_for_assignment_team CSC/ECE 517 Fall 2018 E1848 Write unit tests for assignment_team]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1835_Refactor_delayed_mailer_and_scheduled_task CSC/ECE 517 Fall 2018 E1835_Refactor_delayed_mailer_and_scheduled_task]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1829_OSS_project_Duke_Blue_Fix_import_glitches CSC/ECE 517 Fall 2018 E1829 OSS project Duke Blue: Fix import glitches]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb CSC/ECE 517 Fall 2018 E1853 Write unit tests for menu.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1853_write_unit_tests_for_menu CSC/ECE517 Fall 2018 E1853 Write Unit Tests For menu.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018_-_Project_E1852_Write_unit_tests_for_participant.rb CSC/ECE 517 Fall 2018 E1852 Write unit tests for participant.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1844_Issues_related_to_names CSC/ECE 517 Fall 2018 E1844 Issues related to names]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/User_talk:Rshakya CSC/ECE 517 Fall 2018/E1852 Unit Test for Participant Model]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1850_Write_unit_tests_for_review_response_map CSC/ECE 517 Fall 2018 Write unit tests for review-response_map.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm_question_response.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1879_Student_Generated_Questions_Added_To_Rubric CSC/ECE 517 Fall 2018/E1879 Student Generated Questions Added To Rubric]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1856_Allow_reviewers_to_bid_on_what_to_review CSC/ECE 517 Fall 2018/E1856 Allow]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1876_Completion/Progress_view CSC/ECE 517 Fall 2018 E1876_Completion/Progress_view]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1872_Track_Time_Students_Look_At_Other_Submissions CSC/ECE 517 Fall 2018/E1872 Track Time Students Look At Other Submissions]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2018- Project E1865. Conflict Notification]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2018- Project E1861. Improving search facility in Expertiza]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2018- Project E1858. Github metrics integration]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2018 E1832. OSS Project Orange: Author feedback (rejoinder) enhancements]]&lt;br /&gt;
* [[E1875 Revision Planning Tool]]&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=119989</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=119989"/>
		<updated>2018-11-14T03:46:03Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Files to be modified ===&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;
=== 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>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=119987</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=119987"/>
		<updated>2018-11-14T03:45:26Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Files to be modified ===&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;
=== 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:E1875U1_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>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=119985</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=119985"/>
		<updated>2018-11-14T03:44:51Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Files to be modified ===&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;
=== 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.&lt;br /&gt;
[[File:E1875U1_1.jpg]]&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.&lt;br /&gt;
[[File:E1875U1_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>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UI_2.jpg&amp;diff=119984</id>
		<title>File:E1875UI 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UI_2.jpg&amp;diff=119984"/>
		<updated>2018-11-14T03:44:35Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: uploaded a new version of &amp;amp;quot;File:E1875UI 2.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875U1_1.jpg&amp;diff=119981</id>
		<title>File:E1875U1 1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875U1_1.jpg&amp;diff=119981"/>
		<updated>2018-11-14T03:44:28Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: uploaded a new version of &amp;amp;quot;File:E1875U1 1.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=119979</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=119979"/>
		<updated>2018-11-14T03:43:23Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Files to be modified ===&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;
=== 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.&lt;br /&gt;
[[File:E1875U1_1.jpg|100px|Image: 100px]]&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.&lt;br /&gt;
[[File:E1875U1_2.jpg|100px|Image: 100px]]&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>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=119975</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=119975"/>
		<updated>2018-11-14T03:42:31Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Files to be modified ===&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;
=== 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.&lt;br /&gt;
[[File:E1875U1_1.jpg|100px]]&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.&lt;br /&gt;
[[File:E1875U1_2.jpg|100px]]&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>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=119973</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=119973"/>
		<updated>2018-11-14T03:41:12Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Files to be modified ===&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;
=== 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.&lt;br /&gt;
[[File:E1875U1_1.jpg|200px]]&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.&lt;br /&gt;
[[File:E1875U1_2.jpg|200px]]&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>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1875_Revision_Planning_Tool&amp;diff=119970</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=119970"/>
		<updated>2018-11-14T03:39:17Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Files to be modified ===&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;
=== 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.&lt;br /&gt;
[[File:E1875U1_1.jpg]]&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.&lt;br /&gt;
[[File:E1875U1_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>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UI_2.jpg&amp;diff=119969</id>
		<title>File:E1875UI 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875UI_2.jpg&amp;diff=119969"/>
		<updated>2018-11-14T03:36:57Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875U1_1.jpg&amp;diff=119968</id>
		<title>File:E1875U1 1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E1875U1_1.jpg&amp;diff=119968"/>
		<updated>2018-11-14T03:36:25Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Snap1.jpg&amp;diff=119966</id>
		<title>File:Snap1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Snap1.jpg&amp;diff=119966"/>
		<updated>2018-11-14T03:35:49Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=119153</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=119153"/>
		<updated>2018-11-09T23:53:41Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the menu.rb model in Expertiza. '''A test plan can be found at the bottom.'''&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The Menu model is used to create the top bar menu in Expertiza. It does this by obtaining and organizing MenuItems based on the current user's Role. Before this project, there were no unit tests for menu.rb. This project seeks to bring the unit test coverage above 90%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific spec file can be run by calling the following in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The addition of the -fd argument will write out full descriptions of the tests and provide an easy look at the work we did.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total, we wrote 29 tests that covered all the functions in both Menu and its internal Node class. Using the given factories, we created 6 MenuItems (test1 to test6) to pass to the Menu as well as 1 Role used to test the Menu constructor. &lt;br /&gt;
&lt;br /&gt;
   let!(:test1) { create(:menu_item, name: &amp;quot;home1&amp;quot;, parent_id: nil, seq: 1) }&lt;br /&gt;
   &lt;br /&gt;
   admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: &amp;quot;&amp;quot;, parent_id: nil, default_page_id: nil)&lt;br /&gt;
&lt;br /&gt;
We stubbed the MenuItem  method, items_for_permissions, to return an array of the 6 test items that we created. &lt;br /&gt;
&lt;br /&gt;
   allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return(items)&lt;br /&gt;
&lt;br /&gt;
Other pieces of the code were stubbed because these pieces should be tested in other model specs and not Menu spec. The double 'temp' is created, which acts as a stand-in for some other class objects which interact with Menu, in order to only test the functionalities of Menu.&lt;br /&gt;
&lt;br /&gt;
Each method in menu.rb has at least two tests checking both a known success case and an edge case or potential failure. As an example, a detailed look at the tests for Menu#initialize is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  context &amp;quot;when role is nil&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
      menu = Menu.new&lt;br /&gt;
      expect(menu.instance_of?(Menu))&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This first test revealed an error in the existing menu.rb code in the line shown below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The below line shows the change that we made. This allowed the code to be more robust and prevent NoMethodError from nilClass. Without this change, a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second test covers the main use case of Menu. It is supplied with a role and assembles a menu. Only a single role is tested because further testing of roles and menus should instead be handled in integration tests.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when a role is passed as an argument&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
        admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: '', parent_id: nil, default_page_id: nil)&lt;br /&gt;
        menu = Menu.new(admin_role)&lt;br /&gt;
        expect(menu.instance_of?(Menu))&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third test checks that when the menu is created with items, these items are put into nodes, arranged appropriately and contained within the menu. In this case, the children of root will contain a single item, the node with id 1, because this node has a nil parent. The other nodes all have non-nil parents.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu with items&amp;quot; do&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children.length).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The final test checks a menu without any nodes. While this case is unlikely in actual use, it is important that it can be handled without throwing any errors. When a menu without any items is created, the root will never have anything added to its children array so this array will be nil.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has not items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu without items&amp;quot; do&lt;br /&gt;
        allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return([])&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
These 4 tests alone provide nearly 85% coverage of menu.rb because of how much they rely on a variety of other methods within the class.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu.rb return a Menu::Node. The simplest, Menu#get_item, takes a Node id and returns the corresponding Node object. All following functions use this to test that the correct Node is returned. However to prevent circular logic, the Menu#get_item test only checks the id of the returned Node.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb. Before the project the coverage was only &lt;br /&gt;
 &lt;br /&gt;
A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here]. &lt;br /&gt;
&lt;br /&gt;
The main repository can be found [https://github.com/expertiza/expertiza here]&lt;br /&gt;
&lt;br /&gt;
The forked git repository for this project can be found [https://github.com/BarrettJB/expertiza/ here]&lt;br /&gt;
&lt;br /&gt;
Below is a snapshot of the coverage of our tests. Full coverage can be found at expertiza/coverage/coverage.html. The specific coverage can be found in menu under the models tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Fall2018E1853Coverage.png]]&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Below is a list of the descriptions of all of the tests we wrote&lt;br /&gt;
&lt;br /&gt;
'''Menu::Node'''&lt;br /&gt;
    &lt;br /&gt;
    #initialize&lt;br /&gt;
      when role is nil&lt;br /&gt;
        initializes with a nil parent&lt;br /&gt;
&lt;br /&gt;
    #setup&lt;br /&gt;
      when item.action_controller is nil&lt;br /&gt;
        returns /content_page.name&lt;br /&gt;
      when item.action_controller is not nil&lt;br /&gt;
        returns /controller.name/controller_action.name&lt;br /&gt;
&lt;br /&gt;
    #content_page&lt;br /&gt;
      should update the content_page instance variable&lt;br /&gt;
&lt;br /&gt;
    #controller_action&lt;br /&gt;
      when @controller_action already has a value&lt;br /&gt;
        remains the same&lt;br /&gt;
      when @controller_action is nil&lt;br /&gt;
        updates @controller_action&lt;br /&gt;
&lt;br /&gt;
    #site_controller&lt;br /&gt;
      when @site_controller is nil&lt;br /&gt;
        updates @site_controller&lt;br /&gt;
      when @site_controller already has a value&lt;br /&gt;
        remains the same&lt;br /&gt;
&lt;br /&gt;
    #add_child&lt;br /&gt;
      when node has children&lt;br /&gt;
        adds a child&lt;br /&gt;
      when node has no children&lt;br /&gt;
        can add multiple children&lt;br /&gt;
      when node has no children&lt;br /&gt;
        adds a child&lt;br /&gt;
&lt;br /&gt;
'''Menu'''&lt;br /&gt;
  #initialize&lt;br /&gt;
    when menu has items&lt;br /&gt;
      creates a new menu with item&lt;br /&gt;
    when menu has not items&lt;br /&gt;
      creates a new menu without items&lt;br /&gt;
    when role is nil&lt;br /&gt;
      creates a new menu&lt;br /&gt;
    when a role is passed as an argument&lt;br /&gt;
      creates a new menu &lt;br /&gt;
&lt;br /&gt;
  #select&lt;br /&gt;
    returns a node.id based on the given name&lt;br /&gt;
&lt;br /&gt;
  #get_item&lt;br /&gt;
    when menu has items&lt;br /&gt;
      returns the correct item&lt;br /&gt;
    when menu has no items&lt;br /&gt;
      returns nil&lt;br /&gt;
    when a nonexistent id is passed&lt;br /&gt;
      returns nil&lt;br /&gt;
&lt;br /&gt;
  #get_menu&lt;br /&gt;
    when a node is selected&lt;br /&gt;
      returns a list of nodes that are the children of the selected node&lt;br /&gt;
    when called on a nonexistent node&lt;br /&gt;
      returns nil&lt;br /&gt;
    when menu has no items&lt;br /&gt;
      returns nil&lt;br /&gt;
&lt;br /&gt;
  #selected?&lt;br /&gt;
    when id passed is not of a selected menu item&lt;br /&gt;
      returns false&lt;br /&gt;
    when id passed is of a selected menu item&lt;br /&gt;
      returns true&lt;br /&gt;
    when passed nil as the id&lt;br /&gt;
      return false&lt;br /&gt;
&lt;br /&gt;
  #selected&lt;br /&gt;
    when a nonexistent node is selected&lt;br /&gt;
      returns nil&lt;br /&gt;
    when an item is selected&lt;br /&gt;
      returns the name of the currently selected item&lt;br /&gt;
&lt;br /&gt;
  #crumbs&lt;br /&gt;
    when a node besides root is selected&lt;br /&gt;
      returns a list of nodes based on the selected item&lt;br /&gt;
    when root is selected&lt;br /&gt;
      returns a list of nodes based on the root&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=119149</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=119149"/>
		<updated>2018-11-09T23:48:23Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the menu.rb model in Expertiza. '''A test plan can be found at the bottom.'''&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The Menu model is used to create the top bar menu in Expertiza. It does this by obtaining and organizing MenuItems based on the current user's Role. Before this project, there were no unit tests for menu.rb. This project seeks to bring the unit test coverage above 90%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific spec file can be run by calling the following in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The addition of the -fd argument will write out full descriptions of the tests and provide an easy look at the work we did.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total, we wrote 29 tests that covered all the functions in both Menu and its internal Node class. Using the given factories, we created 6 MenuItems (test1 to test6) to pass to the Menu as well as 1 Role used to test the Menu constructor. &lt;br /&gt;
&lt;br /&gt;
   let!(:test1) { create(:menu_item, name: &amp;quot;home1&amp;quot;, parent_id: nil, seq: 1) }&lt;br /&gt;
   &lt;br /&gt;
   admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: &amp;quot;&amp;quot;, parent_id: nil, default_page_id: nil)&lt;br /&gt;
&lt;br /&gt;
We stubbed the MenuItem  method, items_for_permissions, to return an array of the 6 test items that we created. &lt;br /&gt;
&lt;br /&gt;
   allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return(items)&lt;br /&gt;
&lt;br /&gt;
Other pieces of the code were stubbed because these pieces should be tested in other model specs and not Menu spec. The double 'temp' is created, which acts as a stand-in for some other class objects which interact with Menu, in order to only test the functionalities of Menu.&lt;br /&gt;
&lt;br /&gt;
Each method in menu.rb has at least two tests checking both a known success case and an edge case or potential failure. As an example, a detailed look at the tests for Menu#initialize is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  context &amp;quot;when role is nil&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
      menu = Menu.new&lt;br /&gt;
      expect(menu.instance_of?(Menu))&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This first test revealed an error in the existing menu.rb code in the line shown below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The below line shows the change that we made. This allowed the code to be more robust and prevent NoMethodError from nilClass. Without this change, a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second test covers the main use case of Menu. It is supplied with a role and assembles a menu. Only a single role is tested because further testing of roles and menus should instead be handled in integration tests.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when a role is passed as an argument&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
        admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: '', parent_id: nil, default_page_id: nil)&lt;br /&gt;
        menu = Menu.new(admin_role)&lt;br /&gt;
        expect(menu.instance_of?(Menu))&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third test checks that when the menu is created with items, these items are put into nodes, arranged appropriately and contained within the menu. In this case, the children of root will contain a single item, the node with id 1, because this node has a nil parent. The other nodes all have non-nil parents.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu with items&amp;quot; do&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children.length).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The final test checks a menu without any nodes. While this case is unlikely in actual use, it is important that it can be handled without throwing any errors. When a menu without any items is created, the root will never have anything added to its children array so this array will be nil.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has not items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu without items&amp;quot; do&lt;br /&gt;
        allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return([])&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
These 4 tests alone provide nearly 85% coverage of menu.rb because of how much they rely on a variety of other methods within the class.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu.rb return a Menu::Node. The simplest, Menu#get_item, takes a Node id and returns the corresponding Node object. All following functions use this to test that the correct Node is returned. However to prevent circular logic, the Menu#get_item test only checks the id of the returned Node.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb.&lt;br /&gt;
 &lt;br /&gt;
A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here]. &lt;br /&gt;
&lt;br /&gt;
The main repository can be found [https://github.com/expertiza/expertiza here]&lt;br /&gt;
&lt;br /&gt;
The forked git repository for this project can be found [https://github.com/BarrettJB/expertiza/ here]&lt;br /&gt;
&lt;br /&gt;
Below is a snapshot of the coverage of our tests. Full coverage can be found at expertiza/coverage/coverage.html. The specific coverage can be found in menu under the models tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Fall2018E1853Coverage.png]]&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Below is a list of the descriptions of all of the tests we wrote&lt;br /&gt;
&lt;br /&gt;
'''Menu::Node'''&lt;br /&gt;
    &lt;br /&gt;
    #initialize&lt;br /&gt;
      when role is nil&lt;br /&gt;
        initializes with a nil parent&lt;br /&gt;
&lt;br /&gt;
    #setup&lt;br /&gt;
      when item.action_controller is nil&lt;br /&gt;
        returns /content_page.name&lt;br /&gt;
      when item.action_controller is not nil&lt;br /&gt;
        returns /controller.name/controller_action.name&lt;br /&gt;
&lt;br /&gt;
    #content_page&lt;br /&gt;
      should update the content_page instance variable&lt;br /&gt;
&lt;br /&gt;
    #controller_action&lt;br /&gt;
      when @controller_action already has a value&lt;br /&gt;
        remains the same&lt;br /&gt;
      when @controller_action is nil&lt;br /&gt;
        updates @controller_action&lt;br /&gt;
&lt;br /&gt;
    #site_controller&lt;br /&gt;
      when @site_controller is nil&lt;br /&gt;
        updates @site_controller&lt;br /&gt;
      when @site_controller already has a value&lt;br /&gt;
        remains the same&lt;br /&gt;
&lt;br /&gt;
    #add_child&lt;br /&gt;
      when node has children&lt;br /&gt;
        adds a child&lt;br /&gt;
      when node has no children&lt;br /&gt;
        can add multiple children&lt;br /&gt;
      when node has no children&lt;br /&gt;
        adds a child&lt;br /&gt;
&lt;br /&gt;
'''Menu'''&lt;br /&gt;
  #initialize&lt;br /&gt;
    when menu has items&lt;br /&gt;
      creates a new menu with item&lt;br /&gt;
    when menu has not items&lt;br /&gt;
      creates a new menu without items&lt;br /&gt;
    when role is nil&lt;br /&gt;
      creates a new menu&lt;br /&gt;
    when a role is passed as an argument&lt;br /&gt;
      creates a new menu &lt;br /&gt;
&lt;br /&gt;
  #select&lt;br /&gt;
    returns a node.id based on the given name&lt;br /&gt;
&lt;br /&gt;
  #get_item&lt;br /&gt;
    when menu has items&lt;br /&gt;
      returns the correct item&lt;br /&gt;
    when menu has no items&lt;br /&gt;
      returns nil&lt;br /&gt;
    when a nonexistent id is passed&lt;br /&gt;
      returns nil&lt;br /&gt;
&lt;br /&gt;
  #get_menu&lt;br /&gt;
    when a node is selected&lt;br /&gt;
      returns a list of nodes that are the children of the selected node&lt;br /&gt;
    when called on a nonexistent node&lt;br /&gt;
      returns nil&lt;br /&gt;
    when menu has no items&lt;br /&gt;
      returns nil&lt;br /&gt;
&lt;br /&gt;
  #selected?&lt;br /&gt;
    when id passed is not of a selected menu item&lt;br /&gt;
      returns false&lt;br /&gt;
    when id passed is of a selected menu item&lt;br /&gt;
      returns true&lt;br /&gt;
    when passed nil as the id&lt;br /&gt;
      return false&lt;br /&gt;
&lt;br /&gt;
  #selected&lt;br /&gt;
    when a nonexistent node is selected&lt;br /&gt;
      returns nil&lt;br /&gt;
    when an item is selected&lt;br /&gt;
      returns the name of the currently selected item&lt;br /&gt;
&lt;br /&gt;
  #crumbs&lt;br /&gt;
    when a node besides root is selected&lt;br /&gt;
      returns a list of nodes based on the selected item&lt;br /&gt;
    when root is selected&lt;br /&gt;
      returns a list of nodes based on the root&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=119148</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=119148"/>
		<updated>2018-11-09T23:48:01Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the menu.rb model in Expertiza. '''A test plan can be found at the bottom.'''&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The Menu model is used to create the top bar menu in Expertiza. It does this by obtaining and organizing MenuItems based on the current user's Role. Before this project, there were no unit tests for menu.rb. This project seeks to bring the unit test coverage above 90%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific spec file can be run by calling the following in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The addition of the -fd argument will write out full descriptions of the tests and provide an easy look at the work we did.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total, we wrote 29 tests that covered all the functions in both Menu and its internal Node class. Using the given factories, we created 6 MenuItems (test1 to test6) to pass to the Menu as well as 1 Role used to test the Menu constructor. &lt;br /&gt;
&lt;br /&gt;
   let!(:test1) { create(:menu_item, name: &amp;quot;home1&amp;quot;, parent_id: nil, seq: 1) }&lt;br /&gt;
   &lt;br /&gt;
   admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: &amp;quot;&amp;quot;, parent_id: nil, default_page_id: nil)&lt;br /&gt;
&lt;br /&gt;
We stubbed the MenuItem  method, items_for_permissions, to return an array of the 6 test items that we created. &lt;br /&gt;
&lt;br /&gt;
   allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return(items)&lt;br /&gt;
&lt;br /&gt;
Other pieces of the code were stubbed because these pieces should be tested in other model specs and not Menu spec. The double 'temp' is created, which acts as a stand-in for some other class objects which interact with Menu, in order to only test the functionalities of Menu.&lt;br /&gt;
&lt;br /&gt;
Each method in menu.rb has at least two tests checking both a known success case and an edge case or potential failure. As an example, a detailed look at the tests for Menu#initialize is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  context &amp;quot;when role is nil&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
      menu = Menu.new&lt;br /&gt;
      expect(menu.instance_of?(Menu))&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This first test revealed an error in the existing menu.rb code in the line shown below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The below line shows the change that we made. This allowed the code to be more robust and prevent NoMethodError from nilClass. Without this change, a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second test covers the main use case of Menu. It is supplied with a role and assembles a menu. Only a single role is tested because further testing of roles and menus should instead be handled in integration tests.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when a role is passed as an argument&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
        admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: '', parent_id: nil, default_page_id: nil)&lt;br /&gt;
        menu = Menu.new(admin_role)&lt;br /&gt;
        expect(menu.instance_of?(Menu))&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third test checks that when the menu is created with items, these items are put into nodes, arranged appropriately and contained within the menu. In this case, the children of root will contain a single item, the node with id 1, because this node has a nil parent. The other nodes all have non-nil parents.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu with items&amp;quot; do&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children.length).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The final test checks a menu without any nodes. While this case is unlikely in actual use, it is important that it can be handled without throwing any errors. When a menu without any items is created, the root will never have anything added to its children array so this array will be nil.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has not items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu without items&amp;quot; do&lt;br /&gt;
        allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return([])&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
These 4 tests alone provide nearly 85% coverage of menu.rb because of how much they rely on a variety of other methods within the class.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu.rb return a Menu::Node. The simplest, Menu#get_item, takes a Node id and returns the corresponding Node object. All following functions use this to test that the correct Node is returned. However to prevent circular logic, the Menu#get_item test only checks the id of the returned Node.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb.&lt;br /&gt;
 &lt;br /&gt;
A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here]. &lt;br /&gt;
&lt;br /&gt;
The main repository can be found [https://github.com/expertiza/expertiza here]&lt;br /&gt;
&lt;br /&gt;
The forked git repository for this project can be found [https://github.com/BarrettJB/expertiza/ here]&lt;br /&gt;
&lt;br /&gt;
Below is a snapshot of the coverage of our tests. Full coverage can be found at expertiza/coverage/coverage.html. The specific coverage can be found in menu under the models tab.&lt;br /&gt;
[[File:Fall2018E1853Coverage.png]]&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Below is a list of the descriptions of all of the tests we wrote&lt;br /&gt;
&lt;br /&gt;
'''Menu::Node'''&lt;br /&gt;
    &lt;br /&gt;
    #initialize&lt;br /&gt;
      when role is nil&lt;br /&gt;
        initializes with a nil parent&lt;br /&gt;
&lt;br /&gt;
    #setup&lt;br /&gt;
      when item.action_controller is nil&lt;br /&gt;
        returns /content_page.name&lt;br /&gt;
      when item.action_controller is not nil&lt;br /&gt;
        returns /controller.name/controller_action.name&lt;br /&gt;
&lt;br /&gt;
    #content_page&lt;br /&gt;
      should update the content_page instance variable&lt;br /&gt;
&lt;br /&gt;
    #controller_action&lt;br /&gt;
      when @controller_action already has a value&lt;br /&gt;
        remains the same&lt;br /&gt;
      when @controller_action is nil&lt;br /&gt;
        updates @controller_action&lt;br /&gt;
&lt;br /&gt;
    #site_controller&lt;br /&gt;
      when @site_controller is nil&lt;br /&gt;
        updates @site_controller&lt;br /&gt;
      when @site_controller already has a value&lt;br /&gt;
        remains the same&lt;br /&gt;
&lt;br /&gt;
    #add_child&lt;br /&gt;
      when node has children&lt;br /&gt;
        adds a child&lt;br /&gt;
      when node has no children&lt;br /&gt;
        can add multiple children&lt;br /&gt;
      when node has no children&lt;br /&gt;
        adds a child&lt;br /&gt;
&lt;br /&gt;
'''Menu'''&lt;br /&gt;
  #initialize&lt;br /&gt;
    when menu has items&lt;br /&gt;
      creates a new menu with item&lt;br /&gt;
    when menu has not items&lt;br /&gt;
      creates a new menu without items&lt;br /&gt;
    when role is nil&lt;br /&gt;
      creates a new menu&lt;br /&gt;
    when a role is passed as an argument&lt;br /&gt;
      creates a new menu &lt;br /&gt;
&lt;br /&gt;
  #select&lt;br /&gt;
    returns a node.id based on the given name&lt;br /&gt;
&lt;br /&gt;
  #get_item&lt;br /&gt;
    when menu has items&lt;br /&gt;
      returns the correct item&lt;br /&gt;
    when menu has no items&lt;br /&gt;
      returns nil&lt;br /&gt;
    when a nonexistent id is passed&lt;br /&gt;
      returns nil&lt;br /&gt;
&lt;br /&gt;
  #get_menu&lt;br /&gt;
    when a node is selected&lt;br /&gt;
      returns a list of nodes that are the children of the selected node&lt;br /&gt;
    when called on a nonexistent node&lt;br /&gt;
      returns nil&lt;br /&gt;
    when menu has no items&lt;br /&gt;
      returns nil&lt;br /&gt;
&lt;br /&gt;
  #selected?&lt;br /&gt;
    when id passed is not of a selected menu item&lt;br /&gt;
      returns false&lt;br /&gt;
    when id passed is of a selected menu item&lt;br /&gt;
      returns true&lt;br /&gt;
    when passed nil as the id&lt;br /&gt;
      return false&lt;br /&gt;
&lt;br /&gt;
  #selected&lt;br /&gt;
    when a nonexistent node is selected&lt;br /&gt;
      returns nil&lt;br /&gt;
    when an item is selected&lt;br /&gt;
      returns the name of the currently selected item&lt;br /&gt;
&lt;br /&gt;
  #crumbs&lt;br /&gt;
    when a node besides root is selected&lt;br /&gt;
      returns a list of nodes based on the selected item&lt;br /&gt;
    when root is selected&lt;br /&gt;
      returns a list of nodes based on the root&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Fall2018E1853Coverage.png&amp;diff=119147</id>
		<title>File:Fall2018E1853Coverage.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Fall2018E1853Coverage.png&amp;diff=119147"/>
		<updated>2018-11-09T23:45:46Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: A snap of the coverage provided by our project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A snap of the coverage provided by our project&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=119141</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=119141"/>
		<updated>2018-11-09T23:36:18Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the menu.rb model in Expertiza. '''A test plan can be found at the bottom.'''&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The Menu model is used to create the top bar menu in Expertiza. It does this by obtaining and organizing MenuItems based on the current user's Role. Before this project, there were no unit tests for menu.rb. This project seeks to bring the unit test coverage above 90%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific spec file can be run by calling the following in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The addition of the -fd argument will write out full descriptions of the tests and provide an easy look at the work we did.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total, we wrote 29 tests that covered all the functions in both Menu and its internal Node class. Using the given factories, we created 6 MenuItems (test1 to test6) to pass to the Menu as well as 1 Role used to test the Menu constructor. &lt;br /&gt;
&lt;br /&gt;
   let!(:test1) { create(:menu_item, name: &amp;quot;home1&amp;quot;, parent_id: nil, seq: 1) }&lt;br /&gt;
   &lt;br /&gt;
   admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: &amp;quot;&amp;quot;, parent_id: nil, default_page_id: nil)&lt;br /&gt;
&lt;br /&gt;
We stubbed the MenuItem  method, items_for_permissions, to return an array of the 6 test items that we created. &lt;br /&gt;
&lt;br /&gt;
   allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return(items)&lt;br /&gt;
&lt;br /&gt;
Other pieces of the code were stubbed because these pieces should be tested in other model specs and not Menu spec. The double 'temp' is created, which acts as a stand-in for some other class objects which interact with Menu, in order to only test the functionalities of Menu.&lt;br /&gt;
&lt;br /&gt;
Each method in menu.rb has at least two tests checking both a known success case and an edge case or potential failure. As an example, a detailed look at the tests for Menu#initialize is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  context &amp;quot;when role is nil&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
      menu = Menu.new&lt;br /&gt;
      expect(menu.instance_of?(Menu))&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This first test revealed an error in the existing menu.rb code in the line shown below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The below line shows the change that we made. This allowed the code to be more robust and prevent NoMethodError from nilClass. Without this change, a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second test covers the main use case of Menu. It is supplied with a role and assembles a menu. Only a single role is tested because further testing of roles and menus should instead be handled in integration tests.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when a role is passed as an argument&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
        admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: '', parent_id: nil, default_page_id: nil)&lt;br /&gt;
        menu = Menu.new(admin_role)&lt;br /&gt;
        expect(menu.instance_of?(Menu))&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third test checks that when the menu is created with items, these items are put into nodes, arranged appropriately and contained within the menu. In this case, the children of root will contain a single item, the node with id 1, because this node has a nil parent. The other nodes all have non-nil parents.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu with items&amp;quot; do&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children.length).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The final test checks a menu without any nodes. While this case is unlikely in actual use, it is important that it can be handled without throwing any errors. When a menu without any items is created, the root will never have anything added to its children array so this array will be nil.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has not items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu without items&amp;quot; do&lt;br /&gt;
        allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return([])&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
These 4 tests alone provide nearly 85% coverage of menu.rb because of how much they rely on a variety of other methods within the class.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu.rb return a Menu::Node. The simplest, Menu#get_item, takes a Node id and returns the corresponding Node object. All following functions use this to test that the correct Node is returned. However to prevent circular logic, the Menu#get_item test only checks the id of the returned Node.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb.&lt;br /&gt;
 &lt;br /&gt;
A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here]. &lt;br /&gt;
&lt;br /&gt;
The main repository can be found [https://github.com/expertiza/expertiza here]&lt;br /&gt;
&lt;br /&gt;
The forked git repository for this project can be found [https://github.com/BarrettJB/expertiza/ here]&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Below is a list of the descriptions of all of the tests we wrote&lt;br /&gt;
&lt;br /&gt;
'''Menu::Node'''&lt;br /&gt;
    &lt;br /&gt;
    #initialize&lt;br /&gt;
      when role is nil&lt;br /&gt;
        initializes with a nil parent&lt;br /&gt;
&lt;br /&gt;
    #setup&lt;br /&gt;
      when item.action_controller is nil&lt;br /&gt;
        returns /content_page.name&lt;br /&gt;
      when item.action_controller is not nil&lt;br /&gt;
        returns /controller.name/controller_action.name&lt;br /&gt;
&lt;br /&gt;
    #content_page&lt;br /&gt;
      should update the content_page instance variable&lt;br /&gt;
&lt;br /&gt;
    #controller_action&lt;br /&gt;
      when @controller_action already has a value&lt;br /&gt;
        remains the same&lt;br /&gt;
      when @controller_action is nil&lt;br /&gt;
        updates @controller_action&lt;br /&gt;
&lt;br /&gt;
    #site_controller&lt;br /&gt;
      when @site_controller is nil&lt;br /&gt;
        updates @site_controller&lt;br /&gt;
      when @site_controller already has a value&lt;br /&gt;
        remains the same&lt;br /&gt;
&lt;br /&gt;
    #add_child&lt;br /&gt;
      when node has children&lt;br /&gt;
        adds a child&lt;br /&gt;
      when node has no children&lt;br /&gt;
        can add multiple children&lt;br /&gt;
      when node has no children&lt;br /&gt;
        adds a child&lt;br /&gt;
&lt;br /&gt;
'''Menu'''&lt;br /&gt;
  #initialize&lt;br /&gt;
    when menu has items&lt;br /&gt;
      creates a new menu with item&lt;br /&gt;
    when menu has not items&lt;br /&gt;
      creates a new menu without items&lt;br /&gt;
    when role is nil&lt;br /&gt;
      creates a new menu&lt;br /&gt;
    when a role is passed as an argument&lt;br /&gt;
      creates a new menu &lt;br /&gt;
&lt;br /&gt;
  #select&lt;br /&gt;
    returns a node.id based on the given name&lt;br /&gt;
&lt;br /&gt;
  #get_item&lt;br /&gt;
    when menu has items&lt;br /&gt;
      returns the correct item&lt;br /&gt;
    when menu has no items&lt;br /&gt;
      returns nil&lt;br /&gt;
    when a nonexistent id is passed&lt;br /&gt;
      returns nil&lt;br /&gt;
&lt;br /&gt;
  #get_menu&lt;br /&gt;
    when a node is selected&lt;br /&gt;
      returns a list of nodes that are the children of the selected node&lt;br /&gt;
    when called on a nonexistent node&lt;br /&gt;
      returns nil&lt;br /&gt;
    when menu has no items&lt;br /&gt;
      returns nil&lt;br /&gt;
&lt;br /&gt;
  #selected?&lt;br /&gt;
    when id passed is not of a selected menu item&lt;br /&gt;
      returns false&lt;br /&gt;
    when id passed is of a selected menu item&lt;br /&gt;
      returns true&lt;br /&gt;
    when passed nil as the id&lt;br /&gt;
      return false&lt;br /&gt;
&lt;br /&gt;
  #selected&lt;br /&gt;
    when a nonexistent node is selected&lt;br /&gt;
      returns nil&lt;br /&gt;
    when an item is selected&lt;br /&gt;
      returns the name of the currently selected item&lt;br /&gt;
&lt;br /&gt;
  #crumbs&lt;br /&gt;
    when a node besides root is selected&lt;br /&gt;
      returns a list of nodes based on the selected item&lt;br /&gt;
    when root is selected&lt;br /&gt;
      returns a list of nodes based on the root&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=119138</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=119138"/>
		<updated>2018-11-09T23:34:09Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the menu.rb model in Expertiza. '''If you are a reviewer who just wants fast answers the test plan is at the bottom.'''&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The Menu model is used to create the top bar menu in Expertiza. It does this by obtaining and organizing MenuItems based on the current user's Role. Before this project, there were no unit tests for menu.rb. This project seeks to bring the unit test coverage above 90%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific spec file can be run by calling the following in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The addition of the -fd argument will write out full descriptions of the tests and provide an easy look at the work we did.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total, we wrote 29 tests that covered all the functions in both Menu and its internal Node class. Using the given factories, we created 6 MenuItems (test1 to test6) to pass to the Menu as well as 1 Role used to test the Menu constructor. &lt;br /&gt;
&lt;br /&gt;
   let!(:test1) { create(:menu_item, name: &amp;quot;home1&amp;quot;, parent_id: nil, seq: 1) }&lt;br /&gt;
   &lt;br /&gt;
   admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: &amp;quot;&amp;quot;, parent_id: nil, default_page_id: nil)&lt;br /&gt;
&lt;br /&gt;
We stubbed the MenuItem  method, items_for_permissions, to return an array of the 6 test items that we created. &lt;br /&gt;
&lt;br /&gt;
   allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return(items)&lt;br /&gt;
&lt;br /&gt;
Other pieces of the code were stubbed because these pieces should be tested in other model specs and not Menu spec. The double 'temp' is created, which acts as a stand-in for some other class objects which interact with Menu, in order to only test the functionalities of Menu.&lt;br /&gt;
&lt;br /&gt;
Each method in menu.rb has at least two tests checking both a known success case and an edge case or potential failure. As an example, a detailed look at the tests for Menu#initialize is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  context &amp;quot;when role is nil&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
      menu = Menu.new&lt;br /&gt;
      expect(menu.instance_of?(Menu))&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This first test revealed an error in the existing menu.rb code in the line shown below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The below line shows the change that we made. This allowed the code to be more robust and prevent NoMethodError from nilClass. Without this change, a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second test covers the main use case of Menu. It is supplied with a role and assembles a menu. Only a single role is tested because further testing of roles and menus should instead be handled in integration tests.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when a role is passed as an argument&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
        admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: '', parent_id: nil, default_page_id: nil)&lt;br /&gt;
        menu = Menu.new(admin_role)&lt;br /&gt;
        expect(menu.instance_of?(Menu))&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third test checks that when the menu is created with items, these items are put into nodes, arranged appropriately and contained within the menu. In this case, the children of root will contain a single item, the node with id 1, because this node has a nil parent. The other nodes all have non-nil parents.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu with items&amp;quot; do&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children.length).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The final test checks a menu without any nodes. While this case is unlikely in actual use, it is important that it can be handled without throwing any errors. When a menu without any items is created, the root will never have anything added to its children array so this array will be nil.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has not items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu without items&amp;quot; do&lt;br /&gt;
        allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return([])&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
These 4 tests alone provide nearly 85% coverage of menu.rb because of how much they rely on a variety of other methods within the class.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu.rb return a Menu::Node. The simplest, Menu#get_item, takes a Node id and returns the corresponding Node object. All following functions use this to test that the correct Node is returned. However to prevent circular logic, the Menu#get_item test only checks the id of the returned Node.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb.&lt;br /&gt;
 &lt;br /&gt;
A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here]. &lt;br /&gt;
&lt;br /&gt;
The main repository can be found [https://github.com/expertiza/expertiza here]&lt;br /&gt;
&lt;br /&gt;
The forked git repository for this project can be found [https://github.com/BarrettJB/expertiza/ here]&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Below is a list of the descriptions of all of the tests we wrote&lt;br /&gt;
&lt;br /&gt;
'''Menu::Node'''&lt;br /&gt;
    &lt;br /&gt;
    #initialize&lt;br /&gt;
      when role is nil&lt;br /&gt;
        initializes with a nil parent&lt;br /&gt;
&lt;br /&gt;
    #setup&lt;br /&gt;
      when item.action_controller is nil&lt;br /&gt;
        returns /content_page.name&lt;br /&gt;
      when item.action_controller is not nil&lt;br /&gt;
        returns /controller.name/controller_action.name&lt;br /&gt;
&lt;br /&gt;
    #content_page&lt;br /&gt;
      should update the content_page instance variable&lt;br /&gt;
&lt;br /&gt;
    #controller_action&lt;br /&gt;
      when @controller_action already has a value&lt;br /&gt;
        remains the same&lt;br /&gt;
      when @controller_action is nil&lt;br /&gt;
        updates @controller_action&lt;br /&gt;
&lt;br /&gt;
    #site_controller&lt;br /&gt;
      when @site_controller is nil&lt;br /&gt;
        updates @site_controller&lt;br /&gt;
      when @site_controller already has a value&lt;br /&gt;
        remains the same&lt;br /&gt;
&lt;br /&gt;
    #add_child&lt;br /&gt;
      when node has children&lt;br /&gt;
        adds a child&lt;br /&gt;
      when node has no children&lt;br /&gt;
        can add multiple children&lt;br /&gt;
      when node has no children&lt;br /&gt;
        adds a child&lt;br /&gt;
&lt;br /&gt;
'''Menu'''&lt;br /&gt;
  #initialize&lt;br /&gt;
    when menu has items&lt;br /&gt;
      creates a new menu with item&lt;br /&gt;
    when menu has not items&lt;br /&gt;
      creates a new menu without items&lt;br /&gt;
    when role is nil&lt;br /&gt;
      creates a new menu&lt;br /&gt;
    when a role is passed as an argument&lt;br /&gt;
      creates a new menu &lt;br /&gt;
&lt;br /&gt;
  #select&lt;br /&gt;
    returns a node.id based on the given name&lt;br /&gt;
&lt;br /&gt;
  #get_item&lt;br /&gt;
    when menu has items&lt;br /&gt;
      returns the correct item&lt;br /&gt;
    when menu has no items&lt;br /&gt;
      returns nil&lt;br /&gt;
    when a nonexistent id is passed&lt;br /&gt;
      returns nil&lt;br /&gt;
&lt;br /&gt;
  #get_menu&lt;br /&gt;
    when a node is selected&lt;br /&gt;
      returns a list of nodes that are the children of the selected node&lt;br /&gt;
    when called on a nonexistent node&lt;br /&gt;
      returns nil&lt;br /&gt;
    when menu has no items&lt;br /&gt;
      returns nil&lt;br /&gt;
&lt;br /&gt;
  #selected?&lt;br /&gt;
    when id passed is not of a selected menu item&lt;br /&gt;
      returns false&lt;br /&gt;
    when id passed is of a selected menu item&lt;br /&gt;
      returns true&lt;br /&gt;
    when passed nil as the id&lt;br /&gt;
      return false&lt;br /&gt;
&lt;br /&gt;
  #selected&lt;br /&gt;
    when a nonexistent node is selected&lt;br /&gt;
      returns nil&lt;br /&gt;
    when an item is selected&lt;br /&gt;
      returns the name of the currently selected item&lt;br /&gt;
&lt;br /&gt;
  #crumbs&lt;br /&gt;
    when a node besides root is selected&lt;br /&gt;
      returns a list of nodes based on the selected item&lt;br /&gt;
    when root is selected&lt;br /&gt;
      returns a list of nodes based on the root&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118174</id>
		<title>CSC/ECE 517 Fall 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118174"/>
		<updated>2018-11-02T21:19:31Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2018- Project E1846. OSS Project Navy: Character Issues]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2018/OSS E1848 Write unit tests for assignment team.rb]]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1839_Review_Requirements_and_Thresholds CSC/ECE 517 Fall 2018 E1839 Review Requirements and Thresholds]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1848_Write_unit_tests_for_assignment_team CSC/ECE 517 Fall 2018 E1848 Write unit tests for assignment_team]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1835_Refactor_delayed_mailer_and_scheduled_task CSC/ECE 517 Fall 2018 E1835_Refactor_delayed_mailer_and_scheduled_task]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1829_OSS_project_Duke_Blue_Fix_import_glitches CSC/ECE 517 Fall 2018 E1829 OSS project Duke Blue: Fix import glitches]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb CSC/ECE 517 Fall 2018 E1853 Write unit tests for menu.rb]&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118172</id>
		<title>CSC/ECE 517 Fall 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118172"/>
		<updated>2018-11-02T21:19:20Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2018- Project E1846. OSS Project Navy: Character Issues]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2018/OSS E1848 Write unit tests for assignment team.rb]]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1839_Review_Requirements_and_Thresholds CSC/ECE 517 Fall 2018 E1839 Review Requirements and Thresholds]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1848_Write_unit_tests_for_assignment_team CSC/ECE 517 Fall 2018 E1848 Write unit tests for assignment_team]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1835_Refactor_delayed_mailer_and_scheduled_task CSC/ECE 517 Fall 2018 E1835_Refactor_delayed_mailer_and_scheduled_task]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1829_OSS_project_Duke_Blue_Fix_import_glitches CSC/ECE 517 Fall 2018 E1829 OSS project Duke Blue: Fix import glitches]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb CSC/ECE 517 Fall 2018 E1853 Write unit tests for menu.rb&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118168</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118168"/>
		<updated>2018-11-02T21:17:44Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: /* Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the Menu.rb model in Expertiza.&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The menu model is used to create the top bar menu in expertiza. It does this by obtaining and organizing Menu_Items based on the current users Role. Before this project there were no unit tests for menu.rb. This project seeked to bring the unit test coverage above %90.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific test can be run by calling in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The addition of the -fd argument will write out full descriptions of the tests and provide a easy look at the work we did.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total we wrote 29 tests that covered all of the functions in both menu and its internal node class. We created 6 menu items for testing using the given factories as well as 1 role used to test the menu constructor. We stubbed menu item to always return an array of the 6 test items that we created. Other pieces of the code were stubbed because these pieces should be tested by menu item not menu. The double temp is used to only test the functionalities of menu.&lt;br /&gt;
&lt;br /&gt;
Each method in menu.rb has at least two tests checking both a know success case and a edge case or potential failure. As an example, a detailed look at the functions to test menu#initialize is found below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  context &amp;quot;when role is nil&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
      menu = Menu.new&lt;br /&gt;
      expect(menu.instance_of?(Menu))&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This first test revealed an error in the existing menu.rb code in the line shown below. The second line shows the change that we made. This allowed the code to be more robust and prevent noMethodErrors from nilClass. Without this change a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second test uses the main covers the main use case of menu. It will be supplied with a role and will assemble a menu. Only a single role is tested because further testing of roles and menus should instead be handled in integration tests.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when a role is passed as an argument&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
        admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: '', parent_id: nil, default_page_id: nil)&lt;br /&gt;
        menu = Menu.new(admin_role)&lt;br /&gt;
        expect(menu.instance_of?(Menu))&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third test checks that when the menu is created with items, these items are put into nodes and contained within the menu. In this case the children of root will contain a single item, the node with id 1, because this node has a nil parent. The other nodes all have parents.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu with items&amp;quot; do&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children.length).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The final test checks a menu without any nodes. While this case is unlikely in actual use it is important it can be handled without throwing any errors. When a menu without any items is created, the root will never have anything added to its children array so this array will be nil.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has not items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu without items&amp;quot; do&lt;br /&gt;
        allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return([])&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This 4 tests alone provide nearly 85% coverage of menu.rb because of how much they rely on a variety of other methods within the class.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu return a menu node. The simplest, get_item, takes the node id and returns the node object. All following functions use this to test that the correct node is returned. However to prevent circular logic, the get_item test only checks the id of the returned node.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb.&lt;br /&gt;
 &lt;br /&gt;
A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here]. &lt;br /&gt;
&lt;br /&gt;
The main repository can be found [https://github.com/expertiza/expertiza here]&lt;br /&gt;
&lt;br /&gt;
The forked git repository for this project can be found [https://github.com/BarrettJB/expertiza/ here]&lt;br /&gt;
&lt;br /&gt;
==List of all tests==&lt;br /&gt;
Below is a list of the descriptions of all of the tests we wrote&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118167</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118167"/>
		<updated>2018-11-02T21:17:30Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: /* Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the Menu.rb model in Expertiza.&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The menu model is used to create the top bar menu in expertiza. It does this by obtaining and organizing Menu_Items based on the current users Role. Before this project there were no unit tests for menu.rb. This project seeked to bring the unit test coverage above %90.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific test can be run by calling in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The addition of the -fd argument will write out full descriptions of the tests and provide a easy look at the work we did.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total we wrote 29 tests that covered all of the functions in both menu and its internal node class. We created 6 menu items for testing using the given factories as well as 1 role used to test the menu constructor. We stubbed menu item to always return an array of the 6 test items that we created. Other pieces of the code were stubbed because these pieces should be tested by menu item not menu. The double temp is used to only test the functionalities of menu.&lt;br /&gt;
&lt;br /&gt;
Each method in menu.rb has at least two tests checking both a know success case and a edge case or potential failure. As an example, a detailed look at the functions to test menu#initialize is found below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  context &amp;quot;when role is nil&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
      menu = Menu.new&lt;br /&gt;
      expect(menu.instance_of?(Menu))&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This first test revealed an error in the existing menu.rb code in the line shown below. The second line shows the change that we made. This allowed the code to be more robust and prevent noMethodErrors from nilClass. Without this change a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second test uses the main covers the main use case of menu. It will be supplied with a role and will assemble a menu. Only a single role is tested because further testing of roles and menus should instead be handled in integration tests.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when a role is passed as an argument&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
        admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: '', parent_id: nil, default_page_id: nil)&lt;br /&gt;
        menu = Menu.new(admin_role)&lt;br /&gt;
        expect(menu.instance_of?(Menu))&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third test checks that when the menu is created with items, these items are put into nodes and contained within the menu. In this case the children of root will contain a single item, the node with id 1, because this node has a nil parent. The other nodes all have parents.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu with items&amp;quot; do&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children.length).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The final test checks a menu without any nodes. While this case is unlikely in actual use it is important it can be handled without throwing any errors. When a menu without any items is created, the root will never have anything added to its children array so this array will be nil.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has not items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu without items&amp;quot; do&lt;br /&gt;
        allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return([])&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This 4 tests alone provide nearly 85% coverage of menu.rb because of how much they rely on a variety of other methods within the class.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu return a menu node. The simplest, get_item, takes the node id and returns the node object. All following functions use this to test that the correct node is returned. However to prevent circular logic, the get_item test only checks the id of the returned node.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb. A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here]. &lt;br /&gt;
&lt;br /&gt;
The main repository can be found [https://github.com/expertiza/expertiza here]&lt;br /&gt;
&lt;br /&gt;
The forked git repository for this project can be found [https://github.com/BarrettJB/expertiza/ here]&lt;br /&gt;
&lt;br /&gt;
==List of all tests==&lt;br /&gt;
Below is a list of the descriptions of all of the tests we wrote&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118166</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118166"/>
		<updated>2018-11-02T21:17:20Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: /* Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the Menu.rb model in Expertiza.&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The menu model is used to create the top bar menu in expertiza. It does this by obtaining and organizing Menu_Items based on the current users Role. Before this project there were no unit tests for menu.rb. This project seeked to bring the unit test coverage above %90.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific test can be run by calling in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The addition of the -fd argument will write out full descriptions of the tests and provide a easy look at the work we did.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total we wrote 29 tests that covered all of the functions in both menu and its internal node class. We created 6 menu items for testing using the given factories as well as 1 role used to test the menu constructor. We stubbed menu item to always return an array of the 6 test items that we created. Other pieces of the code were stubbed because these pieces should be tested by menu item not menu. The double temp is used to only test the functionalities of menu.&lt;br /&gt;
&lt;br /&gt;
Each method in menu.rb has at least two tests checking both a know success case and a edge case or potential failure. As an example, a detailed look at the functions to test menu#initialize is found below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  context &amp;quot;when role is nil&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
      menu = Menu.new&lt;br /&gt;
      expect(menu.instance_of?(Menu))&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This first test revealed an error in the existing menu.rb code in the line shown below. The second line shows the change that we made. This allowed the code to be more robust and prevent noMethodErrors from nilClass. Without this change a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second test uses the main covers the main use case of menu. It will be supplied with a role and will assemble a menu. Only a single role is tested because further testing of roles and menus should instead be handled in integration tests.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when a role is passed as an argument&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
        admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: '', parent_id: nil, default_page_id: nil)&lt;br /&gt;
        menu = Menu.new(admin_role)&lt;br /&gt;
        expect(menu.instance_of?(Menu))&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third test checks that when the menu is created with items, these items are put into nodes and contained within the menu. In this case the children of root will contain a single item, the node with id 1, because this node has a nil parent. The other nodes all have parents.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu with items&amp;quot; do&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children.length).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The final test checks a menu without any nodes. While this case is unlikely in actual use it is important it can be handled without throwing any errors. When a menu without any items is created, the root will never have anything added to its children array so this array will be nil.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has not items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu without items&amp;quot; do&lt;br /&gt;
        allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return([])&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This 4 tests alone provide nearly 85% coverage of menu.rb because of how much they rely on a variety of other methods within the class.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu return a menu node. The simplest, get_item, takes the node id and returns the node object. All following functions use this to test that the correct node is returned. However to prevent circular logic, the get_item test only checks the id of the returned node.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb. A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here]. &lt;br /&gt;
The main repository can be found [https://github.com/expertiza/expertiza here]&lt;br /&gt;
The forked git repository for this project can be found [https://github.com/BarrettJB/expertiza/ here]&lt;br /&gt;
&lt;br /&gt;
==List of all tests==&lt;br /&gt;
Below is a list of the descriptions of all of the tests we wrote&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118157</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118157"/>
		<updated>2018-11-02T21:14:06Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the Menu.rb model in Expertiza.&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The menu model is used to create the top bar menu in expertiza. It does this by obtaining and organizing Menu_Items based on the current users Role. Before this project there were no unit tests for menu.rb. This project seeked to bring the unit test coverage above %90.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific test can be run by calling in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The addition of the -fd argument will write out full descriptions of the tests and provide a easy look at the work we did.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total we wrote 29 tests that covered all of the functions in both menu and its internal node class. We created a 6 menu items for testing using the given factories as well as 1 role used to test the menu constructor. We stubbed menu item to always return an array of the 6 test items that we created. Other pieces of the code were stubbed because these pieces should be tested by menu item not menu. The double temp is used to only test the functionalities of menu.&lt;br /&gt;
&lt;br /&gt;
Each method in menu.rb has at least two tests checking both a know success case and a edge case or potential failure. As an example, a detailed look at the functions to test menu#initialize is found below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  context &amp;quot;when role is nil&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
      menu = Menu.new&lt;br /&gt;
      expect(menu.instance_of?(Menu))&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This first test revealed an error in the existing menu.rb code in the line shown below. The second line shows the change that we made. This allowed the code to be more robust and prevent noMethodErrors from nilClass. Without this change a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second test uses the main covers the main use case of menu. It will be supplied with a role and will assemble a menu. Only a single role is tested because further testing of roles and menus should instead be handled in integration tests.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when a role is passed as an argument&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu&amp;quot; do&lt;br /&gt;
        admin_role = build(:role_of_administrator, id: 3, name: &amp;quot;Administrator&amp;quot;, description: '', parent_id: nil, default_page_id: nil)&lt;br /&gt;
        menu = Menu.new(admin_role)&lt;br /&gt;
        expect(menu.instance_of?(Menu))&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third test checks that when the menu is created with items, these items are put into nodes and contained within the menu. In this case the children of root will contain a single item, the node with id 1, because this node has a nil parent. The other nodes all have parents.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu with items&amp;quot; do&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children.length).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The final test checks a menu without any nodes. While this case is unlikely in actual use it is important it can be handled without throwing any errors. When a menu without any items is created, the root will never have anything added to its children array so this array will be nil.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    context &amp;quot;when menu has not items&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new menu without items&amp;quot; do&lt;br /&gt;
        allow(MenuItem).to receive(:items_for_permissions).with(anything).and_return([])&lt;br /&gt;
        menu = Menu.new&lt;br /&gt;
        expect(menu.root.children).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This 4 tests alone provide nearly 85% coverage of menu.rb because of how much they rely on a variety of other methods within the class.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu return a menu node. The simplest, get_item, takes the node id and returns the node object. All following functions use this to test that the correct node is returned. However to prevent circular logic, the get_item test only checks the id of the returned node.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb. A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here].&lt;br /&gt;
&lt;br /&gt;
==List of all tests==&lt;br /&gt;
Below is a list of the descriptions of all of the tests we wrote&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118141</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118141"/>
		<updated>2018-11-02T21:01:53Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the Menu.rb model in Expertiza.&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The menu model is used to create the top bar menu in expertiza. It does this by obtaining and organizing Menu_Items based on the current users Role. Before this project there were no unit tests for menu.rb. This project seeked to bring the unit test coverage above %90.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific test can be run by calling in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The addition of the -fd argument will write out full descriptions of the tests and provide a easy look at the work we did.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total we wrote 29 tests that covered all of the functions in both menu and its internal node class. We created a 6 menu items for testing using the given factories as well as 1 role used to test the menu constructor. We stubbed menu item to always return an array of the 6 test items that we created. Other pieces of the code were stubbed because these pieces should be tested by menu item not menu. The double temp is used to only test the functionalities of menu.&lt;br /&gt;
&lt;br /&gt;
Each method in menu.rb has at least two tests checking both a know success case and a edge case or potential failure.&lt;br /&gt;
&lt;br /&gt;
While testing we found in error in the existing menu.rb code in the line shown below. The second line shows the change that we made. This allowed the code to be more robust and prevent noMethodErrors from nilClass. Without this change a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu return a menu node. The simplest, get_item, takes the node id and returns the node object. All following functions use this to test that the correct node is returned. However to prevent circular logic, the get_item test only checks the id of the returned node.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb. A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here].&lt;br /&gt;
&lt;br /&gt;
==List of all tests==&lt;br /&gt;
Below is a list of the descriptions of all of the tests we wrote&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118136</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118136"/>
		<updated>2018-11-02T20:56:52Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the Menu.rb model in Expertiza.&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The menu model is used to create the top bar menu in expertiza. It does this by obtaining and organizing Menu_Items based on the current users Role. Before this project there were no unit tests for menu.rb. This project seeked to bring the unit test coverage above %90.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific test can be run by calling in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total we wrote 29 tests that covered all of the functions in both menu and its internal node class. We created a 6 menu items for testing using the given factories as well as 1 role used to test the menu constructor. We stubbed menu item to always return an array of the 6 test items that we created. Other pieces of the code were stubbed because these pieces should be tested by menu item not menu. The double temp is used to only test the functionalities of menu.&lt;br /&gt;
&lt;br /&gt;
While testing we found in error in the existing menu.rb code in the line shown below. The second line shows the change that we made. This allowed the code to be more robust and prevent noMethodErrors from nilClass. Without this change a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu return a menu node. The simplest, get_item, takes the node id and returns the node object. All following functions use this to test that the correct node is returned. However to prevent circular logic, the get_item test only checks the id of the returned node.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb. A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here].&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118134</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118134"/>
		<updated>2018-11-02T20:55:31Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the Menu.rb model in Expertiza.&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The menu model is used to create the top bar menu in expertiza. It does this by obtaining and organizing Menu_Items based on the current users Role. Before this project there were no unit tests for menu.rb. This project seeked to bring the unit test coverage above %90.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific test can be run by calling in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total we wrote 29 tests that covered all of the functions in both menu and its internal node class. We created a 6 menu items for testing using the given factories as well as 1 role used to test the menu constructor. We stubbed menu item to always return an array of the 6 test items that we created. Other pieces of the code were stubbed because these pieces should be tested by menu item not menu. The double temp is used to only test the functionalities of menu.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu return a menu node. The simplest, get_item, takes the node id and returns the node object. All following functions use this to test that the correct node is returned. However to prevent circular logic, the get_item test only checks the id of the returned node.&lt;br /&gt;
&lt;br /&gt;
While testing we found in error in the existing menu.rb code in the line shown below. The second line shows the change that we made. This allowed the code to be more robust and prevent noMethodErrors from nilClass. Without this change a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb. A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here].&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118133</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118133"/>
		<updated>2018-11-02T20:53:07Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the Menu.rb model in Expertiza.&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The menu model is used to create the top bar menu in expertiza. It does this by obtaining and organizing Menu_Items based on the current users Role. Before this project there were no unit tests for menu.rb. This project seeked to bring the unit test coverage above %90.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific test can be run by calling in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total we wrote 29 tests that covered all of the functions in both menu and its internal node class. We created a 6 menu items for testing using the given factories as well as 1 role used to test the menu constructor. We stubbed menu item to always return an array of the 6 test items that we created. Other pieces of the code were stubbed because these pieces should be tested by menu item not menu. The double temp is used to only test the functionalities of menu.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu return a menu node. The simplest, get_item, takes the node id and returns the node object. All following functions use this to test that the correct node is returned. However to prevent circular logic, the get_item test only checks the id of the returned node.&lt;br /&gt;
&lt;br /&gt;
While testing we found in error in the existing menu.rb code in the line shown below. The second line shows the change that we made. This allowed the code to be more robust and prevent noMethodErrors from nilClass. Without this change a menu created with a nil role will throw an error causing the program to fail unnecessarily. This is important because the default value of role is nil and that should not fail.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache)[:credentials].try(:permission_ids))&lt;br /&gt;
  items = MenuItem.items_for_permissions(role.try(:cache).try(:[], :credentials).try(:permission_ids))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
The 29 tests provide 100% coverage of the lines in menu.rb. A video of all tests running can be seen [https://www.youtube.com/watch?v=yB_E5OORja0 here]&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118129</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118129"/>
		<updated>2018-11-02T20:46:12Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the Menu.rb model in Expertiza.&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The menu model is used to create the top bar menu in expertiza. It does this by obtaining and organizing Menu_Items based on the current users Role. Before this project there were no unit tests for menu.rb. This project seeked to bring the unit test coverage above %90.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific test can be run by calling in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
In total we wrote 29 tests that covered all of the functions in both menu and its internal node class. We created a 6 menu items for testing using the given factories as well as 1 role used to test the menu constructor. We stubbed menu item to always return an array of the 6 test items that we created. Other pieces of the code were stubbed because these pieces should be tested by menu item not menu. The double temp is used to only test the functionalities of menu.&lt;br /&gt;
&lt;br /&gt;
Many of the functions in menu return a menu node. The simplest, get_item, takes the node id and returns the node object. All following functions use this to test that the correct node is returned. However to prevent circular logic, the get_item test only checks the id of the returned node.&lt;br /&gt;
&lt;br /&gt;
While testing we found in error in the existing menu.rb code in the line shown below. The second line shows the change that we made. This allowed the code to be more robust and prevent noMethodErrors from nilClasses.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118116</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=118116"/>
		<updated>2018-11-02T20:31:58Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project wrote unit tests for the Menu.rb model in Expertiza.&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
The menu model is used to create the top bar menu in expertiza. It does this by obtaining and organizing Menu_Items based on the current users Role. Before this project there were no unit tests for menu.rb. This project seeked to bring the unit test coverage above %90.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Team===&lt;br /&gt;
Barrett Bryson (bbryson)&lt;br /&gt;
Komal Kangutkar (kmkangut)&lt;br /&gt;
&lt;br /&gt;
===RSpec File===&lt;br /&gt;
The final result can be found at expertiza/spec/models/menu_spec.rb. This specific test can be run by calling in the expertiza directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rspec -fd ./spec/models/menu_spec.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=117695</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=117695"/>
		<updated>2018-10-31T19:23:04Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For reviewers:&lt;br /&gt;
To run all tests call &amp;quot;rspec -fd ./spec/models/menu.rb&amp;quot;&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=117694</id>
		<title>CSC/ECE 517 Fall 2018/E1853 Write unit tests for menu.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb&amp;diff=117694"/>
		<updated>2018-10-31T19:13:44Z</updated>

		<summary type="html">&lt;p&gt;Bbryson: Created page with &amp;quot;This is a test of the documentation for this project&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a test of the documentation for this project&lt;/div&gt;</summary>
		<author><name>Bbryson</name></author>
	</entry>
</feed>