<?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=Pmgandh2</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=Pmgandh2"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Pmgandh2"/>
	<updated>2026-08-15T08:56:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=114695</id>
		<title>CSC/ECE 517 Fall 2017/E1793. Help students find teams to join Team1964</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=114695"/>
		<updated>2017-12-12T03:58:15Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a Ruby on Rails based Open Source project. It is a collaboration tool which lets users with different roles (student, instructor, teaching assistant) to collaborate on a course in an institution. A collaboration could be for an assignment where students teams up for an assignment and instructors grades them on the basis of their submission. Students could review other's works and give feedback as well.&lt;br /&gt;
&lt;br /&gt;
===Github link===&lt;br /&gt;
*https://github.com/expertiza/expertiza&lt;br /&gt;
&lt;br /&gt;
===Wiki link===&lt;br /&gt;
*http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
&lt;br /&gt;
===Pull Request===&lt;br /&gt;
*https://github.com/expertiza/expertiza/pull/1129/ &lt;br /&gt;
&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
*For team-based assignments, it always takes time to find suitable team members. &lt;br /&gt;
&lt;br /&gt;
*We already have bidding, which could help you to join a team with other team members hold similar bidding preferences. However, a student may not be satisfied with automated team formation and want to switch to another team. &lt;br /&gt;
&lt;br /&gt;
*'''In this project, we will build a new feature to help students find teams to join.'''&lt;br /&gt;
&lt;br /&gt;
Currently, there are 2 ways to find other students to join your team:&lt;br /&gt;
&lt;br /&gt;
*If your team is not full, you could invite people by inputting his/her UnityID. It will send an invitation to a certain user. If s/he accepts your invitation,s/he will leave the original team and join your team.&lt;br /&gt;
&lt;br /&gt;
*You could create an advisement by clicking “Your team” link and then clicking “Create” link under “Advertisement for teammates” section. Then your advertisement will appear the last column of the signup sheet page with a horn icon. In this way, all classmates could see your advisement. Someone could send a request to join your team. If you accept their request, s/he will leave original team and join in your team. &lt;br /&gt;
&lt;br /&gt;
Below screenshots represents the description above.&lt;br /&gt;
&lt;br /&gt;
Student: Advertisement icon doesn't appear in Chrome browser.&lt;br /&gt;
&lt;br /&gt;
[[File:A_chrome_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Instructor: Advertisement icon doesn't appear in Chrome browser.&lt;br /&gt;
&lt;br /&gt;
[[File:A_instructor_cr_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Advertisement icon appears in Mozilla browser but not in the cell it should appear rather it is visible under &amp;quot;Actions&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
[[File:A_mozilla_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change Request requirements:'''&lt;br /&gt;
*Students whose team is not full yet to be able to see a list of students who don’t already have teams.&lt;br /&gt;
*Students should have an option of inviting other students to join their teams.&lt;br /&gt;
*Instructors should be able to view a list of students who don't have teams.&lt;br /&gt;
&lt;br /&gt;
== Task Description ==&lt;br /&gt;
&lt;br /&gt;
====Change Request 1====&lt;br /&gt;
Fix the second way to find other students to join your team. Currently, after you create ​an​ ​advertisement,​ ​the​ ​horn​ ​icon​ ​does​ ​not​ ​appear​ ​in the​ ​the​ ​last​ ​column​ ​of​ ​the​ ​signup​ ​sheet.&lt;br /&gt;
&lt;br /&gt;
=====What did we do?=====&lt;br /&gt;
&lt;br /&gt;
We found out that the problem was due to the name of horn icon. Certain ad blockers block any element with name ad or advertisement and horn icon was named as ad.png.&lt;br /&gt;
We renamed it to ad_horn.png and it resolved the issue.&lt;br /&gt;
&lt;br /&gt;
We also found out that the issue was also due to some complex table cell population. When the assignment was not in finished stage, actions were put into a td cell and displayed, which was adding an extra row, but this was only for users who had signed up some topic. In other cases, the cell was not created every time, forcing table row to have lesser columns. &lt;br /&gt;
&lt;br /&gt;
We removed the conditional td creation, and added all conditional checks inside a parent td, ensured that even if a user has no action to display, at least a td will be created.&lt;br /&gt;
&lt;br /&gt;
====Change Request 2====&lt;br /&gt;
For​ ​student​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​a​ ​team​ ​with​ ​invitation​ ​links​ ​in student_teams#view​ ​page. You​ ​could​ ​invite​ ​students​ ​to​ ​your​ ​team​ ​by​ ​clicking​ ​invitation​ ​links.​ ​If​ ​s/he​ ​accepts your​ ​invitation,s/he​ ​will​ ​leave​  the original​ ​team​ ​and​ ​join​ ​in​ ​your​ ​team.​ ​It​ ​will​ ​be​ ​more straightforward​ ​than​ ​typing​ ​UnityID.&lt;br /&gt;
&lt;br /&gt;
====Change Request 3====&lt;br /&gt;
For​ ​instructor​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​team​ ​with​ ​invitation​ ​links​ ​in​ ​teams#list page &lt;br /&gt;
&lt;br /&gt;
=====What did we do?=====&lt;br /&gt;
'''This has solution step for CR2 and CR3.'''&lt;br /&gt;
&lt;br /&gt;
We created a helper method to fetch all participants from the database who did not have a team or whose teams have only one member(themselves). &lt;br /&gt;
We used Join queries to join tables participants, team_users, and teams to extract participants associated with the assignment with or without teams and then filtered out participants with team size &amp;gt; 1.&lt;br /&gt;
&lt;br /&gt;
'''def extract_assignment_participants(assignment_id, excluded_id = nil)'''&lt;br /&gt;
&lt;br /&gt;
Above method was defined in app/helpers/assignment_helper.rb.&lt;br /&gt;
The second parameter was required to exclude current student's id to be excluded to be returned for student whereas, for an Instructor, all students without teams or with single-member team had to be returned.&lt;br /&gt;
&lt;br /&gt;
More changes could be found here: [https://github.com/expertiza/expertiza/pull/1129/files#diff-e2d518aed0fccbb9ab0fc9e2e1ef8683 app/helpers/assignment_helper.rb]&lt;br /&gt;
&lt;br /&gt;
The method was made generic enough to be used by both app/controllers/student_teams_controller.rb (for student) and app/controllers/teams_controller.rb (for instructors).&lt;br /&gt;
&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-113f035d853c52fdfd3a00851a3db407 app/controllers/student_teams_controller.rb(for student)]&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-7543048f54ac556dff85edee281fafd8 app/controllers/teams_controller.rb(for instructors)]&lt;br /&gt;
&lt;br /&gt;
For student, we checked if student can actually send invites or not, and based on that we fetched the participant list.&lt;br /&gt;
We considered cases enlisted below for verifying if a student can send invite or not:&lt;br /&gt;
&lt;br /&gt;
*Student can't send invite if student doesn\’t have a team&lt;br /&gt;
*Student can't send invite if current team size is 1 and assignment\’s allowed team size is also 1&lt;br /&gt;
*Student can send invite if assignment\’s allowed team size is &amp;gt;1 and current team size is less than allowed team size&lt;br /&gt;
*Student can't send invite if current team size is equal to allowed team size&lt;br /&gt;
*Student can't send invite if assignment is in finished stage&lt;br /&gt;
*Student can send invite if assignment is not in finished state&lt;br /&gt;
&lt;br /&gt;
The table containing the list of students to send an invite to was created/not created based on above criteria only.&lt;br /&gt;
&lt;br /&gt;
For Instructor, there were no such criteria to be considered. &lt;br /&gt;
&lt;br /&gt;
== Modified Files ==&lt;br /&gt;
1)Conrollers:-&lt;br /&gt;
*app/controllers/student_teams_controller.rb&lt;br /&gt;
*app/controllers/teams_controller.rb&lt;br /&gt;
2)Helper:-&lt;br /&gt;
*app/helpers/assignment_helper.rb&lt;br /&gt;
3)Views:-&lt;br /&gt;
*app/views/join_team_requests/_list_not_initiated.html.erb&lt;br /&gt;
*app/views/join_team_requests/_list_received.html.erb&lt;br /&gt;
*app/views/join_team_requests/_list_sent.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
*app/views/student_teams/view.html.erb&lt;br /&gt;
*app/views/teams/list.html.erb&lt;br /&gt;
4)Tests:-&lt;br /&gt;
*spec/controllers/student_teams_controller_spec.rb&lt;br /&gt;
*spec/features/team_invitation_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Test Cases ===&lt;br /&gt;
&lt;br /&gt;
We have written automated tests to check if the changes made are working correctly. &lt;br /&gt;
&lt;br /&gt;
For that, we considered the following scenarios&lt;br /&gt;
Testing invitation criteria:-&lt;br /&gt;
*Scenario 1 - Student can't see list of students to invite if student doesn't have a team&lt;br /&gt;
*Scenario 2 - Student can't see list of students to invite if current team size is 1 and assignment’s allowed team size is also 1&lt;br /&gt;
*Scenario 3 - Student can see list of students to invite if assignment’s allowed team size is &amp;gt;1 and current team size is less than allowed team size&lt;br /&gt;
*Scenario 4 - Student can't see list of students to invite if current team size is equal to allowed team size&lt;br /&gt;
*Scenario 5 - Student can't see list of students to invite if assignment is in finished stage&lt;br /&gt;
*Scenario 6 - Student can see list of students to invite if assignment is not in finished state&lt;br /&gt;
*Scenario 7 - The list of students contains only those students who don't have a team yet or whose team is not yet complete and who have not created an advertisement link.&lt;br /&gt;
*Scenario 8 - A student can create an invitation link only if his team is not yet full.&lt;br /&gt;
*Scenario 9 - The same student who accepted the invitation link actually gets added to the team. &lt;br /&gt;
*Scenario 10 - A student won't be able to send the invitation to himself as he is already a member of that team.&lt;br /&gt;
*Scenario 11 - An instructor sees only the list of the students who do not have teams with invitation link.&lt;br /&gt;
&lt;br /&gt;
All tests could be found here: &lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-d2b8c8df44cb32268062c72be7da59fb spec/controllers/student_teams_controller_spec.rb]&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-d1d14865d734d2f66dc726c70cb1bcb9 spec/features/team_invitation_spec.rb]&lt;br /&gt;
&lt;br /&gt;
== Visual representation of changes made ==&lt;br /&gt;
&lt;br /&gt;
Horn icon appearing in correct column in signup sheet table.&lt;br /&gt;
&lt;br /&gt;
[[File:A_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
All students whose teams are not complete would see list of other students without teams on their &amp;quot;your team&amp;quot; view so that they could invite them by an easy &amp;quot;Invite&amp;quot; link as displayed below:&lt;br /&gt;
&lt;br /&gt;
[[File:Join_request_main_page_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
===Change Video===&lt;br /&gt;
*https://youtu.be/B3h3O8UtJ8E &lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:tpahuja@ncsu.edu Tushar Pahuja]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmgandh2@ncsu.edu Pragam Manoj Gandhi]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:knielar@ncsu.edu Nielarshi Kumar]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:abhardw3@ncsu.edu Abhishek Bhardwaj]&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=114694</id>
		<title>CSC/ECE 517 Fall 2017/E1793. Help students find teams to join Team1964</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=114694"/>
		<updated>2017-12-12T03:57:53Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: /* Change Request 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a Ruby on Rails based Open Source project. It is a collaboration tool which lets users with different roles (student, instructor, teaching assistant) to collaborate on a course in an institution. A collaboration could be for an assignment where students teams up for an assignment and instructors grades them on the basis of their submission. Students could review other's works and give feedback as well.&lt;br /&gt;
&lt;br /&gt;
===Github link===&lt;br /&gt;
*https://github.com/expertiza/expertiza&lt;br /&gt;
&lt;br /&gt;
===Wiki link===&lt;br /&gt;
*http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
&lt;br /&gt;
===Pull Request===&lt;br /&gt;
*https://github.com/expertiza/expertiza/pull/1129/ &lt;br /&gt;
&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
*For team-based assignments, it always takes time to find suitable team members. &lt;br /&gt;
&lt;br /&gt;
*We already have bidding, which could help you to join a team with other team members hold similar bidding preferences. However, a student may not be satisfied with automated team formation and want to switch to another team. &lt;br /&gt;
&lt;br /&gt;
*'''In this project, we will build a new feature to help students find teams to join.'''&lt;br /&gt;
&lt;br /&gt;
Currently, there are 2 ways to find other students to join your team:&lt;br /&gt;
&lt;br /&gt;
*If your team is not full, you could invite people by inputting his/her UnityID. It will send an invitation to a certain user. If s/he accept your invitation,s/he will leave the original team and join your team.&lt;br /&gt;
&lt;br /&gt;
*You could create an advisement by clicking “Your team” link and then clicking “Create” link under “Advertisement for teammates” section. Then your advertisement will appear the last column of the signup sheet page with a horn icon. In this way, all classmates could see your advisement. Someone could send a request to join your team. If you accept their request, s/he will leave original team and join in your team. &lt;br /&gt;
&lt;br /&gt;
Below screenshots represents the description above.&lt;br /&gt;
&lt;br /&gt;
Student: Advertisement icon doesn't appear in Chrome browser.&lt;br /&gt;
&lt;br /&gt;
[[File:A_chrome_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Instructor: Advertisement icon doesn't appear in Chrome browser.&lt;br /&gt;
&lt;br /&gt;
[[File:A_instructor_cr_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Advertisement icon appears in Mozilla browser but not in the cell it should appear rather it is visible under &amp;quot;Actions&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
[[File:A_mozilla_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change Request requirements:'''&lt;br /&gt;
*Students whose team is not full yet to be able to see a list of students who don’t already have teams.&lt;br /&gt;
*Students should have an option of inviting other students to join their teams.&lt;br /&gt;
*Instructors should be able to view a list of students who don't have teams.&lt;br /&gt;
&lt;br /&gt;
== Task Description ==&lt;br /&gt;
&lt;br /&gt;
====Change Request 1====&lt;br /&gt;
Fix the second way to find other students to join your team. Currently, after you create ​an​ ​advertisement,​ ​the​ ​horn​ ​icon​ ​does​ ​not​ ​appear​ ​in the​ ​the​ ​last​ ​column​ ​of​ ​the​ ​signup​ ​sheet.&lt;br /&gt;
&lt;br /&gt;
=====What did we do?=====&lt;br /&gt;
&lt;br /&gt;
We found out that the problem was due to the name of horn icon. Certain ad blockers block any element with name ad or advertisement and horn icon was named as ad.png.&lt;br /&gt;
We renamed it to ad_horn.png and it resolved the issue.&lt;br /&gt;
&lt;br /&gt;
We also found out that the issue was also due to some complex table cell population. When the assignment was not in finished stage, actions were put into a td cell and displayed, which was adding an extra row, but this was only for users who had signed up some topic. In other cases, the cell was not created every time, forcing table row to have lesser columns. &lt;br /&gt;
&lt;br /&gt;
We removed the conditional td creation, and added all conditional checks inside a parent td, ensured that even if a user has no action to display, at least a td will be created.&lt;br /&gt;
&lt;br /&gt;
====Change Request 2====&lt;br /&gt;
For​ ​student​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​a​ ​team​ ​with​ ​invitation​ ​links​ ​in student_teams#view​ ​page. You​ ​could​ ​invite​ ​students​ ​to​ ​your​ ​team​ ​by​ ​clicking​ ​invitation​ ​links.​ ​If​ ​s/he​ ​accepts your​ ​invitation,s/he​ ​will​ ​leave​  the original​ ​team​ ​and​ ​join​ ​in​ ​your​ ​team.​ ​It​ ​will​ ​be​ ​more straightforward​ ​than​ ​typing​ ​UnityID.&lt;br /&gt;
&lt;br /&gt;
====Change Request 3====&lt;br /&gt;
For​ ​instructor​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​team​ ​with​ ​invitation​ ​links​ ​in​ ​teams#list page &lt;br /&gt;
&lt;br /&gt;
=====What did we do?=====&lt;br /&gt;
'''This has solution step for CR2 and CR3.'''&lt;br /&gt;
&lt;br /&gt;
We created a helper method to fetch all participants from the database who did not have a team or whose teams have only one member(themselves). &lt;br /&gt;
We used Join queries to join tables participants, team_users, and teams to extract participants associated with the assignment with or without teams and then filtered out participants with team size &amp;gt; 1.&lt;br /&gt;
&lt;br /&gt;
'''def extract_assignment_participants(assignment_id, excluded_id = nil)'''&lt;br /&gt;
&lt;br /&gt;
Above method was defined in app/helpers/assignment_helper.rb.&lt;br /&gt;
The second parameter was required to exclude current student's id to be excluded to be returned for student whereas, for an Instructor, all students without teams or with single-member team had to be returned.&lt;br /&gt;
&lt;br /&gt;
More changes could be found here: [https://github.com/expertiza/expertiza/pull/1129/files#diff-e2d518aed0fccbb9ab0fc9e2e1ef8683 app/helpers/assignment_helper.rb]&lt;br /&gt;
&lt;br /&gt;
The method was made generic enough to be used by both app/controllers/student_teams_controller.rb (for student) and app/controllers/teams_controller.rb (for instructors).&lt;br /&gt;
&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-113f035d853c52fdfd3a00851a3db407 app/controllers/student_teams_controller.rb(for student)]&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-7543048f54ac556dff85edee281fafd8 app/controllers/teams_controller.rb(for instructors)]&lt;br /&gt;
&lt;br /&gt;
For student, we checked if student can actually send invites or not, and based on that we fetched the participant list.&lt;br /&gt;
We considered cases enlisted below for verifying if a student can send invite or not:&lt;br /&gt;
&lt;br /&gt;
*Student can't send invite if student doesn\’t have a team&lt;br /&gt;
*Student can't send invite if current team size is 1 and assignment\’s allowed team size is also 1&lt;br /&gt;
*Student can send invite if assignment\’s allowed team size is &amp;gt;1 and current team size is less than allowed team size&lt;br /&gt;
*Student can't send invite if current team size is equal to allowed team size&lt;br /&gt;
*Student can't send invite if assignment is in finished stage&lt;br /&gt;
*Student can send invite if assignment is not in finished state&lt;br /&gt;
&lt;br /&gt;
The table containing the list of students to send an invite to was created/not created based on above criteria only.&lt;br /&gt;
&lt;br /&gt;
For Instructor, there were no such criteria to be considered. &lt;br /&gt;
&lt;br /&gt;
== Modified Files ==&lt;br /&gt;
1)Conrollers:-&lt;br /&gt;
*app/controllers/student_teams_controller.rb&lt;br /&gt;
*app/controllers/teams_controller.rb&lt;br /&gt;
2)Helper:-&lt;br /&gt;
*app/helpers/assignment_helper.rb&lt;br /&gt;
3)Views:-&lt;br /&gt;
*app/views/join_team_requests/_list_not_initiated.html.erb&lt;br /&gt;
*app/views/join_team_requests/_list_received.html.erb&lt;br /&gt;
*app/views/join_team_requests/_list_sent.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
*app/views/student_teams/view.html.erb&lt;br /&gt;
*app/views/teams/list.html.erb&lt;br /&gt;
4)Tests:-&lt;br /&gt;
*spec/controllers/student_teams_controller_spec.rb&lt;br /&gt;
*spec/features/team_invitation_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Test Cases ===&lt;br /&gt;
&lt;br /&gt;
We have written automated tests to check if the changes made are working correctly. &lt;br /&gt;
&lt;br /&gt;
For that, we considered the following scenarios&lt;br /&gt;
Testing invitation criteria:-&lt;br /&gt;
*Scenario 1 - Student can't see list of students to invite if student doesn't have a team&lt;br /&gt;
*Scenario 2 - Student can't see list of students to invite if current team size is 1 and assignment’s allowed team size is also 1&lt;br /&gt;
*Scenario 3 - Student can see list of students to invite if assignment’s allowed team size is &amp;gt;1 and current team size is less than allowed team size&lt;br /&gt;
*Scenario 4 - Student can't see list of students to invite if current team size is equal to allowed team size&lt;br /&gt;
*Scenario 5 - Student can't see list of students to invite if assignment is in finished stage&lt;br /&gt;
*Scenario 6 - Student can see list of students to invite if assignment is not in finished state&lt;br /&gt;
*Scenario 7 - The list of students contains only those students who don't have a team yet or whose team is not yet complete and who have not created an advertisement link.&lt;br /&gt;
*Scenario 8 - A student can create an invitation link only if his team is not yet full.&lt;br /&gt;
*Scenario 9 - The same student who accepted the invitation link actually gets added to the team. &lt;br /&gt;
*Scenario 10 - A student won't be able to send the invitation to himself as he is already a member of that team.&lt;br /&gt;
*Scenario 11 - An instructor sees only the list of the students who do not have teams with invitation link.&lt;br /&gt;
&lt;br /&gt;
All tests could be found here: &lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-d2b8c8df44cb32268062c72be7da59fb spec/controllers/student_teams_controller_spec.rb]&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-d1d14865d734d2f66dc726c70cb1bcb9 spec/features/team_invitation_spec.rb]&lt;br /&gt;
&lt;br /&gt;
== Visual representation of changes made ==&lt;br /&gt;
&lt;br /&gt;
Horn icon appearing in correct column in signup sheet table.&lt;br /&gt;
&lt;br /&gt;
[[File:A_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
All students whose teams are not complete would see list of other students without teams on their &amp;quot;your team&amp;quot; view so that they could invite them by an easy &amp;quot;Invite&amp;quot; link as displayed below:&lt;br /&gt;
&lt;br /&gt;
[[File:Join_request_main_page_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
===Change Video===&lt;br /&gt;
*https://youtu.be/B3h3O8UtJ8E &lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:tpahuja@ncsu.edu Tushar Pahuja]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmgandh2@ncsu.edu Pragam Manoj Gandhi]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:knielar@ncsu.edu Nielarshi Kumar]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:abhardw3@ncsu.edu Abhishek Bhardwaj]&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=114693</id>
		<title>CSC/ECE 517 Fall 2017/E1793. Help students find teams to join Team1964</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=114693"/>
		<updated>2017-12-12T03:57:12Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: /* Change Request 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a Ruby on Rails based Open Source project. It is a collaboration tool which lets users with different roles (student, instructor, teaching assistant) to collaborate on a course in an institution. A collaboration could be for an assignment where students teams up for an assignment and instructors grades them on the basis of their submission. Students could review other's works and give feedback as well.&lt;br /&gt;
&lt;br /&gt;
===Github link===&lt;br /&gt;
*https://github.com/expertiza/expertiza&lt;br /&gt;
&lt;br /&gt;
===Wiki link===&lt;br /&gt;
*http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
&lt;br /&gt;
===Pull Request===&lt;br /&gt;
*https://github.com/expertiza/expertiza/pull/1129/ &lt;br /&gt;
&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
*For team-based assignments, it always takes time to find suitable team members. &lt;br /&gt;
&lt;br /&gt;
*We already have bidding, which could help you to join a team with other team members hold similar bidding preferences. However, a student may not be satisfied with automated team formation and want to switch to another team. &lt;br /&gt;
&lt;br /&gt;
*'''In this project, we will build a new feature to help students find teams to join.'''&lt;br /&gt;
&lt;br /&gt;
Currently, there are 2 ways to find other students to join your team:&lt;br /&gt;
&lt;br /&gt;
*If your team is not full, you could invite people by inputting his/her UnityID. It will send an invitation to a certain user. If s/he accept your invitation,s/he will leave the original team and join your team.&lt;br /&gt;
&lt;br /&gt;
*You could create an advisement by clicking “Your team” link and then clicking “Create” link under “Advertisement for teammates” section. Then your advertisement will appear the last column of the signup sheet page with a horn icon. In this way, all classmates could see your advisement. Someone could send a request to join your team. If you accept their request, s/he will leave original team and join in your team. &lt;br /&gt;
&lt;br /&gt;
Below screenshots represents the description above.&lt;br /&gt;
&lt;br /&gt;
Student: Advertisement icon doesn't appear in Chrome browser.&lt;br /&gt;
&lt;br /&gt;
[[File:A_chrome_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Instructor: Advertisement icon doesn't appear in Chrome browser.&lt;br /&gt;
&lt;br /&gt;
[[File:A_instructor_cr_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Advertisement icon appears in Mozilla browser but not in the cell it should appear rather it is visible under &amp;quot;Actions&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
[[File:A_mozilla_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change Request requirements:'''&lt;br /&gt;
*Students whose team is not full yet to be able to see a list of students who don’t already have teams.&lt;br /&gt;
*Students should have an option of inviting other students to join their teams.&lt;br /&gt;
*Instructors should be able to view a list of students who don't have teams.&lt;br /&gt;
&lt;br /&gt;
== Task Description ==&lt;br /&gt;
&lt;br /&gt;
====Change Request 1====&lt;br /&gt;
Fix the second way to find other students to join your team. Currently, after you create ​an​ ​advertisement,​ ​the​ ​horn​ ​icon​ ​does​ ​not​ ​appear​ ​in the​ ​the​ ​last​ ​column​ ​of​ ​the​ ​signup​ ​sheet.&lt;br /&gt;
&lt;br /&gt;
=====What did we do?=====&lt;br /&gt;
&lt;br /&gt;
We found out that the problem was due to the name of horn icon. Certain ad blockers block any element with name ad or advertisement and horn icon was named as ad.png.&lt;br /&gt;
We renamed it to ad_horn.png and it resolved the issue.&lt;br /&gt;
&lt;br /&gt;
We also found out that the issue was also due to some complex table cell population. When the assignment was not in finished stage, actions were put into a td cell and displayed, which was adding an extra row, but this was only for users who had signed up some topic. In other cases, the cell was not created every time, forcing table row to have lesser columns. &lt;br /&gt;
&lt;br /&gt;
We removed the conditional td creation, and added all conditional checks inside a parent td, ensured that even if a user has no action to display, at least a td will be created.&lt;br /&gt;
&lt;br /&gt;
====Change Request 2====&lt;br /&gt;
For​ ​student​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​a​ ​team​ ​with​ ​invitation​ ​links​ ​in student_teams#view​ ​page&lt;br /&gt;
 You​ ​could​ ​invite​ ​students​ ​to​ ​your​ ​team​ ​by​ ​clicking​ ​invitation​ ​links.​ ​If​ ​s/he​ ​accepts your​ ​invitation,s/he​ ​will​ ​leave​  the original​ ​team​ ​and​ ​join​ ​in​ ​your​ ​team.​ ​It​ ​will​ ​be​ ​more straightforward​ ​than​ ​typing​ ​UnityID.&lt;br /&gt;
&lt;br /&gt;
====Change Request 3====&lt;br /&gt;
For​ ​instructor​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​team​ ​with​ ​invitation​ ​links​ ​in​ ​teams#list page &lt;br /&gt;
&lt;br /&gt;
=====What did we do?=====&lt;br /&gt;
'''This has solution step for CR2 and CR3.'''&lt;br /&gt;
&lt;br /&gt;
We created a helper method to fetch all participants from the database who did not have a team or whose teams have only one member(themselves). &lt;br /&gt;
We used Join queries to join tables participants, team_users, and teams to extract participants associated with the assignment with or without teams and then filtered out participants with team size &amp;gt; 1.&lt;br /&gt;
&lt;br /&gt;
'''def extract_assignment_participants(assignment_id, excluded_id = nil)'''&lt;br /&gt;
&lt;br /&gt;
Above method was defined in app/helpers/assignment_helper.rb.&lt;br /&gt;
The second parameter was required to exclude current student's id to be excluded to be returned for student whereas, for an Instructor, all students without teams or with single-member team had to be returned.&lt;br /&gt;
&lt;br /&gt;
More changes could be found here: [https://github.com/expertiza/expertiza/pull/1129/files#diff-e2d518aed0fccbb9ab0fc9e2e1ef8683 app/helpers/assignment_helper.rb]&lt;br /&gt;
&lt;br /&gt;
The method was made generic enough to be used by both app/controllers/student_teams_controller.rb (for student) and app/controllers/teams_controller.rb (for instructors).&lt;br /&gt;
&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-113f035d853c52fdfd3a00851a3db407 app/controllers/student_teams_controller.rb(for student)]&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-7543048f54ac556dff85edee281fafd8 app/controllers/teams_controller.rb(for instructors)]&lt;br /&gt;
&lt;br /&gt;
For student, we checked if student can actually send invites or not, and based on that we fetched the participant list.&lt;br /&gt;
We considered cases enlisted below for verifying if a student can send invite or not:&lt;br /&gt;
&lt;br /&gt;
*Student can't send invite if student doesn\’t have a team&lt;br /&gt;
*Student can't send invite if current team size is 1 and assignment\’s allowed team size is also 1&lt;br /&gt;
*Student can send invite if assignment\’s allowed team size is &amp;gt;1 and current team size is less than allowed team size&lt;br /&gt;
*Student can't send invite if current team size is equal to allowed team size&lt;br /&gt;
*Student can't send invite if assignment is in finished stage&lt;br /&gt;
*Student can send invite if assignment is not in finished state&lt;br /&gt;
&lt;br /&gt;
The table containing the list of students to send an invite to was created/not created based on above criteria only.&lt;br /&gt;
&lt;br /&gt;
For Instructor, there were no such criteria to be considered. &lt;br /&gt;
&lt;br /&gt;
== Modified Files ==&lt;br /&gt;
1)Conrollers:-&lt;br /&gt;
*app/controllers/student_teams_controller.rb&lt;br /&gt;
*app/controllers/teams_controller.rb&lt;br /&gt;
2)Helper:-&lt;br /&gt;
*app/helpers/assignment_helper.rb&lt;br /&gt;
3)Views:-&lt;br /&gt;
*app/views/join_team_requests/_list_not_initiated.html.erb&lt;br /&gt;
*app/views/join_team_requests/_list_received.html.erb&lt;br /&gt;
*app/views/join_team_requests/_list_sent.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
*app/views/student_teams/view.html.erb&lt;br /&gt;
*app/views/teams/list.html.erb&lt;br /&gt;
4)Tests:-&lt;br /&gt;
*spec/controllers/student_teams_controller_spec.rb&lt;br /&gt;
*spec/features/team_invitation_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Test Cases ===&lt;br /&gt;
&lt;br /&gt;
We have written automated tests to check if the changes made are working correctly. &lt;br /&gt;
&lt;br /&gt;
For that, we considered the following scenarios&lt;br /&gt;
Testing invitation criteria:-&lt;br /&gt;
*Scenario 1 - Student can't see list of students to invite if student doesn't have a team&lt;br /&gt;
*Scenario 2 - Student can't see list of students to invite if current team size is 1 and assignment’s allowed team size is also 1&lt;br /&gt;
*Scenario 3 - Student can see list of students to invite if assignment’s allowed team size is &amp;gt;1 and current team size is less than allowed team size&lt;br /&gt;
*Scenario 4 - Student can't see list of students to invite if current team size is equal to allowed team size&lt;br /&gt;
*Scenario 5 - Student can't see list of students to invite if assignment is in finished stage&lt;br /&gt;
*Scenario 6 - Student can see list of students to invite if assignment is not in finished state&lt;br /&gt;
*Scenario 7 - The list of students contains only those students who don't have a team yet or whose team is not yet complete and who have not created an advertisement link.&lt;br /&gt;
*Scenario 8 - A student can create an invitation link only if his team is not yet full.&lt;br /&gt;
*Scenario 9 - The same student who accepted the invitation link actually gets added to the team. &lt;br /&gt;
*Scenario 10 - A student won't be able to send the invitation to himself as he is already a member of that team.&lt;br /&gt;
*Scenario 11 - An instructor sees only the list of the students who do not have teams with invitation link.&lt;br /&gt;
&lt;br /&gt;
All tests could be found here: &lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-d2b8c8df44cb32268062c72be7da59fb spec/controllers/student_teams_controller_spec.rb]&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-d1d14865d734d2f66dc726c70cb1bcb9 spec/features/team_invitation_spec.rb]&lt;br /&gt;
&lt;br /&gt;
== Visual representation of changes made ==&lt;br /&gt;
&lt;br /&gt;
Horn icon appearing in correct column in signup sheet table.&lt;br /&gt;
&lt;br /&gt;
[[File:A_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
All students whose teams are not complete would see list of other students without teams on their &amp;quot;your team&amp;quot; view so that they could invite them by an easy &amp;quot;Invite&amp;quot; link as displayed below:&lt;br /&gt;
&lt;br /&gt;
[[File:Join_request_main_page_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
===Change Video===&lt;br /&gt;
*https://youtu.be/B3h3O8UtJ8E &lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:tpahuja@ncsu.edu Tushar Pahuja]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmgandh2@ncsu.edu Pragam Manoj Gandhi]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:knielar@ncsu.edu Nielarshi Kumar]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:abhardw3@ncsu.edu Abhishek Bhardwaj]&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=114692</id>
		<title>CSC/ECE 517 Fall 2017/E1793. Help students find teams to join Team1964</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=114692"/>
		<updated>2017-12-12T03:56:35Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a Ruby on Rails based Open Source project. It is a collaboration tool which lets users with different roles (student, instructor, teaching assistant) to collaborate on a course in an institution. A collaboration could be for an assignment where students teams up for an assignment and instructors grades them on the basis of their submission. Students could review other's works and give feedback as well.&lt;br /&gt;
&lt;br /&gt;
===Github link===&lt;br /&gt;
*https://github.com/expertiza/expertiza&lt;br /&gt;
&lt;br /&gt;
===Wiki link===&lt;br /&gt;
*http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
&lt;br /&gt;
===Pull Request===&lt;br /&gt;
*https://github.com/expertiza/expertiza/pull/1129/ &lt;br /&gt;
&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
*For team-based assignments, it always takes time to find suitable team members. &lt;br /&gt;
&lt;br /&gt;
*We already have bidding, which could help you to join a team with other team members hold similar bidding preferences. However, a student may not be satisfied with automated team formation and want to switch to another team. &lt;br /&gt;
&lt;br /&gt;
*'''In this project, we will build a new feature to help students find teams to join.'''&lt;br /&gt;
&lt;br /&gt;
Currently, there are 2 ways to find other students to join your team:&lt;br /&gt;
&lt;br /&gt;
*If your team is not full, you could invite people by inputting his/her UnityID. It will send an invitation to a certain user. If s/he accept your invitation,s/he will leave the original team and join your team.&lt;br /&gt;
&lt;br /&gt;
*You could create an advisement by clicking “Your team” link and then clicking “Create” link under “Advertisement for teammates” section. Then your advertisement will appear the last column of the signup sheet page with a horn icon. In this way, all classmates could see your advisement. Someone could send a request to join your team. If you accept their request, s/he will leave original team and join in your team. &lt;br /&gt;
&lt;br /&gt;
Below screenshots represents the description above.&lt;br /&gt;
&lt;br /&gt;
Student: Advertisement icon doesn't appear in Chrome browser.&lt;br /&gt;
&lt;br /&gt;
[[File:A_chrome_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Instructor: Advertisement icon doesn't appear in Chrome browser.&lt;br /&gt;
&lt;br /&gt;
[[File:A_instructor_cr_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Advertisement icon appears in Mozilla browser but not in the cell it should appear rather it is visible under &amp;quot;Actions&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
[[File:A_mozilla_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Change Request requirements:'''&lt;br /&gt;
*Students whose team is not full yet to be able to see a list of students who don’t already have teams.&lt;br /&gt;
*Students should have an option of inviting other students to join their teams.&lt;br /&gt;
*Instructors should be able to view a list of students who don't have teams.&lt;br /&gt;
&lt;br /&gt;
== Task Description ==&lt;br /&gt;
&lt;br /&gt;
====Change Request 1====&lt;br /&gt;
Fix the second way to find other students to join your team. Currently, after you create ​an​ ​advertisement,​ ​the​ ​horn​ ​icon​ ​does​ ​not​ ​appear​ ​in the​ ​the​ ​last​ ​column​ ​of​ ​the​ ​signup​ ​sheet.&lt;br /&gt;
&lt;br /&gt;
=====What did we do?=====&lt;br /&gt;
&lt;br /&gt;
We found out that the problem was due to the name of horn icon. Certain ad blockers block any element with name ad or advertisement and horn icon was named as ad.png.&lt;br /&gt;
We renamed it to ad_horn.png and it resolved the issue.&lt;br /&gt;
&lt;br /&gt;
We also found out that the issue was also due to some complex table cell population. When the assignment was not in finished stage, actions were put into a td cell and displayed, which was adding an extra row, but this was only for users who had signed up some topic. In other cases, the cell was not created every time, forcing table row to have lesser columns. &lt;br /&gt;
&lt;br /&gt;
We removed the conditional td creation, and added all conditional checks inside a parent td, ensured that even if a user has no action to display, at least a td will be created.&lt;br /&gt;
&lt;br /&gt;
====Change Request 2====&lt;br /&gt;
For​ ​student​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​a​ ​team​ ​with​ ​invitation​ ​links​ ​in student_teams#view​ ​page&lt;br /&gt;
 ○ You​ ​could​ ​invite​ ​students​ ​to​ ​your​ ​team​ ​by​ ​clicking​ ​invitation​ ​links.​ ​If​ ​s/he​ ​accepts your​ ​invitation,s/he​ ​will​ ​leave​  the original​ ​team​ ​and​ ​join​ ​in​ ​your​ ​team.​ ​It​ ​will​ ​be​ ​more straightforward​ ​than​ ​typing​ ​UnityID.&lt;br /&gt;
&lt;br /&gt;
====Change Request 3====&lt;br /&gt;
For​ ​instructor​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​team​ ​with​ ​invitation​ ​links​ ​in​ ​teams#list page &lt;br /&gt;
&lt;br /&gt;
=====What did we do?=====&lt;br /&gt;
'''This has solution step for CR2 and CR3.'''&lt;br /&gt;
&lt;br /&gt;
We created a helper method to fetch all participants from the database who did not have a team or whose teams have only one member(themselves). &lt;br /&gt;
We used Join queries to join tables participants, team_users, and teams to extract participants associated with the assignment with or without teams and then filtered out participants with team size &amp;gt; 1.&lt;br /&gt;
&lt;br /&gt;
'''def extract_assignment_participants(assignment_id, excluded_id = nil)'''&lt;br /&gt;
&lt;br /&gt;
Above method was defined in app/helpers/assignment_helper.rb.&lt;br /&gt;
The second parameter was required to exclude current student's id to be excluded to be returned for student whereas, for an Instructor, all students without teams or with single-member team had to be returned.&lt;br /&gt;
&lt;br /&gt;
More changes could be found here: [https://github.com/expertiza/expertiza/pull/1129/files#diff-e2d518aed0fccbb9ab0fc9e2e1ef8683 app/helpers/assignment_helper.rb]&lt;br /&gt;
&lt;br /&gt;
The method was made generic enough to be used by both app/controllers/student_teams_controller.rb (for student) and app/controllers/teams_controller.rb (for instructors).&lt;br /&gt;
&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-113f035d853c52fdfd3a00851a3db407 app/controllers/student_teams_controller.rb(for student)]&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-7543048f54ac556dff85edee281fafd8 app/controllers/teams_controller.rb(for instructors)]&lt;br /&gt;
&lt;br /&gt;
For student, we checked if student can actually send invites or not, and based on that we fetched the participant list.&lt;br /&gt;
We considered cases enlisted below for verifying if a student can send invite or not:&lt;br /&gt;
&lt;br /&gt;
*Student can't send invite if student doesn\’t have a team&lt;br /&gt;
*Student can't send invite if current team size is 1 and assignment\’s allowed team size is also 1&lt;br /&gt;
*Student can send invite if assignment\’s allowed team size is &amp;gt;1 and current team size is less than allowed team size&lt;br /&gt;
*Student can't send invite if current team size is equal to allowed team size&lt;br /&gt;
*Student can't send invite if assignment is in finished stage&lt;br /&gt;
*Student can send invite if assignment is not in finished state&lt;br /&gt;
&lt;br /&gt;
The table containing the list of students to send an invite to was created/not created based on above criteria only.&lt;br /&gt;
&lt;br /&gt;
For Instructor, there were no such criteria to be considered. &lt;br /&gt;
&lt;br /&gt;
== Modified Files ==&lt;br /&gt;
1)Conrollers:-&lt;br /&gt;
*app/controllers/student_teams_controller.rb&lt;br /&gt;
*app/controllers/teams_controller.rb&lt;br /&gt;
2)Helper:-&lt;br /&gt;
*app/helpers/assignment_helper.rb&lt;br /&gt;
3)Views:-&lt;br /&gt;
*app/views/join_team_requests/_list_not_initiated.html.erb&lt;br /&gt;
*app/views/join_team_requests/_list_received.html.erb&lt;br /&gt;
*app/views/join_team_requests/_list_sent.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
*app/views/student_teams/view.html.erb&lt;br /&gt;
*app/views/teams/list.html.erb&lt;br /&gt;
4)Tests:-&lt;br /&gt;
*spec/controllers/student_teams_controller_spec.rb&lt;br /&gt;
*spec/features/team_invitation_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Test Cases ===&lt;br /&gt;
&lt;br /&gt;
We have written automated tests to check if the changes made are working correctly. &lt;br /&gt;
&lt;br /&gt;
For that, we considered the following scenarios&lt;br /&gt;
Testing invitation criteria:-&lt;br /&gt;
*Scenario 1 - Student can't see list of students to invite if student doesn't have a team&lt;br /&gt;
*Scenario 2 - Student can't see list of students to invite if current team size is 1 and assignment’s allowed team size is also 1&lt;br /&gt;
*Scenario 3 - Student can see list of students to invite if assignment’s allowed team size is &amp;gt;1 and current team size is less than allowed team size&lt;br /&gt;
*Scenario 4 - Student can't see list of students to invite if current team size is equal to allowed team size&lt;br /&gt;
*Scenario 5 - Student can't see list of students to invite if assignment is in finished stage&lt;br /&gt;
*Scenario 6 - Student can see list of students to invite if assignment is not in finished state&lt;br /&gt;
*Scenario 7 - The list of students contains only those students who don't have a team yet or whose team is not yet complete and who have not created an advertisement link.&lt;br /&gt;
*Scenario 8 - A student can create an invitation link only if his team is not yet full.&lt;br /&gt;
*Scenario 9 - The same student who accepted the invitation link actually gets added to the team. &lt;br /&gt;
*Scenario 10 - A student won't be able to send the invitation to himself as he is already a member of that team.&lt;br /&gt;
*Scenario 11 - An instructor sees only the list of the students who do not have teams with invitation link.&lt;br /&gt;
&lt;br /&gt;
All tests could be found here: &lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-d2b8c8df44cb32268062c72be7da59fb spec/controllers/student_teams_controller_spec.rb]&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1129/files#diff-d1d14865d734d2f66dc726c70cb1bcb9 spec/features/team_invitation_spec.rb]&lt;br /&gt;
&lt;br /&gt;
== Visual representation of changes made ==&lt;br /&gt;
&lt;br /&gt;
Horn icon appearing in correct column in signup sheet table.&lt;br /&gt;
&lt;br /&gt;
[[File:A_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
All students whose teams are not complete would see list of other students without teams on their &amp;quot;your team&amp;quot; view so that they could invite them by an easy &amp;quot;Invite&amp;quot; link as displayed below:&lt;br /&gt;
&lt;br /&gt;
[[File:Join_request_main_page_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
===Change Video===&lt;br /&gt;
*https://youtu.be/B3h3O8UtJ8E &lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:tpahuja@ncsu.edu Tushar Pahuja]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmgandh2@ncsu.edu Pragam Manoj Gandhi]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:knielar@ncsu.edu Nielarshi Kumar]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:abhardw3@ncsu.edu Abhishek Bhardwaj]&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Uml.jpg&amp;diff=113387</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=113387"/>
		<updated>2017-11-15T01:50:06Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: uploaded a new version of &amp;amp;quot;File:Uml.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Uml.jpg&amp;diff=113384</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=113384"/>
		<updated>2017-11-15T01:48:06Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=113354</id>
		<title>CSC/ECE 517 Fall 2017/E1793. Help students find teams to join Team1964</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=113354"/>
		<updated>2017-11-15T00:51:34Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a Ruby on Rails based Open Source project. It is a collaboration tool which lets users with different roles (student, instructor, teaching assistant) to collaborate on a course in an institution. A collaboration could be for an assignment where students teams up for an assignment and instructors grades them on the basis of their submission. Students could review other's works and give feedback as well.&lt;br /&gt;
&lt;br /&gt;
===Github link===&lt;br /&gt;
*https://github.com/expertiza/expertiza&lt;br /&gt;
&lt;br /&gt;
===Wiki link===&lt;br /&gt;
*http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
*For team-based assignments, it always takes time to find suitable team members. &lt;br /&gt;
&lt;br /&gt;
*We already have bidding, which could help you to join in a team with other team members hold similar bidding preferences. However, a student may not be satisfied with automated team formation and want to switch to another team. &lt;br /&gt;
&lt;br /&gt;
*'''In this project, we will build a new feature to help students find teams to join.'''&lt;br /&gt;
&lt;br /&gt;
Currently, there are 2 ways to find other students to join your team:&lt;br /&gt;
&lt;br /&gt;
*If your team is not full, you could invite people by inputting his/her UnityID. It will send an invitation to a certain user. If s/he accept your invitation,s/he will leave original team and join your team.&lt;br /&gt;
&lt;br /&gt;
*You could create an advisement by clicking “Your team” link and then clicking “Create” link under “Advertisement for teammates” section. Then your advertisement will appear the last column of the signup sheet page with a horn icon. In this way, all classmates could see your advisement. Someone could send a request to join your team. If you accept their request, s/he will leave original team and join in your team. &lt;br /&gt;
&lt;br /&gt;
Below screenshots represents the description above.&lt;br /&gt;
&lt;br /&gt;
Student: Advertisement icon doesn't appear in Chrome browser.&lt;br /&gt;
&lt;br /&gt;
[[File:A_chrome_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Instructor: Advertisement icon doesn't appear in Chrome browser.&lt;br /&gt;
&lt;br /&gt;
[[File:A_instructor_cr_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Advertisement icon appears in Mozilla browser but not in the cell it should appear rather it is visible under &amp;quot;Actions&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
[[File:A_mozilla_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Sending invitation to a particular student using their unity id as per below.&lt;br /&gt;
&lt;br /&gt;
[[File:Invite_unity_id_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Creating advertisements for joining a team (this is available only after signing up a topic).&lt;br /&gt;
&lt;br /&gt;
[[File:A_by_teammate_before.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
'''Change Request requirements:'''&lt;br /&gt;
*Students who do not have a team yet or whose team is not full yet to be able to see a list of students who don’t already have teams.&lt;br /&gt;
*Students should have an option of inviting other students to join their teams.&lt;br /&gt;
*Instructors should be able to view list of students who don't have teams.&lt;br /&gt;
&lt;br /&gt;
== Task Description ==&lt;br /&gt;
&lt;br /&gt;
====Change Request 1====&lt;br /&gt;
Fix the second way to find other students ​to​ ​join​ ​your​ ​team. Currently,​ ​after​ ​you​ ​create​ ​an​ ​advertisement,​ ​the​ ​horn​ ​icon​ ​does​ ​not​ ​appear​ ​in the​ ​the​ ​last​ ​column​ ​of​ ​the​ ​signup​ ​sheet.&lt;br /&gt;
&lt;br /&gt;
====Change Request 2====&lt;br /&gt;
For​ ​student​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​a​ ​team​ ​with​ ​invitation​ ​links​ ​in student_teams#view​ ​page ○ You​ ​could​ ​invite​ ​students​ ​to​ ​your​ ​team​ ​by​ ​clicking​ ​invitation​ ​links.​ ​If​ ​s/he​ ​accept your​ ​invitation,s/he​ ​will​ ​leave​  the original​ ​team​ ​and​ ​join​ ​in​ ​your​ ​team.​ ​It​ ​will​ ​be​ ​more straightforward​ ​than​ ​typing​ ​UnityID.&lt;br /&gt;
&lt;br /&gt;
====Change Request 3====&lt;br /&gt;
For​ ​instructor​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​team​ ​with​ ​invitation​ ​links​ ​in​ ​teams#list page &lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Edge cases ===&lt;br /&gt;
&lt;br /&gt;
We will be writing automated tests to check if the changes made are working correctly. &lt;br /&gt;
&lt;br /&gt;
For that, we considered the following scenarios&lt;br /&gt;
&lt;br /&gt;
*If the team is full, the person who received an invitation link would not be able to accept that. &lt;br /&gt;
*If a student leaves a team, then he is able to see his previous teammates in the available list of students that do not have a complete team and have not created an invitation link.&lt;br /&gt;
*Student sees a horn icon in the last column if any of the students have created an advertisement for that topic.&lt;br /&gt;
*The list of students contains only those students who don't have a team yet or whose team is not yet complete and who have not created an advertisement link.&lt;br /&gt;
*A student can create an invitation link only if his team is not yet full.&lt;br /&gt;
*The same student who accepted the invitation link actually gets added to the team. &lt;br /&gt;
*A student won't be able to send the invitation to himself as he is already a member of that team.&lt;br /&gt;
*An instructor sees only the list of the students who do not have teams with invitation link.&lt;br /&gt;
*If a student joins a team using an invitation link, then he gets all the rights that a team member of that team has. Ex: Now, he will be able to approve a team join request and then correspondingly send the invitation for joining the group to that student.&lt;br /&gt;
&lt;br /&gt;
== Visual representation of planned changes ==&lt;br /&gt;
&lt;br /&gt;
Inviting students by creating an advertisement.&lt;br /&gt;
&lt;br /&gt;
Once a student creates an advertisement, it would appear in the sign up sheet as below.&lt;br /&gt;
It would be visible to all other students visiting sign up sheet.&lt;br /&gt;
&lt;br /&gt;
[[File:A_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Once a student decides to respond to the advertisement, he clicks on the icon corresponding to the team and topic. He sees the description of the advertisement and a link to respond to it.&lt;br /&gt;
&lt;br /&gt;
[[File:A_request_invitation_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
The student would be presented by a form as below once he/she chooses to request for an invitation.&lt;br /&gt;
&lt;br /&gt;
[[File:A_response.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Student would respond by completing the form and clicking on create. His request would be confirmed by showing a screen as below:&lt;br /&gt;
&lt;br /&gt;
[[File:Join_request_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Team receiving the request would see the incoming request on his &amp;quot;your team&amp;quot; view, from where he could send invites for joining the team.&lt;br /&gt;
&lt;br /&gt;
*Note - this approach was considered to avoid random assignment of student into a team.&lt;br /&gt;
A student could chose more than 1 team to respond to their advertisements. In that case, the team accepting 1st would get the student into their team and it would be complex to handle the other invitations as the student who has sent the invitation would be juggling around or may not be able to choose the best fit.&lt;br /&gt;
&lt;br /&gt;
*Our take - Each student may choose to respond to more than 1 advertisements but also should have choice of selecting teams as per their comfort.&lt;br /&gt;
&lt;br /&gt;
When a student respond to an advertisement, the team receiving it should send an invitation if they find the student matching the criteria and the student then choose to accept one out of all the invitation he receives.&lt;br /&gt;
&lt;br /&gt;
Below screenshots shows the steps:&lt;br /&gt;
&lt;br /&gt;
The team who has got a response on their advertisement would see the incoming request, which they can accept or decline.&lt;br /&gt;
&lt;br /&gt;
[[File:Received_request_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Once the team accepts the invitation, an invite would be sent to the student to join the team. The team could see their sent invitation as below:&lt;br /&gt;
&lt;br /&gt;
[[File:Sent_invitation_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
The student sees the invitation on his/her &amp;quot;your team&amp;quot; view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:Received_invitation_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Once the student chooses to accept the invitation, he/she could click on the accept link, upon which the user would be presented with a prompt dialog to confirm the acceptance&lt;br /&gt;
as the student would be removed from the current team and placed into the team whose invitation he/she would accept.&lt;br /&gt;
&lt;br /&gt;
[[File:Accept_invitation_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Upon successful acceptance, he/she becomes a member of the team.&lt;br /&gt;
&lt;br /&gt;
[[File:Accepted_request_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All other students who have not created advertisements, each student would see their list on their &amp;quot;your team&amp;quot; view so that they could invite them by an easy &amp;quot;Invite&amp;quot; link as displayed below:&lt;br /&gt;
&lt;br /&gt;
[[File:Invite_unity_id_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Join_request_main_page_after.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:tpahuja@ncsu.edu Tushar Pahuja]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmgandh2@ncsu.edu Pragam Manoj Gandhi]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:knielar@ncsu.edu Nielarshi Kumar]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:abhardw3@ncsu.edu Abhishek Bhardwaj]&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1758_Improve_e-mail_notifications&amp;diff=112077</id>
		<title>CSC/ECE 517 Fall 2017/E1758 Improve e-mail notifications</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1758_Improve_e-mail_notifications&amp;diff=112077"/>
		<updated>2017-11-07T00:13:40Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application developed using Ruby on Rails that serves as a peer-review system. The application allows students to submit and peer-review learning objects (articles, code, web sites, etc)[1][2]. It is an open source project and it's codebase is maintained in GitHub. We are contributing to Expertiza as a part of our Object-Oriented Design and Development's Open-Source Software (OSS) Project. Our goal in this project is to fix various issues related to staggered deadlines for assignments. A staggered-deadline assignment is an assignment in which different topics have different deadlines. In this Wiki Page, we will explain the changes that we have made for the same.&lt;br /&gt;
&lt;br /&gt;
=='''Changes To Be Implemented'''==&lt;br /&gt;
*'''What’s wrong:'''  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;When students' accounts are created by importing a CSV file on the Users page, they receive e-mails with their user-ID and password. But if an account is created by adding them as participants to an assignment when they don't already have an account, e-mail is not sent. Students should receive e-mails upon account creation, regardless of how their account is created.  So this involves adding a call to the e-mailer … or, perhaps, moving an email call from the Users controller to the point where an account is actually created.&lt;br /&gt;
&amp;lt;li&amp;gt; Second, evidently if a submission is revised after review, the system e-mails the reviewer saying to revise the review. This is just fine ... except if the last round of review is in progress.The message telling reviewers to revise their reviews should not be sent after the last review deadline has passed.  It would also be nice to fix the message so it tells which review (Review 1, Review 2, etc.) has been revised, and gives the reviewer a link directly to it.&lt;br /&gt;
&lt;br /&gt;
*'''There are also other circumstances when it would be helpful to send mail.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Send out an email to the invitee when a participant sends out an invitation to another participant to join a team. &lt;br /&gt;
&amp;lt;li&amp;gt;The student who issued the invitation should also be e-mailed when the invitee joins the team. And also when a student responds to a teammate advertisement. In general, all activity on ad responses and invitations should be reported to the other party by e-mail (unless these e-mails are turned off in a (new) profile field).&lt;br /&gt;
&amp;lt;li&amp;gt;Notify an instructor by e-mail when a student suggests a topic.&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
*app/controllers/invitations_controller.rb&lt;br /&gt;
*app/controllers/submitted_content_controller.rb&lt;br /&gt;
*app/controllers/suggestion_controller.rb&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
*app/models/assignment.rb&lt;br /&gt;
*app/models/assignment_participant.rb&lt;br /&gt;
*app/models/course_participant.rb&lt;br /&gt;
&lt;br /&gt;
=='''Added Files'''==&lt;br /&gt;
&lt;br /&gt;
*app/views/mailer/partials/_user_invite_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_invite_plain.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_welcome_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_welcome_plain.html.erb&lt;br /&gt;
*app/views/mailer/send_mail_to_instructor.html.erb&lt;br /&gt;
*app/views/mailer/send_mail_to_instructor.text.erb&lt;br /&gt;
&lt;br /&gt;
*app/views/mailer/partials/_user_accept_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_accept_plain.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_decline_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_decline_plain.html.erb&lt;br /&gt;
&lt;br /&gt;
=='''Approach Taken To Implement Changes'''==&lt;br /&gt;
&lt;br /&gt;
NOTE: All the mails except the ones for the reviewer which are sent to mailinator , are sent to expertiza.development@gmail.com ,as this is already set in the development environment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Initially the email were being sent to users when they were added using a CSV file on the users page only . Now we added a method in the assignment_participant.rb model to send mails when a participant is added to an assignment on the assignment page through a CSV file.&lt;br /&gt;
&lt;br /&gt;
def self.import(row, _row_header = nil, session, id)&lt;br /&gt;
    raise ArgumentError, &amp;quot;No user id has been specified.&amp;quot; if row.empty?&lt;br /&gt;
    user = User.find_by_name(row[0])&lt;br /&gt;
    if user.nil?&lt;br /&gt;
      raise ArgumentError, &amp;quot;The record containing #{row[0]} does not have enough items.&amp;quot; if row.length &amp;lt; 4&lt;br /&gt;
      attributes = ImportFileHelper.define_attributes(row)&lt;br /&gt;
      user = ImportFileHelper.create_new_user(attributes, session)&lt;br /&gt;
    end&lt;br /&gt;
    raise ImportError, &amp;quot;The assignment with id \&amp;quot;&amp;quot; + id.to_s + &amp;quot;\&amp;quot; was not found.&amp;quot; if Assignment.find(id).nil?&lt;br /&gt;
    unless AssignmentParticipant.exists?(user_id: user.id, parent_id: id)&lt;br /&gt;
      new_part = AssignmentParticipant.create(user_id: user.id, parent_id: id)&lt;br /&gt;
      new_part.set_handle&lt;br /&gt;
     # E1758 Fall17 &lt;br /&gt;
      password = &amp;quot;password&amp;quot;#user.password&lt;br /&gt;
      prepared_mail = MailerHelper.send_mail_to_user(user, &amp;quot;Your Expertiza account and password have been created.&amp;quot;, &amp;quot;user_welcome&amp;quot;, password)&lt;br /&gt;
      prepared_mail.deliver&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also we added a method in the course_participant.rb file to send the mails when the user is added on the course page using a CSV file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 def self.import(row, _row_header = nil, session, id)&lt;br /&gt;
    raise ArgumentError, &amp;quot;No user id has been specified.&amp;quot; if row.empty?&lt;br /&gt;
    user = User.find_by_name(row[0])&lt;br /&gt;
    if user.nil?&lt;br /&gt;
      raise ArgumentError, &amp;quot;The record containing #{row[0]} does not have enough items.&amp;quot; if row.length &amp;lt; 4&lt;br /&gt;
      attributes = ImportFileHelper.define_attributes(row)&lt;br /&gt;
      user = ImportFileHelper.create_new_user(attributes, session)&lt;br /&gt;
    end&lt;br /&gt;
    course = Course.find(id)&lt;br /&gt;
    if course.nil?&lt;br /&gt;
      raise ImportError, &amp;quot;The course with the id \&amp;quot;&amp;quot; + id.to_s + &amp;quot;\&amp;quot; was not found.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    unless CourseParticipant.exists?(user_id: user.id, parent_id: course.id)&lt;br /&gt;
      CourseParticipant.create(user_id: user.id, parent_id: course.id)&lt;br /&gt;
    # E1758 Fall 17&lt;br /&gt;
      password = &amp;quot;password&amp;quot;#user.password&lt;br /&gt;
      prepared_mail = MailerHelper.send_mail_to_user(user, &amp;quot;Your Expertiza account and password have been created.&amp;quot;, &amp;quot;user_welcome&amp;quot;, password)&lt;br /&gt;
      prepared_mail.deliver&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Initially whenever a submission was being revised ,a mail was being sent to the the reviewer to revise the review. We needed to make sure that mail should not go when it is the last phase of review.&lt;br /&gt;
&lt;br /&gt;
We put a check on the condition that if it is the last round of review then mail should not be sent to the reviewer for revision of his review.&lt;br /&gt;
for that we created a method review_deadline in the assignment.rb file to check if the next due date round is equal to number of review rounds or not.&lt;br /&gt;
# E1758 Fall 17&lt;br /&gt;
  def review_deadline(topic_id = nil, num_review_rounds)&lt;br /&gt;
    return false if topic_id.nil? and self.staggered_deadline?&lt;br /&gt;
    next_due_date = DueDate.get_next_due_date(self.id, topic_id)&lt;br /&gt;
    return !(next_due_date.round == num_review_rounds &amp;amp;&amp;amp; next_due_date.deadline_type_id == 2)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
We also created a method in the assignment_participant.rb file to check if the round is valid for mail.&lt;br /&gt;
&lt;br /&gt;
 # E1758 Fall 17&lt;br /&gt;
  def is_round_valid_for_mail?&lt;br /&gt;
    topic_id = SignedUpTeam.topic_id(self.parent_id, self.user_id)&lt;br /&gt;
    return assignment.review_deadline(topic_id, assignment.num_review_rounds)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
In the submitted_content_controller.rb we created a check  &lt;br /&gt;
&lt;br /&gt;
 # E1758 Fall 17&lt;br /&gt;
      if participant.is_round_valid_for_mail?&lt;br /&gt;
      reviewers = []&lt;br /&gt;
      participant.reviewers.each do |reviewer|&lt;br /&gt;
        reviewers &amp;lt;&amp;lt; User.find(reviewer.user_id).email&lt;br /&gt;
      end&lt;br /&gt;
      Mailer.delayed_message(bcc: reviewers, subject: &amp;quot;You have a new submission to be review&amp;quot;, body: &amp;quot;Please visit http://expertiza.ncsu.edu and proceed to peer reviews.&amp;quot;).deliver_now&lt;br /&gt;
      # participant.assignment.email(participant.id) rescue nil&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to action: 'edit', id: @participant.id&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Initially no mail was going to the reciever when a participant was sending an invitation to another participant. We have edited the create method to put the mail functionality in invitations controller&lt;br /&gt;
&lt;br /&gt;
def create&lt;br /&gt;
    # check if the invited user is already invited (i.e. awaiting reply)&lt;br /&gt;
    if Invitation.is_invited?(@student.user_id, @user.id, @student.parent_id)&lt;br /&gt;
      create_utility&lt;br /&gt;
      # E1758 Fall 17&lt;br /&gt;
      MailerHelper.send_mail_to_invitee(@user, &amp;quot;You have been invited to join a team&amp;quot;, &amp;quot;user_invite&amp;quot;).deliver&lt;br /&gt;
      #password = &amp;quot;password&amp;quot;&lt;br /&gt;
      #prepared_mail = MailerHelper.send_mail_to_user(@user, &amp;quot;You have been invited to join a team&amp;quot;, &amp;quot;user_welcome&amp;quot;, password)&lt;br /&gt;
      #prepared_mail.deliver&lt;br /&gt;
    else&lt;br /&gt;
      flash[:note] = &amp;quot;You have already sent an invitation to \&amp;quot;#{@user.name}\&amp;quot;.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    update_join_team_request @user, @student&lt;br /&gt;
&lt;br /&gt;
    redirect_to view_student_teams_path student_id: @student.id&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
we also created two partials for the respective view namely.&lt;br /&gt;
*app/views/mailer/partials/_user_invite_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_invite_plain.html.erb &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) As there was no mailing method for invitation there was also no method to notify the sender of invitation about the acceptance of his invitation. For this we made changes in the accept and decline methods of the invitations controller.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def accept&lt;br /&gt;
    # Accept the invite and check whether the add was successful&lt;br /&gt;
    @inv = Invitation.find(params[:inv_id])&lt;br /&gt;
    sender_student = @inv.from_user&lt;br /&gt;
    # E1758 Fall 17&lt;br /&gt;
    MailerHelper.send_mail_to_invitee(sender_student, &amp;quot;Invitation accepted.&amp;quot;, &amp;quot;user_invite_accept&amp;quot;).deliver&lt;br /&gt;
    unless Invitation.accept_invite(params[:team_id], @inv.from_id, @inv.to_id, @student.parent_id)&lt;br /&gt;
      flash[:error] = 'The system failed to add you to the team that invited you.'&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    redirect_to view_student_teams_path student_id: params[:student_id]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def decline&lt;br /&gt;
    @inv = Invitation.find(params[:inv_id])&lt;br /&gt;
    # Status code D for declined&lt;br /&gt;
    @inv.reply_status = 'D'&lt;br /&gt;
    @inv.save&lt;br /&gt;
    student = Participant.find(params[:student_id])&lt;br /&gt;
    sender_student = @inv.from_user&lt;br /&gt;
    # E1758 Fall 17&lt;br /&gt;
    MailerHelper.send_mail_to_invitee(sender_student, &amp;quot;Invitation declined.&amp;quot;, &amp;quot;user_invite_decline&amp;quot;).deliver&lt;br /&gt;
    redirect_to view_student_teams_path student_id: student.id&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart from that we created four partials for the respective changes,namely:&lt;br /&gt;
&lt;br /&gt;
*app/views/mailer/partials/_user_accept_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_accept_plain.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_decline_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_decline_plain.html.erb &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) When a student suggests a topic initially the instructor was not notified. We created a method send_mail_to_instructor() to send mails in the mailer.rb.&lt;br /&gt;
&lt;br /&gt;
 # E1758 Fall 17&lt;br /&gt;
  def send_mail_to_instructor()&lt;br /&gt;
    #just for development purpose, else parameters can be passed accordingly&lt;br /&gt;
    mail(to:'expertiza.development@gmail.com',subject: &amp;quot;A new topic suggestion by student&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
We called the above defined method in the suggestion_controller.&lt;br /&gt;
&lt;br /&gt;
  # E1758 Fall 17&lt;br /&gt;
    Mailer.send_mail_to_instructor().deliver_now&lt;br /&gt;
    redirect_to action: 'new', id: @suggestion.assignment_id&lt;br /&gt;
&lt;br /&gt;
Now the instructor is recieving mail when a student is suggesting a topic.&lt;br /&gt;
&lt;br /&gt;
We also added two views which consist of the respective mail content.&lt;br /&gt;
&lt;br /&gt;
*app/views/mailer/send_mail_to_instructor.html.erb&lt;br /&gt;
*app/views/mailer/send_mail_to_instructor.text.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Our project requirements do not include designing automated test cases and writing tests so we have done manual testing to make sure that it works well. The manual testing is shown in the video.The description for the manual testing is given below:&lt;br /&gt;
&lt;br /&gt;
To test the functionality regarding the first requirement we imported a csv file named test.csv , which contained the details of a student, from the course_participant page. With this import the student was added as a course participant and the mail was successfully sent to expertiza.development@gmail.com. Then we repeated the same procedure from assignment_participant page and this time also the added mailing functionality worked well.&lt;br /&gt;
&lt;br /&gt;
To check the email functionality for invitations we logged in as student5001 and sent an invite request to student5002 for program 1 and the invitation mail was successfully sent to expertiza.development@gmail.com. Then we logged in as student5002 and declined the invite request and mail stating a decline was successfully sent to the expertiza.development@gmail.com. We repeated the process of sending mail from student5001 but this time we accepted the invitation when logged in as student5002. This time also the invitation accepted mail was sent successfully.&lt;br /&gt;
&lt;br /&gt;
To check the deadline functionality :&lt;br /&gt;
Testing this functionality was the most challenging part amongst other parts of testing and usually used to take around 15 to 20 minutes, and if any not successful, we had to repeat. Every time, we logged in as an instructor and then set the due dates in such a way that we could wait and perform the intermediate steps from student's part, say keep 2 minutes gap among each of the stages of the assignment. After the due dates were set up, we login from a student id and then upload link in the submission phase. We see that the reviewer gets the email as soon as review phase starts, and reviewer's email was set to expertiza@mailinator.com for development and testing purposes. Again, when submission phase starts, student uploads other link or upload a file, after it the reviewer gets the email. But if the student submits another link in the last review phase (we had set the assignment to have 2 submission rounds and 2 review rounds), then this time the reviewer does not get an email, and this is how it was expected to be.&lt;br /&gt;
&lt;br /&gt;
To check the email on submission functionality we logged in as student5001 and suggested a topic test1. As we submitted the suggestion the mail was successfully sent to the instructor.&lt;br /&gt;
&lt;br /&gt;
So our manual testing covers all the requirements and all the functionality works fine.&lt;br /&gt;
&lt;br /&gt;
==Additional Links==&lt;br /&gt;
&lt;br /&gt;
*Git pull link: https://github.com/expertiza/expertiza/pull/1048&lt;br /&gt;
*Git compare link: https://github.com/expertiza/expertiza/compare/master...pmg007:pmg?expand=1&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza NCSU]&lt;br /&gt;
==Team==&lt;br /&gt;
[mailto:pmgandh2@ncsu.edu pragam gandhi]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:kchopra@ncsu.edu kapil chopra]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:ksharma5@ncsu.edu kamal sharma]&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1758_Improve_e-mail_notifications&amp;diff=112073</id>
		<title>CSC/ECE 517 Fall 2017/E1758 Improve e-mail notifications</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1758_Improve_e-mail_notifications&amp;diff=112073"/>
		<updated>2017-11-07T00:08:48Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application developed using Ruby on Rails that serves as a peer-review system. The application allows students to submit and peer-review learning objects (articles, code, web sites, etc)[1][2]. It is an open source project and it's codebase is maintained in GitHub. We are contributing to Expertiza as a part of our Object-Oriented Design and Development's Open-Source Software (OSS) Project. Our goal in this project is to fix various issues related to staggered deadlines for assignments. A staggered-deadline assignment is an assignment in which different topics have different deadlines. In this Wiki Page, we will explain the changes that we have made for the same.&lt;br /&gt;
&lt;br /&gt;
=='''Changes To Be Implemented'''==&lt;br /&gt;
*'''What’s wrong:'''  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;When students' accounts are created by importing a CSV file on the Users page, they receive e-mails with their user-ID and password. But if an account is created by adding them as participants to an assignment when they don't already have an account, e-mail is not sent. Students should receive e-mails upon account creation, regardless of how their account is created.  So this involves adding a call to the e-mailer … or, perhaps, moving an email call from the Users controller to the point where an account is actually created.&lt;br /&gt;
&amp;lt;li&amp;gt; Second, evidently if a submission is revised after review, the system e-mails the reviewer saying to revise the review. This is just fine ... except if the last round of review is in progress.The message telling reviewers to revise their reviews should not be sent after the last review deadline has passed.  It would also be nice to fix the message so it tells which review (Review 1, Review 2, etc.) has been revised, and gives the reviewer a link directly to it.&lt;br /&gt;
&lt;br /&gt;
*'''There are also other circumstances when it would be helpful to send mail.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Send out an email to the invitee when a participant sends out an invitation to another participant to join a team. &lt;br /&gt;
&amp;lt;li&amp;gt;The student who issued the invitation should also be e-mailed when the invitee joins the team. And also when a student responds to a teammate advertisement. In general, all activity on ad responses and invitations should be reported to the other party by e-mail (unless these e-mails are turned off in a (new) profile field).&lt;br /&gt;
&amp;lt;li&amp;gt;Notify an instructor by e-mail when a student suggests a topic.&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
*app/controllers/invitations_controller.rb&lt;br /&gt;
*app/controllers/submitted_content_controller.rb&lt;br /&gt;
*app/controllers/suggestion_controller.rb&lt;br /&gt;
*app/mailers/mailer.rb&lt;br /&gt;
*app/models/assignment.rb&lt;br /&gt;
*app/models/assignment_participant.rb&lt;br /&gt;
*app/models/course_participant.rb&lt;br /&gt;
&lt;br /&gt;
=='''Added Files'''==&lt;br /&gt;
&lt;br /&gt;
*app/views/mailer/partials/_user_invite_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_invite_plain.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_welcome_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_welcome_plain.html.erb&lt;br /&gt;
*app/views/mailer/send_mail_to_instructor.html.erb&lt;br /&gt;
*app/views/mailer/send_mail_to_instructor.text.erb&lt;br /&gt;
&lt;br /&gt;
*app/views/mailer/partials/_user_accept_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_accept_plain.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_decline_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_decline_plain.html.erb&lt;br /&gt;
&lt;br /&gt;
=='''Approach Taken To Implement Changes'''==&lt;br /&gt;
&lt;br /&gt;
NOTE: All the mails except the ones for the reviewer which are sent to mailinator , are sent to expertiza.development@gmail.com ,as this is already set in the development environment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Initially the email were being sent to users when they were added using a CSV file on the users page only . Now we added a method in the assignment_participant.rb model to send mails when a participant is added to an assignment on the assignment page through a CSV file.&lt;br /&gt;
&lt;br /&gt;
def self.import(row, _row_header = nil, session, id)&lt;br /&gt;
    raise ArgumentError, &amp;quot;No user id has been specified.&amp;quot; if row.empty?&lt;br /&gt;
    user = User.find_by_name(row[0])&lt;br /&gt;
    if user.nil?&lt;br /&gt;
      raise ArgumentError, &amp;quot;The record containing #{row[0]} does not have enough items.&amp;quot; if row.length &amp;lt; 4&lt;br /&gt;
      attributes = ImportFileHelper.define_attributes(row)&lt;br /&gt;
      user = ImportFileHelper.create_new_user(attributes, session)&lt;br /&gt;
    end&lt;br /&gt;
    raise ImportError, &amp;quot;The assignment with id \&amp;quot;&amp;quot; + id.to_s + &amp;quot;\&amp;quot; was not found.&amp;quot; if Assignment.find(id).nil?&lt;br /&gt;
    unless AssignmentParticipant.exists?(user_id: user.id, parent_id: id)&lt;br /&gt;
      new_part = AssignmentParticipant.create(user_id: user.id, parent_id: id)&lt;br /&gt;
      new_part.set_handle&lt;br /&gt;
     # E1758 Fall17 &lt;br /&gt;
      password = &amp;quot;password&amp;quot;#user.password&lt;br /&gt;
      prepared_mail = MailerHelper.send_mail_to_user(user, &amp;quot;Your Expertiza account and password have been created.&amp;quot;, &amp;quot;user_welcome&amp;quot;, password)&lt;br /&gt;
      prepared_mail.deliver&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also we added a method in the course_participant.rb file to send the mails when the user is added on the course page using a CSV file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 def self.import(row, _row_header = nil, session, id)&lt;br /&gt;
    raise ArgumentError, &amp;quot;No user id has been specified.&amp;quot; if row.empty?&lt;br /&gt;
    user = User.find_by_name(row[0])&lt;br /&gt;
    if user.nil?&lt;br /&gt;
      raise ArgumentError, &amp;quot;The record containing #{row[0]} does not have enough items.&amp;quot; if row.length &amp;lt; 4&lt;br /&gt;
      attributes = ImportFileHelper.define_attributes(row)&lt;br /&gt;
      user = ImportFileHelper.create_new_user(attributes, session)&lt;br /&gt;
    end&lt;br /&gt;
    course = Course.find(id)&lt;br /&gt;
    if course.nil?&lt;br /&gt;
      raise ImportError, &amp;quot;The course with the id \&amp;quot;&amp;quot; + id.to_s + &amp;quot;\&amp;quot; was not found.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    unless CourseParticipant.exists?(user_id: user.id, parent_id: course.id)&lt;br /&gt;
      CourseParticipant.create(user_id: user.id, parent_id: course.id)&lt;br /&gt;
    # E1758 Fall 17&lt;br /&gt;
      password = &amp;quot;password&amp;quot;#user.password&lt;br /&gt;
      prepared_mail = MailerHelper.send_mail_to_user(user, &amp;quot;Your Expertiza account and password have been created.&amp;quot;, &amp;quot;user_welcome&amp;quot;, password)&lt;br /&gt;
      prepared_mail.deliver&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Initially whenever a submission was being revised ,a mail was being sent to the the reviewer to revise the review. We needed to make sure that mail should not go when it is the last phase of review.&lt;br /&gt;
&lt;br /&gt;
We put a check on the condition that if it is the last round of review then mail should not be sent to the reviewer for revision of his review.&lt;br /&gt;
for that we created a method review_deadline in the assignment.rb file to check if the next due date round is equal to number of review rounds or not.&lt;br /&gt;
# E1758 Fall 17&lt;br /&gt;
  def review_deadline(topic_id = nil, num_review_rounds)&lt;br /&gt;
    return false if topic_id.nil? and self.staggered_deadline?&lt;br /&gt;
    next_due_date = DueDate.get_next_due_date(self.id, topic_id)&lt;br /&gt;
    return !(next_due_date.round == num_review_rounds &amp;amp;&amp;amp; next_due_date.deadline_type_id == 2)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
We also created a method in the assignment_participant.rb file to check if the round is valid for mail.&lt;br /&gt;
&lt;br /&gt;
 # E1758 Fall 17&lt;br /&gt;
  def is_round_valid_for_mail?&lt;br /&gt;
    topic_id = SignedUpTeam.topic_id(self.parent_id, self.user_id)&lt;br /&gt;
    return assignment.review_deadline(topic_id, assignment.num_review_rounds)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
In the submitted_content_controller.rb we created a check  &lt;br /&gt;
&lt;br /&gt;
 # E1758 Fall 17&lt;br /&gt;
      if participant.is_round_valid_for_mail?&lt;br /&gt;
      reviewers = []&lt;br /&gt;
      participant.reviewers.each do |reviewer|&lt;br /&gt;
        reviewers &amp;lt;&amp;lt; User.find(reviewer.user_id).email&lt;br /&gt;
      end&lt;br /&gt;
      Mailer.delayed_message(bcc: reviewers, subject: &amp;quot;You have a new submission to be review&amp;quot;, body: &amp;quot;Please visit http://expertiza.ncsu.edu and proceed to peer reviews.&amp;quot;).deliver_now&lt;br /&gt;
      # participant.assignment.email(participant.id) rescue nil&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to action: 'edit', id: @participant.id&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Initially no mail was going to the reciever when a participant was sending an invitation to another participant. We have edited the create method to put the mail functionality in invitations controller&lt;br /&gt;
&lt;br /&gt;
def create&lt;br /&gt;
    # check if the invited user is already invited (i.e. awaiting reply)&lt;br /&gt;
    if Invitation.is_invited?(@student.user_id, @user.id, @student.parent_id)&lt;br /&gt;
      create_utility&lt;br /&gt;
      # E1758 Fall 17&lt;br /&gt;
      MailerHelper.send_mail_to_invitee(@user, &amp;quot;You have been invited to join a team&amp;quot;, &amp;quot;user_invite&amp;quot;).deliver&lt;br /&gt;
      #password = &amp;quot;password&amp;quot;&lt;br /&gt;
      #prepared_mail = MailerHelper.send_mail_to_user(@user, &amp;quot;You have been invited to join a team&amp;quot;, &amp;quot;user_welcome&amp;quot;, password)&lt;br /&gt;
      #prepared_mail.deliver&lt;br /&gt;
    else&lt;br /&gt;
      flash[:note] = &amp;quot;You have already sent an invitation to \&amp;quot;#{@user.name}\&amp;quot;.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    update_join_team_request @user, @student&lt;br /&gt;
&lt;br /&gt;
    redirect_to view_student_teams_path student_id: @student.id&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
we also created two partials for the respective view namely.&lt;br /&gt;
*app/views/mailer/partials/_user_invite_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_invite_plain.html.erb &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) As there was no mailing method for invitation there was also no method to notify the sender of invitation about the acceptance of his invitation. For this we made changes in the accept and decline methods of the invitations controller.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def accept&lt;br /&gt;
    # Accept the invite and check whether the add was successful&lt;br /&gt;
    @inv = Invitation.find(params[:inv_id])&lt;br /&gt;
    sender_student = @inv.from_user&lt;br /&gt;
    # E1758 Fall 17&lt;br /&gt;
    MailerHelper.send_mail_to_invitee(sender_student, &amp;quot;Invitation accepted.&amp;quot;, &amp;quot;user_invite_accept&amp;quot;).deliver&lt;br /&gt;
    unless Invitation.accept_invite(params[:team_id], @inv.from_id, @inv.to_id, @student.parent_id)&lt;br /&gt;
      flash[:error] = 'The system failed to add you to the team that invited you.'&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    redirect_to view_student_teams_path student_id: params[:student_id]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def decline&lt;br /&gt;
    @inv = Invitation.find(params[:inv_id])&lt;br /&gt;
    # Status code D for declined&lt;br /&gt;
    @inv.reply_status = 'D'&lt;br /&gt;
    @inv.save&lt;br /&gt;
    student = Participant.find(params[:student_id])&lt;br /&gt;
    sender_student = @inv.from_user&lt;br /&gt;
    # E1758 Fall 17&lt;br /&gt;
    MailerHelper.send_mail_to_invitee(sender_student, &amp;quot;Invitation declined.&amp;quot;, &amp;quot;user_invite_decline&amp;quot;).deliver&lt;br /&gt;
    redirect_to view_student_teams_path student_id: student.id&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart from that we created four partials for the respective changes,namely:&lt;br /&gt;
&lt;br /&gt;
*app/views/mailer/partials/_user_accept_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_accept_plain.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_decline_html.html.erb&lt;br /&gt;
*app/views/mailer/partials/_user_decline_plain.html.erb &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) When a student suggests a topic initially the instructor was not notified. We created a method send_mail_to_instructor() to send mails in the mailer.rb.&lt;br /&gt;
&lt;br /&gt;
 # E1758 Fall 17&lt;br /&gt;
  def send_mail_to_instructor()&lt;br /&gt;
    #just for development purpose, else parameters can be passed accordingly&lt;br /&gt;
    mail(to:'expertiza.development@gmail.com',subject: &amp;quot;A new topic suggestion by student&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
We called the above defined method in the suggestion_controller.&lt;br /&gt;
&lt;br /&gt;
  # E1758 Fall 17&lt;br /&gt;
    Mailer.send_mail_to_instructor().deliver_now&lt;br /&gt;
    redirect_to action: 'new', id: @suggestion.assignment_id&lt;br /&gt;
&lt;br /&gt;
Now the instructor is recieving mail when a student is suggesting a topic.&lt;br /&gt;
&lt;br /&gt;
We also added two views which consist of the respective mail content.&lt;br /&gt;
&lt;br /&gt;
*app/views/mailer/send_mail_to_instructor.html.erb&lt;br /&gt;
*app/views/mailer/send_mail_to_instructor.text.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Our project requirements do not include designing automated test cases so we have done manual testing to make sure that it works well. The manual testing is shown in the video.The description for the manual testing is given below:&lt;br /&gt;
&lt;br /&gt;
To test the functionality regarding the first requirement we imported a csv file named test.csv , which contained the details of a student, from the course_participant page. With this import the student was added as a course participant and the mail was successfully sent to expertiza.development@gmail.com. Then we repeated the same procedure from assignment_participant page and this time also the added mailing functionality worked well.&lt;br /&gt;
&lt;br /&gt;
To check the email functionality for invitations we logged in as student5001 and sent an invite request to student5002 for program 1 and the invitation mail was successfully sent to expertiza.development@gmail.com. Then we logged in as student5002 and declined the invite request and mail stating a decline was successfully sent to the expertiza.development@gmail.com. We repeated the process of sending mail from student5001 but this time we accepted the invitation when logged in as student5002. This time also the invitation accepted mail was sent successfully.&lt;br /&gt;
&lt;br /&gt;
To check the deadline functionality :&lt;br /&gt;
Testing this functionality was the most challenging part amongst other parts of testing and usually used to take around 15 to 20 minutes, and if any not successful, we had to repeat. Every time, we logged in as an instructor and then set the due dates in such a way that we could wait and perform the intermediate steps from student's part, say keep 2 minutes gap among each of the stages of the assignment. After the due dates were set up, we login from a student id and then upload link in the submission phase. We see that the reviewer gets the email as soon as review phase starts, and reviewer's email was set to expertiza@mailinator.com for development and testing purposes. Again, when submission phase starts, student uploads other link or upload a file, after it the reviewer gets the email. But if the student submits another link in the last review phase (we had set the assignment to have 2 submission rounds and 2 review rounds), then this time the reviewer does not get an email, and this is how it was expected to be.&lt;br /&gt;
&lt;br /&gt;
To check the email on submission functionality we logged in as student5001 and suggested a topic test1. As we submitted the suggestion the mail was successfully sent to the instructor.&lt;br /&gt;
&lt;br /&gt;
So our manual testing covers all the requirements and all the functionality works fine.&lt;br /&gt;
&lt;br /&gt;
==Additional Links==&lt;br /&gt;
&lt;br /&gt;
*Git pull link: https://github.com/expertiza/expertiza/pull/1048&lt;br /&gt;
*Git compare link: https://github.com/expertiza/expertiza/compare/master...pmg007:pmg?expand=1&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza NCSU]&lt;br /&gt;
==Team==&lt;br /&gt;
[mailto:pmgandh2@ncsu.edu pragam gandhi]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:kchopra@ncsu.edu kapil chopra]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:ksharma5@ncsu.edu kamal sharma]&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=111911</id>
		<title>CSC/ECE 517 Fall 2017/E1793. Help students find teams to join Team1964</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=111911"/>
		<updated>2017-11-06T01:17:25Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a Ruby on Rails based Open Source project. It is a collaboration tool which lets users with different roles (student, instructor, teaching assistant) to collaborate on a course in an institution. A collaboration could be for an assignment where students teams up for an assignment and instructors grades them on the basis of their submission. Students could review other's works and give feedbacks as well.&lt;br /&gt;
&lt;br /&gt;
===Github link===&lt;br /&gt;
*https://github.com/expertiza/expertiza&lt;br /&gt;
&lt;br /&gt;
===Wiki link===&lt;br /&gt;
*http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
For team-based assignments, it always takes time to find suitable team members. We already have bidding, which could help you to join in a team with other team members hold similar bidding preferences. However, you may not be satisfied with automated team formation and want to switch to another team. In this project, we will build a new feature to help students find teams to join.&lt;br /&gt;
&lt;br /&gt;
Currently, there are 2 ways to find other students to join your team:&lt;br /&gt;
&lt;br /&gt;
1.If your team is not full, you could invite people by inputting his/her UnityID. It will send an invitation to certain user. If s/he accept your invitation,s/he will leave original team and join your team.&lt;br /&gt;
&lt;br /&gt;
2.You could create an advisement by clicking “Your team” link and then clicking “Create” link under “Advertisement for teammates” section. Then your advertisement will appear the last column of the signup sheet page with a horn icon. In this way, all classmates could see your advisement. Someone could send a request to join your team. If you accept their request, s/he will leave original team and join in your team. &lt;br /&gt;
&lt;br /&gt;
It would be better for students who do not have team yet or whose team is not full yet to be able to see a list of students who don’t already have teams. So too for instructors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Task Description ==&lt;br /&gt;
&lt;br /&gt;
====Problem 1====&lt;br /&gt;
&lt;br /&gt;
Fix the second ​way​ ​to​ ​find​ ​other​ ​students​ ​to​ ​join​ ​your​ ​team. Currently,​ ​after​ ​you​ ​create​ ​an​ ​advertisement,​ ​the​ ​horn​ ​icon​ ​does​ ​not​ ​appear​ ​in the​ ​the​ ​last​ ​column​ ​of​ ​the​ ​signup​ ​sheet.&lt;br /&gt;
&lt;br /&gt;
====Problem 2====&lt;br /&gt;
For​ ​student​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​a​ ​team​ ​with​ ​invitation​ ​links​ ​in student_teams#view​ ​page ○ You​ ​could​ ​invite​ ​students​ ​to​ ​your​ ​team​ ​by​ ​clicking​ ​invitation​ ​links.​ ​If​ ​s/he​ ​accept your​ ​invitation,s/he​ ​will​ ​leave​ ​original​ ​team​ ​and​ ​join​ ​in​ ​your​ ​team.​ ​It​ ​will​ ​be​ ​more straightforward​ ​than​ ​typing​ ​UnityID.&lt;br /&gt;
&lt;br /&gt;
====Problem 3====&lt;br /&gt;
&lt;br /&gt;
For​ ​instructor​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​team​ ​with​ ​invitation​ ​links​ ​in​ ​teams#list page &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Edge cases ===&lt;br /&gt;
&lt;br /&gt;
We will be writing automated tests to check if the changes made are working correctly. &lt;br /&gt;
&lt;br /&gt;
For that, we considered the following scenarios&lt;br /&gt;
&lt;br /&gt;
*If the team is full, the person who received an invitation link would not be able to accept that. &lt;br /&gt;
*If a student leaves a team, then he is able to see his previous teammates in the available list of students that do not have a complete team and have not created an invitation link.&lt;br /&gt;
*Student sees a horn icon in the last column if any of the students have created an advertisement for that topic.&lt;br /&gt;
*The list of students contains only those students who don't have a team yet or whose team is not yet complete and who have not created an advertisement link.&lt;br /&gt;
*A student can create an invitation link only if his team is not yet full.&lt;br /&gt;
*The same student who accepted the invitation link actually gets added to the team. &lt;br /&gt;
*A student won't be able to send the invitation to himself as he is already a member of that team.&lt;br /&gt;
*An instructor sees only the list of the students who do not have teams with invitation link.&lt;br /&gt;
*If a student joins a team using an invitation link, then he gets all the rights that a team member of that team has. Ex: Now, he will be able to approve a team join request and then correspondingly send the invitation for joining the group to that student.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code coverage ==&lt;br /&gt;
&lt;br /&gt;
Based on the scenarios we added, code coverage increased by 0.2%.&lt;br /&gt;
&lt;br /&gt;
More report could be found from below link:&lt;br /&gt;
*https://github.com/expertiza/expertiza/pull/1026 &lt;br /&gt;
&lt;br /&gt;
== Testing in UI ==&lt;br /&gt;
&lt;br /&gt;
===Problem 1 and Problem 2===&lt;br /&gt;
&lt;br /&gt;
====Steps====&lt;br /&gt;
&lt;br /&gt;
1. Login as instructor/TA (who has the privilege to view summary of reviews for all rounds)&lt;br /&gt;
2. Choose an assignment and go to summary page&lt;br /&gt;
&lt;br /&gt;
You would see a page similar to below with sorting enabled on specific columns on the right side of name.&lt;br /&gt;
&lt;br /&gt;
[[File:Summary_page_with_sorting_enabled.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
====Screenshots====&lt;br /&gt;
Below are the screenshots displaying the fix :&lt;br /&gt;
&lt;br /&gt;
=====Round 1=====&lt;br /&gt;
&lt;br /&gt;
[[File:Sorting_on_criteria_round1.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_avg_round1.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_score_round1.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
=====Round 2=====&lt;br /&gt;
&lt;br /&gt;
[[File:Sorting_on_criteria_round2.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_avg_round2.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_score_round2.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
=====Author Feedback=====&lt;br /&gt;
&lt;br /&gt;
[[File:Sorting_on_criteria_author.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_avg_author.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_score_author.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2===&lt;br /&gt;
&lt;br /&gt;
====Steps====&lt;br /&gt;
&lt;br /&gt;
1. Login as a TA&lt;br /&gt;
&lt;br /&gt;
====Screenshots====&lt;br /&gt;
You would be directed to the hop page displaying all courses a TA has privilege to view.&lt;br /&gt;
&lt;br /&gt;
[[File:Courses_screen_ta.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Below is the db result which matches with the results displayed on the screen&lt;br /&gt;
&lt;br /&gt;
[[File:Db_result_courses_ta.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Visual Demo of the fix ==&lt;br /&gt;
&lt;br /&gt;
A video explaining the fix can be found at below location:&lt;br /&gt;
[https://www.youtube.com/watch?v=-jziQI4T--0&amp;amp;feature=youtu.be]&lt;br /&gt;
&lt;br /&gt;
== Other links ==&lt;br /&gt;
&lt;br /&gt;
Pull request link :&lt;br /&gt;
*https://github.com/expertiza/expertiza/pull/1026&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=111910</id>
		<title>CSC/ECE 517 Fall 2017/E1793. Help students find teams to join Team1964</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1793._Help_students_find_teams_to_join_Team1964&amp;diff=111910"/>
		<updated>2017-11-06T01:17:07Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: Created page with &amp;quot; == About Expertiza ==  Expertiza is a Ruby on Rails based Open Source project. It is a collaboration tool which lets users with different roles (student, instructor, teaching as...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a Ruby on Rails based Open Source project. It is a collaboration tool which lets users with different roles (student, instructor, teaching assistant) to collaborate on a course in an institution. A collaboration could be for an assignment where students teams up for an assignment and instructors grades them on the basis of their submission. Students could review other's works and give feedbacks as well.&lt;br /&gt;
&lt;br /&gt;
===Github link===&lt;br /&gt;
*https://github.com/expertiza/expertiza&lt;br /&gt;
&lt;br /&gt;
===Wiki link===&lt;br /&gt;
*http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Problem Statement'''===&lt;br /&gt;
For team-based assignments, it always takes time to find suitable team members. We already have bidding, which could help you to join in a team with other team members hold similar bidding preferences. However, you may not be satisfied with automated team formation and want to switch to another team. In this project, we will build a new feature to help students find teams to join.&lt;br /&gt;
&lt;br /&gt;
Currently, there are 2 ways to find other students to join your team:&lt;br /&gt;
&lt;br /&gt;
1.If your team is not full, you could invite people by inputting his/her UnityID. It will send an invitation to certain user. If s/he accept your invitation,s/he will leave original team and join your team.&lt;br /&gt;
&lt;br /&gt;
2.You could create an advisement by clicking “Your team” link and then clicking “Create” link under “Advertisement for teammates” section. Then your advertisement will appear the last column of the signup sheet page with a horn icon. In this way, all classmates could see your advisement. Someone could send a request to join your team. If you accept their request, s/he will leave original team and join in your team. &lt;br /&gt;
&lt;br /&gt;
It would be better for students who do not have team yet or whose team is not full yet to be able to see a list of students who don’t already have teams. So too for instructors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Task Description ==&lt;br /&gt;
&lt;br /&gt;
====Problem 1====&lt;br /&gt;
&lt;br /&gt;
Fix the second ​way​ ​to​ ​find​ ​other​ ​students​ ​to​ ​join​ ​your​ ​team. Currently,​ ​after​ ​you​ ​create​ ​an​ ​advertisement,​ ​the​ ​horn​ ​icon​ ​does​ ​not​ ​appear​ ​in the​ ​the​ ​last​ ​column​ ​of​ ​the​ ​signup​ ​sheet.&lt;br /&gt;
&lt;br /&gt;
====Problem 2====&lt;br /&gt;
For​ ​student​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​a​ ​team​ ​with​ ​invitation​ ​links​ ​in student_teams#view​ ​page ○ You​ ​could​ ​invite​ ​students​ ​to​ ​your​ ​team​ ​by​ ​clicking​ ​invitation​ ​links.​ ​If​ ​s/he​ ​accept your​ ​invitation,s/he​ ​will​ ​leave​ ​original​ ​team​ ​and​ ​join​ ​in​ ​your​ ​team.​ ​It​ ​will​ ​be​ ​more straightforward​ ​than​ ​typing​ ​UnityID.&lt;br /&gt;
&lt;br /&gt;
====Problem 3====&lt;br /&gt;
&lt;br /&gt;
For​ ​instructor​ ​end:  Display​ ​a​ ​list​ ​of​ ​​students​ ​who​ ​do​ ​not​ ​have​ ​team​ ​with​ ​invitation​ ​links​ ​in​ ​teams#list page &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Edge cases ===&lt;br /&gt;
&lt;br /&gt;
We will be writing automated tests to check if the changes made are working correctly. &lt;br /&gt;
&lt;br /&gt;
For that, we considered the following scenarios&lt;br /&gt;
&lt;br /&gt;
*If the team is full, the person who received an invitation link would not be able to accept that. &lt;br /&gt;
*If a student leaves a team, then he is able to see his previous teammates in the available list of students that do not have a complete team and have not created an invitation link.&lt;br /&gt;
*Student sees a horn icon in the last column if any of the students have created an advertisement for that topic.&lt;br /&gt;
*The list of students contains only those students who don't have a team yet or whose team is not yet complete and who have not created an advertisement link.&lt;br /&gt;
*A student can create an invitation link only if his team is not yet full.&lt;br /&gt;
*The same student who accepted the invitation link actually gets added to the team. &lt;br /&gt;
*A student won't be able to send the invitation to himself as he is already a member of that team.&lt;br /&gt;
*An instructor sees only the list of the students who do not have teams with invitation link.&lt;br /&gt;
*If a student joins a team using an invitation link, then he gets all the rights that a team member of that team has. Ex: Now, he will be able to approve a team join request and then correspondingly send the invitation for joining the group to that student.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code coverage ==&lt;br /&gt;
&lt;br /&gt;
Based on the scenarios we added, code coverage increased by 0.2%.&lt;br /&gt;
&lt;br /&gt;
More report could be found from below link:&lt;br /&gt;
*https://github.com/expertiza/expertiza/pull/1026 &lt;br /&gt;
&lt;br /&gt;
== Testing in UI ==&lt;br /&gt;
&lt;br /&gt;
===Problem 1 and Problem 2===&lt;br /&gt;
&lt;br /&gt;
====Steps====&lt;br /&gt;
&lt;br /&gt;
1. Login as instructor/TA (who has the privilege to view summary of reviews for all rounds)&lt;br /&gt;
2. Choose an assignment and go to summary page&lt;br /&gt;
&lt;br /&gt;
You would see a page similar to below with sorting enabled on specific columns on the right side of name.&lt;br /&gt;
&lt;br /&gt;
[[File:Summary_page_with_sorting_enabled.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
====Screenshots====&lt;br /&gt;
Below are the screenshots displaying the fix :&lt;br /&gt;
&lt;br /&gt;
=====Round 1=====&lt;br /&gt;
&lt;br /&gt;
[[File:Sorting_on_criteria_round1.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_avg_round1.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_score_round1.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
=====Round 2=====&lt;br /&gt;
&lt;br /&gt;
[[File:Sorting_on_criteria_round2.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_avg_round2.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_score_round2.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
=====Author Feedback=====&lt;br /&gt;
&lt;br /&gt;
[[File:Sorting_on_criteria_author.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_avg_author.png|frame|upright|center]]&lt;br /&gt;
[[File:Sorting_on_score_author.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Problem 2===&lt;br /&gt;
&lt;br /&gt;
====Steps====&lt;br /&gt;
&lt;br /&gt;
1. Login as a TA&lt;br /&gt;
&lt;br /&gt;
====Screenshots====&lt;br /&gt;
You would be directed to the hop page displaying all courses a TA has privilege to view.&lt;br /&gt;
&lt;br /&gt;
[[File:Courses_screen_ta.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
Below is the db result which matches with the results displayed on the screen&lt;br /&gt;
&lt;br /&gt;
[[File:Db_result_courses_ta.png|frame|upright|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Visual Demo of the fix ==&lt;br /&gt;
&lt;br /&gt;
A video explaining the fix can be found at below location:&lt;br /&gt;
[https://www.youtube.com/watch?v=-jziQI4T--0&amp;amp;feature=youtu.be]&lt;br /&gt;
&lt;br /&gt;
== Other links ==&lt;br /&gt;
&lt;br /&gt;
Pull request link :&lt;br /&gt;
*https://github.com/expertiza/expertiza/pull/1026&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017&amp;diff=111903</id>
		<title>CSC/ECE 517 Fall 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017&amp;diff=111903"/>
		<updated>2017-11-06T00:16:33Z</updated>

		<summary type="html">&lt;p&gt;Pmgandh2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Project Documentation'''&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E17A8. Use a profiler to identify the problems / pages that take some time to load &amp;amp; fix them]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1793. Help students find teams to join]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E17A4 Allow calibration to be part of an assignment]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1793. Help students find teams to join_Team1964]]&lt;br /&gt;
'''Writing Assignment 2'''&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1779. Fix teammate advertisements and requests to join a team]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1773 Investigate and Fix Expertiza Production Version Runtime Exceptions.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1774 Metareview fixes and improvements.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1788 OSS project Maroon Heatmap fixes]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1781 Topic Management]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1745_Refactor_response_controller.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1752 Refactor assignments controller]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1776_Enhance_Imports]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1756 TLD Refactor response.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1772_Refactor reputation_web_service_controller.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/M1754_Mutation Testing on Servo]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1753 OSS project bidding tests]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1766_Test team functionality]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1767 Improve imports]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1786_OSS project Juniper Bookmark Enhancements]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1787_OSS project Bronze Score calculations]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1763 Fix Staggered-Deadline Assignments]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1757 Introduce a Student View for instructors]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1769_Refactor assignment_form.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1754_Feature_test_of_rubric_advice]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1782 OSS Project Red Assignment Directories]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1748 Add past-due assignments to task list]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1761 Test First Development Refactor assignment.rb]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1780_OSS_Project_Teal_Email_Notification_Enhancements]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1762 Test various kinds of response-map hierarchies]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1759 ]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2017/E1749_Test First Development Refactor questionnaire_controller.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1777 Coherent specification of review requirements.rb]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2017/E1771_Refactor_team.rb]]&lt;/div&gt;</summary>
		<author><name>Pmgandh2</name></author>
	</entry>
</feed>