<?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=Jfgiall2</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=Jfgiall2"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Jfgiall2"/>
	<updated>2026-05-11T13:09:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=121123</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=121123"/>
		<updated>2018-12-07T04:08:35Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Explain how to get data from objects.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
===Repo===&lt;br /&gt;
Our fork and branch can be found here.&lt;br /&gt;
[https://github.com/ishanrohatgi0994/expertiza/tree/E1871 E1871 Branch]&lt;br /&gt;
&lt;br /&gt;
===Pull Request===&lt;br /&gt;
Our pull request can be found here.&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1298 E1871 Pull Request]&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Use Case UML Activity Diagram==&lt;br /&gt;
This is the procedure for accessing the Grade Summary by Student view. It's not too complicated, but our reviewers really wanted some sweet UML action.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_uml.png]]&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===Modified Files===&lt;br /&gt;
*# app/assets/javascripts/tree_display.jsx&lt;br /&gt;
*# app/controllers/assessment360_controller.rb&lt;br /&gt;
*# config/routes.rb&lt;br /&gt;
*# app/assets/stylesheets/table_sorter.scss&lt;br /&gt;
*# app/controllers/grades_controller.rb&lt;br /&gt;
*# app/models/sign_up_topic.rb&lt;br /&gt;
*# app/helpers/grades_helper.rb&lt;br /&gt;
&lt;br /&gt;
===Created Files===&lt;br /&gt;
*# app/views/assessment360/course_student_grade_summary.html.erb&lt;br /&gt;
*# spec/controllers/assessment360_controller_spec.rb&lt;br /&gt;
*# spec/features/course_student_grade_summary_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How We Get The Information We Need==&lt;br /&gt;
Getting the data we need to populate this view is a little more complicated than expected. Here is an explanation of what we need and why:&lt;br /&gt;
*# We start by getting a course with a course_id.&lt;br /&gt;
*# Once we have a course, it is straightforward to gets the assignments and course_participants.&lt;br /&gt;
*# For each course participant and for each assignment, we then conduct the rest of the procedure.&lt;br /&gt;
*# We get the user id from the course participant.&lt;br /&gt;
*# We use the user id to get an assignment_participant object from the assignment.&lt;br /&gt;
*# We use the assignment and user ids to get a topic id from the SignedUpTeam model.&lt;br /&gt;
*# Once we have the topic id we can add the name to the list for the UI.&lt;br /&gt;
*# Use the assignment id and user id to get a team id from the TeamsUser class.&lt;br /&gt;
*# Use the team id to get a team object.&lt;br /&gt;
*# Get a grade_for_submission from the team object. &lt;br /&gt;
*# Get questionnaires from the assignment.&lt;br /&gt;
*# For each questionnaire in an assignment, use AssignmentQuestionnare model to get rounds.&lt;br /&gt;
*# For each round, get questions.&lt;br /&gt;
*# Once you have all questions, call score on participants while passing questions as argument.&lt;br /&gt;
&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
All changes were made in the file assessment370controller.rb&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can. Here are videos of each set of tests running successfully.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/PqpenMq_F2U Assessment360 Controller Tests Video]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/3e42Zi1C3_0 Grade Summary by Student Feature Tests Video]&lt;br /&gt;
&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
The controller we test is the assessment360_controller.rb, particularly the course_student_grade_summary function. Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the instance variables provided to the view is instantiated, but not concern ourselves too much with what the values are (these would be tested by the unit tests for the manu models we query in this method.) This is identified as a best practice for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
Here is an image of part of our Controller tests, showing how we handle the case where a course doesn't have any students.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the controller function.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests2.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the tests which verify that the controller instantiates the view's instance variables.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests3.png]]&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the content-check tests for this feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test2.png]]&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=121117</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=121117"/>
		<updated>2018-12-07T02:36:49Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: update modified files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
===Repo===&lt;br /&gt;
Our fork and branch can be found here.&lt;br /&gt;
[https://github.com/ishanrohatgi0994/expertiza/tree/E1871 E1871 Branch]&lt;br /&gt;
&lt;br /&gt;
===Pull Request===&lt;br /&gt;
Our pull request can be found here.&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1298 E1871 Pull Request]&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Use Case UML Activity Diagram==&lt;br /&gt;
This is the procedure for accessing the Grade Summary by Student view. It's not too complicated, but our reviewers really wanted some sweet UML action.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_uml.png]]&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===Modified Files===&lt;br /&gt;
*# app/assets/javascripts/tree_display.jsx&lt;br /&gt;
*# app/controllers/assessment360_controller.rb&lt;br /&gt;
*# config/routes.rb&lt;br /&gt;
*# app/assets/stylesheets/table_sorter.scss&lt;br /&gt;
*# app/controllers/grades_controller.rb&lt;br /&gt;
*# app/models/sign_up_topic.rb&lt;br /&gt;
*# app/helpers/grades_helper.rb&lt;br /&gt;
&lt;br /&gt;
===Created Files===&lt;br /&gt;
*# app/views/assessment360/course_student_grade_summary.html.erb&lt;br /&gt;
*# spec/controllers/assessment360_controller_spec.rb&lt;br /&gt;
*# spec/features/course_student_grade_summary_spec.rb&lt;br /&gt;
&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
All changes were made in the file assessment370controller.rb&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can. Here are videos of each set of tests running successfully.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/PqpenMq_F2U Assessment360 Controller Tests Video]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/3e42Zi1C3_0 Grade Summary by Student Feature Tests Video]&lt;br /&gt;
&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
The controller we test is the assessment360_controller.rb, particularly the course_student_grade_summary function. Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the instance variables provided to the view is instantiated, but not concern ourselves too much with what the values are (these would be tested by the unit tests for the manu models we query in this method.) This is identified as a best practice for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
Here is an image of part of our Controller tests, showing how we handle the case where a course doesn't have any students.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the controller function.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests2.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the tests which verify that the controller instantiates the view's instance variables.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests3.png]]&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the content-check tests for this feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test2.png]]&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120859</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120859"/>
		<updated>2018-11-26T23:06:00Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Added pull request.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
===Repo===&lt;br /&gt;
Our fork and branch can be found here.&lt;br /&gt;
[https://github.com/ishanrohatgi0994/expertiza/tree/E1871 E1871 Branch]&lt;br /&gt;
&lt;br /&gt;
===Pull Request===&lt;br /&gt;
Our pull request can be found here.&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1298 E1871 Pull Request]&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Use Case UML Activity Diagram==&lt;br /&gt;
This is the procedure for accessing the Grade Summary by Student view. It's not too complicated, but our reviewers really wanted some sweet UML action.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_uml.png]]&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===Modified Files===&lt;br /&gt;
*# app/assets/javascripts/tree_display.jsx&lt;br /&gt;
*# app/controllers/assessment360_controller.rb&lt;br /&gt;
*# config/routes.rb&lt;br /&gt;
*# app/assets/stylesheets/table_sorter.scss&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Created Files===&lt;br /&gt;
*# app/views/assessment360/course_student_grade_summary.html.erb&lt;br /&gt;
*# spec/controllers/assessment360_controller_spec.rb&lt;br /&gt;
*# spec/features/course_student_grade_summary_spec.rb&lt;br /&gt;
&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
All changes were made in the file assessment370controller.rb&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can. Here are videos of each set of tests running successfully.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/PqpenMq_F2U Assessment360 Controller Tests Video]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/3e42Zi1C3_0 Grade Summary by Student Feature Tests Video]&lt;br /&gt;
&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
The controller we test is the assessment360_controller.rb, particularly the course_student_grade_summary function. Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the instance variables provided to the view is instantiated, but not concern ourselves too much with what the values are (these would be tested by the unit tests for the manu models we query in this method.) This is identified as a best practice for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
Here is an image of part of our Controller tests, showing how we handle the case where a course doesn't have any students.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the controller function.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests2.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the tests which verify that the controller instantiates the view's instance variables.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests3.png]]&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the content-check tests for this feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test2.png]]&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120856</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120856"/>
		<updated>2018-11-24T20:26:54Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Added link to repo.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
===Repo===&lt;br /&gt;
Our fork and branch can be found here.&lt;br /&gt;
[https://github.com/ishanrohatgi0994/expertiza/tree/E1871 E1871 Branch]&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Use Case UML Activity Diagram==&lt;br /&gt;
This is the procedure for accessing the Grade Summary by Student view. It's not too complicated, but our reviewers really wanted some sweet UML action.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_uml.png]]&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===Modified Files===&lt;br /&gt;
*# app/assets/javascripts/tree_display.jsx&lt;br /&gt;
*# app/controllers/assessment360_controller.rb&lt;br /&gt;
*# config/routes.rb&lt;br /&gt;
*# app/assets/stylesheets/table_sorter.scss&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Created Files===&lt;br /&gt;
*# app/views/assessment360/course_student_grade_summary.html.erb&lt;br /&gt;
*# spec/controllers/assessment360_controller_spec.rb&lt;br /&gt;
*# spec/features/course_student_grade_summary_spec.rb&lt;br /&gt;
&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
All changes were made in the file assessment370controller.rb&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can. Here are videos of each set of tests running successfully.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/PqpenMq_F2U Assessment360 Controller Tests Video]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/3e42Zi1C3_0 Grade Summary by Student Feature Tests Video]&lt;br /&gt;
&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
The controller we test is the assessment360_controller.rb, particularly the course_student_grade_summary function. Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the instance variables provided to the view is instantiated, but not concern ourselves too much with what the values are (these would be tested by the unit tests for the manu models we query in this method.) This is identified as a best practice for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
Here is an image of part of our Controller tests, showing how we handle the case where a course doesn't have any students.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the controller function.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests2.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the tests which verify that the controller instantiates the view's instance variables.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests3.png]]&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the content-check tests for this feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test2.png]]&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120855</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120855"/>
		<updated>2018-11-24T20:22:39Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Added list of modified and created files.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Use Case UML Activity Diagram==&lt;br /&gt;
This is the procedure for accessing the Grade Summary by Student view. It's not too complicated, but our reviewers really wanted some sweet UML action.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_uml.png]]&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===Modified Files===&lt;br /&gt;
*# app/assets/javascripts/tree_display.jsx&lt;br /&gt;
*# app/controllers/assessment360_controller.rb&lt;br /&gt;
*# config/routes.rb&lt;br /&gt;
*# app/assets/stylesheets/table_sorter.scss&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Created Files===&lt;br /&gt;
*# app/views/assessment360/course_student_grade_summary.html.erb&lt;br /&gt;
*# spec/controllers/assessment360_controller_spec.rb&lt;br /&gt;
*# spec/features/course_student_grade_summary_spec.rb&lt;br /&gt;
&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
All changes were made in the file assessment370controller.rb&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can. Here are videos of each set of tests running successfully.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/PqpenMq_F2U Assessment360 Controller Tests Video]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/3e42Zi1C3_0 Grade Summary by Student Feature Tests Video]&lt;br /&gt;
&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
The controller we test is the assessment360_controller.rb, particularly the course_student_grade_summary function. Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the instance variables provided to the view is instantiated, but not concern ourselves too much with what the values are (these would be tested by the unit tests for the manu models we query in this method.) This is identified as a best practice for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
Here is an image of part of our Controller tests, showing how we handle the case where a course doesn't have any students.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the controller function.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests2.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the tests which verify that the controller instantiates the view's instance variables.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests3.png]]&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the content-check tests for this feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test2.png]]&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120854</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120854"/>
		<updated>2018-11-24T20:11:32Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: added affected file.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Use Case UML Activity Diagram==&lt;br /&gt;
This is the procedure for accessing the Grade Summary by Student view. It's not too complicated, but our reviewers really wanted some sweet UML action.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_uml.png]]&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
All changes were made in the file assessment370controller.rb&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can. Here are videos of each set of tests running successfully.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/PqpenMq_F2U Assessment360 Controller Tests Video]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/3e42Zi1C3_0 Grade Summary by Student Feature Tests Video]&lt;br /&gt;
&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
The controller we test is the assessment360_controller.rb, particularly the course_student_grade_summary function. Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the instance variables provided to the view is instantiated, but not concern ourselves too much with what the values are (these would be tested by the unit tests for the manu models we query in this method.) This is identified as a best practice for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
Here is an image of part of our Controller tests, showing how we handle the case where a course doesn't have any students.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the controller function.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests2.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the tests which verify that the controller instantiates the view's instance variables.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests3.png]]&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the content-check tests for this feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test2.png]]&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120853</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120853"/>
		<updated>2018-11-24T20:10:29Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Added video links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Use Case UML Activity Diagram==&lt;br /&gt;
This is the procedure for accessing the Grade Summary by Student view. It's not too complicated, but our reviewers really wanted some sweet UML action.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_uml.png]]&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can. Here are videos of each set of tests running successfully.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/PqpenMq_F2U Assessment360 Controller Tests Video]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/3e42Zi1C3_0 Grade Summary by Student Feature Tests Video]&lt;br /&gt;
&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
The controller we test is the assessment360_controller.rb, particularly the course_student_grade_summary function. Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the instance variables provided to the view is instantiated, but not concern ourselves too much with what the values are (these would be tested by the unit tests for the manu models we query in this method.) This is identified as a best practice for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
Here is an image of part of our Controller tests, showing how we handle the case where a course doesn't have any students.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the controller function.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests2.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the tests which verify that the controller instantiates the view's instance variables.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests3.png]]&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the content-check tests for this feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test2.png]]&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120852</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120852"/>
		<updated>2018-11-24T20:06:28Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Added images to the Test Plan.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Use Case UML Activity Diagram==&lt;br /&gt;
This is the procedure for accessing the Grade Summary by Student view. It's not too complicated, but our reviewers really wanted some sweet UML action.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_uml.png]]&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can.&lt;br /&gt;
&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
The controller we test is the assessment360_controller.rb, particularly the course_student_grade_summary function. Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the instance variables provided to the view is instantiated, but not concern ourselves too much with what the values are (these would be tested by the unit tests for the manu models we query in this method.) This is identified as a best practice for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
Here is an image of part of our Controller tests, showing how we handle the case where a course doesn't have any students.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the controller function.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests2.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the tests which verify that the controller instantiates the view's instance variables.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_assessment360_controller_tests3.png]]&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;br /&gt;
&lt;br /&gt;
Here is an image of all of the objects which must be mocked in order to properly test the feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test1.png]]&lt;br /&gt;
&lt;br /&gt;
Here is an image of some of the content-check tests for this feature.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_feature_test2.png]]&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_feature_test2.png&amp;diff=120851</id>
		<title>File:Expertiza grade summary by student feature test2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_feature_test2.png&amp;diff=120851"/>
		<updated>2018-11-24T19:58:59Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Fall 2018 E1871 Grade Summary by Student Feature Test Part 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fall 2018 E1871 Grade Summary by Student Feature Test Part 2&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_feature_test1.png&amp;diff=120850</id>
		<title>File:Expertiza grade summary by student feature test1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_feature_test1.png&amp;diff=120850"/>
		<updated>2018-11-24T19:58:32Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Fall 2018 E1871 Grade Summary by Student Feature Test Part 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fall 2018 E1871 Grade Summary by Student Feature Test Part 1&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_assessment360_controller_tests3.png&amp;diff=120849</id>
		<title>File:Expertiza grade summary by student assessment360 controller tests3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_assessment360_controller_tests3.png&amp;diff=120849"/>
		<updated>2018-11-24T19:57:45Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Fall 2018 E1871 Assessment360 Controller Test Part 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fall 2018 E1871 Assessment360 Controller Test Part 3&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_assessment360_controller_tests2.png&amp;diff=120848</id>
		<title>File:Expertiza grade summary by student assessment360 controller tests2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_assessment360_controller_tests2.png&amp;diff=120848"/>
		<updated>2018-11-24T19:57:06Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Fall 2018 E1871 Assessment360 Controller Test Part 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fall 2018 E1871 Assessment360 Controller Test Part 2&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_assessment360_controller_tests1.png&amp;diff=120847</id>
		<title>File:Expertiza grade summary by student assessment360 controller tests1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_assessment360_controller_tests1.png&amp;diff=120847"/>
		<updated>2018-11-24T19:56:35Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Fall 2018 E1871 Assessment360 Controller Test Part 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fall 2018 E1871 Assessment360 Controller Test Part 1&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120151</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120151"/>
		<updated>2018-11-17T16:01:21Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: /* Use Case UML Activity Diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Use Case UML Activity Diagram==&lt;br /&gt;
This is the procedure for accessing the Grade Summary by Student view. It's not too complicated, but our reviewers really wanted some sweet UML action.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_uml.png]]&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can.&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the requests we make to the database will return objects of the appropriate datatype, and that the requests are successful. We'll also ensure that the route from the 360 Assessment icon takes us to the proper view. All of these are identified as best practices for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;br /&gt;
&lt;br /&gt;
Two specific elements we'll be testing for are:&lt;br /&gt;
*# Each assignment is displayed correctly.&lt;br /&gt;
*# Assignments with and without topics will be displayed correctly.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120150</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=120150"/>
		<updated>2018-11-17T16:01:05Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Added UML activity chart.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Use Case UML Activity Diagram==&lt;br /&gt;
This is the procedure for accessing the Grade Summary by Student view. It's not too complicated, but our reviewers really wanted some sweet UML action.&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_uml.png]]&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can.&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the requests we make to the database will return objects of the appropriate datatype, and that the requests are successful. We'll also ensure that the route from the 360 Assessment icon takes us to the proper view. All of these are identified as best practices for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;br /&gt;
&lt;br /&gt;
Two specific elements we'll be testing for are:&lt;br /&gt;
*# Each assignment is displayed correctly.&lt;br /&gt;
*# Assignments with and without topics will be displayed correctly.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_uml.png&amp;diff=120149</id>
		<title>File:Expertiza grade summary by student uml.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_uml.png&amp;diff=120149"/>
		<updated>2018-11-17T16:00:38Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: uploaded a new version of &amp;amp;quot;File:Expertiza grade summary by student uml.png&amp;amp;quot;: Forgot descriptions on conditional.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UML Activity Diagram for E1871 Fall 2018&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_uml.png&amp;diff=120148</id>
		<title>File:Expertiza grade summary by student uml.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_uml.png&amp;diff=120148"/>
		<updated>2018-11-17T15:55:51Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: uploaded a new version of &amp;amp;quot;File:Expertiza grade summary by student uml.png&amp;amp;quot;: Changed wording.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UML Activity Diagram for E1871 Fall 2018&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_uml.png&amp;diff=120146</id>
		<title>File:Expertiza grade summary by student uml.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_uml.png&amp;diff=120146"/>
		<updated>2018-11-17T15:53:49Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: UML Activity Diagram for E1871 Fall 2018&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UML Activity Diagram for E1871 Fall 2018&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119560</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119560"/>
		<updated>2018-11-13T02:34:33Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: /* Feature Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can.&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the requests we make to the database will return objects of the appropriate datatype, and that the requests are successful. We'll also ensure that the route from the 360 Assessment icon takes us to the proper view. All of these are identified as best practices for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;br /&gt;
&lt;br /&gt;
Two specific elements we'll be testing for are:&lt;br /&gt;
*# Each assignment is displayed correctly.&lt;br /&gt;
*# Assignments with and without topics will be displayed correctly.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119559</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119559"/>
		<updated>2018-11-13T02:34:26Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: /* Controller Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can.&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the requests we make to the database will return objects of the appropriate datatype, and that the requests are successful. We'll also ensure that the route from the 360 Assessment icon takes us to the proper view. All of these are identified as best practices for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119555</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119555"/>
		<updated>2018-11-13T02:32:03Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: /* The View */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student and by grades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can.&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the requests we make to the database will return objects of the appropriate datatype, and that the requests are successful. We'll also ensure that the route from the 360 Assessment icon takes us to the proper view. All of these are identified as best practices for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
Two specific elements we'll be testing for are:&lt;br /&gt;
*# Each assignment is displayed correctly.&lt;br /&gt;
*# Assignments with and without topics will be displayed correctly.&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119554</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119554"/>
		<updated>2018-11-13T02:31:21Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: /* Controller Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can.&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the requests we make to the database will return objects of the appropriate datatype, and that the requests are successful. We'll also ensure that the route from the 360 Assessment icon takes us to the proper view. All of these are identified as best practices for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
&lt;br /&gt;
Two specific elements we'll be testing for are:&lt;br /&gt;
*# Each assignment is displayed correctly.&lt;br /&gt;
*# Assignments with and without topics will be displayed correctly.&lt;br /&gt;
&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_rough_draft_view.png&amp;diff=119553</id>
		<title>File:Expertiza grade summary by student rough draft view.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_rough_draft_view.png&amp;diff=119553"/>
		<updated>2018-11-13T02:15:27Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: uploaded a new version of &amp;amp;quot;File:Expertiza grade summary by student rough draft view.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;E1871 draft view of grade summary by student.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119552</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119552"/>
		<updated>2018-11-13T02:14:46Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: /* The View */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends. We are also working on a way for the columns to be sorted by student &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can.&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the requests we make to the database will return objects of the appropriate datatype, and that the requests are successful. We'll also ensure that the route from the 360 Assessment icon takes us to the proper view. All of these are identified as best practices for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_manage_course_page_360_icon.png&amp;diff=119551</id>
		<title>File:Expertiza manage course page 360 icon.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_manage_course_page_360_icon.png&amp;diff=119551"/>
		<updated>2018-11-13T02:10:55Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: uploaded a new version of &amp;amp;quot;File:Expertiza manage course page 360 icon.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Image of Manage Course page demonstrating the location of the 360 degree icon.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_manage_course_page_360_icon.png&amp;diff=119550</id>
		<title>File:Expertiza manage course page 360 icon.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_manage_course_page_360_icon.png&amp;diff=119550"/>
		<updated>2018-11-13T02:10:15Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: uploaded a new version of &amp;amp;quot;File:Expertiza manage course page 360 icon.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Image of Manage Course page demonstrating the location of the 360 degree icon.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119549</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119549"/>
		<updated>2018-11-13T02:03:19Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: /* The View */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The total score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can.&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the requests we make to the database will return objects of the appropriate datatype, and that the requests are successful. We'll also ensure that the route from the 360 Assessment icon takes us to the proper view. All of these are identified as best practices for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119424</id>
		<title>CSC/ECE 517 Fall 2018 E1871 Grade Summary By Student</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018_E1871_Grade_Summary_By_Student&amp;diff=119424"/>
		<updated>2018-11-12T00:12:27Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Initialize E1871 Design Document page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1871. Grade Summary By Student==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Edward Gehringer(efg) (mentor)&lt;br /&gt;
* Dan Goslen (dwgoslen)&lt;br /&gt;
* Ishan Rohatgi (irohatg)&lt;br /&gt;
* Joe Giallo (jfgiall2)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to create a view which consolidates information related to each assignment for each student in a course in a single page. The objective was to ease the way in which final grades could be viewed, and to provide holistic insight into the performance of each student in a class.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
This feature was requested by Dr. Gehringer in order to ease the process of collecting student grades for a course for reporting at the end of the semester. This process took nearly an entire day last semester, and the time savings given by a consolidated view containing all this information could be immense. Dr. Gehringer mentioned believing that this information had been previously available under the 360 Assessment tab in the Manage Courses menu, but that functionality had since been broken by an update. The current view indicates that one_course_all_assignments should be available from the 360 Assessment menu, and this appears to have provided similar but less complete information to what Dr. Gehringer has requested in this project.&lt;br /&gt;
&lt;br /&gt;
Looking through the commit history, we determined that 360 Assessment had been removed intentionally in commit [https://github.com/ishanrohatgi0994/expertiza/commit/2c2160793b963d6efebd69bdcbb289edbd15f3f2#diff-0939dc014f523e60f6048caac18e470c 2c21607] for unknown reasons, then added back when Zhewei needed to count the total reviews done by each student in a semester in commit [https://github.com/ishanrohatgi0994/expertiza/commit/67d6ab405ddcba057421d4fa616872e48e83278b#diff-a3ce03cf4ce63e40acb2ae81c102dc2a 67d6ab4]. It was then removed again when [https://github.com/ishanrohatgi0994/expertiza/commit/1ebb5c29e2bd958505b1b57383657c328a2dd599#diff-0939dc014f523e60f6048caac18e470c 1ebb5c2] the committer determined that the functionality the page was providing could be gained by accessing View Aggregated Teammate and Meta-Reviews from the Manage Courses page.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
===The View===&lt;br /&gt;
The view for Grade Summary by Student must contain the following information, according to the requirements document and consultation with Dr. Gehringer.&lt;br /&gt;
*# Each student's name and id in a course.&lt;br /&gt;
*# Each assignment given to each student.&lt;br /&gt;
*# The topic name for each assignment.&lt;br /&gt;
*# The topic id for each assignment. &lt;br /&gt;
*# The grade for each assignment.&lt;br /&gt;
*# The peer review score for each assignment.&lt;br /&gt;
*# The average score of each student over all of their assignments.&lt;br /&gt;
&lt;br /&gt;
From the Manage Courses page in Expertiza, we intend to place our view behind the 360 Assessment icon for each course. Being able to view every student's complete grades for each assignment constitutes a 360 degree view of every student's performance in a course, and no functionality exists behind the icon currently, so this seems to be a logical choice for placement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_manage_course_page_360_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following image shows our initial LoFi sketch of the desired page. It shows our intention to list each student in a row, and to have each column be their assignments. We wanted to contain all the information about their assignment within the column, but did not decided on columns-within-columns until reviewing with Dr. Gehringer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_lofi_sketch.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We took Dr. Gehringer's feedback and have created the following rough prototype for the view. The data is absent, but this uses Expertiza's color scheme and style conventions. In this case, Topic Name and Topic Id are space-holders for real values, and Aggregate Score will not have sub-fields in the final draft. We are contemplating putting dividers between the columns, so it is easier to parse where each assignment begins and ends.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_grade_summary_by_student_rough_draft_view.png]]&lt;br /&gt;
&lt;br /&gt;
===The Controller===&lt;br /&gt;
&lt;br /&gt;
All of the information required in this view is present in the system: the controller for this view will simply need to make the appropriate queries to the models and database. We intend to create a hash of students given the particular course id, and then use the course id and the student id to retrieve the specific information about the assignments.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Because the primary attraction of this feature is a view, the typical unit testing is not as practical as it would be if we were making changes to underlying models. Similarly, there aren't any interactive elements in the view we're testing. As a result, we plan to test the controller and the feature in general as best we can.&lt;br /&gt;
===Controller Tests===&lt;br /&gt;
Controller tests are tricky to write, as they can't be sensitive to the model's implementation or how the information will be displayed. As such, we intend to test that each of the requests we make to the database will return objects of the appropriate datatype, and that the requests are successful. We'll also ensure that the route from the 360 Assessment icon takes us to the proper view. All of these are identified as best practices for controller tests in [https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers Ruby-On-Rails Guide - Functional Tests for Your Controllers].&lt;br /&gt;
===Feature Tests===&lt;br /&gt;
To verify that our view is correct, we'll implement some simple feature tests. Given some dummy students with dummy assignments with dummy fields, we expect that our view's page should display certain information. We'll check that upon navigation to our view, each element of data is present using the Rspec expectation 'to have_content'. In this way, we will verify that our view is performing its job.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_rough_draft_view.png&amp;diff=119423</id>
		<title>File:Expertiza grade summary by student rough draft view.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_rough_draft_view.png&amp;diff=119423"/>
		<updated>2018-11-11T23:34:07Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: E1871 draft view of grade summary by student.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;E1871 draft view of grade summary by student.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_lofi_sketch.png&amp;diff=119422</id>
		<title>File:Expertiza grade summary by student lofi sketch.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_grade_summary_by_student_lofi_sketch.png&amp;diff=119422"/>
		<updated>2018-11-11T23:29:33Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: lofi sketch for E1871&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lofi sketch for E1871&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_manage_course_page_360_icon.png&amp;diff=119421</id>
		<title>File:Expertiza manage course page 360 icon.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_manage_course_page_360_icon.png&amp;diff=119421"/>
		<updated>2018-11-11T23:23:29Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: uploaded a new version of &amp;amp;quot;File:Expertiza manage course page 360 icon.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Image of Manage Course page demonstrating the location of the 360 degree icon.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_manage_course_page_360_icon.png&amp;diff=119420</id>
		<title>File:Expertiza manage course page 360 icon.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Expertiza_manage_course_page_360_icon.png&amp;diff=119420"/>
		<updated>2018-11-11T23:21:44Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Image of Manage Course page demonstrating the location of the 360 degree icon.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Image of Manage Course page demonstrating the location of the 360 degree icon.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118669</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=118669"/>
		<updated>2018-11-04T21:06:54Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: &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;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118668</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=118668"/>
		<updated>2018-11-04T21:06:02Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: &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]&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;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117682</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117682"/>
		<updated>2018-10-30T23:15:23Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
===Menus and Nodes===&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
===Motivation===&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
In order to fully test menu.rb, we composed a total of 29 tests, 12 for the Node class and 17 for the Menu class.&lt;br /&gt;
*'''Node'''&lt;br /&gt;
*# Node#setup - Node#setup appropriately sets a Node's parent_id, name, id, and label to those of the MenuItem passed to it as an argument.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's controller_action_id becomes that ControllerAction's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's url become ControllerAction's url_to_use.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has a Controller, Node#setup(MenuItem) makes Node's site_controller_id equal to Controller's id.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has no url_to_use, Node#setup(MenuItem) makes Node's url equal to &amp;quot;/#{controller.name}/#{controller_action.name}&amp;quot;, the controller_action's name appended to the controller's name.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's content_page_id equal to ContentPage's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's url equal to ContentPage's name.&lt;br /&gt;
*# Node#site_controller - #site_controller sets the @site_controller instance variable.&lt;br /&gt;
*# Node#controller_action - #controller_action sets the @controller_action instance variable.&lt;br /&gt;
*# Node#content_page -  #content_page sets the @content_page instance variable.&lt;br /&gt;
*# Node#add_child - #add_child updates Node's children&lt;br /&gt;
*# Node#add_child - #add_child adds multiple children to Node's children.&lt;br /&gt;
*'''Menu'''&lt;br /&gt;
*# Menu#select - it returns if select(name) is not in @by_name&lt;br /&gt;
*# Menu#select - when name is in @by_name, Menu.selected is equal to name, @crumbs ends with the lowest level node and begins with the highest level node, and #selected? returns true for all nodes from the selected node to the root.&lt;br /&gt;
*# Menu#get_item - returns nil when id is not in @by_id&lt;br /&gt;
*# Menu#get_item - returns the equivalent item when id is in @by_id (item is not identical, but all components of item are the same).&lt;br /&gt;
*# Menu#get_menu - returns nil if level has no children.&lt;br /&gt;
*# Menu#get_menu - return children of a level if level has children.&lt;br /&gt;
*# Menu#get_menu - return all nodes except root if level is root.&lt;br /&gt;
*# Menu#selected - returns root if nothing has been selected.&lt;br /&gt;
*# Menu#selected - returns the name of the last selected menu_item.&lt;br /&gt;
*# Menu#selected? - if nothing has been selected, selected?(root_node) returns true.&lt;br /&gt;
*# Menu#selected? - if a node has been selected, selected? returns true for selected node and all its parents.&lt;br /&gt;
*# Menu#selected? - if there are no menu items corresponding to the permission's of the role provided to menu, selected? does not return true.&lt;br /&gt;
*# Menu#selected? - if MenuItem returns an empty array, selected? returns false for all input.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has length one.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has the root node's id.&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs has two crumbs (assuming lowest level is two).&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs are ordered from child to parent and all are present up to root.&lt;br /&gt;
&lt;br /&gt;
==Design and Impact==&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
Because of the nature of our assignment, our only design decisions were made with respect to making our Rspec tests as clean and readable as possible. We did not modify the application code itself. That being said, the Menu model is highly compositional, and it touches on MenuItem, ControllerAction, Controller, ContentPage, and Role (in addition to Node, which is in the same model). As a result, one of our main objectives was to make sure that we were transparent about all the different models which need to exist and how they interact with each other, in order for the Menu model to work.&lt;br /&gt;
&lt;br /&gt;
We address this issue by neatly creating all of the mock objects that we need in 'let' blocks before the tests, and explaining any of the tricky nuances (like how MenuItems and Roles interact using the role_(user_type).yml file). We also add additional comments to some of the more complex test cases (#select) to explain why we're expecting the particular side effects we're expecting, when our 'it' and 'context' block descriptions cannot easily convey all of the complexities.&lt;br /&gt;
&lt;br /&gt;
Here is an example of how we mock objects for the Node unit tests.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_e1853_mocking_objects_example.png]]&lt;br /&gt;
&lt;br /&gt;
Here is a snapshot of the Node unit tests, which shows proper utilization of Rspec best practices. We utilize short, coherent expectations. We use contexts to provide more information about the branches in a function that we are testing. We avoid binding ourselves to implementation by stubbing methods which are called in other classes.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_e1853_rspec_unit_test_examples.png]]&lt;br /&gt;
&lt;br /&gt;
===Impact===&lt;br /&gt;
In the future, it will be very easy to test whether changes to the menu model have broken the original functionality. It will also be easy to add more tests to raise our test suite's mutant-killing rank, as we have done the hard part of defining all the mock objects and prototyping the relations they all have with each other in this initial set of tests.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
We ended up with 100% code coverage, and mutation testing on our test suite yielded 90.21% mutant-slaying capabilities. We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
====Effected Files====&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
====Video of Test Suite Running====&lt;br /&gt;
A video of our test suite running properly can be found here!&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/PGRU7dfAsXk E1853 Menu Unit Tests Running (Hosted on Youtube)]&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Csc517_e1853_rspec_unit_test_examples.png&amp;diff=117681</id>
		<title>File:Csc517 e1853 rspec unit test examples.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Csc517_e1853_rspec_unit_test_examples.png&amp;diff=117681"/>
		<updated>2018-10-30T23:13:39Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: e1853- unit tests partial example for rspec with contexts and stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;e1853- unit tests partial example for rspec with contexts and stuff&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Csc517_e1853_mocking_objects_example.png&amp;diff=117680</id>
		<title>File:Csc517 e1853 mocking objects example.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Csc517_e1853_mocking_objects_example.png&amp;diff=117680"/>
		<updated>2018-10-30T23:13:05Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: e1853 fall 2018: broken down image for our object mocking methodology&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;e1853 fall 2018: broken down image for our object mocking methodology&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117679</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117679"/>
		<updated>2018-10-30T23:09:36Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: remove extraneous expertiza background section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
===Menus and Nodes===&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
===Motivation===&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
In order to fully test menu.rb, we composed a total of 29 tests, 12 for the Node class and 17 for the Menu class.&lt;br /&gt;
*'''Node'''&lt;br /&gt;
*# Node#setup - Node#setup appropriately sets a Node's parent_id, name, id, and label to those of the MenuItem passed to it as an argument.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's controller_action_id becomes that ControllerAction's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's url become ControllerAction's url_to_use.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has a Controller, Node#setup(MenuItem) makes Node's site_controller_id equal to Controller's id.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has no url_to_use, Node#setup(MenuItem) makes Node's url equal to &amp;quot;/#{controller.name}/#{controller_action.name}&amp;quot;, the controller_action's name appended to the controller's name.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's content_page_id equal to ContentPage's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's url equal to ContentPage's name.&lt;br /&gt;
*# Node#site_controller - #site_controller sets the @site_controller instance variable.&lt;br /&gt;
*# Node#controller_action - #controller_action sets the @controller_action instance variable.&lt;br /&gt;
*# Node#content_page -  #content_page sets the @content_page instance variable.&lt;br /&gt;
*# Node#add_child - #add_child updates Node's children&lt;br /&gt;
*# Node#add_child - #add_child adds multiple children to Node's children.&lt;br /&gt;
*'''Menu'''&lt;br /&gt;
*# Menu#select - it returns if select(name) is not in @by_name&lt;br /&gt;
*# Menu#select - when name is in @by_name, Menu.selected is equal to name, @crumbs ends with the lowest level node and begins with the highest level node, and #selected? returns true for all nodes from the selected node to the root.&lt;br /&gt;
*# Menu#get_item - returns nil when id is not in @by_id&lt;br /&gt;
*# Menu#get_item - returns the equivalent item when id is in @by_id (item is not identical, but all components of item are the same).&lt;br /&gt;
*# Menu#get_menu - returns nil if level has no children.&lt;br /&gt;
*# Menu#get_menu - return children of a level if level has children.&lt;br /&gt;
*# Menu#get_menu - return all nodes except root if level is root.&lt;br /&gt;
*# Menu#selected - returns root if nothing has been selected.&lt;br /&gt;
*# Menu#selected - returns the name of the last selected menu_item.&lt;br /&gt;
*# Menu#selected? - if nothing has been selected, selected?(root_node) returns true.&lt;br /&gt;
*# Menu#selected? - if a node has been selected, selected? returns true for selected node and all its parents.&lt;br /&gt;
*# Menu#selected? - if there are no menu items corresponding to the permission's of the role provided to menu, selected? does not return true.&lt;br /&gt;
*# Menu#selected? - if MenuItem returns an empty array, selected? returns false for all input.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has length one.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has the root node's id.&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs has two crumbs (assuming lowest level is two).&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs are ordered from child to parent and all are present up to root.&lt;br /&gt;
&lt;br /&gt;
==Design and Impact==&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
Because of the nature of our assignment, our only design decisions were made with respect to making our Rspec tests as clean and readable as possible. We did not modify the application code itself. That being said, the Menu model is highly compositional, and it touches on MenuItem, ControllerAction, Controller, ContentPage, and Role (in addition to Node, which is in the same model). As a result, one of our main objectives was to make sure that we were transparent about all the different models which need to exist and how they interact with each other, in order for the Menu model to work.&lt;br /&gt;
&lt;br /&gt;
We address this issue by neatly creating all of the mock objects that we need in 'let' blocks before the tests, and explaining any of the tricky nuances (like how MenuItems and Roles interact using the role_(user_type).yml file). We also add additional comments to some of the more complex test cases (#select) to explain why we're expecting the particular side effects we're expecting, when our 'it' and 'context' block descriptions cannot easily convey all of the complexities.&lt;br /&gt;
&lt;br /&gt;
Here is a snapshot of the Node unit tests, which shows proper utilization of Rspec best practices. We define all of our necessary mock objects. We utilize short, coherent expectations. We use contexts to provide more information about the branches in a function that we are testing. We avoid binding ourselves to implementation by stubbing methods which are called in other classes.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_menu_unit_tests.png]]&lt;br /&gt;
&lt;br /&gt;
===Impact===&lt;br /&gt;
In the future, it will be very easy to test whether changes to the menu model have broken the original functionality. It will also be easy to add more tests to raise our test suite's mutant-killing rank, as we have done the hard part of defining all the mock objects and prototyping the relations they all have with each other in this initial set of tests.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
We ended up with 100% code coverage, and mutation testing on our test suite yielded 90.21% mutant-slaying capabilities. We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
====Effected Files====&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
====Video of Test Suite Running====&lt;br /&gt;
A video of our test suite running properly can be found here!&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/PGRU7dfAsXk E1853 Menu Unit Tests Running (Hosted on Youtube)]&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117561</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117561"/>
		<updated>2018-10-27T17:11:19Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: /* Video of Test Suite Running */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
===Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source web application based on [http://rubyonrails.org/ Ruby on Rails] framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.&lt;br /&gt;
&lt;br /&gt;
===Menus and Nodes===&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
===Motivation===&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
In order to fully test menu.rb, we composed a total of 29 tests, 12 for the Node class and 17 for the Menu class.&lt;br /&gt;
*'''Node'''&lt;br /&gt;
*# Node#setup - Node#setup appropriately sets a Node's parent_id, name, id, and label to those of the MenuItem passed to it as an argument.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's controller_action_id becomes that ControllerAction's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's url become ControllerAction's url_to_use.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has a Controller, Node#setup(MenuItem) makes Node's site_controller_id equal to Controller's id.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has no url_to_use, Node#setup(MenuItem) makes Node's url equal to &amp;quot;/#{controller.name}/#{controller_action.name}&amp;quot;, the controller_action's name appended to the controller's name.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's content_page_id equal to ContentPage's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's url equal to ContentPage's name.&lt;br /&gt;
*# Node#site_controller - #site_controller sets the @site_controller instance variable.&lt;br /&gt;
*# Node#controller_action - #controller_action sets the @controller_action instance variable.&lt;br /&gt;
*# Node#content_page -  #content_page sets the @content_page instance variable.&lt;br /&gt;
*# Node#add_child - #add_child updates Node's children&lt;br /&gt;
*# Node#add_child - #add_child adds multiple children to Node's children.&lt;br /&gt;
*'''Menu'''&lt;br /&gt;
*# Menu#select - it returns if select(name) is not in @by_name&lt;br /&gt;
*# Menu#select - when name is in @by_name, Menu.selected is equal to name, @crumbs ends with the lowest level node and begins with the highest level node, and #selected? returns true for all nodes from the selected node to the root.&lt;br /&gt;
*# Menu#get_item - returns nil when id is not in @by_id&lt;br /&gt;
*# Menu#get_item - returns the equivalent item when id is in @by_id (item is not identical, but all components of item are the same).&lt;br /&gt;
*# Menu#get_menu - returns nil if level has no children.&lt;br /&gt;
*# Menu#get_menu - return children of a level if level has children.&lt;br /&gt;
*# Menu#get_menu - return all nodes except root if level is root.&lt;br /&gt;
*# Menu#selected - returns root if nothing has been selected.&lt;br /&gt;
*# Menu#selected - returns the name of the last selected menu_item.&lt;br /&gt;
*# Menu#selected? - if nothing has been selected, selected?(root_node) returns true.&lt;br /&gt;
*# Menu#selected? - if a node has been selected, selected? returns true for selected node and all its parents.&lt;br /&gt;
*# Menu#selected? - if there are no menu items corresponding to the permission's of the role provided to menu, selected? does not return true.&lt;br /&gt;
*# Menu#selected? - if MenuItem returns an empty array, selected? returns false for all input.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has length one.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has the root node's id.&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs has two crumbs (assuming lowest level is two).&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs are ordered from child to parent and all are present up to root.&lt;br /&gt;
&lt;br /&gt;
==Design and Impact==&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
Because of the nature of our assignment, our only design decisions were made with respect to making our Rspec tests as clean and readable as possible. We did not modify the application code itself. That being said, the Menu model is highly compositional, and it touches on MenuItem, ControllerAction, Controller, ContentPage, and Role (in addition to Node, which is in the same model). As a result, one of our main objectives was to make sure that we were transparent about all the different models which need to exist and how they interact with each other, in order for the Menu model to work.&lt;br /&gt;
&lt;br /&gt;
We address this issue by neatly creating all of the mock objects that we need in 'let' blocks before the tests, and explaining any of the tricky nuances (like how MenuItems and Roles interact using the role_(user_type).yml file). We also add additional comments to some of the more complex test cases (#select) to explain why we're expecting the particular side effects we're expecting, when our 'it' and 'context' block descriptions cannot easily convey all of the complexities.&lt;br /&gt;
&lt;br /&gt;
Here is a snapshot of the Node unit tests, which shows proper utilization of Rspec best practices. We define all of our necessary mock objects. We utilize short, coherent expectations. We use contexts to provide more information about the branches in a function that we are testing. We avoid binding ourselves to implementation by stubbing methods which are called in other classes.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_menu_unit_tests.png]]&lt;br /&gt;
&lt;br /&gt;
===Impact===&lt;br /&gt;
In the future, it will be very easy to test whether changes to the menu model have broken the original functionality. It will also be easy to add more tests to raise our test suite's mutant-killing rank, as we have done the hard part of defining all the mock objects and prototyping the relations they all have with each other in this initial set of tests.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
We ended up with 100% code coverage, and mutation testing on our test suite yielded 90.21% mutant-slaying capabilities. We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
====Effected Files====&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
====Video of Test Suite Running====&lt;br /&gt;
A video of our test suite running properly can be found here!&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/PGRU7dfAsXk E1853 Menu Unit Tests Running (Hosted on Youtube)]&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117560</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117560"/>
		<updated>2018-10-27T17:04:16Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
===Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source web application based on [http://rubyonrails.org/ Ruby on Rails] framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.&lt;br /&gt;
&lt;br /&gt;
===Menus and Nodes===&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
===Motivation===&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
In order to fully test menu.rb, we composed a total of 29 tests, 12 for the Node class and 17 for the Menu class.&lt;br /&gt;
*'''Node'''&lt;br /&gt;
*# Node#setup - Node#setup appropriately sets a Node's parent_id, name, id, and label to those of the MenuItem passed to it as an argument.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's controller_action_id becomes that ControllerAction's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's url become ControllerAction's url_to_use.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has a Controller, Node#setup(MenuItem) makes Node's site_controller_id equal to Controller's id.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has no url_to_use, Node#setup(MenuItem) makes Node's url equal to &amp;quot;/#{controller.name}/#{controller_action.name}&amp;quot;, the controller_action's name appended to the controller's name.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's content_page_id equal to ContentPage's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's url equal to ContentPage's name.&lt;br /&gt;
*# Node#site_controller - #site_controller sets the @site_controller instance variable.&lt;br /&gt;
*# Node#controller_action - #controller_action sets the @controller_action instance variable.&lt;br /&gt;
*# Node#content_page -  #content_page sets the @content_page instance variable.&lt;br /&gt;
*# Node#add_child - #add_child updates Node's children&lt;br /&gt;
*# Node#add_child - #add_child adds multiple children to Node's children.&lt;br /&gt;
*'''Menu'''&lt;br /&gt;
*# Menu#select - it returns if select(name) is not in @by_name&lt;br /&gt;
*# Menu#select - when name is in @by_name, Menu.selected is equal to name, @crumbs ends with the lowest level node and begins with the highest level node, and #selected? returns true for all nodes from the selected node to the root.&lt;br /&gt;
*# Menu#get_item - returns nil when id is not in @by_id&lt;br /&gt;
*# Menu#get_item - returns the equivalent item when id is in @by_id (item is not identical, but all components of item are the same).&lt;br /&gt;
*# Menu#get_menu - returns nil if level has no children.&lt;br /&gt;
*# Menu#get_menu - return children of a level if level has children.&lt;br /&gt;
*# Menu#get_menu - return all nodes except root if level is root.&lt;br /&gt;
*# Menu#selected - returns root if nothing has been selected.&lt;br /&gt;
*# Menu#selected - returns the name of the last selected menu_item.&lt;br /&gt;
*# Menu#selected? - if nothing has been selected, selected?(root_node) returns true.&lt;br /&gt;
*# Menu#selected? - if a node has been selected, selected? returns true for selected node and all its parents.&lt;br /&gt;
*# Menu#selected? - if there are no menu items corresponding to the permission's of the role provided to menu, selected? does not return true.&lt;br /&gt;
*# Menu#selected? - if MenuItem returns an empty array, selected? returns false for all input.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has length one.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has the root node's id.&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs has two crumbs (assuming lowest level is two).&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs are ordered from child to parent and all are present up to root.&lt;br /&gt;
&lt;br /&gt;
==Design and Impact==&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
Because of the nature of our assignment, our only design decisions were made with respect to making our Rspec tests as clean and readable as possible. We did not modify the application code itself. That being said, the Menu model is highly compositional, and it touches on MenuItem, ControllerAction, Controller, ContentPage, and Role (in addition to Node, which is in the same model). As a result, one of our main objectives was to make sure that we were transparent about all the different models which need to exist and how they interact with each other, in order for the Menu model to work.&lt;br /&gt;
&lt;br /&gt;
We address this issue by neatly creating all of the mock objects that we need in 'let' blocks before the tests, and explaining any of the tricky nuances (like how MenuItems and Roles interact using the role_(user_type).yml file). We also add additional comments to some of the more complex test cases (#select) to explain why we're expecting the particular side effects we're expecting, when our 'it' and 'context' block descriptions cannot easily convey all of the complexities.&lt;br /&gt;
&lt;br /&gt;
Here is a snapshot of the Node unit tests, which shows proper utilization of Rspec best practices. We define all of our necessary mock objects. We utilize short, coherent expectations. We use contexts to provide more information about the branches in a function that we are testing. We avoid binding ourselves to implementation by stubbing methods which are called in other classes.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_menu_unit_tests.png]]&lt;br /&gt;
&lt;br /&gt;
===Impact===&lt;br /&gt;
In the future, it will be very easy to test whether changes to the menu model have broken the original functionality. It will also be easy to add more tests to raise our test suite's mutant-killing rank, as we have done the hard part of defining all the mock objects and prototyping the relations they all have with each other in this initial set of tests.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
We ended up with 100% code coverage, and mutation testing on our test suite yielded 90.21% mutant-slaying capabilities. We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
====Effected Files====&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
====Video of Test Suite Running====&lt;br /&gt;
A video of our test suite running properly can be found here!&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117559</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117559"/>
		<updated>2018-10-27T17:04:02Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: More Formatting. Like literally just so much.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
===Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source web application based on [http://rubyonrails.org/ Ruby on Rails] framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.&lt;br /&gt;
&lt;br /&gt;
===Menus and Nodes===&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
===Motivation===&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
In order to fully test menu.rb, we composed a total of 29 tests, 12 for the Node class and 17 for the Menu class.&lt;br /&gt;
*'''Node'''&lt;br /&gt;
*# Node#setup - Node#setup appropriately sets a Node's parent_id, name, id, and label to those of the MenuItem passed to it as an argument.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's controller_action_id becomes that ControllerAction's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's url become ControllerAction's url_to_use.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has a Controller, Node#setup(MenuItem) makes Node's site_controller_id equal to Controller's id.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has no url_to_use, Node#setup(MenuItem) makes Node's url equal to &amp;quot;/#{controller.name}/#{controller_action.name}&amp;quot;, the controller_action's name appended to the controller's name.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's content_page_id equal to ContentPage's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's url equal to ContentPage's name.&lt;br /&gt;
*# Node#site_controller - #site_controller sets the @site_controller instance variable.&lt;br /&gt;
*# Node#controller_action - #controller_action sets the @controller_action instance variable.&lt;br /&gt;
*# Node#content_page -  #content_page sets the @content_page instance variable.&lt;br /&gt;
*# Node#add_child - #add_child updates Node's children&lt;br /&gt;
*# Node#add_child - #add_child adds multiple children to Node's children.&lt;br /&gt;
*'''Menu'''&lt;br /&gt;
*# Menu#select - it returns if select(name) is not in @by_name&lt;br /&gt;
*# Menu#select - when name is in @by_name, Menu.selected is equal to name, @crumbs ends with the lowest level node and begins with the highest level node, and #selected? returns true for all nodes from the selected node to the root.&lt;br /&gt;
*# Menu#get_item - returns nil when id is not in @by_id&lt;br /&gt;
*# Menu#get_item - returns the equivalent item when id is in @by_id (item is not identical, but all components of item are the same).&lt;br /&gt;
*# Menu#get_menu - returns nil if level has no children.&lt;br /&gt;
*# Menu#get_menu - return children of a level if level has children.&lt;br /&gt;
*# Menu#get_menu - return all nodes except root if level is root.&lt;br /&gt;
*# Menu#selected - returns root if nothing has been selected.&lt;br /&gt;
*# Menu#selected - returns the name of the last selected menu_item.&lt;br /&gt;
*# Menu#selected? - if nothing has been selected, selected?(root_node) returns true.&lt;br /&gt;
*# Menu#selected? - if a node has been selected, selected? returns true for selected node and all its parents.&lt;br /&gt;
*# Menu#selected? - if there are no menu items corresponding to the permission's of the role provided to menu, selected? does not return true.&lt;br /&gt;
*# Menu#selected? - if MenuItem returns an empty array, selected? returns false for all input.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has length one.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has the root node's id.&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs has two crumbs (assuming lowest level is two).&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs are ordered from child to parent and all are present up to root.&lt;br /&gt;
&lt;br /&gt;
==Design and Impact==&lt;br /&gt;
&lt;br /&gt;
===Design===&lt;br /&gt;
Because of the nature of our assignment, our only design decisions were made with respect to making our Rspec tests as clean and readable as possible. We did not modify the application code itself. That being said, the Menu model is highly compositional, and it touches on MenuItem, ControllerAction, Controller, ContentPage, and Role (in addition to Node, which is in the same model). As a result, one of our main objectives was to make sure that we were transparent about all the different models which need to exist and how they interact with each other, in order for the Menu model to work.&lt;br /&gt;
&lt;br /&gt;
We address this issue by neatly creating all of the mock objects that we need in 'let' blocks before the tests, and explaining any of the tricky nuances (like how MenuItems and Roles interact using the role_(user_type).yml file). We also add additional comments to some of the more complex test cases (#select) to explain why we're expecting the particular side effects we're expecting, when our 'it' and 'context' block descriptions cannot easily convey all of the complexities.&lt;br /&gt;
&lt;br /&gt;
Here is a snapshot of the Node unit tests, which shows proper utilization of Rspec best practices. We define all of our necessary mock objects. We utilize short, coherent expectations. We use contexts to provide more information about the branches in a function that we are testing. We avoid binding ourselves to implementation by stubbing methods which are called in other classes.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_menu_unit_tests.png]]&lt;br /&gt;
&lt;br /&gt;
===Impact===&lt;br /&gt;
In the future, it will be very easy to test whether changes to the menu model have broken the original functionality. It will also be easy to add more tests to raise our test suite's mutant-killing rank, as we have done the hard part of defining all the mock objects and prototyping the relations they all have with each other in this initial set of tests.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
We ended up with 100% code coverage, and mutation testing on our test suite yielded 90.21% mutant-slaying capabilities. We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
====Effected Files====&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
====Video of Test Suite Running====&lt;br /&gt;
A video of our test suite running properly can be found here!&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117558</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117558"/>
		<updated>2018-10-27T17:01:32Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
===Task and Results===&lt;br /&gt;
====Task====&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model. &lt;br /&gt;
&lt;br /&gt;
====Results====&lt;br /&gt;
We ended up with 100% code coverage, and mutation testing on our test suite yielded 90.21% mutant-slaying capabilities. We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
====Effected Files====&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
====Video of Test Suite Running====&lt;br /&gt;
A video of our test suite running properly can be found here!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====Expertiza====&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source web application based on [http://rubyonrails.org/ Ruby on Rails] framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.&lt;br /&gt;
&lt;br /&gt;
====Menus and Nodes====&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
====Motivation====&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
In order to fully test menu.rb, we composed a total of 29 tests, 12 for the Node class and 17 for the Menu class.&lt;br /&gt;
*'''Node'''&lt;br /&gt;
*# Node#setup - Node#setup appropriately sets a Node's parent_id, name, id, and label to those of the MenuItem passed to it as an argument.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's controller_action_id becomes that ControllerAction's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's url become ControllerAction's url_to_use.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has a Controller, Node#setup(MenuItem) makes Node's site_controller_id equal to Controller's id.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has no url_to_use, Node#setup(MenuItem) makes Node's url equal to &amp;quot;/#{controller.name}/#{controller_action.name}&amp;quot;, the controller_action's name appended to the controller's name.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's content_page_id equal to ContentPage's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's url equal to ContentPage's name.&lt;br /&gt;
*# Node#site_controller - #site_controller sets the @site_controller instance variable.&lt;br /&gt;
*# Node#controller_action - #controller_action sets the @controller_action instance variable.&lt;br /&gt;
*# Node#content_page -  #content_page sets the @content_page instance variable.&lt;br /&gt;
*# Node#add_child - #add_child updates Node's children&lt;br /&gt;
*# Node#add_child - #add_child adds multiple children to Node's children.&lt;br /&gt;
*'''Menu'''&lt;br /&gt;
*# Menu#select - it returns if select(name) is not in @by_name&lt;br /&gt;
*# Menu#select - when name is in @by_name, Menu.selected is equal to name, @crumbs ends with the lowest level node and begins with the highest level node, and #selected? returns true for all nodes from the selected node to the root.&lt;br /&gt;
*# Menu#get_item - returns nil when id is not in @by_id&lt;br /&gt;
*# Menu#get_item - returns the equivalent item when id is in @by_id (item is not identical, but all components of item are the same).&lt;br /&gt;
*# Menu#get_menu - returns nil if level has no children.&lt;br /&gt;
*# Menu#get_menu - return children of a level if level has children.&lt;br /&gt;
*# Menu#get_menu - return all nodes except root if level is root.&lt;br /&gt;
*# Menu#selected - returns root if nothing has been selected.&lt;br /&gt;
*# Menu#selected - returns the name of the last selected menu_item.&lt;br /&gt;
*# Menu#selected? - if nothing has been selected, selected?(root_node) returns true.&lt;br /&gt;
*# Menu#selected? - if a node has been selected, selected? returns true for selected node and all its parents.&lt;br /&gt;
*# Menu#selected? - if there are no menu items corresponding to the permission's of the role provided to menu, selected? does not return true.&lt;br /&gt;
*# Menu#selected? - if MenuItem returns an empty array, selected? returns false for all input.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has length one.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has the root node's id.&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs has two crumbs (assuming lowest level is two).&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs are ordered from child to parent and all are present up to root.&lt;br /&gt;
&lt;br /&gt;
===Design and Impact===&lt;br /&gt;
&lt;br /&gt;
====Design====&lt;br /&gt;
Because of the nature of our assignment, our only design decisions were made with respect to making our Rspec tests as clean and readable as possible. We did not modify the application code itself. That being said, the Menu model is highly compositional, and it touches on MenuItem, ControllerAction, Controller, ContentPage, and Role (in addition to Node, which is in the same model). As a result, one of our main objectives was to make sure that we were transparent about all the different models which need to exist and how they interact with each other, in order for the Menu model to work.&lt;br /&gt;
&lt;br /&gt;
We address this issue by neatly creating all of the mock objects that we need in 'let' blocks before the tests, and explaining any of the tricky nuances (like how MenuItems and Roles interact using the role_(user_type).yml file). We also add additional comments to some of the more complex test cases (#select) to explain why we're expecting the particular side effects we're expecting, when our 'it' and 'context' block descriptions cannot easily convey all of the complexities.&lt;br /&gt;
&lt;br /&gt;
Here is a snapshot of the Node unit tests, which shows proper utilization of Rspec best practices. We define all of our necessary mock objects. We utilize short, coherent expectations. We use contexts to provide more information about the branches in a function that we are testing. We avoid binding ourselves to implementation by stubbing methods which are called in other classes.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_menu_unit_tests.png]]&lt;br /&gt;
&lt;br /&gt;
====Impact====&lt;br /&gt;
In the future, it will be very easy to test whether changes to the menu model have broken the original functionality. It will also be easy to add more tests to raise our test suite's mutant-killing rank, as we have done the hard part of defining all the mock objects and prototyping the relations they all have with each other in this initial set of tests.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117557</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117557"/>
		<updated>2018-10-27T17:01:02Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Fixed moooooore formatting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
===Task and Results===&lt;br /&gt;
====Task====&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model. &lt;br /&gt;
&lt;br /&gt;
====Results====&lt;br /&gt;
We ended up with 100% code coverage, and mutation testing on our test suite yielded 90.21% mutant-slaying capabilities. We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
====Effected Files====&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
====Video of Test Suite Running====&lt;br /&gt;
A video of our test suite running properly can be found here!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====Expertiza====&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source web application based on [http://rubyonrails.org/ Ruby on Rails] framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.&lt;br /&gt;
&lt;br /&gt;
====Menus and Nodes====&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
====Motivation====&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
In order to fully test menu.rb, we composed a total of 29 tests, 12 for the Node class and 17 for the Menu class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Node'''&lt;br /&gt;
*# Node#setup - Node#setup appropriately sets a Node's parent_id, name, id, and label to those of the MenuItem passed to it as an argument.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's controller_action_id becomes that ControllerAction's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's url become ControllerAction's url_to_use.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has a Controller, Node#setup(MenuItem) makes Node's site_controller_id equal to Controller's id.&lt;br /&gt;
*# Node#setup - When MenuItem's ControllerAction has no url_to_use, Node#setup(MenuItem) makes Node's url equal to &amp;quot;/#{controller.name}/#{controller_action.name}&amp;quot;, the controller_action's name appended to the controller's name.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's content_page_id equal to ContentPage's id.&lt;br /&gt;
*# Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's url equal to ContentPage's name.&lt;br /&gt;
*# Node#site_controller - #site_controller sets the @site_controller instance variable.&lt;br /&gt;
*# Node#controller_action - #controller_action sets the @controller_action instance variable.&lt;br /&gt;
*# Node#content_page -  #content_page sets the @content_page instance variable.&lt;br /&gt;
*# Node#add_child - #add_child updates Node's children&lt;br /&gt;
*# Node#add_child - #add_child adds multiple children to Node's children.&lt;br /&gt;
*'''Menu'''&lt;br /&gt;
*# Menu#select - it returns if select(name) is not in @by_name&lt;br /&gt;
*# Menu#select - when name is in @by_name, Menu.selected is equal to name, @crumbs ends with the lowest level node and begins with the highest level node, and #selected? returns true for all nodes from the selected node to the root.&lt;br /&gt;
*# Menu#get_item - returns nil when id is not in @by_id&lt;br /&gt;
*# Menu#get_item - returns the equivalent item when id is in @by_id (item is not identical, but all components of item are the same).&lt;br /&gt;
*# Menu#get_menu - returns nil if level has no children.&lt;br /&gt;
*# Menu#get_menu - return children of a level if level has children.&lt;br /&gt;
*# Menu#get_menu - return all nodes except root if level is root.&lt;br /&gt;
*# Menu#selected - returns root if nothing has been selected.&lt;br /&gt;
*# Menu#selected - returns the name of the last selected menu_item.&lt;br /&gt;
*# Menu#selected? - if nothing has been selected, selected?(root_node) returns true.&lt;br /&gt;
*# Menu#selected? - if a node has been selected, selected? returns true for selected node and all its parents.&lt;br /&gt;
*# Menu#selected? - if there are no menu items corresponding to the permission's of the role provided to menu, selected? does not return true.&lt;br /&gt;
*# Menu#selected? - if MenuItem returns an empty array, selected? returns false for all input.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has length one.&lt;br /&gt;
*# Menu#crumbs - When top-level menu item is selected, crumbs has the root node's id.&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs has two crumbs (assuming lowest level is two).&lt;br /&gt;
*# Menu#crumbs - When bottom-level menu item is selected, crumbs are ordered from child to parent and all are present up to root.&lt;br /&gt;
&lt;br /&gt;
===Design and Impact===&lt;br /&gt;
&lt;br /&gt;
====Design====&lt;br /&gt;
Because of the nature of our assignment, our only design decisions were made with respect to making our Rspec tests as clean and readable as possible. We did not modify the application code itself. That being said, the Menu model is highly compositional, and it touches on MenuItem, ControllerAction, Controller, ContentPage, and Role (in addition to Node, which is in the same model). As a result, one of our main objectives was to make sure that we were transparent about all the different models which need to exist and how they interact with each other, in order for the Menu model to work.&lt;br /&gt;
&lt;br /&gt;
We address this issue by neatly creating all of the mock objects that we need in 'let' blocks before the tests, and explaining any of the tricky nuances (like how MenuItems and Roles interact using the role_(user_type).yml file). We also add additional comments to some of the more complex test cases (#select) to explain why we're expecting the particular side effects we're expecting, when our 'it' and 'context' block descriptions cannot easily convey all of the complexities.&lt;br /&gt;
&lt;br /&gt;
Here is a snapshot of the Node unit tests, which shows proper utilization of Rspec best practices. We define all of our necessary mock objects. We utilize short, coherent expectations. We use contexts to provide more information about the branches in a function that we are testing. We avoid binding ourselves to implementation by stubbing methods which are called in other classes.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_menu_unit_tests.png]]&lt;br /&gt;
&lt;br /&gt;
====Impact====&lt;br /&gt;
In the future, it will be very easy to test whether changes to the menu model have broken the original functionality. It will also be easy to add more tests to raise our test suite's mutant-killing rank, as we have done the hard part of defining all the mock objects and prototyping the relations they all have with each other in this initial set of tests.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117556</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117556"/>
		<updated>2018-10-27T16:54:54Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Fixed formatting typo.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
===Task and Results===&lt;br /&gt;
====Task====&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model. &lt;br /&gt;
&lt;br /&gt;
====Results====&lt;br /&gt;
We ended up with 100% code coverage, and mutation testing on our test suite yielded 90.21% mutant-slaying capabilities. We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
====Effected Files====&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
====Video of Test Suite Running====&lt;br /&gt;
A video of our test suite running properly can be found here!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====Expertiza====&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source web application based on [http://rubyonrails.org/ Ruby on Rails] framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.&lt;br /&gt;
&lt;br /&gt;
====Menus and Nodes====&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
====Motivation====&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
In order to fully test menu.rb, we composed a total of 29 tests, 12 for the Node class and 17 for the Menu class.&lt;br /&gt;
'''Node'''&lt;br /&gt;
1. Node#setup - Node#setup appropriately sets a Node's parent_id, name, id, and label to those of the MenuItem passed to it as an argument.&lt;br /&gt;
2. Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's controller_action_id becomes that ControllerAction's id.&lt;br /&gt;
3. Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's url become ControllerAction's url_to_use.&lt;br /&gt;
4. Node#setup - When MenuItem's ControllerAction has a Controller, Node#setup(MenuItem) makes Node's site_controller_id equal to Controller's id.&lt;br /&gt;
5. Node#setup - When MenuItem's ControllerAction has no url_to_use, Node#setup(MenuItem) makes Node's url equal to &amp;quot;/#{controller.name}/#{controller_action.name}&amp;quot;, the controller_action's name appended to the controller's name.&lt;br /&gt;
6. Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's content_page_id equal to ContentPage's id.&lt;br /&gt;
7. Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's url equal to ContentPage's name.&lt;br /&gt;
8. Node#site_controller - #site_controller sets the @site_controller instance variable.&lt;br /&gt;
9. Node#controller_action - #controller_action sets the @controller_action instance variable.&lt;br /&gt;
10. Node#content_page -  #content_page sets the @content_page instance variable.&lt;br /&gt;
11. Node#add_child - #add_child updates Node's children&lt;br /&gt;
12. Node#add_child - #add_child adds multiple children to Node's children.&lt;br /&gt;
'''Menu'''&lt;br /&gt;
1. Menu#select - it returns if select(name) is not in @by_name&lt;br /&gt;
2. Menu#select - when name is in @by_name, Menu.selected is equal to name, @crumbs ends with the lowest level node and begins with the highest level node, and #selected? returns true for all nodes from the selected node to the root.&lt;br /&gt;
3. Menu#get_item - returns nil when id is not in @by_id&lt;br /&gt;
4. Menu#get_item - returns the equivalent item when id is in @by_id (item is not identical, but all components of item are the same).&lt;br /&gt;
5. Menu#get_menu - returns nil if level has no children.&lt;br /&gt;
6. Menu#get_menu - return children of a level if level has children.&lt;br /&gt;
7. Menu#get_menu - return all nodes except root if level is root.&lt;br /&gt;
8. Menu#selected - returns root if nothing has been selected.&lt;br /&gt;
9. Menu#selected - returns the name of the last selected menu_item.&lt;br /&gt;
10. Menu#selected? - if nothing has been selected, selected?(root_node) returns true.&lt;br /&gt;
11. Menu#selected? - if a node has been selected, selected? returns true for selected node and all its parents.&lt;br /&gt;
12. Menu#selected? - if there are no menu items corresponding to the permission's of the role provided to menu, selected? does not return true.&lt;br /&gt;
13. Menu#selected? - if MenuItem returns an empty array, selected? returns false for all input.&lt;br /&gt;
14. Menu#crumbs - When top-level menu item is selected, crumbs has length one.&lt;br /&gt;
15. Menu#crumbs - When top-level menu item is selected, crumbs has the root node's id.&lt;br /&gt;
16. Menu#crumbs - When bottom-level menu item is selected, crumbs has two crumbs (assuming lowest level is two).&lt;br /&gt;
17. Menu#crumbs - When bottom-level menu item is selected, crumbs are ordered from child to parent and all are present up to root.&lt;br /&gt;
&lt;br /&gt;
===Design and Impact===&lt;br /&gt;
&lt;br /&gt;
====Design====&lt;br /&gt;
Because of the nature of our assignment, our only design decisions were made with respect to making our Rspec tests as clean and readable as possible. We did not modify the application code itself. That being said, the Menu model is highly compositional, and it touches on MenuItem, ControllerAction, Controller, ContentPage, and Role (in addition to Node, which is in the same model). As a result, one of our main objectives was to make sure that we were transparent about all the different models which need to exist and how they interact with each other, in order for the Menu model to work.&lt;br /&gt;
&lt;br /&gt;
We address this issue by neatly creating all of the mock objects that we need in 'let' blocks before the tests, and explaining any of the tricky nuances (like how MenuItems and Roles interact using the role_(user_type).yml file). We also add additional comments to some of the more complex test cases (#select) to explain why we're expecting the particular side effects we're expecting, when our 'it' and 'context' block descriptions cannot easily convey all of the complexities.&lt;br /&gt;
&lt;br /&gt;
Here is a snapshot of the Node unit tests, which shows proper utilization of Rspec best practices. We define all of our necessary mock objects. We utilize short, coherent expectations. We use contexts to provide more information about the branches in a function that we are testing. We avoid binding ourselves to implementation by stubbing methods which are called in other classes.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_menu_unit_tests.png]]&lt;br /&gt;
&lt;br /&gt;
====Impact====&lt;br /&gt;
In the future, it will be very easy to test whether changes to the menu model have broken the original functionality. It will also be easy to add more tests to raise our test suite's mutant-killing rank, as we have done the hard part of defining all the mock objects and prototyping the relations they all have with each other in this initial set of tests.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117554</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117554"/>
		<updated>2018-10-27T16:54:29Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Changed formatting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
===Task and Results===&lt;br /&gt;
====Task====&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model. &lt;br /&gt;
&lt;br /&gt;
====Results====&lt;br /&gt;
We ended up with 100% code coverage, and mutation testing on our test suite yielded 90.21% mutant-slaying capabilities. We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
====Effected Files====&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
====Video of Test Suite Running===&lt;br /&gt;
A video of our test suite running properly can be found here!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====Expertiza====&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source web application based on [http://rubyonrails.org/ Ruby on Rails] framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.&lt;br /&gt;
&lt;br /&gt;
====Menus and Nodes====&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
====Motivation====&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
In order to fully test menu.rb, we composed a total of 29 tests, 12 for the Node class and 17 for the Menu class.&lt;br /&gt;
'''Node'''&lt;br /&gt;
1. Node#setup - Node#setup appropriately sets a Node's parent_id, name, id, and label to those of the MenuItem passed to it as an argument.&lt;br /&gt;
2. Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's controller_action_id becomes that ControllerAction's id.&lt;br /&gt;
3. Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's url become ControllerAction's url_to_use.&lt;br /&gt;
4. Node#setup - When MenuItem's ControllerAction has a Controller, Node#setup(MenuItem) makes Node's site_controller_id equal to Controller's id.&lt;br /&gt;
5. Node#setup - When MenuItem's ControllerAction has no url_to_use, Node#setup(MenuItem) makes Node's url equal to &amp;quot;/#{controller.name}/#{controller_action.name}&amp;quot;, the controller_action's name appended to the controller's name.&lt;br /&gt;
6. Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's content_page_id equal to ContentPage's id.&lt;br /&gt;
7. Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's url equal to ContentPage's name.&lt;br /&gt;
8. Node#site_controller - #site_controller sets the @site_controller instance variable.&lt;br /&gt;
9. Node#controller_action - #controller_action sets the @controller_action instance variable.&lt;br /&gt;
10. Node#content_page -  #content_page sets the @content_page instance variable.&lt;br /&gt;
11. Node#add_child - #add_child updates Node's children&lt;br /&gt;
12. Node#add_child - #add_child adds multiple children to Node's children.&lt;br /&gt;
'''Menu'''&lt;br /&gt;
1. Menu#select - it returns if select(name) is not in @by_name&lt;br /&gt;
2. Menu#select - when name is in @by_name, Menu.selected is equal to name, @crumbs ends with the lowest level node and begins with the highest level node, and #selected? returns true for all nodes from the selected node to the root.&lt;br /&gt;
3. Menu#get_item - returns nil when id is not in @by_id&lt;br /&gt;
4. Menu#get_item - returns the equivalent item when id is in @by_id (item is not identical, but all components of item are the same).&lt;br /&gt;
5. Menu#get_menu - returns nil if level has no children.&lt;br /&gt;
6. Menu#get_menu - return children of a level if level has children.&lt;br /&gt;
7. Menu#get_menu - return all nodes except root if level is root.&lt;br /&gt;
8. Menu#selected - returns root if nothing has been selected.&lt;br /&gt;
9. Menu#selected - returns the name of the last selected menu_item.&lt;br /&gt;
10. Menu#selected? - if nothing has been selected, selected?(root_node) returns true.&lt;br /&gt;
11. Menu#selected? - if a node has been selected, selected? returns true for selected node and all its parents.&lt;br /&gt;
12. Menu#selected? - if there are no menu items corresponding to the permission's of the role provided to menu, selected? does not return true.&lt;br /&gt;
13. Menu#selected? - if MenuItem returns an empty array, selected? returns false for all input.&lt;br /&gt;
14. Menu#crumbs - When top-level menu item is selected, crumbs has length one.&lt;br /&gt;
15. Menu#crumbs - When top-level menu item is selected, crumbs has the root node's id.&lt;br /&gt;
16. Menu#crumbs - When bottom-level menu item is selected, crumbs has two crumbs (assuming lowest level is two).&lt;br /&gt;
17. Menu#crumbs - When bottom-level menu item is selected, crumbs are ordered from child to parent and all are present up to root.&lt;br /&gt;
&lt;br /&gt;
===Design and Impact===&lt;br /&gt;
&lt;br /&gt;
====Design====&lt;br /&gt;
Because of the nature of our assignment, our only design decisions were made with respect to making our Rspec tests as clean and readable as possible. We did not modify the application code itself. That being said, the Menu model is highly compositional, and it touches on MenuItem, ControllerAction, Controller, ContentPage, and Role (in addition to Node, which is in the same model). As a result, one of our main objectives was to make sure that we were transparent about all the different models which need to exist and how they interact with each other, in order for the Menu model to work.&lt;br /&gt;
&lt;br /&gt;
We address this issue by neatly creating all of the mock objects that we need in 'let' blocks before the tests, and explaining any of the tricky nuances (like how MenuItems and Roles interact using the role_(user_type).yml file). We also add additional comments to some of the more complex test cases (#select) to explain why we're expecting the particular side effects we're expecting, when our 'it' and 'context' block descriptions cannot easily convey all of the complexities.&lt;br /&gt;
&lt;br /&gt;
Here is a snapshot of the Node unit tests, which shows proper utilization of Rspec best practices. We define all of our necessary mock objects. We utilize short, coherent expectations. We use contexts to provide more information about the branches in a function that we are testing. We avoid binding ourselves to implementation by stubbing methods which are called in other classes.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_menu_unit_tests.png]]&lt;br /&gt;
&lt;br /&gt;
====Impact====&lt;br /&gt;
In the future, it will be very easy to test whether changes to the menu model have broken the original functionality. It will also be easy to add more tests to raise our test suite's mutant-killing rank, as we have done the hard part of defining all the mock objects and prototyping the relations they all have with each other in this initial set of tests.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117553</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117553"/>
		<updated>2018-10-27T16:52:49Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Filled out test plan, design choices, and impact.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
===Task and Results===&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model. We ended up with 100% code coverage, and mutation testing on our test suite yielded 90.21% mutant-slaying capabilities. We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
A video of our test suite running properly can be found here!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====Expertiza====&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source web application based on [http://rubyonrails.org/ Ruby on Rails] framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.&lt;br /&gt;
&lt;br /&gt;
====Menus and Nodes====&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
====Motivation====&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
In order to fully test menu.rb, we composed a total of 29 tests, 12 for the Node class and 17 for the Menu class.&lt;br /&gt;
'''Node'''&lt;br /&gt;
1. Node#setup - Node#setup appropriately sets a Node's parent_id, name, id, and label to those of the MenuItem passed to it as an argument.&lt;br /&gt;
2. Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's controller_action_id becomes that ControllerAction's id.&lt;br /&gt;
3. Node#setup - When MenuItem has a ControllerAction, Node#setup(MenuItem) makes Node's url become ControllerAction's url_to_use.&lt;br /&gt;
4. Node#setup - When MenuItem's ControllerAction has a Controller, Node#setup(MenuItem) makes Node's site_controller_id equal to Controller's id.&lt;br /&gt;
5. Node#setup - When MenuItem's ControllerAction has no url_to_use, Node#setup(MenuItem) makes Node's url equal to &amp;quot;/#{controller.name}/#{controller_action.name}&amp;quot;, the controller_action's name appended to the controller's name.&lt;br /&gt;
6. Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's content_page_id equal to ContentPage's id.&lt;br /&gt;
7. Node#setup - When MenuItem has a ContentPage, Node#setup(MenuItem) makes Node's url equal to ContentPage's name.&lt;br /&gt;
8. Node#site_controller - #site_controller sets the @site_controller instance variable.&lt;br /&gt;
9. Node#controller_action - #controller_action sets the @controller_action instance variable.&lt;br /&gt;
10. Node#content_page -  #content_page sets the @content_page instance variable.&lt;br /&gt;
11. Node#add_child - #add_child updates Node's children&lt;br /&gt;
12. Node#add_child - #add_child adds multiple children to Node's children.&lt;br /&gt;
'''Menu'''&lt;br /&gt;
1. Menu#select - it returns if select(name) is not in @by_name&lt;br /&gt;
2. Menu#select - when name is in @by_name, Menu.selected is equal to name, @crumbs ends with the lowest level node and begins with the highest level node, and #selected? returns true for all nodes from the selected node to the root.&lt;br /&gt;
3. Menu#get_item - returns nil when id is not in @by_id&lt;br /&gt;
4. Menu#get_item - returns the equivalent item when id is in @by_id (item is not identical, but all components of item are the same).&lt;br /&gt;
5. Menu#get_menu - returns nil if level has no children.&lt;br /&gt;
6. Menu#get_menu - return children of a level if level has children.&lt;br /&gt;
7. Menu#get_menu - return all nodes except root if level is root.&lt;br /&gt;
8. Menu#selected - returns root if nothing has been selected.&lt;br /&gt;
9. Menu#selected - returns the name of the last selected menu_item.&lt;br /&gt;
10. Menu#selected? - if nothing has been selected, selected?(root_node) returns true.&lt;br /&gt;
11. Menu#selected? - if a node has been selected, selected? returns true for selected node and all its parents.&lt;br /&gt;
12. Menu#selected? - if there are no menu items corresponding to the permission's of the role provided to menu, selected? does not return true.&lt;br /&gt;
13. Menu#selected? - if MenuItem returns an empty array, selected? returns false for all input.&lt;br /&gt;
14. Menu#crumbs - When top-level menu item is selected, crumbs has length one.&lt;br /&gt;
15. Menu#crumbs - When top-level menu item is selected, crumbs has the root node's id.&lt;br /&gt;
16. Menu#crumbs - When bottom-level menu item is selected, crumbs has two crumbs (assuming lowest level is two).&lt;br /&gt;
17. Menu#crumbs - When bottom-level menu item is selected, crumbs are ordered from child to parent and all are present up to root.&lt;br /&gt;
&lt;br /&gt;
===Design and Impact===&lt;br /&gt;
&lt;br /&gt;
====Design====&lt;br /&gt;
Because of the nature of our assignment, our only design decisions were made with respect to making our Rspec tests as clean and readable as possible. We did not modify the application code itself. That being said, the Menu model is highly compositional, and it touches on MenuItem, ControllerAction, Controller, ContentPage, and Role (in addition to Node, which is in the same model). As a result, one of our main objectives was to make sure that we were transparent about all the different models which need to exist and how they interact with each other, in order for the Menu model to work.&lt;br /&gt;
&lt;br /&gt;
We address this issue by neatly creating all of the mock objects that we need in 'let' blocks before the tests, and explaining any of the tricky nuances (like how MenuItems and Roles interact using the role_(user_type).yml file). We also add additional comments to some of the more complex test cases (#select) to explain why we're expecting the particular side effects we're expecting, when our 'it' and 'context' block descriptions cannot easily convey all of the complexities.&lt;br /&gt;
&lt;br /&gt;
Here is a snapshot of the Node unit tests, which shows proper utilization of Rspec best practices. We define all of our necessary mock objects. We utilize short, coherent expectations. We use contexts to provide more information about the branches in a function that we are testing. We avoid binding ourselves to implementation by stubbing methods which are called in other classes.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_menu_unit_tests.png]]&lt;br /&gt;
&lt;br /&gt;
====Impact====&lt;br /&gt;
In the future, it will be very easy to test whether changes to the menu model have broken the original functionality. It will also be easy to add more tests to raise our test suite's mutant-killing rank, as we have done the hard part of defining all the mock objects and prototyping the relations they all have with each other in this initial set of tests.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Csc517_oss_menu_unit_tests.png&amp;diff=117552</id>
		<title>File:Csc517 oss menu unit tests.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Csc517_oss_menu_unit_tests.png&amp;diff=117552"/>
		<updated>2018-10-27T16:33:11Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Snippet of unit test code, demonstrating best practices.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Snippet of unit test code, demonstrating best practices.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117551</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117551"/>
		<updated>2018-10-27T15:16:11Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: /* Task and Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
===Task and Results===&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model. We ended up with 100% code coverage, and mutation testing on our test suite yielded 90.21% mutant-slaying capabilities. We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====Expertiza====&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source web application based on [http://rubyonrails.org/ Ruby on Rails] framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.&lt;br /&gt;
&lt;br /&gt;
====Menus and Nodes====&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
====Motivation====&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117550</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117550"/>
		<updated>2018-10-27T15:14:32Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Updated motivation bit to explain that menu's underlying mechanics are complicated.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
===Task and Results===&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model. We ended up with 100% code coverage, and mutation testing on our test suite yielded . We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====Expertiza====&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source web application based on [http://rubyonrails.org/ Ruby on Rails] framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.&lt;br /&gt;
&lt;br /&gt;
====Menus and Nodes====&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
====Motivation====&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117549</id>
		<title>E1853 write unit tests for menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1853_write_unit_tests_for_menu&amp;diff=117549"/>
		<updated>2018-10-27T15:11:21Z</updated>

		<summary type="html">&lt;p&gt;Jfgiall2: Fixed image formatting, oof.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1853. Write Unit Tests for Menu.rb==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
===Team===&lt;br /&gt;
Zhewei Hu (zhu6) (mentor)&lt;br /&gt;
*Joe Giallo (jfgiall2)&lt;br /&gt;
*Senthil Sankar (ssankar9)&lt;br /&gt;
*Vato Maskhulia (vmaskhu)&lt;br /&gt;
===Task and Results===&lt;br /&gt;
For this project, our task was to achieve at least 90% code coverage on the menu.rb model. We ended up with 100% code coverage, and mutation testing on our test suite yielded . We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. &lt;br /&gt;
This image shows our test suite running.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_rspec_run_results.png]]&lt;br /&gt;
&lt;br /&gt;
This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.&lt;br /&gt;
&lt;br /&gt;
[[File:Csc517_oss_project_mutation_score.png]]&lt;br /&gt;
&lt;br /&gt;
The files involved in this commit are:&lt;br /&gt;
* menu.rb - the model being tested. Contains the menu class and the node class.&lt;br /&gt;
* menu_spec.rb - the spec file for menu. Contains all of our tests.&lt;br /&gt;
* spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====Expertiza====&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source web application based on [http://rubyonrails.org/ Ruby on Rails] framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.&lt;br /&gt;
&lt;br /&gt;
====Menus and Nodes====&lt;br /&gt;
Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.&lt;br /&gt;
&lt;br /&gt;
====Motivation====&lt;br /&gt;
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes occur.&lt;/div&gt;</summary>
		<author><name>Jfgiall2</name></author>
	</entry>
</feed>