<?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=Srcapezz</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=Srcapezz"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Srcapezz"/>
	<updated>2026-05-17T13:11:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor_v2.png&amp;diff=137597</id>
		<title>File:Assignment team mentor v2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor_v2.png&amp;diff=137597"/>
		<updated>2020-11-18T04:52:57Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137596</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137596"/>
		<updated>2020-11-18T04:52:15Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Files Modified/Created */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   Background   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects. Keeping this in mind our code is set to work under the following conditions: &lt;br /&gt;
&lt;br /&gt;
*'''Assignment teams created for an assignment without topics'''&lt;br /&gt;
*'''Mentors (''Instructors and TAs'') are only assigned to assignment teams if they have been added to an assignment as participants'''&lt;br /&gt;
&lt;br /&gt;
We've created the following [https://youtu.be/RQJinX6gcrA video] to demonstrate the added functionality. As well as the following [https://youtu.be/nAS0WxzFAsA video] which demonstrates what happens when teams are created when no mentors have been added as participants to an assignment.&lt;br /&gt;
&lt;br /&gt;
===   Objectives   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team via Email when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   Previous Work   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   Program Design   ===&lt;br /&gt;
Our implementation begins when an assignment team is created. If the assignment is associated with a topic, the created team will not be assigned a mentor. If the assignment does not have a topic, a hash of potential mentors is retrieved. This hash is created from the TAs and instructors added to the assignment as participants. The keys of the hash correspond to the mentor's participant id while their values are the number of times the mentor has been assigned to mentor teams. The mentor with the lowest number of assigned teams will be the next mentor assigned to a newly created team. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''First Design: '''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Final Design: '''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Final_Program_Design.png]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We created the following assignment_teams_mentors table with the following connections to existing tables. The new table created is responsible for storing all the mentors assigned to the various teams created. In order to do so, the assignment_team_mentors table will reference the participants and teams tables. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Schema_Modifications_UML_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
We will also modify the participants table to add an additional Boolean column, '''can_mentor'''. This column will help determine what TAs and instructors can mentor for a specified assignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   Files Modified/Created   ===&lt;br /&gt;
These are the files we have modified/created throughout our project and a brief excerpt about what was done:&lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**Created assignment_team_mentors table which references the participants table and teams tables thru foreign keys created with the assignment_team_mentors_id column and assignment_team_id column. The assignment_team_mentors table is responsible for storing all the mentors assigned to the various assignment teams created&lt;br /&gt;
**Created a can_mentor column for the participants table in order to be able to know who was a mentor and who was a student&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment_team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
**added mailer functionality for notifying the mentor&lt;br /&gt;
[[File:assignment_team_mentor_v2.png]]&lt;br /&gt;
&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
**established a has_one: active record relation with AssignmentTeamMentor model. This ensures a team only has one team mentor.&lt;br /&gt;
[[File:Assignment_team_rb.png]]&lt;br /&gt;
&lt;br /&gt;
*participant.rb&lt;br /&gt;
**established a has_many: active record relation with AssignmentTeamMentor model. This provides the flexibility of a potential mentor added as a participant to an assignment, to mentor multiple teams created for an assignment.&lt;br /&gt;
**added a function to set the new can_mentor column for a participant&lt;br /&gt;
**added a function to get a list of all participants who can be mentors for a specified assignment based on the can_mentor column&lt;br /&gt;
[[File:participant_get_can_mentor.png]]&lt;br /&gt;
[[File:participant_get_mentors.png]]&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for instructor created teams.&lt;br /&gt;
**added functionality to send email to mentor when assigned to a team.&lt;br /&gt;
*student_teams_controllers.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for student created teams.&lt;br /&gt;
*teams_user_controller.rb&lt;br /&gt;
**added code to send the email when a user is added to a team to the mentor.&lt;br /&gt;
*participants_controller.rb&lt;br /&gt;
**updates the can_mentor column of a participant when they are added to an assignment&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/tree_display/_page_footer.html.erb&lt;br /&gt;
**displays mentor column header.&lt;br /&gt;
*views/tree_display/_row_header.html.erb&lt;br /&gt;
**displays either mentor assigned or &amp;quot;No mentor assigned&amp;quot; for team level. For team participant level, blank cell is displayed.&lt;br /&gt;
&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
*views/mailer/notify_member.html.erb&lt;br /&gt;
**responsible for managing the template of the mail sent to the mentor&lt;br /&gt;
'''Mailers'''&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
**responsible for managing the mailer functionally for notifying the member&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSPEC'''&lt;br /&gt;
&lt;br /&gt;
=== Testing Plan ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
As an instructor we were able to confirm the following UI changes after mentors were assigned to teams:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
As a student we were able to confirm the following UI changes when a mentor has been assigned to their team:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
This is what the mentor should see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Email to mentor.png]]&lt;br /&gt;
&lt;br /&gt;
=== Possible Future Enhancements ===&lt;br /&gt;
&lt;br /&gt;
#Providing ability to manually select the mentor for a team created.&lt;br /&gt;
#Refactor email functionality code.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[https://github.com/GitHubSanti/expertiza/tree/beta_project4 Github Repository] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Pull Request]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/RQJinX6gcrA assigning of team mentor to newly created team video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/nAS0WxzFAsA team creation without mentor participants video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor.png&amp;diff=137595</id>
		<title>File:Assignment team mentor.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor.png&amp;diff=137595"/>
		<updated>2020-11-18T04:51:41Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: Srcapezz uploaded a new version of File:Assignment team mentor.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor.png&amp;diff=137594</id>
		<title>File:Assignment team mentor.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor.png&amp;diff=137594"/>
		<updated>2020-11-18T04:51:20Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: Srcapezz uploaded a new version of File:Assignment team mentor.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor.png&amp;diff=137593</id>
		<title>File:Assignment team mentor.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor.png&amp;diff=137593"/>
		<updated>2020-11-18T04:50:41Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: Srcapezz uploaded a new version of File:Assignment team mentor.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor.png&amp;diff=137591</id>
		<title>File:Assignment team mentor.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor.png&amp;diff=137591"/>
		<updated>2020-11-18T04:48:40Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: Srcapezz uploaded a new version of File:Assignment team mentor.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137468</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137468"/>
		<updated>2020-11-17T23:42:23Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Files Modified/Created */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   Background   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects. Keeping this in mind our code is set to work under the following conditions: &lt;br /&gt;
&lt;br /&gt;
*'''Assignment teams created for an assignment without topics'''&lt;br /&gt;
*'''Mentors (''Instructors and TAs'') are only assigned to assignment teams if they have been added to an assignment as participants'''&lt;br /&gt;
&lt;br /&gt;
We've created the following [https://youtu.be/RQJinX6gcrA video] to demonstrate the added functionality. As well as the following [https://youtu.be/nAS0WxzFAsA video] which demonstrates what happens when teams are created when no mentors have been added as participants to an assignment.&lt;br /&gt;
&lt;br /&gt;
===   Objectives   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team via Email when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   Previous Work   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   Program Design   ===&lt;br /&gt;
Our implementation begins when an assignment team is created. If the assignment is associated with a topic, the created team will not be assigned a mentor. If the assignment does not have a topic, a hash of potential mentors is retrieved. This hash is created from the TAs and instructors added to the assignment as participants. The keys of the hash correspond to the mentor's participant id while their values are the number of times the mentor has been assigned to mentor teams. The mentor with the lowest number of assigned teams will be the next mentor assigned to a newly created team. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We created the following assignment_teams_mentors table with the following connections to existing tables. The new table created is responsible for storing all the mentors assigned to the various teams created. In order to do so, the assignment_team_mentors table will reference the participants and teams tables. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Schema_Modifications_UML_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
We will also modify the participants table to add an additional Boolean column, '''can_mentor'''. This column will help determine what TAs and instructors can mentor for a specified assignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   Files Modified/Created   ===&lt;br /&gt;
These are the files we have modified/created throughout our project and a brief excerpt about what was done:&lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**Created assignment_team_mentors table which references the participants table and teams tables thru foreign keys created with the assignment_team_mentors_id column and assignment_team_id column. The assignment_team_mentors table is responsible for storing all the mentors assigned to the various assignment teams created&lt;br /&gt;
**Created a can_mentor column for the participants table in order to be able to know who was a mentor and who was a student&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment_team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
**added mailer functionality for notifying the mentor&lt;br /&gt;
[[File:assignment_team_mentor.png]]&lt;br /&gt;
&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
**established a has_one: active record relation with AssignmentTeamMentor model. This ensures a team only has one team mentor.&lt;br /&gt;
*participant.rb&lt;br /&gt;
**established a has_many: active record relation with AssignmentTeamMentor model. This provides the flexibility of a potential mentor added as a participant to an assignment, to mentor multiple teams created for an assignment.&lt;br /&gt;
**added a function to set the new can_mentor column for a participant&lt;br /&gt;
**added a function to get a list of all participants who can be mentors for a specified assignment based on the can_mentor column&lt;br /&gt;
[[File:participant_get_can_mentor.png]]&lt;br /&gt;
[[File:participant_get_mentors.png]]&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for instructor created teams.&lt;br /&gt;
**added functionality to send email to mentor when assigned to a team.&lt;br /&gt;
*student_teams_controllers.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for student created teams.&lt;br /&gt;
*teams_user_controller.rb&lt;br /&gt;
**added code to send the email when a user is added to a team to the mentor.&lt;br /&gt;
*participants_controller.rb&lt;br /&gt;
**updates the can_mentor column of a participant when they are added to an assignment&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/tree_display/_page_footer.html.erb&lt;br /&gt;
**displays mentor column header.&lt;br /&gt;
*views/tree_display/_row_header.html.erb&lt;br /&gt;
**displays either mentor assigned or &amp;quot;No mentor assigned&amp;quot; for team level. For team participant level, blank cell is displayed.&lt;br /&gt;
&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
*views/mailer/notify_member.html.erb&lt;br /&gt;
**responsible for managing the template of the mail sent to the mentor&lt;br /&gt;
'''Mailers'''&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
**responsible for managing the mailer functionally for notifying the member&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSPEC'''&lt;br /&gt;
&lt;br /&gt;
=== Testing Plan ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
This is what the mentor should see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Email to mentor.png]]&lt;br /&gt;
&lt;br /&gt;
=== Potential Future Enhancements ===&lt;br /&gt;
&lt;br /&gt;
#Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
#Refactor email functionality code.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Github Repository] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Pull Request]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/RQJinX6gcrA mentor assignment video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/nAS0WxzFAsA team creation without mentor participants video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137467</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137467"/>
		<updated>2020-11-17T23:42:11Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Files Modified/Created */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   Background   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects. Keeping this in mind our code is set to work under the following conditions: &lt;br /&gt;
&lt;br /&gt;
*'''Assignment teams created for an assignment without topics'''&lt;br /&gt;
*'''Mentors (''Instructors and TAs'') are only assigned to assignment teams if they have been added to an assignment as participants'''&lt;br /&gt;
&lt;br /&gt;
We've created the following [https://youtu.be/RQJinX6gcrA video] to demonstrate the added functionality. As well as the following [https://youtu.be/nAS0WxzFAsA video] which demonstrates what happens when teams are created when no mentors have been added as participants to an assignment.&lt;br /&gt;
&lt;br /&gt;
===   Objectives   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team via Email when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   Previous Work   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   Program Design   ===&lt;br /&gt;
Our implementation begins when an assignment team is created. If the assignment is associated with a topic, the created team will not be assigned a mentor. If the assignment does not have a topic, a hash of potential mentors is retrieved. This hash is created from the TAs and instructors added to the assignment as participants. The keys of the hash correspond to the mentor's participant id while their values are the number of times the mentor has been assigned to mentor teams. The mentor with the lowest number of assigned teams will be the next mentor assigned to a newly created team. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We created the following assignment_teams_mentors table with the following connections to existing tables. The new table created is responsible for storing all the mentors assigned to the various teams created. In order to do so, the assignment_team_mentors table will reference the participants and teams tables. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Schema_Modifications_UML_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
We will also modify the participants table to add an additional Boolean column, '''can_mentor'''. This column will help determine what TAs and instructors can mentor for a specified assignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   Files Modified/Created   ===&lt;br /&gt;
These are the files we have modified/created throughout our project and a brief excerpt about what was done:&lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**Created assignment_team_mentors table which references the participants table and teams tables thru foreign keys created with the assignment_team_mentors_id column and assignment_team_id column. The assignment_team_mentors table is responsible for storing all the mentors assigned to the various assignment teams created&lt;br /&gt;
**Created a can_mentor column for the participants table in order to be able to know who was a mentor and who was a student&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment_team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
**added mailer functionality for notifying the mentor&lt;br /&gt;
[[File:assignment_team_mentor.png|750px]]&lt;br /&gt;
&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
**established a has_one: active record relation with AssignmentTeamMentor model. This ensures a team only has one team mentor.&lt;br /&gt;
*participant.rb&lt;br /&gt;
**established a has_many: active record relation with AssignmentTeamMentor model. This provides the flexibility of a potential mentor added as a participant to an assignment, to mentor multiple teams created for an assignment.&lt;br /&gt;
**added a function to set the new can_mentor column for a participant&lt;br /&gt;
**added a function to get a list of all participants who can be mentors for a specified assignment based on the can_mentor column&lt;br /&gt;
[[File:participant_get_can_mentor.png]]&lt;br /&gt;
[[File:participant_get_mentors.png]]&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for instructor created teams.&lt;br /&gt;
**added functionality to send email to mentor when assigned to a team.&lt;br /&gt;
*student_teams_controllers.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for student created teams.&lt;br /&gt;
*teams_user_controller.rb&lt;br /&gt;
**added code to send the email when a user is added to a team to the mentor.&lt;br /&gt;
*participants_controller.rb&lt;br /&gt;
**updates the can_mentor column of a participant when they are added to an assignment&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/tree_display/_page_footer.html.erb&lt;br /&gt;
**displays mentor column header.&lt;br /&gt;
*views/tree_display/_row_header.html.erb&lt;br /&gt;
**displays either mentor assigned or &amp;quot;No mentor assigned&amp;quot; for team level. For team participant level, blank cell is displayed.&lt;br /&gt;
&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
*views/mailer/notify_member.html.erb&lt;br /&gt;
**responsible for managing the template of the mail sent to the mentor&lt;br /&gt;
'''Mailers'''&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
**responsible for managing the mailer functionally for notifying the member&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSPEC'''&lt;br /&gt;
&lt;br /&gt;
=== Testing Plan ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
This is what the mentor should see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Email to mentor.png]]&lt;br /&gt;
&lt;br /&gt;
=== Potential Future Enhancements ===&lt;br /&gt;
&lt;br /&gt;
#Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
#Refactor email functionality code.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Github Repository] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Pull Request]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/RQJinX6gcrA mentor assignment video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/nAS0WxzFAsA team creation without mentor participants video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137466</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137466"/>
		<updated>2020-11-17T23:42:00Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Files Modified/Created */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   Background   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects. Keeping this in mind our code is set to work under the following conditions: &lt;br /&gt;
&lt;br /&gt;
*'''Assignment teams created for an assignment without topics'''&lt;br /&gt;
*'''Mentors (''Instructors and TAs'') are only assigned to assignment teams if they have been added to an assignment as participants'''&lt;br /&gt;
&lt;br /&gt;
We've created the following [https://youtu.be/RQJinX6gcrA video] to demonstrate the added functionality. As well as the following [https://youtu.be/nAS0WxzFAsA video] which demonstrates what happens when teams are created when no mentors have been added as participants to an assignment.&lt;br /&gt;
&lt;br /&gt;
===   Objectives   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team via Email when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   Previous Work   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   Program Design   ===&lt;br /&gt;
Our implementation begins when an assignment team is created. If the assignment is associated with a topic, the created team will not be assigned a mentor. If the assignment does not have a topic, a hash of potential mentors is retrieved. This hash is created from the TAs and instructors added to the assignment as participants. The keys of the hash correspond to the mentor's participant id while their values are the number of times the mentor has been assigned to mentor teams. The mentor with the lowest number of assigned teams will be the next mentor assigned to a newly created team. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We created the following assignment_teams_mentors table with the following connections to existing tables. The new table created is responsible for storing all the mentors assigned to the various teams created. In order to do so, the assignment_team_mentors table will reference the participants and teams tables. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Schema_Modifications_UML_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
We will also modify the participants table to add an additional Boolean column, '''can_mentor'''. This column will help determine what TAs and instructors can mentor for a specified assignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   Files Modified/Created   ===&lt;br /&gt;
These are the files we have modified/created throughout our project and a brief excerpt about what was done:&lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**Created assignment_team_mentors table which references the participants table and teams tables thru foreign keys created with the assignment_team_mentors_id column and assignment_team_id column. The assignment_team_mentors table is responsible for storing all the mentors assigned to the various assignment teams created&lt;br /&gt;
**Created a can_mentor column for the participants table in order to be able to know who was a mentor and who was a student&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment_team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
**added mailer functionality for notifying the mentor&lt;br /&gt;
[[File:assignment_team_mentor.png|500px]]&lt;br /&gt;
&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
**established a has_one: active record relation with AssignmentTeamMentor model. This ensures a team only has one team mentor.&lt;br /&gt;
*participant.rb&lt;br /&gt;
**established a has_many: active record relation with AssignmentTeamMentor model. This provides the flexibility of a potential mentor added as a participant to an assignment, to mentor multiple teams created for an assignment.&lt;br /&gt;
**added a function to set the new can_mentor column for a participant&lt;br /&gt;
**added a function to get a list of all participants who can be mentors for a specified assignment based on the can_mentor column&lt;br /&gt;
[[File:participant_get_can_mentor.png]]&lt;br /&gt;
[[File:participant_get_mentors.png]]&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for instructor created teams.&lt;br /&gt;
**added functionality to send email to mentor when assigned to a team.&lt;br /&gt;
*student_teams_controllers.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for student created teams.&lt;br /&gt;
*teams_user_controller.rb&lt;br /&gt;
**added code to send the email when a user is added to a team to the mentor.&lt;br /&gt;
*participants_controller.rb&lt;br /&gt;
**updates the can_mentor column of a participant when they are added to an assignment&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/tree_display/_page_footer.html.erb&lt;br /&gt;
**displays mentor column header.&lt;br /&gt;
*views/tree_display/_row_header.html.erb&lt;br /&gt;
**displays either mentor assigned or &amp;quot;No mentor assigned&amp;quot; for team level. For team participant level, blank cell is displayed.&lt;br /&gt;
&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
*views/mailer/notify_member.html.erb&lt;br /&gt;
**responsible for managing the template of the mail sent to the mentor&lt;br /&gt;
'''Mailers'''&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
**responsible for managing the mailer functionally for notifying the member&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSPEC'''&lt;br /&gt;
&lt;br /&gt;
=== Testing Plan ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
This is what the mentor should see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Email to mentor.png]]&lt;br /&gt;
&lt;br /&gt;
=== Potential Future Enhancements ===&lt;br /&gt;
&lt;br /&gt;
#Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
#Refactor email functionality code.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Github Repository] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Pull Request]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/RQJinX6gcrA mentor assignment video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/nAS0WxzFAsA team creation without mentor participants video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor.png&amp;diff=137463</id>
		<title>File:Assignment team mentor.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment_team_mentor.png&amp;diff=137463"/>
		<updated>2020-11-17T23:41:34Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137461</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137461"/>
		<updated>2020-11-17T23:41:07Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Files Modified/Created */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   Background   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects. Keeping this in mind our code is set to work under the following conditions: &lt;br /&gt;
&lt;br /&gt;
*'''Assignment teams created for an assignment without topics'''&lt;br /&gt;
*'''Mentors (''Instructors and TAs'') are only assigned to assignment teams if they have been added to an assignment as participants'''&lt;br /&gt;
&lt;br /&gt;
We've created the following [https://youtu.be/RQJinX6gcrA video] to demonstrate the added functionality. As well as the following [https://youtu.be/nAS0WxzFAsA video] which demonstrates what happens when teams are created when no mentors have been added as participants to an assignment.&lt;br /&gt;
&lt;br /&gt;
===   Objectives   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team via Email when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   Previous Work   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   Program Design   ===&lt;br /&gt;
Our implementation begins when an assignment team is created. If the assignment is associated with a topic, the created team will not be assigned a mentor. If the assignment does not have a topic, a hash of potential mentors is retrieved. This hash is created from the TAs and instructors added to the assignment as participants. The keys of the hash correspond to the mentor's participant id while their values are the number of times the mentor has been assigned to mentor teams. The mentor with the lowest number of assigned teams will be the next mentor assigned to a newly created team. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We created the following assignment_teams_mentors table with the following connections to existing tables. The new table created is responsible for storing all the mentors assigned to the various teams created. In order to do so, the assignment_team_mentors table will reference the participants and teams tables. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Schema_Modifications_UML_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
We will also modify the participants table to add an additional Boolean column, '''can_mentor'''. This column will help determine what TAs and instructors can mentor for a specified assignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   Files Modified/Created   ===&lt;br /&gt;
These are the files we have modified/created throughout our project and a brief excerpt about what was done:&lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**Created assignment_team_mentors table which references the participants table and teams tables thru foreign keys created with the assignment_team_mentors_id column and assignment_team_id column. The assignment_team_mentors table is responsible for storing all the mentors assigned to the various assignment teams created&lt;br /&gt;
**Created a can_mentor column for the participants table in order to be able to know who was a mentor and who was a student&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment_team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
**added mailer functionality for notifying the mentor&lt;br /&gt;
[[File:assignment_team_mentor.png]]&lt;br /&gt;
&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
**established a has_one: active record relation with AssignmentTeamMentor model. This ensures a team only has one team mentor.&lt;br /&gt;
*participant.rb&lt;br /&gt;
**established a has_many: active record relation with AssignmentTeamMentor model. This provides the flexibility of a potential mentor added as a participant to an assignment, to mentor multiple teams created for an assignment.&lt;br /&gt;
**added a function to set the new can_mentor column for a participant&lt;br /&gt;
**added a function to get a list of all participants who can be mentors for a specified assignment based on the can_mentor column&lt;br /&gt;
[[File:participant_get_can_mentor.png]]&lt;br /&gt;
[[File:participant_get_mentors.png]]&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for instructor created teams.&lt;br /&gt;
**added functionality to send email to mentor when assigned to a team.&lt;br /&gt;
*student_teams_controllers.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for student created teams.&lt;br /&gt;
*teams_user_controller.rb&lt;br /&gt;
**added code to send the email when a user is added to a team to the mentor.&lt;br /&gt;
*participants_controller.rb&lt;br /&gt;
**updates the can_mentor column of a participant when they are added to an assignment&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/tree_display/_page_footer.html.erb&lt;br /&gt;
**displays mentor column header.&lt;br /&gt;
*views/tree_display/_row_header.html.erb&lt;br /&gt;
**displays either mentor assigned or &amp;quot;No mentor assigned&amp;quot; for team level. For team participant level, blank cell is displayed.&lt;br /&gt;
&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
*views/mailer/notify_member.html.erb&lt;br /&gt;
**responsible for managing the template of the mail sent to the mentor&lt;br /&gt;
'''Mailers'''&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
**responsible for managing the mailer functionally for notifying the member&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSPEC'''&lt;br /&gt;
&lt;br /&gt;
=== Testing Plan ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
This is what the mentor should see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Email to mentor.png]]&lt;br /&gt;
&lt;br /&gt;
=== Potential Future Enhancements ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
2. Refactor email functionality code&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Github Repository] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Pull Request]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/RQJinX6gcrA mentor assignment video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/nAS0WxzFAsA team creation without mentor participants video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137460</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137460"/>
		<updated>2020-11-17T23:39:06Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Files Modified/Created */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   Background   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects. Keeping this in mind our code is set to work under the following conditions: &lt;br /&gt;
&lt;br /&gt;
*'''Assignment teams created for an assignment without topics'''&lt;br /&gt;
*'''Mentors (''Instructors and TAs'') are only assigned to assignment teams if they have been added to an assignment as participants'''&lt;br /&gt;
&lt;br /&gt;
We've created the following [https://youtu.be/RQJinX6gcrA video] to demonstrate the added functionality. As well as the following [https://youtu.be/nAS0WxzFAsA video] which demonstrates what happens when teams are created when no mentors have been added as participants to an assignment.&lt;br /&gt;
&lt;br /&gt;
===   Objectives   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team via Email when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   Previous Work   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   Program Design   ===&lt;br /&gt;
Our implementation begins when an assignment team is created. If the assignment is associated with a topic, the created team will not be assigned a mentor. If the assignment does not have a topic, a hash of potential mentors is retrieved. This hash is created from the TAs and instructors added to the assignment as participants. The keys of the hash correspond to the mentor's participant id while their values are the number of times the mentor has been assigned to mentor teams. The mentor with the lowest number of assigned teams will be the next mentor assigned to a newly created team. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We created the following assignment_teams_mentors table with the following connections to existing tables. The new table created is responsible for storing all the mentors assigned to the various teams created. In order to do so, the assignment_team_mentors table will reference the participants and teams tables. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Schema_Modifications_UML_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
We will also modify the participants table to add an additional Boolean column, '''can_mentor'''. This column will help determine what TAs and instructors can mentor for a specified assignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   Files Modified/Created   ===&lt;br /&gt;
These are the files we have modified/created throughout our project and a brief excerpt about what was done:&lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**Created assignment_team_mentors table which references the participants table and teams tables thru foreign keys created with the assignment_team_mentors_id column and assignment_team_id column. The assignment_team_mentors table is responsible for storing all the mentors assigned to the various assignment teams created&lt;br /&gt;
**Created a can_mentor column for the participants table in order to be able to know who was a mentor and who was a student&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment_team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
**added mailer functionality for notifying the mentor&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
**established a has_one: active record relation with AssignmentTeamMentor model. This ensures a team only has one team mentor.&lt;br /&gt;
*participant.rb&lt;br /&gt;
**established a has_many: active record relation with AssignmentTeamMentor model. This provides the flexibility of a potential mentor added as a participant to an assignment, to mentor multiple teams created for an assignment.&lt;br /&gt;
**added a function to set the new can_mentor column for a participant&lt;br /&gt;
**added a function to get a list of all participants who can be mentors for a specified assignment based on the can_mentor column&lt;br /&gt;
[[File:participant_get_can_mentor.png]]&lt;br /&gt;
[[File:participant_get_mentors.png]]&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for instructor created teams.&lt;br /&gt;
**added functionality to send email to mentor when assigned to a team.&lt;br /&gt;
*student_teams_controllers.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for student created teams.&lt;br /&gt;
*teams_user_controller.rb&lt;br /&gt;
**added code to send the email when a user is added to a team to the mentor.&lt;br /&gt;
*participants_controller.rb&lt;br /&gt;
**updates the can_mentor column of a participant when they are added to an assignment&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/tree_display/_page_footer.html.erb&lt;br /&gt;
**displays mentor column header.&lt;br /&gt;
*views/tree_display/_row_header.html.erb&lt;br /&gt;
**displays either mentor assigned or &amp;quot;No mentor assigned&amp;quot; for team level. For team participant level, blank cell is displayed.&lt;br /&gt;
&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
*views/mailer/notify_member.html.erb&lt;br /&gt;
**responsible for managing the template of the mail sent to the mentor&lt;br /&gt;
'''Mailers'''&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
**responsible for managing the mailer functionally for notifying the member&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSPEC'''&lt;br /&gt;
&lt;br /&gt;
=== Testing Plan ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
This is what the mentor should see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Email to mentor.png]]&lt;br /&gt;
&lt;br /&gt;
=== Potential Future Enhancements ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
2. Refactor email functionality code&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Github Repository] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Pull Request]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/RQJinX6gcrA mentor assignment video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/nAS0WxzFAsA team creation without mentor participants video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Participant_get_mentors.png&amp;diff=137459</id>
		<title>File:Participant get mentors.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Participant_get_mentors.png&amp;diff=137459"/>
		<updated>2020-11-17T23:38:40Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Participant_get_can_mentor.png&amp;diff=137458</id>
		<title>File:Participant get can mentor.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Participant_get_can_mentor.png&amp;diff=137458"/>
		<updated>2020-11-17T23:38:22Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137456</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137456"/>
		<updated>2020-11-17T23:37:58Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Files Modified/Created */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   Background   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects. Keeping this in mind our code is set to work under the following conditions: &lt;br /&gt;
&lt;br /&gt;
*'''Assignment teams created for an assignment without topics'''&lt;br /&gt;
*'''Mentors (''Instructors and TAs'') are only assigned to assignment teams if they have been added to an assignment as participants'''&lt;br /&gt;
&lt;br /&gt;
We've created the following [https://youtu.be/RQJinX6gcrA video] to demonstrate the added functionality. As well as the following [https://youtu.be/nAS0WxzFAsA video] which demonstrates what happens when teams are created when no mentors have been added as participants to an assignment.&lt;br /&gt;
&lt;br /&gt;
===   Objectives   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team via Email when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   Previous Work   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   Program Design   ===&lt;br /&gt;
Our implementation begins when an assignment team is created. If the assignment is associated with a topic, the created team will not be assigned a mentor. If the assignment does not have a topic, a hash of potential mentors is retrieved. This hash is created from the TAs and instructors added to the assignment as participants. The keys of the hash correspond to the mentor's participant id while their values are the number of times the mentor has been assigned to mentor teams. The mentor with the lowest number of assigned teams will be the next mentor assigned to a newly created team. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We created the following assignment_teams_mentors table with the following connections to existing tables. The new table created is responsible for storing all the mentors assigned to the various teams created. In order to do so, the assignment_team_mentors table will reference the participants and teams tables. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Schema_Modifications_UML_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
We will also modify the participants table to add an additional Boolean column, '''can_mentor'''. This column will help determine what TAs and instructors can mentor for a specified assignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   Files Modified/Created   ===&lt;br /&gt;
These are the files we have modified/created throughout our project and a brief excerpt about what was done:&lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**Created assignment_team_mentors table which references the participants table and teams tables thru foreign keys created with the assignment_team_mentors_id column and assignment_team_id column. The assignment_team_mentors table is responsible for storing all the mentors assigned to the various assignment teams created&lt;br /&gt;
**Created a can_mentor column for the participants table in order to be able to know who was a mentor and who was a student&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment_team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
**added mailer functionality for notifying the mentor&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
**established a has_one: active record relation with AssignmentTeamMentor model. This ensures a team only has one team mentor.&lt;br /&gt;
*participant.rb&lt;br /&gt;
**established a has_many: active record relation with AssignmentTeamMentor model. This provides the flexibility of a potential mentor added as a participant to an assignment, to mentor multiple teams created for an assignment.&lt;br /&gt;
**added a function to set the new can_mentor column for a participant&lt;br /&gt;
**added a function to get a list of all participants who can be mentors for a specified assignment based on the can_mentor column&lt;br /&gt;
[[File:participant_get_can_mentor.png|1000px]]&lt;br /&gt;
[[File:participant_get_mentors.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for instructor created teams.&lt;br /&gt;
**added functionality to send email to mentor when assigned to a team.&lt;br /&gt;
*student_teams_controllers.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for student created teams.&lt;br /&gt;
*teams_user_controller.rb&lt;br /&gt;
**added code to send the email when a user is added to a team to the mentor.&lt;br /&gt;
*participants_controller.rb&lt;br /&gt;
**updates the can_mentor column of a participant when they are added to an assignment&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/tree_display/_page_footer.html.erb&lt;br /&gt;
**displays mentor column header.&lt;br /&gt;
*views/tree_display/_row_header.html.erb&lt;br /&gt;
**displays either mentor assigned or &amp;quot;No mentor assigned&amp;quot; for team level. For team participant level, blank cell is displayed.&lt;br /&gt;
&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
*views/mailer/notify_member.html.erb&lt;br /&gt;
**responsible for managing the template of the mail sent to the mentor&lt;br /&gt;
'''Mailers'''&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
**responsible for managing the mailer functionally for notifying the member&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSPEC'''&lt;br /&gt;
&lt;br /&gt;
=== Testing Plan ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
This is what the mentor should see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Email to mentor.png]]&lt;br /&gt;
&lt;br /&gt;
=== Potential Future Enhancements ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
2. Refactor email functionality code&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Github Repository] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Pull Request]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/RQJinX6gcrA mentor assignment video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/nAS0WxzFAsA team creation without mentor participants video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137455</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137455"/>
		<updated>2020-11-17T23:35:08Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Files Modified/Created */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   Background   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects. Keeping this in mind our code is set to work under the following conditions: &lt;br /&gt;
&lt;br /&gt;
*'''Assignment teams created for an assignment without topics'''&lt;br /&gt;
*'''Mentors (''Instructors and TAs'') are only assigned to assignment teams if they have been added to an assignment as participants'''&lt;br /&gt;
&lt;br /&gt;
We've created the following [https://youtu.be/RQJinX6gcrA video] to demonstrate the added functionality. As well as the following [https://youtu.be/nAS0WxzFAsA video] which demonstrates what happens when teams are created when no mentors have been added as participants to an assignment.&lt;br /&gt;
&lt;br /&gt;
===   Objectives   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team via Email when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   Previous Work   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   Program Design   ===&lt;br /&gt;
Our implementation begins when an assignment team is created. If the assignment is associated with a topic, the created team will not be assigned a mentor. If the assignment does not have a topic, a hash of potential mentors is retrieved. This hash is created from the TAs and instructors added to the assignment as participants. The keys of the hash correspond to the mentor's participant id while their values are the number of times the mentor has been assigned to mentor teams. The mentor with the lowest number of assigned teams will be the next mentor assigned to a newly created team. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We created the following assignment_teams_mentors table with the following connections to existing tables. The new table created is responsible for storing all the mentors assigned to the various teams created. In order to do so, the assignment_team_mentors table will reference the participants and teams tables. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Schema_Modifications_UML_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
We will also modify the participants table to add an additional Boolean column, '''can_mentor'''. This column will help determine what TAs and instructors can mentor for a specified assignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   Files Modified/Created   ===&lt;br /&gt;
These are the files we have modified/created throughout our project and a brief excerpt about what was done:&lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**Created assignment_team_mentors table which references the participants table and teams tables thru foreign keys created with the assignment_team_mentors_id column and assignment_team_id column. The assignment_team_mentors table is responsible for storing all the mentors assigned to the various assignment teams created&lt;br /&gt;
**Created a can_mentor column for the participants table in order to be able to know who was a mentor and who was a student&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment_team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
**added mailer functionality for notifying the mentor&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
**established a has_one: active record relation with AssignmentTeamMentor model. This ensures a team only has one team mentor.&lt;br /&gt;
*participant.rb&lt;br /&gt;
**established a has_many: active record relation with AssignmentTeamMentor model. This provides the flexibility of a potential mentor added as a participant to an assignment, to mentor multiple teams created for an assignment.&lt;br /&gt;
**added a function to set the new can_mentor column for a participant&lt;br /&gt;
[[File:participant_get_can_mentor.png|1000px]]&lt;br /&gt;
**added a function to get a list of all participants who can be mentors for a specified assignment based on the can_mentor column&lt;br /&gt;
[[File:participant_get_mentors.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for instructor created teams.&lt;br /&gt;
**added functionality to send email to mentor when assigned to a team.&lt;br /&gt;
*student_teams_controllers.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for student created teams.&lt;br /&gt;
*teams_user_controller.rb&lt;br /&gt;
**added code to send the email when a user is added to a team to the mentor.&lt;br /&gt;
*participants_controller.rb&lt;br /&gt;
**updates the can_mentor column of a participant when they are added to an assignment&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/tree_display/_page_footer.html.erb&lt;br /&gt;
**displays mentor column header.&lt;br /&gt;
*views/tree_display/_row_header.html.erb&lt;br /&gt;
**displays either mentor assigned or &amp;quot;No mentor assigned&amp;quot; for team level. For team participant level, blank cell is displayed.&lt;br /&gt;
&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
*views/mailer/notify_member.html.erb&lt;br /&gt;
**responsible for managing the template of the mail sent to the mentor&lt;br /&gt;
'''Mailers'''&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
**responsible for managing the mailer functionally for notifying the member&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSPEC'''&lt;br /&gt;
&lt;br /&gt;
=== Testing Plan ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
This is what the mentor should see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Email to mentor.png]]&lt;br /&gt;
&lt;br /&gt;
=== Potential Future Enhancements ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
2. Refactor email functionality code&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Github Repository] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Pull Request]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/RQJinX6gcrA mentor assignment video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/nAS0WxzFAsA team creation without mentor participants video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137414</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=137414"/>
		<updated>2020-11-17T22:42:33Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Files Modified/Created */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   Background   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects. Keeping this in mind our code is set to work under the following conditions: &lt;br /&gt;
&lt;br /&gt;
*'''Assignment teams created for an assignment without topics'''&lt;br /&gt;
*'''Mentors (''Instructors and TAs'') are only assigned to assignment teams if they have been added to an assignment as participants'''&lt;br /&gt;
&lt;br /&gt;
We've created the following [https://youtu.be/RQJinX6gcrA video] to demonstrate the added functionality. As well as the following [https://youtu.be/nAS0WxzFAsA video] which demonstrates what happens when teams are created when no mentors have been added as participants to an assignment.&lt;br /&gt;
&lt;br /&gt;
===   Objectives   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team via Email when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   Previous Work   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   Program Design   ===&lt;br /&gt;
Our implementation begins when an assignment team is created. If the assignment is associated with a topic, the created team will not be assigned a mentor. If the assignment does not have a topic, a hash of potential mentors is retrieved. This hash is created from the TAs and instructors added to the assignment as participants. The keys of the hash correspond to the mentor's participant id while their values are the number of times the mentor has been assigned to mentor teams. The mentor with the lowest number of assigned teams will be the next mentor assigned to a newly created team. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We created the following assignment_teams_mentors table with the following connections to existing tables. The new table created is responsible for storing all the mentors assigned to the various teams created. In order to do so, the assignment_team_mentors table will reference the participants and teams tables. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Schema_Modifications_UML_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
We will also modify the participants table to add an additional Boolean column, '''can_mentor'''. This column will help determine what TAs and instructors can mentor for a specified assignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   Files Modified/Created   ===&lt;br /&gt;
These are the files we have modified/created throughout our project and a brief excerpt about what was done:&lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**Created assignment_team_mentors table which references the participants table and teams tables thru foreign keys created with the assignment_team_mentors_id column and assignment_team_id column. The assignment_team_mentors table is responsible for storing all the mentors assigned to the various assignment teams created&lt;br /&gt;
**Created a can_mentor column for the participants table in order to be able to know who was a mentor and who was a student&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment_team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
**added mailer functionality for notifying the mentor&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
**established a has_one: active record relation with AssignmentTeamMentor model. This ensures a team only has one team mentor.&lt;br /&gt;
*participant.rb&lt;br /&gt;
**established a has_many: active record relation with AssignmentTeamMentor model. This provides the flexibility of a potential mentor added as a participant to an assignment, to mentor multiple teams created for an assignment.&lt;br /&gt;
*participant.rb&lt;br /&gt;
**added a function to set the new can_mentor column for a participant&lt;br /&gt;
**added a function to get a list of all participants who can be mentors for a specified assignment based on the can_mentor column&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for instructor created teams.&lt;br /&gt;
**added functionality to send email to mentor when assigned to a team.&lt;br /&gt;
*student_teams_controllers.rb&lt;br /&gt;
**Calls on AssignmentTeamMentor to assign mentor for student created teams.&lt;br /&gt;
*teams_user_controller.rb&lt;br /&gt;
**added code to send the email when a user is added to a team to the mentor.&lt;br /&gt;
*participants_controller.rb&lt;br /&gt;
**updates the can_mentor column of a participant when they are added to an assignment&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/tree_display/_page_footer.html.erb&lt;br /&gt;
**displays mentor column header.&lt;br /&gt;
*views/tree_display/_row_header.html.erb&lt;br /&gt;
**displays either mentor assigned or &amp;quot;No mentor assigned&amp;quot; for team level. For team participant level, blank cell is displayed.&lt;br /&gt;
&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
*views/mailer/notify_member.html.erb&lt;br /&gt;
**responsible for managing the template of the mail sent to the mentor&lt;br /&gt;
'''Mailers'''&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
**responsible for managing the mailer functionally for notifying the member&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSPEC'''&lt;br /&gt;
&lt;br /&gt;
=== Testing Plan ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
This is what the mentor should see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Email to mentor.png]]&lt;br /&gt;
&lt;br /&gt;
=== Potential Future Enhancements ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
2. Refactor email functionality code&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Github Repository] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1826 Pull Request]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/RQJinX6gcrA mentor assignment video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/nAS0WxzFAsA team creation without mentor participants video]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136552</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136552"/>
		<updated>2020-10-29T01:55:42Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* UI Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team via Email when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We plan to create the following teams_mentors table with the following connections to existing tables:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Schema_Modifications.png|500px]]&lt;br /&gt;
The new table created will be responsible for storing all the mentors assigned to the various teams created. In order to do so, the teams_mentors table will reference the users, assignments, and teams tables.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified/Created''   ===&lt;br /&gt;
These are the files we plan to modify/create throughout our project. More to come to this section as we continue with development... &lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**create teams_mentors table and have references to users, assignments, and teams tables. &lt;br /&gt;
**Keeps track of all mentors assigned to all teams.&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**responsible for interacting with team_mentor.rb model and ensuring the correct data is fed to model as a new team is created.&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/teams&lt;br /&gt;
**responsible for displaying mentors assigned to teams for an instructor creating teams.&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
'''Mailers'''&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
This is what the mentor should see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WImage103.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136543</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136543"/>
		<updated>2020-10-29T01:21:07Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Objectives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team via Email when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified/Created''   ===&lt;br /&gt;
These are the files we plan to modify/create throughout our project. More to come to this section as we continue with development... &lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**create teams_mentors table and have references to users, assignments, and teams tables. &lt;br /&gt;
**Keeps track of all mentors assigned to all teams.&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**responsible for interacting with team_mentor.rb model and ensuring the correct data is fed to model as a new team is created.&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/teams&lt;br /&gt;
**responsible for displaying mentors assigned to teams for an instructor creating teams.&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136542</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136542"/>
		<updated>2020-10-29T01:20:46Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Objectives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&amp;lt;br&amp;gt;&lt;br /&gt;
2. Notify mentor and individuals of a team when a mentor has been assigned&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified/Created''   ===&lt;br /&gt;
These are the files we plan to modify/create throughout our project. More to come to this section as we continue with development... &lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**create teams_mentors table and have references to users, assignments, and teams tables. &lt;br /&gt;
**Keeps track of all mentors assigned to all teams.&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**responsible for interacting with team_mentor.rb model and ensuring the correct data is fed to model as a new team is created.&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/teams&lt;br /&gt;
**responsible for displaying mentors assigned to teams for an instructor creating teams.&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136541</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136541"/>
		<updated>2020-10-29T01:20:30Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Objectives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
1. Assign a TA or instructor as a mentor for a team created for an assignment without topics&lt;br /&gt;
2. Notify mentor and individuals of a team when a mentor has been assigned&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned. Once the team is assigned a mentor, an email is sent out to the mentor and students in the team to notify them of their mentor assignment&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified/Created''   ===&lt;br /&gt;
These are the files we plan to modify/create throughout our project. More to come to this section as we continue with development... &lt;br /&gt;
&lt;br /&gt;
'''Database'''&lt;br /&gt;
*Schema.rb&lt;br /&gt;
**create teams_mentors table and have references to users, assignments, and teams tables. &lt;br /&gt;
**Keeps track of all mentors assigned to all teams.&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*team_mentor.rb&lt;br /&gt;
**responsible for ensuring mentor with the least number of teams mentored, gets assigned to the next team created.&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
**responsible for interacting with team_mentor.rb model and ensuring the correct data is fed to model as a new team is created.&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
*views/teams&lt;br /&gt;
**responsible for displaying mentors assigned to teams for an instructor creating teams.&lt;br /&gt;
*views/student_teams/view.html.erb&lt;br /&gt;
**responsible for displaying to a student the mentor assigned to their team for an assignment.&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136512</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136512"/>
		<updated>2020-10-29T00:14:41Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* UI Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see the following after viewing their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136509</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136509"/>
		<updated>2020-10-29T00:13:58Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* UI Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136508</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136508"/>
		<updated>2020-10-29T00:13:32Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Program Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Currently students see the corresponding view when looking at their team for an assignment:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
As an instructor should be able to see, the following:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A student should be able to see:&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136500</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136500"/>
		<updated>2020-10-29T00:06:33Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Edge Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
RSpec test to check:&lt;br /&gt;
* Validation of the models&lt;br /&gt;
* Functionality of controllers&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136497</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136497"/>
		<updated>2020-10-29T00:06:07Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Edge Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
Edge Case 1: How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Edge Case 2: No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
The Rspec test are to be added...&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136495</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136495"/>
		<updated>2020-10-29T00:05:39Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Edge Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
1. How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide if we need to assign mentors to a team.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
2. No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
The Rspec test are to be added...&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136492</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136492"/>
		<updated>2020-10-29T00:04:46Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Edge Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
1. How will we handle the &amp;quot;Has topic?&amp;quot; check box being changed when editing the assignment in the instructor view. This button is how we decide to run our code to assign mentors.&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|500px]]&lt;br /&gt;
&lt;br /&gt;
2. No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
The Rspec test are to be added...&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136487</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136487"/>
		<updated>2020-10-29T00:01:58Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Program Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column in the instructor view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section in the student view:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
1. When an assignment is created with Has topic? checked or unchecked, how will we deal with it being edited back?&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&lt;br /&gt;
[[File:Instructor_hasTopics_checkbox.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
2. No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
The Rspec test are to be added...&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136484</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136484"/>
		<updated>2020-10-29T00:01:09Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Edge Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
1. When an assignment is created with Has topic? checked or unchecked, how will we deal with it being edited back?&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. No mentors exist&lt;br /&gt;
   Option A: Don't assign mentors&lt;br /&gt;
   Option B: Prevent creation of teams&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
The Rspec test are to be added...&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136482</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136482"/>
		<updated>2020-10-28T23:59:13Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Program Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
1. When an assignment is created with Has topic? checked or unchecked, how will we deal with it being edited back?&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
The Rspec test are to be added...&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136481</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136481"/>
		<updated>2020-10-28T23:58:09Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Edge Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column:&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
1. When an assignment is created with Has topic? checked or unchecked, how will we deal with it being edited back?&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
The Rspec test are to be added...&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136479</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136479"/>
		<updated>2020-10-28T23:57:50Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Edge Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column:&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
1. When an assignment is created with Has topic? checked or unchecked, how will we deal with it being edited back?&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
The Rspec test are to be added...&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136475</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136475"/>
		<updated>2020-10-28T23:50:14Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Edge Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column:&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
1. When an assignment is created with Has topic? checked or unchecked, how will we deal with it being edited back?&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is not checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
The Rspec test are to be added...&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136474</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136474"/>
		<updated>2020-10-28T23:49:51Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Edge Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column:&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
1. When an assignment is created with Has topic? checked or unchecked, how will we deal with it being edited back?&lt;br /&gt;
   Option A: Always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is checked&lt;br /&gt;
   Option B: Add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
The Rspec test are to be added...&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136473</id>
		<title>CSC/ECE 517 Fall 2020 - E2077. Mentor management for assignments without topics E2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2077._Mentor_management_for_assignments_without_topics_E2024&amp;diff=136473"/>
		<updated>2020-10-28T23:48:57Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: /* Edge Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Project Overview==&lt;br /&gt;
===   ''Background''   ===&lt;br /&gt;
Currently, Expertiza has no way to associate mentors with teams. For assignments with topics, like the OSS project, mentors are associated with topics, and then whichever team is assigned to the topic inherits the mentor for that topic, However, for assignments without topics (like Program 2), there is no good way to “automatically” assign mentors to projects.&lt;br /&gt;
&lt;br /&gt;
===   ''Objectives''   ===&lt;br /&gt;
Implement code that will allow a mentor to be directly associated with a team. Notify mentor when they have been assigned to a team via email.&lt;br /&gt;
&lt;br /&gt;
===   ''Previous Work''   ===&lt;br /&gt;
We learned from previous implementations and looked to avoid the following pitfalls when implementing our solution:&lt;br /&gt;
&lt;br /&gt;
*Code was merged from the previous team, but not refactored, so a lot of unused code remained.&lt;br /&gt;
*Should have followed a better naming convention for methods&lt;br /&gt;
*Some redundant codes in the views could be DRYed out.&lt;br /&gt;
*Commented code should be removed.&lt;br /&gt;
*Some complex logic is added but not explained in the comments.&lt;br /&gt;
*Code should be placed in most relevant classes. (E.g. Do not put email code in the Team class).&lt;br /&gt;
*Documentation doesn't accurately represent implementation.&lt;br /&gt;
*Lacked sufficient detail for Test section.&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
===   ''Program Design''   ===&lt;br /&gt;
We are proposing the following design with our implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Program_Design.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our implementation begins when the team is created. Once a team is created, it prompts a question asking if the assignment that the team is being created before has a topic. If the assignment is associated with a topic, teams are not given a mentor. If the assignment does not have a topic, a list of mentors is queried. The list contains mentors and details the amount of teams each of the mentors is assigned to. A mentor is then selected for the least amount of teams assigned.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently instructors would see the corresponding view when looking at teams associated with an assignment:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Instructor_view_before.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; column:&lt;br /&gt;
[[File:Instructor_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Our team is proposing to add an additional &amp;quot;Mentors&amp;quot; section:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Student_view_after.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
===   ''Files Modified''   ===&lt;br /&gt;
List all the files we changed when implementing our project&lt;br /&gt;
&lt;br /&gt;
'''Models'''&lt;br /&gt;
*assignment.rb&lt;br /&gt;
*assignment_team.rb&lt;br /&gt;
*assignment_form.rb&lt;br /&gt;
*User.rb&lt;br /&gt;
&lt;br /&gt;
'''Controllers'''&lt;br /&gt;
*assignments_controller.rb&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
'''Views'''&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== ''Testing Plan'' ===&lt;br /&gt;
&lt;br /&gt;
==== ''Edge Cases'' ====&lt;br /&gt;
The following are scenarios our team has thought about:&lt;br /&gt;
&lt;br /&gt;
1. When an assignment is created with Has topic? checked or unchecked, how will we deal with it being edited back?&lt;br /&gt;
   A. One work around for this would be to always run our algorithm for each assignment made and only show which mentors are assigned if the &amp;quot;Has topic?&amp;quot; is checked&lt;br /&gt;
   B. Another option would be to add the functionality to add and remove mentors for all assignments, not just assignments without topics then add and remove mentors when an assignment is edited.&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
==== ''RSpec Test'' ====&lt;br /&gt;
The Rspec test are to be added...&lt;br /&gt;
&lt;br /&gt;
==== ''UI Test'' ====&lt;br /&gt;
In the UI test we are going to verify that:&lt;br /&gt;
&lt;br /&gt;
1. Instructor/Admin verifies the selection of has topics button&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student create team and invite others&amp;lt;br&amp;gt;&lt;br /&gt;
3. Assign mentor and send emails, when the team is created&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Future Implementation ===&lt;br /&gt;
&lt;br /&gt;
1. Implementing manual mentor assignment capability for instructors assign mentors to a team.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Github Repository:  &amp;lt;br&amp;gt;&lt;br /&gt;
Pull Request:  &amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_E2024_Mentor_management_for_assignments_without_topics Previous Implementation's Wiki]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Santiago Sepulveda &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza &amp;lt;br&amp;gt;&lt;br /&gt;
Liam Donovan  &amp;lt;br&amp;gt;&lt;br /&gt;
Javier Sanchez  &amp;lt;br&amp;gt;&lt;br /&gt;
'''Mentor:''' Yulin Zhang &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135731</id>
		<title>CSC/ECE 517 Fall 2020 - E2064. Refactor reputation web service controller.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135731"/>
		<updated>2020-10-20T03:31:35Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''==&lt;br /&gt;
==='''Introduction to Expertiza'''===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review based system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types for assignments, including the URLs and wiki pages.&lt;br /&gt;
==='''About Reputation Web Service Controller'''===&lt;br /&gt;
Expertiza allows student work to be peer-reviewed, since peers can provide more feedback than the instructor can. However, if we want to assure that all students receive competent feedback, or even use peer-assigned grades, we need a way to judge which peer reviewers are most credible. The solution is the reputation system. Reputation systems have been deployed as web services, peer-review researchers will be able to use them to calculate scores on assignments, both past and present (past data can be used to tune the algorithms).&lt;br /&gt;
For this project, our team's job is to refactor the file: reputation_web_service_controller.rb. This file is the controller to calculate the reputation scores. A “reputation” measures how close a reviewer’s scores are to other reviewers’ scores. This controller implements the calculation of reputation scores.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
reputation_web_service_controller.rb is a fairly complex file. It contains a lot of methods that are long and hard to understand (for e.g. send_post_request). These methods need to be broken down into simpler and more specific methods that are easier to read/understand. Also, the few instances of code duplication that exist should be removed.&lt;br /&gt;
&lt;br /&gt;
# There is a lot of unused/commented code, which should be removed.&lt;br /&gt;
# Figure out what the code is doing and write appropriate comments for it.&lt;br /&gt;
# Rename bad method names such as (db_query, json_generator). Method names should be verbs, and should say what the method does.  Method names should not be so general that they could apply to many different methods..&lt;br /&gt;
# In the case of db_query, the name should say what it queries for. Also, this method not only queries, but calculates sums.  Since each method should do only one thing, the code for calculating sums should be in another method. And there should be comments in the code!&lt;br /&gt;
#json_generator should be generate_json. There needs to be a method comment saying what the parameters are.&lt;br /&gt;
# In  send_post_request, there are references to specific assignments, such as 724, 735, and 756. They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed. send_post_request is 91 lines long, far too long.&lt;br /&gt;
#There is a password for a private key in the code (and the code is open-sourced!) It should be in the db instead.&lt;br /&gt;
#Fix spelling of “dimention”&lt;br /&gt;
#client is a bad method name; why is stuff being copied from class variables to instance variables?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Steps taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Refactor db_query===&lt;br /&gt;
&lt;br /&gt;
  Renaming of bad method names such as (&amp;lt;code&amp;gt;db_query&amp;lt;/code&amp;gt;). Method names should be verbs, and should say what the method does. &lt;br /&gt;
Method names should not be so general that they could apply to many different methods.&lt;br /&gt;
The other problem with the method was that it did not follow the good practice of having each method perform only one task. &lt;br /&gt;
This method got the review responses with a db query.&lt;br /&gt;
Also, it iterated over the review responses to perform a calculation of peer review grades.&lt;br /&gt;
&lt;br /&gt;
We have split the method into two to have the review responses do only the get responses part.&lt;br /&gt;
&lt;br /&gt;
[[File:snip7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The code for calculating sums should be in another method. ===&lt;br /&gt;
  The result of this method is stored and we have created a new method &amp;lt;code&amp;gt;calculate_peer_review_grades&amp;lt;/code&amp;gt; and moved the calculation part to it. &amp;lt;br&amp;gt;&lt;br /&gt;
We also added a comment to indicate the calculate weighted sum part.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip8.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  And then, we have changed the call to the &amp;lt;code&amp;gt; get review responses&amp;lt;/code&amp;gt; and the new method calculate peer review grades accordingly&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip3.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, we have changed &amp;lt;code&amp;gt;db_query_with_quiz_scores&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;calculate_quiz_scores&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip5.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''' Change name of json_generator'''===&lt;br /&gt;
  &lt;br /&gt;
  json_generator method should be &amp;lt;code&amp;gt;generate_json&amp;lt;/code&amp;gt;&lt;br /&gt;
Also,there needs to be a method comment saying what the parameters are.&lt;br /&gt;
We have added the method comments with parameter information as seen below.&lt;br /&gt;
&lt;br /&gt;
[[File:snip4.png]]&lt;br /&gt;
&lt;br /&gt;
===''' Refactor send_post_request'''===&lt;br /&gt;
&lt;br /&gt;
 “In (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;), there are references to specific assignments, such as 724, 735, and 756. &lt;br /&gt;
  They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed.&lt;br /&gt;
  send_post_request is 91 lines long, far too long”&lt;br /&gt;
&lt;br /&gt;
We observed that encryption of request being sent to evaluate Algorithm and decryption of response is written in (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) only that is why send post is 91 lines long.&lt;br /&gt;
We have created two separate methods &lt;br /&gt;
(&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
(&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the image below we can see that we have separated Encryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:encryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
On the similar lines we have separated Decryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:decryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;) has been refactored as follows &lt;br /&gt;
&lt;br /&gt;
[[File:encrypt_request.png]]&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;) has been refactored as follows&lt;br /&gt;
&lt;br /&gt;
[[File:decrypt_request.png]]&lt;br /&gt;
&lt;br /&gt;
===''' Fixed spelling of dimention'''===&lt;br /&gt;
&lt;br /&gt;
[[File:capture2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Updating client method'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We changed the class variables in the code to instance variables because we realized that the send_post_request method and client method were the only methods using the class variables.&lt;br /&gt;
A client.html.erb file was used to call our controller to fill out a form for send_post_request which set values of class variables then immediately redirected control to the client method which set the instance variables to those class variables. The instance variables were then used in the rest of the client.html.erb file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process of setting class variables to instance variables with a function was redundant, so we removed simply set the instance variables within the send_post_request method and took them out of the client method.&lt;br /&gt;
The client method did have a few actions that it completed besides setting class variables which we have left in the method until we can find a solution to replacing them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:old-client-method.png|frame|none|alt=Alt text|Old client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:new-client-method-and-helpers-new.png|frame|none|alt=Alt text|Newest client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reason why we kept the client method's name is because the routes.rb file specifies the client method in the code and we haven't fully tracked down the impact of that yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing == &lt;br /&gt;
=== Test Plan === &lt;br /&gt;
There was no existing tests available for the Reputation web service controller. &lt;br /&gt;
Since we are refactoring it, Our testing plan is to have an automated testing to ensure that the refactoring such as splitting a method into separate methods does not affect the existing implementation.&lt;br /&gt;
We also added steps for the manual testing to make sure the page loads as expected after the refactoring.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For the automated testing, We are using Rspec tests. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===RSpec===&lt;br /&gt;
We have tested the two new methods created during refactoring and also a renamed method. &lt;br /&gt;
The test coverage has increased a bit by 0.6% to 44%.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The tests we created can also be manually run with command &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;rspec spec/controllers/reputation_web_controller_spec.rb. &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:snip13.png]]&lt;br /&gt;
&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The steps to test our branch are below, but they are failing right now due to errors that are in other files of the beta branch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To test our program you must login to the site here: http://152.7.98.78:8080/&lt;br /&gt;
&lt;br /&gt;
Username: instructor6&lt;br /&gt;
Password: password&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then the page &amp;quot;Manage content&amp;quot; doesn't show up, go to Manage... -&amp;gt; Assignments&lt;br /&gt;
&lt;br /&gt;
[[File:snip14.png]]&lt;br /&gt;
&lt;br /&gt;
Then on the CSC 517, Fall 2017 Row, click on &amp;quot;Add Participants&amp;quot; in the actions column. This is also indicated by a blue shirted person.&lt;br /&gt;
&lt;br /&gt;
[[File:snip15.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once in there, copy on of the student names (such as student7487) and then go to Manage... -&amp;gt; Impersonate User and enter their name (student7487) into the text field.&lt;br /&gt;
&lt;br /&gt;
[[File:snip16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After impersonating them, you should be able to see their assignments. Click on any of their assignments such as &amp;quot;Program 1&amp;quot;, then click on &amp;quot;Alternate View&amp;quot; to the right of &amp;quot;Your Scores&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:snip17.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:snip18.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&amp;lt;code&amp;gt;reputation_web_service_controller.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''New Files'''==&lt;br /&gt;
&amp;lt;code&amp;gt;reputation_web_service_controller_spec.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
'''Project Mentor:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Saurabh Shingte&lt;br /&gt;
&lt;br /&gt;
'''Project Members:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Abhishek Gupta &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza&amp;lt;br&amp;gt;&lt;br /&gt;
Ummu Kolusum Yasmin Ahamed Adam&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/srcapezza/expertiza/tree/beta Project Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/1790 Github Pull Request]&lt;br /&gt;
*[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
*[http://expertiza.ncsu.edu/ The live Expertiza website]&lt;br /&gt;
*[http://research.csc.ncsu.edu/efg/expertiza Expertiza project Details]&lt;br /&gt;
*[https://www.youtube.com/channel/UCdKXzox7hrWjfOMML6FzTWg Expertiza YouTube Channel]&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip18.png&amp;diff=135729</id>
		<title>File:Snip18.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip18.png&amp;diff=135729"/>
		<updated>2020-10-20T03:30:52Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135728</id>
		<title>CSC/ECE 517 Fall 2020 - E2064. Refactor reputation web service controller.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135728"/>
		<updated>2020-10-20T03:30:42Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''==&lt;br /&gt;
==='''Introduction to Expertiza'''===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review based system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types for assignments, including the URLs and wiki pages.&lt;br /&gt;
==='''About Reputation Web Service Controller'''===&lt;br /&gt;
Expertiza allows student work to be peer-reviewed, since peers can provide more feedback than the instructor can. However, if we want to assure that all students receive competent feedback, or even use peer-assigned grades, we need a way to judge which peer reviewers are most credible. The solution is the reputation system. Reputation systems have been deployed as web services, peer-review researchers will be able to use them to calculate scores on assignments, both past and present (past data can be used to tune the algorithms).&lt;br /&gt;
For this project, our team's job is to refactor the file: reputation_web_service_controller.rb. This file is the controller to calculate the reputation scores. A “reputation” measures how close a reviewer’s scores are to other reviewers’ scores. This controller implements the calculation of reputation scores.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
reputation_web_service_controller.rb is a fairly complex file. It contains a lot of methods that are long and hard to understand (for e.g. send_post_request). These methods need to be broken down into simpler and more specific methods that are easier to read/understand. Also, the few instances of code duplication that exist should be removed.&lt;br /&gt;
&lt;br /&gt;
# There is a lot of unused/commented code, which should be removed.&lt;br /&gt;
# Figure out what the code is doing and write appropriate comments for it.&lt;br /&gt;
# Rename bad method names such as (db_query, json_generator). Method names should be verbs, and should say what the method does.  Method names should not be so general that they could apply to many different methods..&lt;br /&gt;
# In the case of db_query, the name should say what it queries for. Also, this method not only queries, but calculates sums.  Since each method should do only one thing, the code for calculating sums should be in another method. And there should be comments in the code!&lt;br /&gt;
#json_generator should be generate_json. There needs to be a method comment saying what the parameters are.&lt;br /&gt;
# In  send_post_request, there are references to specific assignments, such as 724, 735, and 756. They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed. send_post_request is 91 lines long, far too long.&lt;br /&gt;
#There is a password for a private key in the code (and the code is open-sourced!) It should be in the db instead.&lt;br /&gt;
#Fix spelling of “dimention”&lt;br /&gt;
#client is a bad method name; why is stuff being copied from class variables to instance variables?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Steps taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Refactor db_query===&lt;br /&gt;
&lt;br /&gt;
  Renaming of bad method names such as (&amp;lt;code&amp;gt;db_query&amp;lt;/code&amp;gt;). Method names should be verbs, and should say what the method does. &lt;br /&gt;
Method names should not be so general that they could apply to many different methods.&lt;br /&gt;
The other problem with the method was that it did not follow the good practice of having each method perform only one task. &lt;br /&gt;
This method got the review responses with a db query.&lt;br /&gt;
Also, it iterated over the review responses to perform a calculation of peer review grades.&lt;br /&gt;
&lt;br /&gt;
We have split the method into two to have the review responses do only the get responses part.&lt;br /&gt;
&lt;br /&gt;
[[File:snip7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The code for calculating sums should be in another method. ===&lt;br /&gt;
  The result of this method is stored and we have created a new method &amp;lt;code&amp;gt;calculate_peer_review_grades&amp;lt;/code&amp;gt; and moved the calculation part to it. &amp;lt;br&amp;gt;&lt;br /&gt;
We also added a comment to indicate the calculate weighted sum part.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip8.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  And then, we have changed the call to the &amp;lt;code&amp;gt; get review responses&amp;lt;/code&amp;gt; and the new method calculate peer review grades accordingly&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip3.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, we have changed &amp;lt;code&amp;gt;db_query_with_quiz_scores&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;calculate_quiz_scores&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip5.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''' Change name of json_generator'''===&lt;br /&gt;
  &lt;br /&gt;
  json_generator method should be &amp;lt;code&amp;gt;generate_json&amp;lt;/code&amp;gt;&lt;br /&gt;
Also,there needs to be a method comment saying what the parameters are.&lt;br /&gt;
We have added the method comments with parameter information as seen below.&lt;br /&gt;
&lt;br /&gt;
[[File:snip4.png]]&lt;br /&gt;
&lt;br /&gt;
===''' Refactor send_post_request'''===&lt;br /&gt;
&lt;br /&gt;
 “In (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;), there are references to specific assignments, such as 724, 735, and 756. &lt;br /&gt;
  They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed.&lt;br /&gt;
  send_post_request is 91 lines long, far too long”&lt;br /&gt;
&lt;br /&gt;
We observed that encryption of request being sent to evaluate Algorithm and decryption of response is written in (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) only that is why send post is 91 lines long.&lt;br /&gt;
We have created two separate methods &lt;br /&gt;
(&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
(&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the image below we can see that we have separated Encryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:encryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
On the similar lines we have separated Decryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:decryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;) has been refactored as follows &lt;br /&gt;
&lt;br /&gt;
[[File:encrypt_request.png]]&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;) has been refactored as follows&lt;br /&gt;
&lt;br /&gt;
[[File:decrypt_request.png]]&lt;br /&gt;
&lt;br /&gt;
===''' Fixed spelling of dimention'''===&lt;br /&gt;
&lt;br /&gt;
[[File:capture2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Updating client method'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We changed the class variables in the code to instance variables because we realized that the send_post_request method and client method were the only methods using the class variables.&lt;br /&gt;
A client.html.erb file was used to call our controller to fill out a form for send_post_request which set values of class variables then immediately redirected control to the client method which set the instance variables to those class variables. The instance variables were then used in the rest of the client.html.erb file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process of setting class variables to instance variables with a function was redundant, so we removed simply set the instance variables within the send_post_request method and took them out of the client method.&lt;br /&gt;
The client method did have a few actions that it completed besides setting class variables which we have left in the method until we can find a solution to replacing them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:old-client-method.png|frame|none|alt=Alt text|Old client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:new-client-method-and-helpers-new.png|frame|none|alt=Alt text|Newest client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reason why we kept the client method's name is because the routes.rb file specifies the client method in the code and we haven't fully tracked down the impact of that yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing == &lt;br /&gt;
=== Test Plan === &lt;br /&gt;
There was no existing tests available for the Reputation web service controller. &lt;br /&gt;
Since we are refactoring it, Our testing plan is to have an automated testing to ensure that the refactoring such as splitting a method into separate methods does not affect the existing implementation.&lt;br /&gt;
We also added steps for the manual testing to make sure the page loads as expected after the refactoring.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For the automated testing, We are using Rspec tests. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===RSpec===&lt;br /&gt;
We have tested the two new methods created during refactoring and also a renamed method. &lt;br /&gt;
The test coverage has increased a bit by 0.6% to 44%.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The tests we created can also be manually run with command &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;rspec spec/controllers/reputation_web_controller_spec.rb. &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:snip13.png]]&lt;br /&gt;
&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The steps to test our branch are below, but they are failing right now due to errors that are in other files of the beta branch.&lt;br /&gt;
&lt;br /&gt;
To test our program you must login to the site here: http://152.7.98.78:8080/&lt;br /&gt;
&lt;br /&gt;
Username: instructor6&lt;br /&gt;
Password: password&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then the page &amp;quot;Manage content&amp;quot; doesn't show up, go to Manage... -&amp;gt; Assignments&lt;br /&gt;
&lt;br /&gt;
[[File:snip14.png]]&lt;br /&gt;
&lt;br /&gt;
Then on the CSC 517, Fall 2017 Row, click on &amp;quot;Add Participants&amp;quot; in the actions column. This is also indicated by a blue shirted person.&lt;br /&gt;
&lt;br /&gt;
[[File:snip15.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once in there, copy on of the student names (such as student7487) and then go to Manage... -&amp;gt; Impersonate User and enter their name (student7487) into the text field.&lt;br /&gt;
&lt;br /&gt;
[[File:snip16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After impersonating them, you should be able to see their assignments. Click on any of their assignments such as &amp;quot;Program 1&amp;quot;, then click on &amp;quot;Alternate View&amp;quot; to the right of &amp;quot;Your Scores&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:snip17.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:snip18.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&amp;lt;code&amp;gt;reputation_web_service_controller.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''New Files'''==&lt;br /&gt;
&amp;lt;code&amp;gt;reputation_web_service_controller_spec.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
'''Project Mentor:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Saurabh Shingte&lt;br /&gt;
&lt;br /&gt;
'''Project Members:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Abhishek Gupta &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza&amp;lt;br&amp;gt;&lt;br /&gt;
Ummu Kolusum Yasmin Ahamed Adam&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/srcapezza/expertiza/tree/beta Project Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/1790 Github Pull Request]&lt;br /&gt;
*[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
*[http://expertiza.ncsu.edu/ The live Expertiza website]&lt;br /&gt;
*[http://research.csc.ncsu.edu/efg/expertiza Expertiza project Details]&lt;br /&gt;
*[https://www.youtube.com/channel/UCdKXzox7hrWjfOMML6FzTWg Expertiza YouTube Channel]&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip17.png&amp;diff=135726</id>
		<title>File:Snip17.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip17.png&amp;diff=135726"/>
		<updated>2020-10-20T03:28:40Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip16.png&amp;diff=135725</id>
		<title>File:Snip16.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip16.png&amp;diff=135725"/>
		<updated>2020-10-20T03:28:28Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip15.png&amp;diff=135724</id>
		<title>File:Snip15.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip15.png&amp;diff=135724"/>
		<updated>2020-10-20T03:28:14Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip14.png&amp;diff=135722</id>
		<title>File:Snip14.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip14.png&amp;diff=135722"/>
		<updated>2020-10-20T03:26:25Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: Srcapezz uploaded a new version of File:Snip14.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip14.png&amp;diff=135721</id>
		<title>File:Snip14.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Snip14.png&amp;diff=135721"/>
		<updated>2020-10-20T03:25:55Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135719</id>
		<title>CSC/ECE 517 Fall 2020 - E2064. Refactor reputation web service controller.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135719"/>
		<updated>2020-10-20T03:24:34Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''==&lt;br /&gt;
==='''Introduction to Expertiza'''===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review based system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types for assignments, including the URLs and wiki pages.&lt;br /&gt;
==='''About Reputation Web Service Controller'''===&lt;br /&gt;
Expertiza allows student work to be peer-reviewed, since peers can provide more feedback than the instructor can. However, if we want to assure that all students receive competent feedback, or even use peer-assigned grades, we need a way to judge which peer reviewers are most credible. The solution is the reputation system. Reputation systems have been deployed as web services, peer-review researchers will be able to use them to calculate scores on assignments, both past and present (past data can be used to tune the algorithms).&lt;br /&gt;
For this project, our team's job is to refactor the file: reputation_web_service_controller.rb. This file is the controller to calculate the reputation scores. A “reputation” measures how close a reviewer’s scores are to other reviewers’ scores. This controller implements the calculation of reputation scores.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
reputation_web_service_controller.rb is a fairly complex file. It contains a lot of methods that are long and hard to understand (for e.g. send_post_request). These methods need to be broken down into simpler and more specific methods that are easier to read/understand. Also, the few instances of code duplication that exist should be removed.&lt;br /&gt;
&lt;br /&gt;
# There is a lot of unused/commented code, which should be removed.&lt;br /&gt;
# Figure out what the code is doing and write appropriate comments for it.&lt;br /&gt;
# Rename bad method names such as (db_query, json_generator). Method names should be verbs, and should say what the method does.  Method names should not be so general that they could apply to many different methods..&lt;br /&gt;
# In the case of db_query, the name should say what it queries for. Also, this method not only queries, but calculates sums.  Since each method should do only one thing, the code for calculating sums should be in another method. And there should be comments in the code!&lt;br /&gt;
#json_generator should be generate_json. There needs to be a method comment saying what the parameters are.&lt;br /&gt;
# In  send_post_request, there are references to specific assignments, such as 724, 735, and 756. They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed. send_post_request is 91 lines long, far too long.&lt;br /&gt;
#There is a password for a private key in the code (and the code is open-sourced!) It should be in the db instead.&lt;br /&gt;
#Fix spelling of “dimention”&lt;br /&gt;
#client is a bad method name; why is stuff being copied from class variables to instance variables?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Steps taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Refactor db_query===&lt;br /&gt;
&lt;br /&gt;
  Renaming of bad method names such as (&amp;lt;code&amp;gt;db_query&amp;lt;/code&amp;gt;). Method names should be verbs, and should say what the method does. &lt;br /&gt;
Method names should not be so general that they could apply to many different methods.&lt;br /&gt;
The other problem with the method was that it did not follow the good practice of having each method perform only one task. &lt;br /&gt;
This method got the review responses with a db query.&lt;br /&gt;
Also, it iterated over the review responses to perform a calculation of peer review grades.&lt;br /&gt;
&lt;br /&gt;
We have split the method into two to have the review responses do only the get responses part.&lt;br /&gt;
&lt;br /&gt;
[[File:snip7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The code for calculating sums should be in another method. ===&lt;br /&gt;
  The result of this method is stored and we have created a new method &amp;lt;code&amp;gt;calculate_peer_review_grades&amp;lt;/code&amp;gt; and moved the calculation part to it. &amp;lt;br&amp;gt;&lt;br /&gt;
We also added a comment to indicate the calculate weighted sum part.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip8.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  And then, we have changed the call to the &amp;lt;code&amp;gt; get review responses&amp;lt;/code&amp;gt; and the new method calculate peer review grades accordingly&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip3.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, we have changed &amp;lt;code&amp;gt;db_query_with_quiz_scores&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;calculate_quiz_scores&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip5.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''' Change name of json_generator'''===&lt;br /&gt;
  &lt;br /&gt;
  json_generator method should be &amp;lt;code&amp;gt;generate_json&amp;lt;/code&amp;gt;&lt;br /&gt;
Also,there needs to be a method comment saying what the parameters are.&lt;br /&gt;
We have added the method comments with parameter information as seen below.&lt;br /&gt;
&lt;br /&gt;
[[File:snip4.png]]&lt;br /&gt;
&lt;br /&gt;
===''' Refactor send_post_request'''===&lt;br /&gt;
&lt;br /&gt;
 “In (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;), there are references to specific assignments, such as 724, 735, and 756. &lt;br /&gt;
  They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed.&lt;br /&gt;
  send_post_request is 91 lines long, far too long”&lt;br /&gt;
&lt;br /&gt;
We observed that encryption of request being sent to evaluate Algorithm and decryption of response is written in (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) only that is why send post is 91 lines long.&lt;br /&gt;
We have created two separate methods &lt;br /&gt;
(&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
(&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the image below we can see that we have separated Encryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:encryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
On the similar lines we have separated Decryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:decryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;) has been refactored as follows &lt;br /&gt;
&lt;br /&gt;
[[File:encrypt_request.png]]&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;) has been refactored as follows&lt;br /&gt;
&lt;br /&gt;
[[File:decrypt_request.png]]&lt;br /&gt;
&lt;br /&gt;
===''' Fixed spelling of dimention'''===&lt;br /&gt;
&lt;br /&gt;
[[File:capture2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Updating client method'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We changed the class variables in the code to instance variables because we realized that the send_post_request method and client method were the only methods using the class variables.&lt;br /&gt;
A client.html.erb file was used to call our controller to fill out a form for send_post_request which set values of class variables then immediately redirected control to the client method which set the instance variables to those class variables. The instance variables were then used in the rest of the client.html.erb file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process of setting class variables to instance variables with a function was redundant, so we removed simply set the instance variables within the send_post_request method and took them out of the client method.&lt;br /&gt;
The client method did have a few actions that it completed besides setting class variables which we have left in the method until we can find a solution to replacing them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:old-client-method.png|frame|none|alt=Alt text|Old client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:new-client-method-and-helpers-new.png|frame|none|alt=Alt text|Newest client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reason why we kept the client method's name is because the routes.rb file specifies the client method in the code and we haven't fully tracked down the impact of that yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing == &lt;br /&gt;
=== Test Plan === &lt;br /&gt;
There was no existing tests available for the Reputation web service controller. &lt;br /&gt;
Since we are refactoring it, Our testing plan is to have an automated testing to ensure that the refactoring such as splitting a method into separate methods does not affect the existing implementation.&lt;br /&gt;
We also added steps for the manual testing to make sure the page loads as expected after the refactoring.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For the automated testing, We are using Rspec tests. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===RSpec===&lt;br /&gt;
We have tested the two new methods created during refactoring and also a renamed method. &lt;br /&gt;
The test coverage has increased a bit by 0.6% to 44%.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The tests we created can also be manually run with command &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;rspec spec/controllers/reputation_web_controller_spec.rb. &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:snip13.png]]&lt;br /&gt;
&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The steps to test our branch are below, but they are failing right now due to errors that are in other files of the beta branch.&lt;br /&gt;
&lt;br /&gt;
To test our program you must login to the site here: http://152.7.98.78:8080/&lt;br /&gt;
&lt;br /&gt;
Username: instructor6&lt;br /&gt;
Password: password&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then the page &amp;quot;Manage content&amp;quot; doesn't show up, go to Manage... -&amp;gt; Assignments&lt;br /&gt;
&lt;br /&gt;
[[File:snip14.png]]&lt;br /&gt;
&lt;br /&gt;
Then on the CSC 517, Fall 2017 Row, click on &amp;quot;Add Participants&amp;quot; in the actions column. This is also indicated by a blue shirted person.&lt;br /&gt;
&lt;br /&gt;
[[File:snip15.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:snip16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once in there, copy on of the student names (such as student7487) and then go to Manage... -&amp;gt; Impersonate User and enter their name (student7487) into the text field.&lt;br /&gt;
&lt;br /&gt;
[[File:snip17.png]]&lt;br /&gt;
&lt;br /&gt;
After impersonating them, you should be able to see their assignments. Click on any of their assignments such as &amp;quot;Program 1&amp;quot;, then click on &amp;quot;Alternate View&amp;quot; to the right of &amp;quot;Your Scores&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:snip18.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:snip19.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&amp;lt;code&amp;gt;reputation_web_service_controller.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''New Files'''==&lt;br /&gt;
&amp;lt;code&amp;gt;reputation_web_service_controller_spec.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
'''Project Mentor:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Saurabh Shingte&lt;br /&gt;
&lt;br /&gt;
'''Project Members:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Abhishek Gupta &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza&amp;lt;br&amp;gt;&lt;br /&gt;
Ummu Kolusum Yasmin Ahamed Adam&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/srcapezza/expertiza/tree/beta Project Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/1790 Github Pull Request]&lt;br /&gt;
*[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
*[http://expertiza.ncsu.edu/ The live Expertiza website]&lt;br /&gt;
*[http://research.csc.ncsu.edu/efg/expertiza Expertiza project Details]&lt;br /&gt;
*[https://www.youtube.com/channel/UCdKXzox7hrWjfOMML6FzTWg Expertiza YouTube Channel]&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135715</id>
		<title>CSC/ECE 517 Fall 2020 - E2064. Refactor reputation web service controller.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135715"/>
		<updated>2020-10-20T03:21:19Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''==&lt;br /&gt;
==='''Introduction to Expertiza'''===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review based system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types for assignments, including the URLs and wiki pages.&lt;br /&gt;
==='''About Reputation Web Service Controller'''===&lt;br /&gt;
Expertiza allows student work to be peer-reviewed, since peers can provide more feedback than the instructor can. However, if we want to assure that all students receive competent feedback, or even use peer-assigned grades, we need a way to judge which peer reviewers are most credible. The solution is the reputation system. Reputation systems have been deployed as web services, peer-review researchers will be able to use them to calculate scores on assignments, both past and present (past data can be used to tune the algorithms).&lt;br /&gt;
For this project, our team's job is to refactor the file: reputation_web_service_controller.rb. This file is the controller to calculate the reputation scores. A “reputation” measures how close a reviewer’s scores are to other reviewers’ scores. This controller implements the calculation of reputation scores.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
reputation_web_service_controller.rb is a fairly complex file. It contains a lot of methods that are long and hard to understand (for e.g. send_post_request). These methods need to be broken down into simpler and more specific methods that are easier to read/understand. Also, the few instances of code duplication that exist should be removed.&lt;br /&gt;
&lt;br /&gt;
# There is a lot of unused/commented code, which should be removed.&lt;br /&gt;
# Figure out what the code is doing and write appropriate comments for it.&lt;br /&gt;
# Rename bad method names such as (db_query, json_generator). Method names should be verbs, and should say what the method does.  Method names should not be so general that they could apply to many different methods..&lt;br /&gt;
# In the case of db_query, the name should say what it queries for. Also, this method not only queries, but calculates sums.  Since each method should do only one thing, the code for calculating sums should be in another method. And there should be comments in the code!&lt;br /&gt;
#json_generator should be generate_json. There needs to be a method comment saying what the parameters are.&lt;br /&gt;
# In  send_post_request, there are references to specific assignments, such as 724, 735, and 756. They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed. send_post_request is 91 lines long, far too long.&lt;br /&gt;
#There is a password for a private key in the code (and the code is open-sourced!) It should be in the db instead.&lt;br /&gt;
#Fix spelling of “dimention”&lt;br /&gt;
#client is a bad method name; why is stuff being copied from class variables to instance variables?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Steps taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Refactor db_query===&lt;br /&gt;
&lt;br /&gt;
  Renaming of bad method names such as (&amp;lt;code&amp;gt;db_query&amp;lt;/code&amp;gt;). Method names should be verbs, and should say what the method does. &lt;br /&gt;
Method names should not be so general that they could apply to many different methods.&lt;br /&gt;
The other problem with the method was that it did not follow the good practice of having each method perform only one task. &lt;br /&gt;
This method got the review responses with a db query.&lt;br /&gt;
Also, it iterated over the review responses to perform a calculation of peer review grades.&lt;br /&gt;
&lt;br /&gt;
We have split the method into two to have the review responses do only the get responses part.&lt;br /&gt;
&lt;br /&gt;
[[File:snip7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The code for calculating sums should be in another method. ===&lt;br /&gt;
  The result of this method is stored and we have created a new method &amp;lt;code&amp;gt;calculate_peer_review_grades&amp;lt;/code&amp;gt; and moved the calculation part to it. &amp;lt;br&amp;gt;&lt;br /&gt;
We also added a comment to indicate the calculate weighted sum part.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip8.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  And then, we have changed the call to the &amp;lt;code&amp;gt; get review responses&amp;lt;/code&amp;gt; and the new method calculate peer review grades accordingly&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip3.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, we have changed &amp;lt;code&amp;gt;db_query_with_quiz_scores&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;calculate_quiz_scores&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip5.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''' Change name of json_generator'''===&lt;br /&gt;
  &lt;br /&gt;
  json_generator method should be &amp;lt;code&amp;gt;generate_json&amp;lt;/code&amp;gt;&lt;br /&gt;
Also,there needs to be a method comment saying what the parameters are.&lt;br /&gt;
We have added the method comments with parameter information as seen below.&lt;br /&gt;
&lt;br /&gt;
[[File:snip4.png]]&lt;br /&gt;
&lt;br /&gt;
===''' Refactor send_post_request'''===&lt;br /&gt;
&lt;br /&gt;
 “In (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;), there are references to specific assignments, such as 724, 735, and 756. &lt;br /&gt;
  They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed.&lt;br /&gt;
  send_post_request is 91 lines long, far too long”&lt;br /&gt;
&lt;br /&gt;
We observed that encryption of request being sent to evaluate Algorithm and decryption of response is written in (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) only that is why send post is 91 lines long.&lt;br /&gt;
We have created two separate methods &lt;br /&gt;
(&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
(&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the image below we can see that we have separated Encryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:encryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
On the similar lines we have separated Decryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:decryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;) has been refactored as follows &lt;br /&gt;
&lt;br /&gt;
[[File:encrypt_request.png]]&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;) has been refactored as follows&lt;br /&gt;
&lt;br /&gt;
[[File:decrypt_request.png]]&lt;br /&gt;
&lt;br /&gt;
===''' Fixed spelling of dimention'''===&lt;br /&gt;
&lt;br /&gt;
[[File:capture2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Updating client method'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We changed the class variables in the code to instance variables because we realized that the send_post_request method and client method were the only methods using the class variables.&lt;br /&gt;
A client.html.erb file was used to call our controller to fill out a form for send_post_request which set values of class variables then immediately redirected control to the client method which set the instance variables to those class variables. The instance variables were then used in the rest of the client.html.erb file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process of setting class variables to instance variables with a function was redundant, so we removed simply set the instance variables within the send_post_request method and took them out of the client method.&lt;br /&gt;
The client method did have a few actions that it completed besides setting class variables which we have left in the method until we can find a solution to replacing them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:old-client-method.png|frame|none|alt=Alt text|Old client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:new-client-method-and-helpers-new.png|frame|none|alt=Alt text|Newest client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reason why we kept the client method's name is because the routes.rb file specifies the client method in the code and we haven't fully tracked down the impact of that yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing == &lt;br /&gt;
=== Test Plan === &lt;br /&gt;
There was no existing tests available for the Reputation web service controller. &lt;br /&gt;
Since we are refactoring it, Our testing plan is to have an automated testing to ensure that the refactoring such as splitting a method into separate methods does not affect the existing implementation.&lt;br /&gt;
We also added steps for the manual testing to make sure the page loads as expected after the refactoring.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For the automated testing, We are using Rspec tests. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===RSpec===&lt;br /&gt;
We have tested the two new methods created during refactoring and also a renamed method. &lt;br /&gt;
The test coverage has increased a bit by 0.6% to 44%.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The tests we created can also be manually run with command &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;rspec spec/controllers/reputation_web_controller_spec.rb. &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:snip13.png]]&lt;br /&gt;
&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The steps to test our branch are below, but they are failing right now due to errors that are in other files of the beta branch.&lt;br /&gt;
&lt;br /&gt;
To test our program you must login to the site here: http://152.7.98.78:8080/&lt;br /&gt;
&lt;br /&gt;
Username: instructor6&lt;br /&gt;
Password: password&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then the page &amp;quot;Manage content&amp;quot; doesn't show up, go to Manage... -&amp;gt; Assignments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then on the CSC 517, Fall 2017 Row, click on &amp;quot;Add Participants&amp;quot; in the actions column. This is also indicated by a blue shirted person.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once in there, copy on of the student names (such as student7487) and then go to Manage... -&amp;gt; Impersonate User and enter their name (student7487) into the text field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After impersonating them, you should be able to see their assignments. Click on any of their assignments such as &amp;quot;Program 1&amp;quot;, then click on &amp;quot;Alternate View&amp;quot; to the right of &amp;quot;Your Scores&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&amp;lt;code&amp;gt;reputation_web_service_controller.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''New Files'''==&lt;br /&gt;
&amp;lt;code&amp;gt;reputation_web_service_controller_spec.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
'''Project Mentor:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Saurabh Shingte&lt;br /&gt;
&lt;br /&gt;
'''Project Members:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Abhishek Gupta &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza&amp;lt;br&amp;gt;&lt;br /&gt;
Ummu Kolusum Yasmin Ahamed Adam&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/srcapezza/expertiza/tree/beta Project Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/1790 Github Pull Request]&lt;br /&gt;
*[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
*[http://expertiza.ncsu.edu/ The live Expertiza website]&lt;br /&gt;
*[http://research.csc.ncsu.edu/efg/expertiza Expertiza project Details]&lt;br /&gt;
*[https://www.youtube.com/channel/UCdKXzox7hrWjfOMML6FzTWg Expertiza YouTube Channel]&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135649</id>
		<title>CSC/ECE 517 Fall 2020 - E2064. Refactor reputation web service controller.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135649"/>
		<updated>2020-10-20T01:23:42Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''==&lt;br /&gt;
==='''Introduction to Expertiza'''===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review based system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types for assignments, including the URLs and wiki pages.&lt;br /&gt;
==='''About Reputation Web Service Controller'''===&lt;br /&gt;
Expertiza allows student work to be peer-reviewed, since peers can provide more feedback than the instructor can. However, if we want to assure that all students receive competent feedback, or even use peer-assigned grades, we need a way to judge which peer reviewers are most credible. The solution is the reputation system. Reputation systems have been deployed as web services, peer-review researchers will be able to use them to calculate scores on assignments, both past and present (past data can be used to tune the algorithms).&lt;br /&gt;
For this project, our team's job is to refactor the file: reputation_web_service_controller.rb. This file is the controller to calculate the reputation scores. A “reputation” measures how close a reviewer’s scores are to other reviewers’ scores. This controller implements the calculation of reputation scores.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
reputation_web_service_controller.rb is a fairly complex file. It contains a lot of methods that are long and hard to understand (for e.g. send_post_request). These methods need to be broken down into simpler and more specific methods that are easier to read/understand. Also, the few instances of code duplication that exist should be removed.&lt;br /&gt;
&lt;br /&gt;
# There is a lot of unused/commented code, which should be removed.&lt;br /&gt;
# Figure out what the code is doing and write appropriate comments for it.&lt;br /&gt;
# Rename bad method names such as (db_query, json_generator). Method names should be verbs, and should say what the method does.  Method names should not be so general that they could apply to many different methods..&lt;br /&gt;
# In the case of db_query, the name should say what it queries for. Also, this method not only queries, but calculates sums.  Since each method should do only one thing, the code for calculating sums should be in another method. And there should be comments in the code!&lt;br /&gt;
#json_generator should be generate_json. There needs to be a method comment saying what the parameters are.&lt;br /&gt;
# In  send_post_request, there are references to specific assignments, such as 724, 735, and 756. They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed. send_post_request is 91 lines long, far too long.&lt;br /&gt;
#There is a password for a private key in the code (and the code is open-sourced!) It should be in the db instead.&lt;br /&gt;
#Fix spelling of “dimention”&lt;br /&gt;
#client is a bad method name; why is stuff being copied from class variables to instance variables?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Steps taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Refactor db_query===&lt;br /&gt;
&lt;br /&gt;
  Renaming of bad method names such as (&amp;lt;code&amp;gt;db_query&amp;lt;/code&amp;gt;). Method names should be verbs, and should say what the method does. &lt;br /&gt;
Method names should not be so general that they could apply to many different methods.&lt;br /&gt;
The other problem with the method was that it did not follow the good practice of having each method perform only one task. &lt;br /&gt;
This method got the review responses with a db query.&lt;br /&gt;
Also, it iterated over the review responses to perform a calculation of peer review grades.&lt;br /&gt;
&lt;br /&gt;
We have split the method into two to have the review responses do only the get responses part.&lt;br /&gt;
&lt;br /&gt;
[[File:snip7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The code for calculating sums should be in another method. ===&lt;br /&gt;
  The result of this method is stored and we have created a new method &amp;lt;code&amp;gt;calculate_peer_review_grades&amp;lt;/code&amp;gt; and moved the calculation part to it. &amp;lt;br&amp;gt;&lt;br /&gt;
We also added a comment to indicate the calculate weighted sum part.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip8.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  And then, we have changed the call to the &amp;lt;code&amp;gt; get review responses&amp;lt;/code&amp;gt; and the new method calculate peer review grades accordingly&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip3.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, we have changed &amp;lt;code&amp;gt;db_query_with_quiz_scores&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;calculate_quiz_scores&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip5.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''' Change name of json_generator'''===&lt;br /&gt;
  &lt;br /&gt;
  json_generator method should be &amp;lt;code&amp;gt;generate_json&amp;lt;/code&amp;gt;&lt;br /&gt;
Also,there needs to be a method comment saying what the parameters are.&lt;br /&gt;
We have added the method comments with parameter information as seen below.&lt;br /&gt;
&lt;br /&gt;
[[File:snip4.png]]&lt;br /&gt;
&lt;br /&gt;
===''' Refactor send_post_request'''===&lt;br /&gt;
&lt;br /&gt;
 “In (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;), there are references to specific assignments, such as 724, 735, and 756. &lt;br /&gt;
  They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed.&lt;br /&gt;
  send_post_request is 91 lines long, far too long”&lt;br /&gt;
&lt;br /&gt;
We observed that encryption of request being sent to evaluate Algorithm and decryption of response is written in (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) only that is why send post is 91 lines long.&lt;br /&gt;
We have created two separate methods &lt;br /&gt;
(&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
(&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the image below we can see that we have separated Encryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:encryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
On the similar lines we have separated Decryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:decryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
===''' Fixed spelling of dimention'''===&lt;br /&gt;
&lt;br /&gt;
[[File:capture2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Updating client method'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We changed the class variables in the code to instance variables because we realized that the send_post_request method and client method were the only methods using the class variables.&lt;br /&gt;
A client.html.erb file was used to call our controller to fill out a form for send_post_request which set values of class variables then immediately redirected control to the client method which set the instance variables to those class variables. The instance variables were then used in the rest of the client.html.erb file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process of setting class variables to instance variables with a function was redundant, so we removed simply set the instance variables within the send_post_request method and took them out of the client method.&lt;br /&gt;
The client method did have a few actions that it completed besides setting class variables which we have left in the method until we can find a solution to replacing them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:old-client-method.png|frame|none|alt=Alt text|Old client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:new-client-method-and-helpers-new.png|frame|none|alt=Alt text|Newest client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reason why we kept the client method's name is because the routes.rb file specifies the client method in the code and we haven't fully tracked down the impact of that yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing == &lt;br /&gt;
=== Test Plan === &lt;br /&gt;
There was no existing tests available for the Reputation web service controller. &lt;br /&gt;
Since we are refactoring it, Our testing plan is to have an automated testing to ensure that the refactoring such as splitting a method into separate methods does not affect the existing implementation.&lt;br /&gt;
We also added steps for the manual testing to make sure the page loads as expected after the refactoring.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For the automated testing, We are using Rspec tests. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===RSpec===&lt;br /&gt;
We have tested the two new methods created during refactoring and also a renamed method. &lt;br /&gt;
The test coverage has increased a bit by 0.6% to 44%.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The tests we created can also be manually run with command &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;rspec spec/controllers/reputation_web_controller_spec.rb. &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:snip13.png]]&lt;br /&gt;
&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To test our program you must login to the site here: http://152.7.98.78:8080/&lt;br /&gt;
&lt;br /&gt;
Username: instructor6&lt;br /&gt;
Password: password&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then if this page &amp;quot;Manage content&amp;quot; doesn't show up, go to Manage... -&amp;gt; Assignments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then on the CSC 517, Fall 2017 Row, click on &amp;quot;Add Participants&amp;quot; in the actions column. This is also indicated by a blue shirted person.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once in there, copy on of the student names (such as student7487) and then go to Manage... -&amp;gt; Impersonate User and enter their name (student7487) into the text field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After impersonating them, you should be able to see their assignments. Click on any of their assignments such as &amp;quot;Program 1&amp;quot;, then click on &amp;quot;Alternate View&amp;quot; to the right of &amp;quot;Your Scores&amp;quot;. This will take you to a site that shows a Reputation Score like in the screenshot below. This proves that our controller has given the information to this view for the  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&amp;lt;code&amp;gt;reputation_web_service_controller.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''New Files'''==&lt;br /&gt;
&amp;lt;code&amp;gt;reputation_web_service_controller_spec.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
'''Project Mentor:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Saurabh Shingte&lt;br /&gt;
&lt;br /&gt;
'''Project Members:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Abhishek Gupta &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza&amp;lt;br&amp;gt;&lt;br /&gt;
Ummu Kolusum Yasmin Ahamed Adam&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/srcapezza/expertiza/tree/beta Project Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/1790 Github Pull Request]&lt;br /&gt;
*[https://github.com/expertiza/expertiza Expertiza on GitHub]&lt;br /&gt;
*[http://expertiza.ncsu.edu/ The live Expertiza website]&lt;br /&gt;
*[http://research.csc.ncsu.edu/efg/expertiza Expertiza project Details]&lt;br /&gt;
*[https://www.youtube.com/channel/UCdKXzox7hrWjfOMML6FzTWg Expertiza YouTube Channel]&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135127</id>
		<title>CSC/ECE 517 Fall 2020 - E2064. Refactor reputation web service controller.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135127"/>
		<updated>2020-10-14T02:48:01Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''==&lt;br /&gt;
==='''Introduction to Expertiza'''===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review based system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types for assignments, including the URLs and wiki pages.&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
Expertiza allows student work to be peer-reviewed, since peers can provide more feedback than the instructor can. However, if we want to assure that all students receive competent feedback, or even use peer-assigned grades, we need a way to judge which peer reviewers are most credible. The solution is the reputation system. Reputation systems have been deployed as web services, peer-review researchers will be able to use them to calculate scores on assignments, both past and present (past data can be used to tune the algorithms).&lt;br /&gt;
For this project, our team's job is to refactor the file: reputation_web_service_controller.rb. This file is the controller to calculate the reputation scores. A “reputation” measures how close a reviewer’s scores are to other reviewers’ scores. This controller implements the calculation of reputation scores.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
reputation_web_service_controller.rb is a fairly complex file. It contains a lot of methods that are long and hard to understand (for e.g. send_post_request). These methods need to be broken down into simpler and more specific methods that are easier to read/understand. Also, the few instances of code duplication that exist should be removed.&lt;br /&gt;
&lt;br /&gt;
# There is a lot of unused/commented code, which should be removed.&lt;br /&gt;
# Figure out what the code is doing and write appropriate comments for it.&lt;br /&gt;
# Rename bad method names such as (db_query, json_generator). Method names should be verbs, and should say what the method does.  Method names should not be so general that they could apply to many different methods..&lt;br /&gt;
# In the case of db_query, the name should say what it queries for. Also, this method not only queries, but calculates sums.  Since each method should do only one thing, the code for calculating sums should be in another method. And there should be comments in the code!&lt;br /&gt;
#json_generator should be generate_json. There needs to be a method comment saying what the parameters are.&lt;br /&gt;
# In  send_post_request, there are references to specific assignments, such as 724, 735, and 756. They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed. send_post_request is 91 lines long, far too long.&lt;br /&gt;
#There is a password for a private key in the code (and the code is open-sourced!) It should be in the db instead.&lt;br /&gt;
#Fix spelling of “dimention”&lt;br /&gt;
#client is a bad method name; why is stuff being copied from class variables to instance variables?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
reputation_web_service_controller.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Important links'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/srcapezza/expertiza/tree/beta Project Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1790 Github Pull Request]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Steps taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Refactor db_query===&lt;br /&gt;
&lt;br /&gt;
  Renaming of bad method names such as (&amp;lt;code&amp;gt;db_query&amp;lt;/code&amp;gt;). Method names should be verbs, and should say what the method does. &lt;br /&gt;
Method names should not be so general that they could apply to many different methods.&lt;br /&gt;
The other problem with the method was that it did not follow the good practice of having each method perform only one task. &lt;br /&gt;
This method got the review responses with a db query.&lt;br /&gt;
Also, it iterated over the review responses to perform a calculation of peer review grades.&lt;br /&gt;
&lt;br /&gt;
We have split the method into two to have the review responses do only the get responses part.&lt;br /&gt;
&lt;br /&gt;
[[File:snip7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The code for calculating sums should be in another method. ===&lt;br /&gt;
  The result of this method is stored and we have created a new method &amp;lt;code&amp;gt;calculate_peer_review_grades&amp;lt;/code&amp;gt; and moved the calculation part to it. &amp;lt;br&amp;gt;&lt;br /&gt;
We also added a comment to indicate the calculate weighted sum part.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip8.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  And then, we have changed the call to the &amp;lt;code&amp;gt; get review responses&amp;lt;/code&amp;gt; and the new method calculate peer review grades accordingly&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:snip3.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, we have changed &amp;lt;code&amp;gt;db_query_with_quiz_scores&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;calculate_quiz_scores&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:snip5.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''' Change name of json_generator'''===&lt;br /&gt;
  &lt;br /&gt;
  json_generator method should be &amp;lt;code&amp;gt;generate_json&amp;lt;/code&amp;gt;&lt;br /&gt;
Also,there needs to be a method comment saying what the parameters are.&lt;br /&gt;
We have added the method comments with parameter information as seen below.&lt;br /&gt;
&lt;br /&gt;
[[File:snip4.png]]&lt;br /&gt;
&lt;br /&gt;
===''' Refactor send_post_request'''===&lt;br /&gt;
&lt;br /&gt;
 “In (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;), there are references to specific assignments, such as 724, 735, and 756. &lt;br /&gt;
  They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed.&lt;br /&gt;
  send_post_request is 91 lines long, far too long”&lt;br /&gt;
&lt;br /&gt;
We observed that encryption of request being sent to evaluate Algorithm and decryption of response is written in (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) only that is why send post is 91 lines long.&lt;br /&gt;
We have created two separate methods &lt;br /&gt;
(&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
(&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the image below we can see that we have separated Encryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:encryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
On the similar lines we have separated Decryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:decryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Updating client method'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We changed the class variables in the code to instance variables because we realized that the send_post_request method and client method were the only methods using the class variables.&lt;br /&gt;
A client.html.erb file was used to call our controller to fill out a form for send_post_request which set values of class variables then immediately redirected control to the client method which set the instance variables to those class variables. The instance variables were then used in the rest of the client.html.erb file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process of setting class variables to instance variables with a function was redundant, so we removed simply set the instance variables within the send_post_request method and took them out of the client method.&lt;br /&gt;
The client method did have a few actions that it completed besides setting class variables which we have left in the method until we can find a solution to replacing them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:old-client-method.png|frame|none|alt=Alt text|Old client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:new-client-method-and-helpers-new.png|frame|none|alt=Alt text|Newest client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reason why we kept the client method's name is because the routes.rb file specifies the client method in the code and we haven't fully tracked down the impact of that yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Team Information''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Project Mentor:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Saurabh Shingte&lt;br /&gt;
&lt;br /&gt;
'''Project Members:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Abhishek Gupta &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza&amp;lt;br&amp;gt;&lt;br /&gt;
Ummu Kolusum Yasmin Ahamed Adam&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135126</id>
		<title>CSC/ECE 517 Fall 2020 - E2064. Refactor reputation web service controller.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2064._Refactor_reputation_web_service_controller.rb&amp;diff=135126"/>
		<updated>2020-10-14T02:47:54Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''==&lt;br /&gt;
==='''Introduction to Expertiza'''===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review based system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types for assignments, including the URLs and wiki pages.&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
Expertiza allows student work to be peer-reviewed, since peers can provide more feedback than the instructor can. However, if we want to assure that all students receive competent feedback, or even use peer-assigned grades, we need a way to judge which peer reviewers are most credible. The solution is the reputation system. Reputation systems have been deployed as web services, peer-review researchers will be able to use them to calculate scores on assignments, both past and present (past data can be used to tune the algorithms).&lt;br /&gt;
For this project, our team's job is to refactor the file: reputation_web_service_controller.rb. This file is the controller to calculate the reputation scores. A “reputation” measures how close a reviewer’s scores are to other reviewers’ scores. This controller implements the calculation of reputation scores.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
&lt;br /&gt;
reputation_web_service_controller.rb is a fairly complex file. It contains a lot of methods that are long and hard to understand (for e.g. send_post_request). These methods need to be broken down into simpler and more specific methods that are easier to read/understand. Also, the few instances of code duplication that exist should be removed.&lt;br /&gt;
&lt;br /&gt;
# There is a lot of unused/commented code, which should be removed.&lt;br /&gt;
# Figure out what the code is doing and write appropriate comments for it.&lt;br /&gt;
# Rename bad method names such as (db_query, json_generator). Method names should be verbs, and should say what the method does.  Method names should not be so general that they could apply to many different methods..&lt;br /&gt;
# In the case of db_query, the name should say what it queries for. Also, this method not only queries, but calculates sums.  Since each method should do only one thing, the code for calculating sums should be in another method. And there should be comments in the code!&lt;br /&gt;
#json_generator should be generate_json. There needs to be a method comment saying what the parameters are.&lt;br /&gt;
# In  send_post_request, there are references to specific assignments, such as 724, 735, and 756. They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed. send_post_request is 91 lines long, far too long.&lt;br /&gt;
#There is a password for a private key in the code (and the code is open-sourced!) It should be in the db instead.&lt;br /&gt;
#Fix spelling of “dimention”&lt;br /&gt;
#client is a bad method name; why is stuff being copied from class variables to instance variables?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
reputation_web_service_controller.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Important links'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/srcapezza/expertiza/tree/beta Project Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1790 Github Pull Request]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Steps taken to resolve the issues'''==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Refactor db_query===&lt;br /&gt;
&lt;br /&gt;
  Renaming of bad method names such as (&amp;lt;code&amp;gt;db_query&amp;lt;/code&amp;gt;). Method names should be verbs, and should say what the method does. &lt;br /&gt;
Method names should not be so general that they could apply to many different methods.&lt;br /&gt;
The other problem with the method was that it did not follow the good practice of having each method perform only one task. &lt;br /&gt;
This method got the review responses with a db query.&lt;br /&gt;
Also, it iterated over the review responses to perform a calculation of peer review grades.&lt;br /&gt;
&lt;br /&gt;
We have split the method into two to have the review responses do only the get responses part.&lt;br /&gt;
&lt;br /&gt;
[[File:snip7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The code for calculating sums should be in another method. ===&lt;br /&gt;
  The result of this method is stored and we have created a new method &amp;lt;code&amp;gt;calculate_peer_review_grades&amp;lt;/code&amp;gt; and moved the calculation part to it. &amp;lt;br&amp;gt;&lt;br /&gt;
We also added a comment to indicate the calculate weighted sum part.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:snip8.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  And then, we have changed the call to the &amp;lt;code&amp;gt; get review responses&amp;lt;/code&amp;gt; and the new method calculate peer review grades accordingly&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:snip3.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, we have changed &amp;lt;code&amp;gt;db_query_with_quiz_scores&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;calculate_quiz_scores&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:snip5.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''' Change name of json_generator'''===&lt;br /&gt;
  &lt;br /&gt;
  json_generator method should be &amp;lt;code&amp;gt;generate_json&amp;lt;/code&amp;gt;&lt;br /&gt;
Also,there needs to be a method comment saying what the parameters are.&lt;br /&gt;
We have added the method comments with parameter information as seen below.&lt;br /&gt;
&lt;br /&gt;
[[File:snip4.png]]&lt;br /&gt;
&lt;br /&gt;
===''' Refactor send_post_request'''===&lt;br /&gt;
&lt;br /&gt;
 “In (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;), there are references to specific assignments, such as 724, 735, and 756. &lt;br /&gt;
  They were put in to gather data for a paper published in 2015. They are no longer relevant and should be removed.&lt;br /&gt;
  send_post_request is 91 lines long, far too long”&lt;br /&gt;
&lt;br /&gt;
We observed that encryption of request being sent to evaluate Algorithm and decryption of response is written in (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) only that is why send post is 91 lines long.&lt;br /&gt;
We have created two separate methods &lt;br /&gt;
(&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
(&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In the image below we can see that we have separated Encryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;encrypt_request&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:encryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
On the similar lines we have separated Decryption functionality from (&amp;lt;code&amp;gt;send_post_request&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;decrypt_response&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[File:decryption-separated.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Updating client method'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We changed the class variables in the code to instance variables because we realized that the send_post_request method and client method were the only methods using the class variables.&lt;br /&gt;
A client.html.erb file was used to call our controller to fill out a form for send_post_request which set values of class variables then immediately redirected control to the client method which set the instance variables to those class variables. The instance variables were then used in the rest of the client.html.erb file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process of setting class variables to instance variables with a function was redundant, so we removed simply set the instance variables within the send_post_request method and took them out of the client method.&lt;br /&gt;
The client method did have a few actions that it completed besides setting class variables which we have left in the method until we can find a solution to replacing them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:new-client-method-and-helpers-new.png|frame|none|alt=Alt text|Newest client method]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The reason why we kept the client method's name is because the routes.rb file specifies the client method in the code and we haven't fully tracked down the impact of that yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Team Information''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Project Mentor:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Saurabh Shingte&lt;br /&gt;
&lt;br /&gt;
'''Project Members:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Abhishek Gupta &amp;lt;br&amp;gt;&lt;br /&gt;
Skieler Capezza&amp;lt;br&amp;gt;&lt;br /&gt;
Ummu Kolusum Yasmin Ahamed Adam&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Old-client-method.png&amp;diff=135125</id>
		<title>File:Old-client-method.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Old-client-method.png&amp;diff=135125"/>
		<updated>2020-10-14T02:47:32Z</updated>

		<summary type="html">&lt;p&gt;Srcapezz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srcapezz</name></author>
	</entry>
</feed>