<?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=Trichmo</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=Trichmo"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Trichmo"/>
	<updated>2026-05-27T06:51:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1734&amp;diff=108573</id>
		<title>CSC/ECE 517 Spring 2017 E1734</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1734&amp;diff=108573"/>
		<updated>2017-04-13T12:42:09Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Database Schema */  Added UML&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Improve survey functionality=&lt;br /&gt;
&lt;br /&gt;
== Problem Description ==&lt;br /&gt;
&lt;br /&gt;
Expertiza used to have functionality for conducting surveys. However, the existing code is inefficient and needs to be improved. This functionality has rarely been used and so isn't tested very well either. Therefore, there are parts of survey functionality that are broken or are totally unfinished.&lt;br /&gt;
&lt;br /&gt;
So, there are three major problems this project will tackle.&lt;br /&gt;
&lt;br /&gt;
1) Restructure and move around functionality within classes to further streamline the code.&lt;br /&gt;
&lt;br /&gt;
2) Test the existing functionality and catalog what parts work and what do not. As an instance of a broken feature, take survey deployments for example. During initial testing, it is not possible to deploy any kind of survey. There are other features as well that need little fixes to make them work.&lt;br /&gt;
&lt;br /&gt;
3) Fixing the broken features. This involves little bug fixes here and there, as well as finishing the features that are completely unfinished.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
1) A page to show the distribution of results for all types of questionnaires. &lt;br /&gt;
&lt;br /&gt;
2) Use of inheritance so that survey questionnaire is a subclass of the questionnaire class. Also, course evaluation questionnaire and global survey questionnaire should be subclasses of survey questionnaire.&lt;br /&gt;
&lt;br /&gt;
3) Use response_controller to implement the survey functionality. This should be similar to how other questionnaires like the peer review questionnaire, are implemented.&lt;br /&gt;
&lt;br /&gt;
4) Use the same code to display existing survey responses as to display the responses in peer reviews.&lt;br /&gt;
&lt;br /&gt;
5) For each course or assignment, the admin/instructor should be able to create a survey and have some (or all) of the participants receive the survey.  The instructor should have the option to not include some questions from a global survey. The quiz takers can take the global survey and course survey consecutively.&lt;br /&gt;
&lt;br /&gt;
6) An entry in the participants table called a survey_participant record must be added to indicate when a user is assigned to take part in a survey.&lt;br /&gt;
&lt;br /&gt;
7) Tests need to be written for the feature.&lt;br /&gt;
&lt;br /&gt;
Note: Although the requirements document mentions that the existing code needs to be scrapped and rewritten, after discussion with professor it was decided that this is not a strict requirement.&lt;br /&gt;
&lt;br /&gt;
== Types of Surveys ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are three kinds of surveys available in the Expertiza application. They are differentiated based on the group of people that can have access to these surveys.&lt;br /&gt;
&lt;br /&gt;
The surveys are as follows:&lt;br /&gt;
&lt;br /&gt;
1) Course Survey:&lt;br /&gt;
&lt;br /&gt;
All the participants in a course can take the course survey.&lt;br /&gt;
	&lt;br /&gt;
File: course_evaluation_questionnaire.rb  &lt;br /&gt;
&lt;br /&gt;
2) Global Survey:&lt;br /&gt;
&lt;br /&gt;
Any Expertiza user can take the global survey.&lt;br /&gt;
	&lt;br /&gt;
File: global_survey_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
3) Targeted Survey:&lt;br /&gt;
&lt;br /&gt;
The admin can create a survey targeted to a specific group of people.&lt;br /&gt;
&lt;br /&gt;
File: survey_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
== Class Design ==&lt;br /&gt;
&lt;br /&gt;
=== Existing class structure: ===&lt;br /&gt;
&lt;br /&gt;
[[File:E1734-structure-1.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Updated class structure: ===&lt;br /&gt;
&lt;br /&gt;
[[File:E1734-structure-2New.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New Class Functionality: ===&lt;br /&gt;
&lt;br /&gt;
==== Questionnaire: ====&lt;br /&gt;
&lt;br /&gt;
Contains the basic information and methods required for posing questions to students or users in general.  It is inherited by Classes Quiz, Survey, etc.&lt;br /&gt;
&lt;br /&gt;
We can reuse this class's functionality to create, edit and delete surveys. The functionality for checking if questions have been answered can also be borrowed from this class.&lt;br /&gt;
&lt;br /&gt;
==== Survey: ====&lt;br /&gt;
&lt;br /&gt;
This project will introduce a new class called Survey. &lt;br /&gt;
&lt;br /&gt;
This class will inherit from the Questionnaire class and it will be a superclass for the three different kinds of survey classes.&lt;br /&gt;
&lt;br /&gt;
This class will include the assign_participants() method that can be used by any of the child classes to assign participants for their respective surveys.&lt;br /&gt;
&lt;br /&gt;
This class will also have the statistics_generation functionality to be used to provide statistics for any kind of survey. This is the one that will take care of the requirement for getting the distribution of responses.&lt;br /&gt;
&lt;br /&gt;
==== Global Survey: ==== &lt;br /&gt;
&lt;br /&gt;
This class will inherit from class Survey.&lt;br /&gt;
&lt;br /&gt;
This class will be set the display_type for the survey to be global. So, while assigning participants all the users of Expertiza will be able to see this particular survey.&lt;br /&gt;
&lt;br /&gt;
This kind of survey can only be created by admins of the Expertiza system.&lt;br /&gt;
&lt;br /&gt;
==== Course Evaluation: ====  &lt;br /&gt;
&lt;br /&gt;
This is also another type of survey and will inherit from class Survey.&lt;br /&gt;
&lt;br /&gt;
Surveys of this type, however, will only be available to the class to which this survey would be assigned. Accordingly, the display_type for it will be set to course.&lt;br /&gt;
&lt;br /&gt;
So assign_participants() will create new survey participants for all users in a particular course.&lt;br /&gt;
&lt;br /&gt;
==== Survey Questionnaire: ====&lt;br /&gt;
&lt;br /&gt;
This class will also inherit from the class Survey. The name used for this class may change after further discussions with the professor. &lt;br /&gt;
&lt;br /&gt;
The existing survey_questionnaire class will be repurposed to be used to create surveys that could be targeted to a group of users or be attached to a questionnaire.&lt;br /&gt;
&lt;br /&gt;
It will allow for an association between an assignment and a questionnaire to be established.  Additionally, it maintains the instructor id who will create the association. &lt;br /&gt;
&lt;br /&gt;
A flag for a score outside an acceptable range will also be set.  It could also be used to play a part in the total score calculation for the assignment.&lt;br /&gt;
&lt;br /&gt;
== Database Schema ==&lt;br /&gt;
&lt;br /&gt;
There are database tables that are used to track the deployment of the surveys, that are used to help keep track of the participants for each survey and that keep track of all the responses for the surveys we create. We would not be making any or would make only minimal design changes to these tables. Our main task would be to go in and fix things that are not currently operational given what we already have. &lt;br /&gt;
&lt;br /&gt;
To give an idea about these database tables we have included them below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Table: Survey Deployments&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element&lt;br /&gt;
! Type&lt;br /&gt;
! Attributes&lt;br /&gt;
|-&lt;br /&gt;
| course_evaluation_id&lt;br /&gt;
| Integer&lt;br /&gt;
| Limit: 4&lt;br /&gt;
|-&lt;br /&gt;
| start_date&lt;br /&gt;
| Datetime&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| end_date&lt;br /&gt;
| Datetime&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| num_of_students&lt;br /&gt;
| Integer&lt;br /&gt;
| Limit: 4&lt;br /&gt;
|-&lt;br /&gt;
| last_reminder&lt;br /&gt;
| Datetime&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| course_id&lt;br /&gt;
| Integer&lt;br /&gt;
| Limit: 4, Default: 0, Null: false &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Table: Survey Participants&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element&lt;br /&gt;
! Type&lt;br /&gt;
! Attributes&lt;br /&gt;
|-&lt;br /&gt;
| user_id&lt;br /&gt;
| Integer&lt;br /&gt;
| Limit: 4&lt;br /&gt;
|-&lt;br /&gt;
| survey_deployment_id&lt;br /&gt;
| Integer&lt;br /&gt;
| Limit: 4&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Table: Survey Responses&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element&lt;br /&gt;
! Type&lt;br /&gt;
! Attributes&lt;br /&gt;
|-&lt;br /&gt;
| score&lt;br /&gt;
| Integer&lt;br /&gt;
| Limit: 4&lt;br /&gt;
|-&lt;br /&gt;
| comments&lt;br /&gt;
| Text&lt;br /&gt;
| Limit: 65535&lt;br /&gt;
|-&lt;br /&gt;
| assignment_id&lt;br /&gt;
| Integer&lt;br /&gt;
| Limit: 4, Default: 0, Nil: false&lt;br /&gt;
|-&lt;br /&gt;
| question_id&lt;br /&gt;
| Integer&lt;br /&gt;
| Limit: 4, Default: 0, Nil: false&lt;br /&gt;
|-&lt;br /&gt;
| survey_id&lt;br /&gt;
| Integer&lt;br /&gt;
| Limit: 4, Default: 0, Nil: false&lt;br /&gt;
|-&lt;br /&gt;
| email&lt;br /&gt;
| String&lt;br /&gt;
| Limit: 255 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====UML Diagram====&lt;br /&gt;
&lt;br /&gt;
[[File:UML600.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Tasks to be performed ==&lt;br /&gt;
&lt;br /&gt;
Given the information at hand, the following list will provide a good summary of the tasks we will have to perform to achieve the goals of this project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Change the hierarchical structure of classes. Make survey the child of questionnaire. Global survey, survey_questionnaire and course evaluation to be subclasses of survey.&lt;br /&gt;
&lt;br /&gt;
2) Creation, editing and deletion of questions, is a functionality that would be inherited into class Survey(which is a kind of questionnaire) and so into all its children surveys, from the Questionnaire class.&lt;br /&gt;
&lt;br /&gt;
3) Add new class Survey and include functionality to assign(which is in the survey_controller currently) to this model. &lt;br /&gt;
&lt;br /&gt;
4) In the new class add functionality to generate statistics.&lt;br /&gt;
&lt;br /&gt;
5) The display_type for each of the subclasses of Survey can be set individually in the post_initialization method.&lt;br /&gt;
&lt;br /&gt;
6) The three kinds of surveys can be assigned to some either an assignment, a course, a student or to all the users of Expertiza depending on their display_type.&lt;br /&gt;
&lt;br /&gt;
7) Use the course evaluation tab on the Expertiza homepage to display any pending surveys instead of just the course evaluation surveys. The course evaluation tab’s functionality is currently broken and needs to be fixed.&lt;br /&gt;
&lt;br /&gt;
8) &amp;quot;Survey deployment&amp;quot; functionality is broken. Need to make survey deployment of all forms of surveys functional. This would include the following tasks:&lt;br /&gt;
&lt;br /&gt;
   a) Ability to add new survey deployments.&lt;br /&gt;
   b) View responses to the deployments.&lt;br /&gt;
   c) Delete deployments.&lt;br /&gt;
&lt;br /&gt;
9) &amp;quot;Statistic generation for Survey&amp;quot; functionality is broken. From the drop down menu in survey deployments, we can select Statistical tests and that should take the user to a page where depending on the survey chosen the corresponding statistics would be displayed.&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
Testing tool:&lt;br /&gt;
&lt;br /&gt;
RSpec (For the automated tests)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test #&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Steps&lt;br /&gt;
|-&lt;br /&gt;
|Test case 1:&lt;br /&gt;
|Manual&lt;br /&gt;
|Test to check whether an instructor can create a survey.&lt;br /&gt;
|&lt;br /&gt;
1. Login to Expertiza as an instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage… and go to Questionnaire&lt;br /&gt;
&lt;br /&gt;
3. Add the questions, and specify options&lt;br /&gt;
&lt;br /&gt;
4. In the same Questionnaire view, create the questionnaire by Clicking Create&lt;br /&gt;
|-&lt;br /&gt;
|Test case 2:&lt;br /&gt;
|Manual&lt;br /&gt;
|Test to check whether a survey is deployed to the appropriate users.&lt;br /&gt;
|&lt;br /&gt;
1. After creation of a survey that a particular student can participate in, login as that student&lt;br /&gt;
&lt;br /&gt;
2. The student can then participate in the survey by clicking on Surveys.&lt;br /&gt;
&lt;br /&gt;
3.If the survey appears there, that indicates that the survey has been deployed successfully.&lt;br /&gt;
|-&lt;br /&gt;
|Test case 3:&lt;br /&gt;
|Manual&lt;br /&gt;
|Test to check whether the distribution of survey responses is displayed.&lt;br /&gt;
|&lt;br /&gt;
1. Login to Expertiza as an instructor&lt;br /&gt;
&lt;br /&gt;
2. Assuming that a survey is created, and students have participated in it, we can check the distribution of results.&lt;br /&gt;
&lt;br /&gt;
3. Under the Manage… Surveys tab, click Statistical tests&lt;br /&gt;
&lt;br /&gt;
4. Click the particular survey that was created to view the distribution of responses.&lt;br /&gt;
|-&lt;br /&gt;
|Test case 4:&lt;br /&gt;
|Automated&lt;br /&gt;
|Test to check whether a survey_participant record is created for the user in the participants table, if the user is assigned to take part in a survey.&lt;br /&gt;
|&lt;br /&gt;
1.Create a survey&lt;br /&gt;
&lt;br /&gt;
2. Assign a user(a student) to the survey&lt;br /&gt;
&lt;br /&gt;
3. In the survey participants table, fire a query to check whether the student having that particular ID is present&lt;br /&gt;
|-&lt;br /&gt;
|Test case 5:&lt;br /&gt;
|Manual&lt;br /&gt;
|Test to check that only allowed users can participate in the survey&lt;br /&gt;
|&lt;br /&gt;
1. Login to Expertiza as a student that is not included as a participant in the survey.&lt;br /&gt;
&lt;br /&gt;
2. By clicking on Surveys, the list of surveys that the student can currently take is displayed&lt;br /&gt;
&lt;br /&gt;
3. If the survey that was created is not visible, then the user is correctly excluded.&lt;br /&gt;
|-&lt;br /&gt;
|Test case 6:&lt;br /&gt;
|Automated&lt;br /&gt;
|Test for the display_type after creation of a survey&lt;br /&gt;
|&lt;br /&gt;
1. Create any kind of survey, i.e. Survey Questionnaire, Global Survey Questionnaire, or Course Evaluation Questionnaire&lt;br /&gt;
&lt;br /&gt;
2. Post_initialization as the name suggests, is called after the initialization of a survey, so it gets called on creation in the first step.&lt;br /&gt;
&lt;br /&gt;
3. Assert whether the value of display_type is course/survey/global depending on what survey was created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:UML600.jpg&amp;diff=108572</id>
		<title>File:UML600.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:UML600.jpg&amp;diff=108572"/>
		<updated>2017-04-13T12:40:24Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: E1734 UML Diagram&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;E1734 UML Diagram&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:UML_600.jpg&amp;diff=108571</id>
		<title>File:UML 600.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:UML_600.jpg&amp;diff=108571"/>
		<updated>2017-04-13T12:37:32Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:UML.JPG&amp;diff=108570</id>
		<title>File:UML.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:UML.JPG&amp;diff=108570"/>
		<updated>2017-04-13T12:30:32Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1734&amp;diff=107902</id>
		<title>CSC/ECE 517 Spring 2017 E1734</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1734&amp;diff=107902"/>
		<updated>2017-04-05T00:50:16Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Tasks */ Added bullets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Improve survey functionality=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
===What Needs to be done===&lt;br /&gt;
Expertiza used to be able to distribute surveys to the users in this system. The survey can be a course survey (all the participants of the course can take it) or a global survey (all the users in Expertiza can take it). The survey can also be targeted (the admin can specify a group of people who will receive this survey). Since there are other survey tools available, the survey feature is not used much.  But, it would be good to improve it, since we could then keep survey data in our db along with the courses and assignments that it was produced from.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Tasks===&lt;br /&gt;
*You should remove all the survey-related code and build from scratch. &lt;br /&gt;
*The three kinds of surveys in this project are survey_questionnaire.rb, global_survey_questionnaire.rb, and course_evaluation_questionnaire.rb.&lt;br /&gt;
*Survey questionnaire should be a subclass of questionnaire. The various kinds of surveys should, in turn, be subclasses of survey_questionnaire.  The creation, editing, filling in, and checking that all the questions have been answered survey should be similar to the procedure used for other types of questionnaires (e.g. peer-review questionnaires). You should not treat the surveys differently than other questionnaires, but use polymorphism as much as you can.&lt;br /&gt;
*There should be a page to see the distribution of results for any question (e.g., how many people answered “1”, how many answered “2”, etc.). This page should not only be designed for surveys, but also for other types of questionnaires. (E.g. this view be able to show the score distribution for a question in other types of questionnaires, no matter whether it is a survey question like “how much do you like the course?” or a peer-review question like “how well did the author test the code?”)&lt;br /&gt;
*We should use the same controller method to take the survey as to fill in the peer-review, namely, response_controller. &lt;br /&gt;
*We should use the same code to display the existing survey responses as to display the responses in peer reviews.&lt;br /&gt;
*For each course or assignment, the admin/instructor should be able to create a survey and have some (or all) of the participants receive the survey.  *Normally, all questions in the global_survey_questionnaire are included in every survey, but we should allow the instructor not to include them if (s)he doesn’t want to. The quiz takers can take the global survey and course survey consecutively.&lt;br /&gt;
*When a user is assigned to take part in a survey, a survey_participant record should be created for that user in the participants table.&lt;br /&gt;
*Write tests for this feature.&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1734&amp;diff=107901</id>
		<title>CSC/ECE 517 Spring 2017 E1734</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1734&amp;diff=107901"/>
		<updated>2017-04-05T00:49:18Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: Initial Commit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Improve survey functionality=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
===What Needs to be done===&lt;br /&gt;
Expertiza used to be able to distribute surveys to the users in this system. The survey can be a course survey (all the participants of the course can take it) or a global survey (all the users in Expertiza can take it). The survey can also be targeted (the admin can specify a group of people who will receive this survey). Since there are other survey tools available, the survey feature is not used much.  But, it would be good to improve it, since we could then keep survey data in our db along with the courses and assignments that it was produced from.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Tasks===&lt;br /&gt;
You should remove all the survey-related code and build from scratch. &lt;br /&gt;
The three kinds of surveys in this project are survey_questionnaire.rb, global_survey_questionnaire.rb, and course_evaluation_questionnaire.rb.&lt;br /&gt;
Survey questionnaire should be a subclass of questionnaire. The various kinds of surveys should, in turn, be subclasses of survey_questionnaire.  The creation, editing, filling in, and checking that all the questions have been answered survey should be similar to the procedure used for other types of questionnaires (e.g. peer-review questionnaires). You should not treat the surveys differently than other questionnaires, but use polymorphism as much as you can.&lt;br /&gt;
There should be a page to see the distribution of results for any question (e.g., how many people answered “1”, how many answered “2”, etc.). This page should not only be designed for surveys, but also for other types of questionnaires. (E.g. this view be able to show the score distribution for a question in other types of questionnaires, no matter whether it is a survey question like “how much do you like the course?” or a peer-review question like “how well did the author test the code?”)&lt;br /&gt;
We should use the same controller method to take the survey as to fill in the peer-review, namely, response_controller. &lt;br /&gt;
We should use the same code to display the existing survey responses as to display the responses in peer reviews.&lt;br /&gt;
For each course or assignment, the admin/instructor should be able to create a survey and have some (or all) of the participants receive the survey.  Normally, all questions in the global_survey_questionnaire are included in every survey, but we should allow the instructor not to include them if (s)he doesn’t want to. The quiz takers can take the global survey and course survey consecutively.&lt;br /&gt;
When a user is assigned to take part in a survey, a survey_participant record should be created for that user in the participants table.&lt;br /&gt;
Write tests for this feature.&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107625</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107625"/>
		<updated>2017-03-31T01:24:44Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Motivation */ More specific on team/student relationship&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
=== Problem ===&lt;br /&gt;
For instructors to sign up or drop teams from a topic, the instructors can impersonate a student and then choose to sign up or drop a topic.  The current workflow introduces unnecessary complexity to the process.  For adding or dropping multiple teams from topics, the workflow is quite cumbersome and involves changing between many pages&lt;br /&gt;
&lt;br /&gt;
=== Solutions ===&lt;br /&gt;
&lt;br /&gt;
An instructor is able to view a list of all topics for a given an assignment and details about the topics.  Each topic shows if a team is signed up for the topic, and if so which students are signed up or wait listed. The proposed change introduces a button next to each team of students that indicates removing that team from being signed up for the specific topic.  In this manner, an instructor is more easily able to drop teams from topics.  &lt;br /&gt;
Along with the removal from signup, an instructor also has the option to sign a specific team up for a topic.  The instructor is able to select the team by specifying one of the team members names.  If the student specified by the instructor is not part of a team, current functionality creates a team for that student as part of the sign up process.  To allow signing a team up, a new button was introduced in the topic name box which redirects to a new page.  The new page allows the instructor to enter a student's name which should be signed up for the topic.  Once added, the instructor is brought back to the previous edit assignment page where the student's team can be seen as signed up for the topic.&lt;br /&gt;
&lt;br /&gt;
== Expected Functionality ==&lt;br /&gt;
=== Instructor signs up a student for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Sign a student up if &amp;quot;No choosers&amp;quot; is displayed.&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
* Sign a student up for the waitlist if a team is already signed up&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
** The team should be added to the end of the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is performed by choosing the green checkmark next to the desired topic name&lt;br /&gt;
&lt;br /&gt;
=== Instructor removes a student's signup for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Remove a team's signup for a specific topic&lt;br /&gt;
** The team should no longer be signed up for the topic&lt;br /&gt;
** Any waitlisted teams should now be signed up for the topic&lt;br /&gt;
* Remove a team from the waitlist for a specific topic&lt;br /&gt;
** The team should be removed from the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is done by choosing the x enclosed by a red circle next to the desired team&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
Please review the information below for further information on how to review the modifications made.&lt;br /&gt;
&lt;br /&gt;
Login Information:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Username&lt;br /&gt;
! Password&lt;br /&gt;
! Role&lt;br /&gt;
|-&lt;br /&gt;
| instructor6&lt;br /&gt;
| password&lt;br /&gt;
| instructor&lt;br /&gt;
|-&lt;br /&gt;
| student4340&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student4405&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student6376&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Review Steps:&lt;br /&gt;
* Check with assignments a student is signed up for&lt;br /&gt;
** Log in as a student&lt;br /&gt;
** On the main page, there should be a list of assignments which the user can be removed from signup&lt;br /&gt;
*** Note removing the signup only works if the student hasn't turned in work or the drop deadline has not passed&lt;br /&gt;
* Add a student to a course or assignment&lt;br /&gt;
** Log in as an instructor&lt;br /&gt;
** Go to &amp;quot;Courses&amp;quot; tab to add a student to a course, go to &amp;quot;Assignments&amp;quot; tab to add a student to an assignment&lt;br /&gt;
** Choose &amp;quot;Add Participants&amp;quot; button under &amp;quot;Actions&amp;quot; column.  It appears as a person wearing a blue shirt with a gree plus above them&lt;br /&gt;
** The list shows all users currently signed up and what role they have&lt;br /&gt;
** Scroll to the bottom of the bottom of the page&lt;br /&gt;
*** Type in the student's name in the text box next  to &amp;quot;Enter a user login&amp;quot; &lt;br /&gt;
*** Ensure the &amp;quot;Participant&amp;quot; radio button is selected&lt;br /&gt;
*** Select add&lt;br /&gt;
* Reaching assignment topics page&lt;br /&gt;
** Login as an instructor&lt;br /&gt;
** In the top red navigation bar, choose &amp;quot;Manage..&amp;quot;&lt;br /&gt;
** Select &amp;quot;Assignments&amp;quot; above the search bar&lt;br /&gt;
** Click the pencil button under actions column for any assignment&lt;br /&gt;
** Select the &amp;quot;Topics&amp;quot; tab&lt;br /&gt;
* Signing a student up&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the checkmark for a given topic&lt;br /&gt;
** At the redirected page, type in an existing student user&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Remove a team's signup from a topic&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the x surrounded by a red circle for a given topic&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Check to ensure a student can see his addition or removal from a topic&lt;br /&gt;
** Sign in as a student&lt;br /&gt;
** Select the assignment of interest on the home page&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be grayed out with a message &amp;quot;(You have to choose a topic first) &amp;quot; if you've just removed the user's signup&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be active if you've signed the user up&lt;br /&gt;
*** Select the link &amp;quot;signup sheet&amp;quot;&lt;br /&gt;
*** The topic you've signed the user up for should be highlighted in yellow&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
        flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Since we added new functionality, we needed to create new preconditions for testing the functionality.  We describe the preconditions below.&lt;br /&gt;
Rspec is utilized to perform the unit tests under the spec/controllers/sign_up_sheet_spec.rb file.  We do not test the functionality of adding multiple students as this is tested in existing functionality that we utilized.  We can assume that signing up a student will sign up the whole team as indicated by the contract with the existing function.  The same contract exists for removing a student's sign up.  We also wish to make a distinction in the goal of our functionality.  It is not to remove one student from the team.  It is to remove the whole team from a topic.  Addition of too much extra functionality because it may be nice will clutter the system, thus we don't implement or test the addition or removal of an individual from a team since it is implemented elsewhere.&lt;br /&gt;
&lt;br /&gt;
=====Preconditions=====&lt;br /&gt;
We create a three students and an instructor.  We also create an assignment to which we add the three students as participants.  Three teams are created with one user assigned to each team.  The third team is created such that it has already submitted it's work.  Three topics are created for the assignment with deadlines.  The second and third teams are signed up for topics two and three. The instructor is to add the first student to topic one created for the assignment.  The instructor is also to attempt to remove team two and three from being signed up.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107624</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107624"/>
		<updated>2017-03-31T01:19:53Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Testing */ Clarification for reviewers who didn't understand what we are doing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
=== Problem ===&lt;br /&gt;
For instructors to sign up or drop students from a topic, the instructors can impersonate a student and then choose to sing up or drop a topic.  The current workflow introduces unnecessary complexity to the process.  For adding or dropping multiple students from topics, the workflow is quite cumbersome and involves changing between many pages&lt;br /&gt;
&lt;br /&gt;
=== Solutions ===&lt;br /&gt;
&lt;br /&gt;
An instructor is able to view a list of all topics for a given an assignment and details about the topics.  Each topic shows if a student is signed up for the topic, and if so which students are signed up or wait listed. The proposed change introduces a button next to each team of students that indicates removing that team from being signed up for the specific topic.  In this manner, an instructor is more easily able to drop students from topics.  &lt;br /&gt;
Along with the removal from signup, an instructor also has the option to sign a specific student up for a topic.  To allow this action, a new button was introduced in the topic name box which redirects to a new page.  The new page allows the instructor to enter a student's name which should be signed up for the topic.  Once added, the instructor is brought back to the previous edit assignment page.&lt;br /&gt;
&lt;br /&gt;
== Expected Functionality ==&lt;br /&gt;
=== Instructor signs up a student for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Sign a student up if &amp;quot;No choosers&amp;quot; is displayed.&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
* Sign a student up for the waitlist if a team is already signed up&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
** The team should be added to the end of the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is performed by choosing the green checkmark next to the desired topic name&lt;br /&gt;
&lt;br /&gt;
=== Instructor removes a student's signup for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Remove a team's signup for a specific topic&lt;br /&gt;
** The team should no longer be signed up for the topic&lt;br /&gt;
** Any waitlisted teams should now be signed up for the topic&lt;br /&gt;
* Remove a team from the waitlist for a specific topic&lt;br /&gt;
** The team should be removed from the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is done by choosing the x enclosed by a red circle next to the desired team&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
Please review the information below for further information on how to review the modifications made.&lt;br /&gt;
&lt;br /&gt;
Login Information:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Username&lt;br /&gt;
! Password&lt;br /&gt;
! Role&lt;br /&gt;
|-&lt;br /&gt;
| instructor6&lt;br /&gt;
| password&lt;br /&gt;
| instructor&lt;br /&gt;
|-&lt;br /&gt;
| student4340&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student4405&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student6376&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Review Steps:&lt;br /&gt;
* Check with assignments a student is signed up for&lt;br /&gt;
** Log in as a student&lt;br /&gt;
** On the main page, there should be a list of assignments which the user can be removed from signup&lt;br /&gt;
*** Note removing the signup only works if the student hasn't turned in work or the drop deadline has not passed&lt;br /&gt;
* Add a student to a course or assignment&lt;br /&gt;
** Log in as an instructor&lt;br /&gt;
** Go to &amp;quot;Courses&amp;quot; tab to add a student to a course, go to &amp;quot;Assignments&amp;quot; tab to add a student to an assignment&lt;br /&gt;
** Choose &amp;quot;Add Participants&amp;quot; button under &amp;quot;Actions&amp;quot; column.  It appears as a person wearing a blue shirt with a gree plus above them&lt;br /&gt;
** The list shows all users currently signed up and what role they have&lt;br /&gt;
** Scroll to the bottom of the bottom of the page&lt;br /&gt;
*** Type in the student's name in the text box next  to &amp;quot;Enter a user login&amp;quot; &lt;br /&gt;
*** Ensure the &amp;quot;Participant&amp;quot; radio button is selected&lt;br /&gt;
*** Select add&lt;br /&gt;
* Reaching assignment topics page&lt;br /&gt;
** Login as an instructor&lt;br /&gt;
** In the top red navigation bar, choose &amp;quot;Manage..&amp;quot;&lt;br /&gt;
** Select &amp;quot;Assignments&amp;quot; above the search bar&lt;br /&gt;
** Click the pencil button under actions column for any assignment&lt;br /&gt;
** Select the &amp;quot;Topics&amp;quot; tab&lt;br /&gt;
* Signing a student up&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the checkmark for a given topic&lt;br /&gt;
** At the redirected page, type in an existing student user&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Remove a team's signup from a topic&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the x surrounded by a red circle for a given topic&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Check to ensure a student can see his addition or removal from a topic&lt;br /&gt;
** Sign in as a student&lt;br /&gt;
** Select the assignment of interest on the home page&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be grayed out with a message &amp;quot;(You have to choose a topic first) &amp;quot; if you've just removed the user's signup&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be active if you've signed the user up&lt;br /&gt;
*** Select the link &amp;quot;signup sheet&amp;quot;&lt;br /&gt;
*** The topic you've signed the user up for should be highlighted in yellow&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
        flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Since we added new functionality, we needed to create new preconditions for testing the functionality.  We describe the preconditions below.&lt;br /&gt;
Rspec is utilized to perform the unit tests under the spec/controllers/sign_up_sheet_spec.rb file.  We do not test the functionality of adding multiple students as this is tested in existing functionality that we utilized.  We can assume that signing up a student will sign up the whole team as indicated by the contract with the existing function.  The same contract exists for removing a student's sign up.  We also wish to make a distinction in the goal of our functionality.  It is not to remove one student from the team.  It is to remove the whole team from a topic.  Addition of too much extra functionality because it may be nice will clutter the system, thus we don't implement or test the addition or removal of an individual from a team since it is implemented elsewhere.&lt;br /&gt;
&lt;br /&gt;
=====Preconditions=====&lt;br /&gt;
We create a three students and an instructor.  We also create an assignment to which we add the three students as participants.  Three teams are created with one user assigned to each team.  The third team is created such that it has already submitted it's work.  Three topics are created for the assignment with deadlines.  The second and third teams are signed up for topics two and three. The instructor is to add the first student to topic one created for the assignment.  The instructor is also to attempt to remove team two and three from being signed up.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107623</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107623"/>
		<updated>2017-03-31T01:15:36Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Testing */ Added precondition information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
=== Problem ===&lt;br /&gt;
For instructors to sign up or drop students from a topic, the instructors can impersonate a student and then choose to sing up or drop a topic.  The current workflow introduces unnecessary complexity to the process.  For adding or dropping multiple students from topics, the workflow is quite cumbersome and involves changing between many pages&lt;br /&gt;
&lt;br /&gt;
=== Solutions ===&lt;br /&gt;
&lt;br /&gt;
An instructor is able to view a list of all topics for a given an assignment and details about the topics.  Each topic shows if a student is signed up for the topic, and if so which students are signed up or wait listed. The proposed change introduces a button next to each team of students that indicates removing that team from being signed up for the specific topic.  In this manner, an instructor is more easily able to drop students from topics.  &lt;br /&gt;
Along with the removal from signup, an instructor also has the option to sign a specific student up for a topic.  To allow this action, a new button was introduced in the topic name box which redirects to a new page.  The new page allows the instructor to enter a student's name which should be signed up for the topic.  Once added, the instructor is brought back to the previous edit assignment page.&lt;br /&gt;
&lt;br /&gt;
== Expected Functionality ==&lt;br /&gt;
=== Instructor signs up a student for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Sign a student up if &amp;quot;No choosers&amp;quot; is displayed.&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
* Sign a student up for the waitlist if a team is already signed up&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
** The team should be added to the end of the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is performed by choosing the green checkmark next to the desired topic name&lt;br /&gt;
&lt;br /&gt;
=== Instructor removes a student's signup for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Remove a team's signup for a specific topic&lt;br /&gt;
** The team should no longer be signed up for the topic&lt;br /&gt;
** Any waitlisted teams should now be signed up for the topic&lt;br /&gt;
* Remove a team from the waitlist for a specific topic&lt;br /&gt;
** The team should be removed from the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is done by choosing the x enclosed by a red circle next to the desired team&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
Please review the information below for further information on how to review the modifications made.&lt;br /&gt;
&lt;br /&gt;
Login Information:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Username&lt;br /&gt;
! Password&lt;br /&gt;
! Role&lt;br /&gt;
|-&lt;br /&gt;
| instructor6&lt;br /&gt;
| password&lt;br /&gt;
| instructor&lt;br /&gt;
|-&lt;br /&gt;
| student4340&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student4405&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student6376&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Review Steps:&lt;br /&gt;
* Check with assignments a student is signed up for&lt;br /&gt;
** Log in as a student&lt;br /&gt;
** On the main page, there should be a list of assignments which the user can be removed from signup&lt;br /&gt;
*** Note removing the signup only works if the student hasn't turned in work or the drop deadline has not passed&lt;br /&gt;
* Add a student to a course or assignment&lt;br /&gt;
** Log in as an instructor&lt;br /&gt;
** Go to &amp;quot;Courses&amp;quot; tab to add a student to a course, go to &amp;quot;Assignments&amp;quot; tab to add a student to an assignment&lt;br /&gt;
** Choose &amp;quot;Add Participants&amp;quot; button under &amp;quot;Actions&amp;quot; column.  It appears as a person wearing a blue shirt with a gree plus above them&lt;br /&gt;
** The list shows all users currently signed up and what role they have&lt;br /&gt;
** Scroll to the bottom of the bottom of the page&lt;br /&gt;
*** Type in the student's name in the text box next  to &amp;quot;Enter a user login&amp;quot; &lt;br /&gt;
*** Ensure the &amp;quot;Participant&amp;quot; radio button is selected&lt;br /&gt;
*** Select add&lt;br /&gt;
* Reaching assignment topics page&lt;br /&gt;
** Login as an instructor&lt;br /&gt;
** In the top red navigation bar, choose &amp;quot;Manage..&amp;quot;&lt;br /&gt;
** Select &amp;quot;Assignments&amp;quot; above the search bar&lt;br /&gt;
** Click the pencil button under actions column for any assignment&lt;br /&gt;
** Select the &amp;quot;Topics&amp;quot; tab&lt;br /&gt;
* Signing a student up&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the checkmark for a given topic&lt;br /&gt;
** At the redirected page, type in an existing student user&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Remove a team's signup from a topic&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the x surrounded by a red circle for a given topic&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Check to ensure a student can see his addition or removal from a topic&lt;br /&gt;
** Sign in as a student&lt;br /&gt;
** Select the assignment of interest on the home page&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be grayed out with a message &amp;quot;(You have to choose a topic first) &amp;quot; if you've just removed the user's signup&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be active if you've signed the user up&lt;br /&gt;
*** Select the link &amp;quot;signup sheet&amp;quot;&lt;br /&gt;
*** The topic you've signed the user up for should be highlighted in yellow&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
        flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Since we added new functionality, we needed to create new preconditions for testing the functionality.  We describe the preconditions below.&lt;br /&gt;
Rspec is utilized to perform the unit tests under the spec/controllers/sign_up_sheet_spec.rb file.  &lt;br /&gt;
&lt;br /&gt;
=====Preconditions=====&lt;br /&gt;
We create a three students and an instructor.  We also create an assignment to which we add the three students as participants.  Three teams are created with one user assigned to each team.  The third team is created such that it has already submitted it's work.  Three topics are created for the assignment with deadlines.  The second and third teams are signed up for topics two and three. The instructor is to add the first student to topic one created for the assignment.  The instructor is also to attempt to remove team two and three from being signed up.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107275</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107275"/>
		<updated>2017-03-23T19:56:36Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: Updated motivation formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
=== Problem ===&lt;br /&gt;
For instructors to sign up or drop students from a topic, the instructors can impersonate a student and then choose to sing up or drop a topic.  The current workflow introduces unnecessary complexity to the process.  For adding or dropping multiple students from topics, the workflow is quite cumbersome and involves changing between many pages&lt;br /&gt;
&lt;br /&gt;
=== Solutions ===&lt;br /&gt;
&lt;br /&gt;
An instructor is able to view a list of all topics for a given an assignment and details about the topics.  Each topic shows if a student is signed up for the topic, and if so which students are signed up or wait listed. The proposed change introduces a button next to each team of students that indicates removing that team from being signed up for the specific topic.  In this manner, an instructor is more easily able to drop students from topics.  &lt;br /&gt;
Along with the removal from signup, an instructor also has the option to sign a specific student up for a topic.  To allow this action, a new button was introduced in the topic name box which redirects to a new page.  The new page allows the instructor to enter a student's name which should be signed up for the topic.  Once added, the instructor is brought back to the previous edit assignment page.&lt;br /&gt;
&lt;br /&gt;
== Expected Functionality ==&lt;br /&gt;
=== Instructor signs up a student for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Sign a student up if &amp;quot;No choosers&amp;quot; is displayed.&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
* Sign a student up for the waitlist if a team is already signed up&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
** The team should be added to the end of the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is performed by choosing the green checkmark next to the desired topic name&lt;br /&gt;
&lt;br /&gt;
=== Instructor removes a student's signup for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Remove a team's signup for a specific topic&lt;br /&gt;
** The team should no longer be signed up for the topic&lt;br /&gt;
** Any waitlisted teams should now be signed up for the topic&lt;br /&gt;
* Remove a team from the waitlist for a specific topic&lt;br /&gt;
** The team should be removed from the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is done by choosing the x enclosed by a red circle next to the desired team&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
Please review the information below for further information on how to review the modifications made.&lt;br /&gt;
&lt;br /&gt;
Login Information:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Username&lt;br /&gt;
! Password&lt;br /&gt;
! Role&lt;br /&gt;
|-&lt;br /&gt;
| instructor6&lt;br /&gt;
| password&lt;br /&gt;
| instructor&lt;br /&gt;
|-&lt;br /&gt;
| student4340&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student4405&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student6376&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Review Steps:&lt;br /&gt;
* Check with assignments a student is signed up for&lt;br /&gt;
** Log in as a student&lt;br /&gt;
** On the main page, there should be a list of assignments which the user can be removed from signup&lt;br /&gt;
*** Note removing the signup only works if the student hasn't turned in work or the drop deadline has not passed&lt;br /&gt;
* Add a student to a course or assignment&lt;br /&gt;
** Log in as an instructor&lt;br /&gt;
** Go to &amp;quot;Courses&amp;quot; tab to add a student to a course, go to &amp;quot;Assignments&amp;quot; tab to add a student to an assignment&lt;br /&gt;
** Choose &amp;quot;Add Participants&amp;quot; button under &amp;quot;Actions&amp;quot; column.  It appears as a person wearing a blue shirt with a gree plus above them&lt;br /&gt;
** The list shows all users currently signed up and what role they have&lt;br /&gt;
** Scroll to the bottom of the bottom of the page&lt;br /&gt;
*** Type in the student's name in the text box next  to &amp;quot;Enter a user login&amp;quot; &lt;br /&gt;
*** Ensure the &amp;quot;Participant&amp;quot; radio button is selected&lt;br /&gt;
*** Select add&lt;br /&gt;
* Reaching assignment topics page&lt;br /&gt;
** Login as an instructor&lt;br /&gt;
** In the top red navigation bar, choose &amp;quot;Manage..&amp;quot;&lt;br /&gt;
** Select &amp;quot;Assignments&amp;quot; above the search bar&lt;br /&gt;
** Click the pencil button under actions column for any assignment&lt;br /&gt;
** Select the &amp;quot;Topics&amp;quot; tab&lt;br /&gt;
* Signing a student up&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the checkmark for a given topic&lt;br /&gt;
** At the redirected page, type in an existing student user&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Remove a team's signup from a topic&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the x surrounded by a red circle for a given topic&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Check to ensure a student can see his addition or removal from a topic&lt;br /&gt;
** Sign in as a student&lt;br /&gt;
** Select the assignment of interest on the home page&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be grayed out with a message &amp;quot;(You have to choose a topic first) &amp;quot; if you've just removed the user's signup&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be active if you've signed the user up&lt;br /&gt;
*** Select the link &amp;quot;signup sheet&amp;quot;&lt;br /&gt;
*** The topic you've signed the user up for should be highlighted in yellow&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
        flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=====Preconditions=====&lt;br /&gt;
We create a user and instructor. The instructor is to add the user to one of two topics created for an assignment.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107274</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107274"/>
		<updated>2017-03-23T19:55:51Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Motivation */  Edited motivation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
For instructors to sign up or drop students from a topic, the instructors can impersonate a student and then choose to sing up or drop a topic.  The current workflow introduces unnecessary complexity to the process.  For adding or dropping multiple students from topics, the workflow is quite cumbersome and involves changing between many pages&lt;br /&gt;
&lt;br /&gt;
== Solutions ==&lt;br /&gt;
&lt;br /&gt;
An instructor is able to view a list of all topics for a given an assignment and details about the topics.  Each topic shows if a student is signed up for the topic, and if so which students are signed up or wait listed. The proposed change introduces a button next to each team of students that indicates removing that team from being signed up for the specific topic.  In this manner, an instructor is more easily able to drop students from topics.  &lt;br /&gt;
Along with the removal from signup, an instructor also has the option to sign a specific student up for a topic.  To allow this action, a new button was introduced in the topic name box which redirects to a new page.  The new page allows the instructor to enter a student's name which should be signed up for the topic.  Once added, the instructor is brought back to the previous edit assignment page.&lt;br /&gt;
&lt;br /&gt;
== Expected Functionality ==&lt;br /&gt;
=== Instructor signs up a student for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Sign a student up if &amp;quot;No choosers&amp;quot; is displayed.&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
* Sign a student up for the waitlist if a team is already signed up&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
** The team should be added to the end of the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is performed by choosing the green checkmark next to the desired topic name&lt;br /&gt;
&lt;br /&gt;
=== Instructor removes a student's signup for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Remove a team's signup for a specific topic&lt;br /&gt;
** The team should no longer be signed up for the topic&lt;br /&gt;
** Any waitlisted teams should now be signed up for the topic&lt;br /&gt;
* Remove a team from the waitlist for a specific topic&lt;br /&gt;
** The team should be removed from the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is done by choosing the x enclosed by a red circle next to the desired team&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
Please review the information below for further information on how to review the modifications made.&lt;br /&gt;
&lt;br /&gt;
Login Information:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Username&lt;br /&gt;
! Password&lt;br /&gt;
! Role&lt;br /&gt;
|-&lt;br /&gt;
| instructor6&lt;br /&gt;
| password&lt;br /&gt;
| instructor&lt;br /&gt;
|-&lt;br /&gt;
| student4340&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student4405&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student6376&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Review Steps:&lt;br /&gt;
* Check with assignments a student is signed up for&lt;br /&gt;
** Log in as a student&lt;br /&gt;
** On the main page, there should be a list of assignments which the user can be removed from signup&lt;br /&gt;
*** Note removing the signup only works if the student hasn't turned in work or the drop deadline has not passed&lt;br /&gt;
* Add a student to a course or assignment&lt;br /&gt;
** Log in as an instructor&lt;br /&gt;
** Go to &amp;quot;Courses&amp;quot; tab to add a student to a course, go to &amp;quot;Assignments&amp;quot; tab to add a student to an assignment&lt;br /&gt;
** Choose &amp;quot;Add Participants&amp;quot; button under &amp;quot;Actions&amp;quot; column.  It appears as a person wearing a blue shirt with a gree plus above them&lt;br /&gt;
** The list shows all users currently signed up and what role they have&lt;br /&gt;
** Scroll to the bottom of the bottom of the page&lt;br /&gt;
*** Type in the student's name in the text box next  to &amp;quot;Enter a user login&amp;quot; &lt;br /&gt;
*** Ensure the &amp;quot;Participant&amp;quot; radio button is selected&lt;br /&gt;
*** Select add&lt;br /&gt;
* Reaching assignment topics page&lt;br /&gt;
** Login as an instructor&lt;br /&gt;
** In the top red navigation bar, choose &amp;quot;Manage..&amp;quot;&lt;br /&gt;
** Select &amp;quot;Assignments&amp;quot; above the search bar&lt;br /&gt;
** Click the pencil button under actions column for any assignment&lt;br /&gt;
** Select the &amp;quot;Topics&amp;quot; tab&lt;br /&gt;
* Signing a student up&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the checkmark for a given topic&lt;br /&gt;
** At the redirected page, type in an existing student user&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Remove a team's signup from a topic&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the x surrounded by a red circle for a given topic&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Check to ensure a student can see his addition or removal from a topic&lt;br /&gt;
** Sign in as a student&lt;br /&gt;
** Select the assignment of interest on the home page&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be grayed out with a message &amp;quot;(You have to choose a topic first) &amp;quot; if you've just removed the user's signup&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be active if you've signed the user up&lt;br /&gt;
*** Select the link &amp;quot;signup sheet&amp;quot;&lt;br /&gt;
*** The topic you've signed the user up for should be highlighted in yellow&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
        flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=====Preconditions=====&lt;br /&gt;
We create a user and instructor. The instructor is to add the user to one of two topics created for an assignment.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107269</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107269"/>
		<updated>2017-03-23T19:46:17Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Peer Review Information */ Added info on how to add a user to a course or assignment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Expected Functionality ==&lt;br /&gt;
=== Instructor signs up a student for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Sign a student up if &amp;quot;No choosers&amp;quot; is displayed.&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
* Sign a student up for the waitlist if a team is already signed up&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
** The team should be added to the end of the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is performed by choosing the green checkmark next to the desired topic name&lt;br /&gt;
&lt;br /&gt;
=== Instructor removes a student's signup for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Remove a team's signup for a specific topic&lt;br /&gt;
** The team should no longer be signed up for the topic&lt;br /&gt;
** Any waitlisted teams should now be signed up for the topic&lt;br /&gt;
* Remove a team from the waitlist for a specific topic&lt;br /&gt;
** The team should be removed from the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is done by choosing the x enclosed by a red circle next to the desired team&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
Please review the information below for further information on how to review the modifications made.&lt;br /&gt;
&lt;br /&gt;
Login Information:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Username&lt;br /&gt;
! Password&lt;br /&gt;
! Role&lt;br /&gt;
|-&lt;br /&gt;
| instructor6&lt;br /&gt;
| password&lt;br /&gt;
| instructor&lt;br /&gt;
|-&lt;br /&gt;
| student4340&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student4405&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student6376&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Review Steps:&lt;br /&gt;
* Check with assignments a student is signed up for&lt;br /&gt;
** Log in as a student&lt;br /&gt;
** On the main page, there should be a list of assignments which the user can be removed from signup&lt;br /&gt;
*** Note removing the signup only works if the student hasn't turned in work or the drop deadline has not passed&lt;br /&gt;
* Add a student to a course or assignment&lt;br /&gt;
** Log in as an instructor&lt;br /&gt;
** Go to &amp;quot;Courses&amp;quot; tab to add a student to a course, go to &amp;quot;Assignments&amp;quot; tab to add a student to an assignment&lt;br /&gt;
** Choose &amp;quot;Add Participants&amp;quot; button under &amp;quot;Actions&amp;quot; column.  It appears as a person wearing a blue shirt with a gree plus above them&lt;br /&gt;
** The list shows all users currently signed up and what role they have&lt;br /&gt;
** Scroll to the bottom of the bottom of the page&lt;br /&gt;
*** Type in the student's name in the text box next  to &amp;quot;Enter a user login&amp;quot; &lt;br /&gt;
*** Ensure the &amp;quot;Participant&amp;quot; radio button is selected&lt;br /&gt;
*** Select add&lt;br /&gt;
* Reaching assignment topics page&lt;br /&gt;
** Login as an instructor&lt;br /&gt;
** In the top red navigation bar, choose &amp;quot;Manage..&amp;quot;&lt;br /&gt;
** Select &amp;quot;Assignments&amp;quot; above the search bar&lt;br /&gt;
** Click the pencil button under actions column for any assignment&lt;br /&gt;
** Select the &amp;quot;Topics&amp;quot; tab&lt;br /&gt;
* Signing a student up&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the checkmark for a given topic&lt;br /&gt;
** At the redirected page, type in an existing student user&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Remove a team's signup from a topic&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the x surrounded by a red circle for a given topic&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Check to ensure a student can see his addition or removal from a topic&lt;br /&gt;
** Sign in as a student&lt;br /&gt;
** Select the assignment of interest on the home page&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be grayed out with a message &amp;quot;(You have to choose a topic first) &amp;quot; if you've just removed the user's signup&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be active if you've signed the user up&lt;br /&gt;
*** Select the link &amp;quot;signup sheet&amp;quot;&lt;br /&gt;
*** The topic you've signed the user up for should be highlighted in yellow&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
        flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=====Preconditions=====&lt;br /&gt;
We create a user and instructor. The instructor is to add the user to one of two topics created for an assignment.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107267</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107267"/>
		<updated>2017-03-23T19:32:26Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Expected Functionality */  Added expectations for the changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Expected Functionality ==&lt;br /&gt;
=== Instructor signs up a student for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Sign a student up if &amp;quot;No choosers&amp;quot; is displayed.&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
* Sign a student up for the waitlist if a team is already signed up&lt;br /&gt;
** If the student is part of a team, the whole team should be signed up&lt;br /&gt;
** If the student is not part of a team, a team should be created with only the given student as a member&lt;br /&gt;
** The team should be added to the end of the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is performed by choosing the green checkmark next to the desired topic name&lt;br /&gt;
&lt;br /&gt;
=== Instructor removes a student's signup for a topic ===&lt;br /&gt;
From the instructor's edit assignments page with the tab topics selected, the instructor should see a list of topics for the given assignment.&lt;br /&gt;
For each topic, the instructor should be able to:&lt;br /&gt;
* Remove a team's signup for a specific topic&lt;br /&gt;
** The team should no longer be signed up for the topic&lt;br /&gt;
** Any waitlisted teams should now be signed up for the topic&lt;br /&gt;
* Remove a team from the waitlist for a specific topic&lt;br /&gt;
** The team should be removed from the waitlist&lt;br /&gt;
&lt;br /&gt;
Each action is done by choosing the x enclosed by a red circle next to the desired team&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
Please review the information below for further information on how to review the modifications made.&lt;br /&gt;
&lt;br /&gt;
Login Information:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Username&lt;br /&gt;
! Password&lt;br /&gt;
! Role&lt;br /&gt;
|-&lt;br /&gt;
| instructor6&lt;br /&gt;
| password&lt;br /&gt;
| instructor&lt;br /&gt;
|-&lt;br /&gt;
| student4340&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student4405&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student6376&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Review Steps:&lt;br /&gt;
* Check with assignments a student is signed up for&lt;br /&gt;
** Log in as a student&lt;br /&gt;
** On the main page, there should be a list of assignments which the user can be removed from signup&lt;br /&gt;
*** Note removing the signup only works if the student hasn't turned in work or the drop deadline has not passed&lt;br /&gt;
* Reaching assignment topics page&lt;br /&gt;
** Login as an instructor&lt;br /&gt;
** In the top red navigation bar, choose &amp;quot;Manage..&amp;quot;&lt;br /&gt;
** Select &amp;quot;Assignments&amp;quot; above the search bar&lt;br /&gt;
** Click the pencil button under actions column for any assignment&lt;br /&gt;
** Select the &amp;quot;Topics&amp;quot; tab&lt;br /&gt;
* Signing a student up&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the checkmark for a given topic&lt;br /&gt;
** At the redirected page, type in an existing student user&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Remove a team's signup from a topic&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the x surrounded by a red circle for a given topic&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Check to ensure a student can see his addition or removal from a topic&lt;br /&gt;
** Sign in as a student&lt;br /&gt;
** Select the assignment of interest on the home page&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be grayed out with a message &amp;quot;(You have to choose a topic first) &amp;quot; if you've just removed the user's signup&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be active if you've signed the user up&lt;br /&gt;
*** Select the link &amp;quot;signup sheet&amp;quot;&lt;br /&gt;
*** The topic you've signed the user up for should be highlighted in yellow&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
        flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=====Preconditions=====&lt;br /&gt;
We create a user and instructor. The instructor is to add the user to one of two topics created for an assignment.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107265</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107265"/>
		<updated>2017-03-23T19:20:08Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: Added expected functionality stub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Expected Functionality ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
Please review the information below for further information on how to review the modifications made.&lt;br /&gt;
&lt;br /&gt;
Login Information:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Username&lt;br /&gt;
! Password&lt;br /&gt;
! Role&lt;br /&gt;
|-&lt;br /&gt;
| instructor6&lt;br /&gt;
| password&lt;br /&gt;
| instructor&lt;br /&gt;
|-&lt;br /&gt;
| student4340&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student4405&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student6376&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Review Steps:&lt;br /&gt;
* Check with assignments a student is signed up for&lt;br /&gt;
** Log in as a student&lt;br /&gt;
** On the main page, there should be a list of assignments which the user can be removed from signup&lt;br /&gt;
*** Note removing the signup only works if the student hasn't turned in work or the drop deadline has not passed&lt;br /&gt;
* Reaching assignment topics page&lt;br /&gt;
** Login as an instructor&lt;br /&gt;
** In the top red navigation bar, choose &amp;quot;Manage..&amp;quot;&lt;br /&gt;
** Select &amp;quot;Assignments&amp;quot; above the search bar&lt;br /&gt;
** Click the pencil button under actions column for any assignment&lt;br /&gt;
** Select the &amp;quot;Topics&amp;quot; tab&lt;br /&gt;
* Signing a student up&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the checkmark for a given topic&lt;br /&gt;
** At the redirected page, type in an existing student user&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Remove a team's signup from a topic&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the x surrounded by a red circle for a given topic&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Check to ensure a student can see his addition or removal from a topic&lt;br /&gt;
** Sign in as a student&lt;br /&gt;
** Select the assignment of interest on the home page&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be grayed out with a message &amp;quot;(You have to choose a topic first) &amp;quot; if you've just removed the user's signup&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be active if you've signed the user up&lt;br /&gt;
*** Select the link &amp;quot;signup sheet&amp;quot;&lt;br /&gt;
*** The topic you've signed the user up for should be highlighted in yellow&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
        flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=====Preconditions=====&lt;br /&gt;
We create a user and instructor. The instructor is to add the user to one of two topics created for an assignment.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107263</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107263"/>
		<updated>2017-03-23T19:18:59Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Peer Review Information */  Added basic review steps&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
Please review the information below for further information on how to review the modifications made.&lt;br /&gt;
&lt;br /&gt;
Login Information:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Username&lt;br /&gt;
! Password&lt;br /&gt;
! Role&lt;br /&gt;
|-&lt;br /&gt;
| instructor6&lt;br /&gt;
| password&lt;br /&gt;
| instructor&lt;br /&gt;
|-&lt;br /&gt;
| student4340&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student4405&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|-&lt;br /&gt;
| student6376&lt;br /&gt;
| password&lt;br /&gt;
| student&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Review Steps:&lt;br /&gt;
* Check with assignments a student is signed up for&lt;br /&gt;
** Log in as a student&lt;br /&gt;
** On the main page, there should be a list of assignments which the user can be removed from signup&lt;br /&gt;
*** Note removing the signup only works if the student hasn't turned in work or the drop deadline has not passed&lt;br /&gt;
* Reaching assignment topics page&lt;br /&gt;
** Login as an instructor&lt;br /&gt;
** In the top red navigation bar, choose &amp;quot;Manage..&amp;quot;&lt;br /&gt;
** Select &amp;quot;Assignments&amp;quot; above the search bar&lt;br /&gt;
** Click the pencil button under actions column for any assignment&lt;br /&gt;
** Select the &amp;quot;Topics&amp;quot; tab&lt;br /&gt;
* Signing a student up&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the checkmark for a given topic&lt;br /&gt;
** At the redirected page, type in an existing student user&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Remove a team's signup from a topic&lt;br /&gt;
** Navigate to the assignment topics page&lt;br /&gt;
** Under the &amp;quot;Topic name(s)&amp;quot; column, click the x surrounded by a red circle for a given topic&lt;br /&gt;
** You should be redirected back to the &amp;quot;Edit Assignment&amp;quot; page, select the &amp;quot;Topics&amp;quot; tab to view your change&lt;br /&gt;
* Check to ensure a student can see his addition or removal from a topic&lt;br /&gt;
** Sign in as a student&lt;br /&gt;
** Select the assignment of interest on the home page&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be grayed out with a message &amp;quot;(You have to choose a topic first) &amp;quot; if you've just removed the user's signup&lt;br /&gt;
** The &amp;quot;your work&amp;quot; link should be active if you've signed the user up&lt;br /&gt;
*** Select the link &amp;quot;signup sheet&amp;quot;&lt;br /&gt;
*** The topic you've signed the user up for should be highlighted in yellow&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
        flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=====Preconditions=====&lt;br /&gt;
We create a user and instructor. The instructor is to add the user to one of two topics created for an assignment.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107261</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107261"/>
		<updated>2017-03-23T18:51:27Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: Init peer review section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Peer Review Information ==&lt;br /&gt;
Please review the information below for further information on how to review the modifications made.&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
        flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=====Preconditions=====&lt;br /&gt;
We create a user and instructor. The instructor is to add the user to one of two topics created for an assignment.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107162</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107162"/>
		<updated>2017-03-23T00:47:50Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: Edit preconditions format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=====Preconditions=====&lt;br /&gt;
We create a user and instructor. The instructor is to add the user to one of two topics created for an assignment.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107160</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107160"/>
		<updated>2017-03-23T00:47:12Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: Added preconditions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
===Preconditions===&lt;br /&gt;
We create a user and instructor. The instructor is to add the user to one of two topics created for an assignment.&lt;br /&gt;
The objects are refreshed each time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107158</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107158"/>
		<updated>2017-03-23T00:45:43Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Preconditions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
===Preconditions===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107155</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107155"/>
		<updated>2017-03-23T00:39:49Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Preconditions */ Removed testing out of scope&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;% for participant in @participants %&amp;gt;&lt;br /&gt;
  &amp;lt;% if topic.id == participant.topic_id %&amp;gt;&lt;br /&gt;
    &amp;lt;% chooser_present = true %&amp;gt;&lt;br /&gt;
      &amp;lt;% if(@assignment.max_team_size &amp;gt; 1)%&amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;b&amp;amp;gt;&amp;lt;%= participant.team_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Waitlist Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('leave_topic.png', :border =&amp;gt; 0, :title =&amp;gt; 'Drop Student', :align =&amp;gt; 'middle'), :controller =&amp;gt; &amp;quot;sign_up_sheet&amp;quot;, :action =&amp;gt; &amp;quot;delete_signup_as_instructor&amp;quot;, :id =&amp;gt; participant.team_id, :topic_id =&amp;gt; topic.id %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        &amp;lt;%= participant.user_name_placeholder%&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;lt;% if participant.is_waitlisted == true %&amp;gt;&lt;br /&gt;
        &amp;amp;lt;font color='red'&amp;amp;gt;(waitlisted)&amp;amp;lt;/font&amp;amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
      &amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;% if chooser_present == false %&amp;gt;&lt;br /&gt;
    No choosers.&amp;lt;b&amp;gt;&amp;lt;%= link_to image_tag('signup.png', :border =&amp;gt; 0, :title =&amp;gt; 'Sign Up Student', :align =&amp;gt; 'middle'), signup_as_instructor_sign_up_sheet_index_path( assignment_id: params[:id], topic_id: topic.id) %&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
===Preconditions===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Deny adding user already signed up&lt;br /&gt;
| flash[:error] = &amp;quot;The student already signed up for a topic!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107095</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107095"/>
		<updated>2017-03-22T21:21:06Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Testing */ Preconditions placeholder&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
===Preconditions===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with signed up team&lt;br /&gt;
| Correct user is added to waitlist&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with waitlist&lt;br /&gt;
| Correct user is added to end of waitlist&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Deny adding user already signed up&lt;br /&gt;
| flash[:error] = &amp;quot;The student already signed up for a topic!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Delete signup updates waitlist&lt;br /&gt;
| Top of waitlist is now signed up&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107093</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107093"/>
		<updated>2017-03-22T21:11:37Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Testing */ Added invalid user test case&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with signed up team&lt;br /&gt;
| Correct user is added to waitlist&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with waitlist&lt;br /&gt;
| Correct user is added to end of waitlist&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Deny adding user already signed up&lt;br /&gt;
| flash[:error] = &amp;quot;The student already signed up for a topic!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Username does not exist in database&lt;br /&gt;
| flash[:error] = &amp;quot;The student does not exist!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Delete signup updates waitlist&lt;br /&gt;
| Top of waitlist is now signed up&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107092</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107092"/>
		<updated>2017-03-22T21:03:11Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def signup_as_instructor_action&lt;br /&gt;
    user = User.find_by(name: params[:username])&lt;br /&gt;
    unless user.nil? # validate invalid user&lt;br /&gt;
      unless SignUpSheet.signup_team(params[:assignment_id], user.id, params[:topic_id])&lt;br /&gt;
        flash[:error] = &amp;quot;The student has already signed up for a topic!&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully signed up the student for the topic!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;That student does not exist!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: params[:assignment_id]&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def delete_signup_as_instructor&lt;br /&gt;
    # find participant using assignment using team and topic ids&lt;br /&gt;
    team = Team.find(params[:id])&lt;br /&gt;
    assignment = Assignment.find(team.parent_id)&lt;br /&gt;
    teamUsr = TeamsUser.find_by(team_id: team.id)&lt;br /&gt;
    user = User.find(teamUsr.user_id)&lt;br /&gt;
    participant = AssignmentParticipant.find_by(user_id: user.id, parent_id: assignment.id)&lt;br /&gt;
    drop_topic_deadline = assignment.due_dates.find_by_deadline_type_id(6)&lt;br /&gt;
    if !participant.team.submitted_files.empty? or !participant.team.hyperlinks.empty?&lt;br /&gt;
      flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
    elsif !drop_topic_deadline.nil? and Time.now &amp;gt; drop_topic_deadline.due_at&lt;br /&gt;
      flash[:error] = &amp;quot;You cannot drop a student after the drop topic deadline!&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      delete_signup_for_topic(assignment.id, params[:topic_id], participant.user_id)&lt;br /&gt;
      flash[:success] = &amp;quot;You have successfully dropped the student from the topic!&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to controller: 'assignments', action: 'edit', id: assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with no signed up team&lt;br /&gt;
| Correct user is added to topic&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with signed up team&lt;br /&gt;
| Correct user is added to waitlist&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Add user to topic with waitlist&lt;br /&gt;
| Correct user is added to end of waitlist&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Deny adding user already signed up&lt;br /&gt;
| flash[:error] = &amp;quot;The student already signed up for a topic!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Delete signup updates waitlist&lt;br /&gt;
| Top of waitlist is now signed up&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow to delete signup if submitted&lt;br /&gt;
| flash[:error] = &amp;quot;The student has already submitted their work, so you are not allowed to remove them.&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Don’t allow delete signup with passed deadline&lt;br /&gt;
| flash[:error] = &amp;quot;You cannot drop the student after the drop topic deadline!&amp;quot;&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Delete Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| signup_as_instructor_action&lt;br /&gt;
|-&lt;br /&gt;
| Redirect Signup&lt;br /&gt;
| Redirects back to topic list page&lt;br /&gt;
| Sign_up_sheet_controller.rb&lt;br /&gt;
| delete_signup_as_instructor&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107089</id>
		<title>CSC/ECE 517 Spring 2017 E1714</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2017_E1714&amp;diff=107089"/>
		<updated>2017-03-22T20:54:41Z</updated>

		<summary type="html">&lt;p&gt;Trichmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Prior to our modifications, the Expertiza system offered no way for instructors to sign up or drop students from a topic. Instructors could impersonate a student, but this introduced unnecessary complexity to the process. By adding access to the signup functionality on the assignments page, instructors can now easily fix mistakes or free up topics as needed.&lt;br /&gt;
&lt;br /&gt;
== Modifications ==&lt;br /&gt;
&lt;br /&gt;
=== sign_up_sheet/_topic_name.html.erb ===&lt;br /&gt;
&lt;br /&gt;
The topic_name partial is the primary view for this feature. It renders the table cell where the topic, team, and students are listed. The following code was modified:&lt;br /&gt;
&lt;br /&gt;
The instructor will see a different set of links depending on whether or not a team has already been assigned to a topic. If no team is present, only a single link that adds a student and their team will be visible. If a team is already present, then an additional link that drops that existing team will be visible. In this case, the signup link will add students to the waitlist instead.&lt;br /&gt;
&lt;br /&gt;
=== signup_sheet_controller.rb ===&lt;br /&gt;
The signup_sheet_controller is where most of the new functionality is introduced.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Test Description&lt;br /&gt;
! Expected Result&lt;br /&gt;
! Tested File&lt;br /&gt;
! Method Tested&lt;br /&gt;
|-&lt;br /&gt;
| row 1, cell 1&lt;br /&gt;
| row 1, cell 2&lt;br /&gt;
| row 1, cell 3&lt;br /&gt;
| row 1, cell 4&lt;br /&gt;
|-&lt;br /&gt;
| row 2, cell 1&lt;br /&gt;
| row 2, cell 2&lt;br /&gt;
| row 2, cell 3&lt;br /&gt;
| row 2, cell 4&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Trichmo</name></author>
	</entry>
</feed>