<?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=Ndviado</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=Ndviado"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Ndviado"/>
	<updated>2026-09-06T10:16:34Z</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_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137512</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137512"/>
		<updated>2020-11-18T00:30:50Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience, and also in evaluating the quality/sincerity of the reviews.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Our Implementation ==&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
'''helpers/review_mapping_helper.rb''' &amp;lt;br&amp;gt;&lt;br /&gt;
The method calculate_key_chart_information(intervals) was added to calculate the average, min, max, variance and standard deviation from the tagging intervals recorded.  These key analytics were then returned as a hash.&lt;br /&gt;
[[File:ECE517-Project4-review mapping helper.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''views/reports/_answer_tagging_report.html.erb''' &amp;lt;br&amp;gt;&lt;br /&gt;
This view was modified to print an additional column for the answer tagging report.  The column added was &amp;quot;Key Graph Info&amp;quot; which prints the hash that is returned from the method display_key_chart_information().  The hash is printed as a bulleted list.&lt;br /&gt;
[[File:ECE517-Project4-answer tagging report.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Results ===&lt;br /&gt;
We were able to display key information from the generated graph as an additional column to the answer tagging report.&lt;br /&gt;
&lt;br /&gt;
[[File:ECE517-EndResult.png]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
We propose a method that aims to perform:&lt;br /&gt;
&lt;br /&gt;
1. Query the database for details on reviews and their tags&lt;br /&gt;
&lt;br /&gt;
2. Update the existing chart logic to process these numbers&lt;br /&gt;
&lt;br /&gt;
3. Update the report format to include these times&lt;br /&gt;
&lt;br /&gt;
4. Add tests for internal logic and manual UI-testing too&lt;br /&gt;
&lt;br /&gt;
HOW: We'll create an independent method for our logic and append it to the existing logic without necessarily modifying it&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
To manually reproduce the scenario on the UI and test the results on our new/modified time reports&lt;br /&gt;
&lt;br /&gt;
1. Manually impersonate the process of tagging reviews for a dummy assignment&lt;br /&gt;
&lt;br /&gt;
2. Test that the tag times are recorded and displayed properly&lt;br /&gt;
&lt;br /&gt;
3. Compare it with previous logic to check that values/logic is consistent&lt;br /&gt;
&lt;br /&gt;
4. Regression test just to see that the existing charts aren't broken&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
1. Logged in as Instructor 6 with username = &amp;lt;b&amp;gt;instructor6&amp;lt;/b&amp;gt; and password = &amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click &amp;quot;Manage...&amp;quot; -&amp;gt; &amp;quot;Assignments&amp;quot; from the top-left menu item&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT1.png|200px]]&lt;br /&gt;
&lt;br /&gt;
3. Create a new assignment by clicking the &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
4. Filling the necessary information in &amp;lt;b&amp;gt;&amp;quot;General&amp;quot;&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;&amp;quot;Rubrics&amp;quot;&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;&amp;quot;Due Dates&amp;quot;&amp;lt;/b&amp;gt; sections indicated in the following screenshots. Then click &amp;lt;b&amp;gt;Create&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
5. Edit &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;add new..&amp;lt;/b&amp;gt; under &amp;lt;b&amp;gt;Tag prompt&amp;lt;/b&amp;gt; dropdown list&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
6. Click the green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; on the top-right of the popup window. Enter the value for &amp;lt;b&amp;gt;prompt&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;desc&amp;lt;/b&amp;gt; as shown in the screenshot below. Click green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button at the right most column.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
7. Select &amp;lt;b&amp;gt;Criterion&amp;lt;/b&amp;gt; for &amp;lt;b&amp;gt;apply to question type&amp;lt;/b&amp;gt;. Click &amp;lt;b&amp;gt;Save&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT8.png|600px]]&lt;br /&gt;
&lt;br /&gt;
8. Click the &amp;lt;b&amp;gt;Add Participants&amp;lt;/b&amp;gt; button, then add &amp;lt;b&amp;gt;student7339&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;student7430&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT9.png|600px]]&lt;br /&gt;
&lt;br /&gt;
9. Logged in as student7339 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and make a submission from &amp;lt;b&amp;gt;Your work&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
10. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Submission&amp;lt;/b&amp;gt; to be two days before today.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT11.png|400px]]&lt;br /&gt;
&lt;br /&gt;
11. Logged in as student7430 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and submit review from &amp;lt;b&amp;gt;Others' work&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT12_5.png|600px]]&lt;br /&gt;
[[File:E2082_MT12.png|400px]]&lt;br /&gt;
&lt;br /&gt;
12. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Review&amp;lt;/b&amp;gt; to be one day before today.&lt;br /&gt;
[[File:E2082_MT13.png|400px]]&lt;br /&gt;
&lt;br /&gt;
13. Logged in as student7339 and tag the review from &amp;lt;Your scores&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
14. Logged in as instructor6. Go to &amp;lt;b&amp;gt;manage...-&amp;gt;Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View Reports&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
15. Select &amp;lt;b&amp;gt;Answer Tagging Report&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View&amp;lt;/b&amp;gt; button. &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT17.png|600px]]&lt;br /&gt;
&lt;br /&gt;
16. The highlighted column in blue rectangle is the new feature we added&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
Tests were added to test the accuracy of calculating the statistics of the timings we have tracked in this project.&lt;br /&gt;
The comprehensive test can test all the math logic involved in our design.&lt;br /&gt;
&lt;br /&gt;
[[File:Test_cases2.png]]&lt;br /&gt;
&lt;br /&gt;
== Other Information ==&lt;br /&gt;
=== Pull Request ===&lt;br /&gt;
https://github.com/expertiza/expertiza/pull/1848&lt;br /&gt;
&lt;br /&gt;
=== Video URL ===&lt;br /&gt;
https://youtu.be/vw6zJLMDXh4&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:ECE517-EndResult.png&amp;diff=137511</id>
		<title>File:ECE517-EndResult.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:ECE517-EndResult.png&amp;diff=137511"/>
		<updated>2020-11-18T00:30:27Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137510</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137510"/>
		<updated>2020-11-18T00:28:07Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* File Involved */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience, and also in evaluating the quality/sincerity of the reviews.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Our Implementation ==&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
'''helpers/review_mapping_helper.rb''' &amp;lt;br&amp;gt;&lt;br /&gt;
The method calculate_key_chart_information(intervals) was added to calculate the average, min, max, variance and standard deviation from the tagging intervals recorded.  These key analytics were then returned as a hash.&lt;br /&gt;
[[File:ECE517-Project4-review mapping helper.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''views/reports/_answer_tagging_report.html.erb''' &amp;lt;br&amp;gt;&lt;br /&gt;
This view was modified to print an additional column for the answer tagging report.  The column added was &amp;quot;Key Graph Info&amp;quot; which prints the hash that is returned from the method display_key_chart_information().  The hash is printed as a bulleted list.&lt;br /&gt;
[[File:ECE517-Project4-answer tagging report.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Results ===&lt;br /&gt;
We were able to display key information from the generated graph as an additional column to the answer tagging report.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
We propose a method that aims to perform:&lt;br /&gt;
&lt;br /&gt;
1. Query the database for details on reviews and their tags&lt;br /&gt;
&lt;br /&gt;
2. Update the existing chart logic to process these numbers&lt;br /&gt;
&lt;br /&gt;
3. Update the report format to include these times&lt;br /&gt;
&lt;br /&gt;
4. Add tests for internal logic and manual UI-testing too&lt;br /&gt;
&lt;br /&gt;
HOW: We'll create an independent method for our logic and append it to the existing logic without necessarily modifying it&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
To manually reproduce the scenario on the UI and test the results on our new/modified time reports&lt;br /&gt;
&lt;br /&gt;
1. Manually impersonate the process of tagging reviews for a dummy assignment&lt;br /&gt;
&lt;br /&gt;
2. Test that the tag times are recorded and displayed properly&lt;br /&gt;
&lt;br /&gt;
3. Compare it with previous logic to check that values/logic is consistent&lt;br /&gt;
&lt;br /&gt;
4. Regression test just to see that the existing charts aren't broken&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
1. Logged in as Instructor 6 with username = &amp;lt;b&amp;gt;instructor6&amp;lt;/b&amp;gt; and password = &amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click &amp;quot;Manage...&amp;quot; -&amp;gt; &amp;quot;Assignments&amp;quot; from the top-left menu item&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT1.png|200px]]&lt;br /&gt;
&lt;br /&gt;
3. Create a new assignment by clicking the &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
4. Filling the necessary information in &amp;lt;b&amp;gt;&amp;quot;General&amp;quot;&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;&amp;quot;Rubrics&amp;quot;&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;&amp;quot;Due Dates&amp;quot;&amp;lt;/b&amp;gt; sections indicated in the following screenshots. Then click &amp;lt;b&amp;gt;Create&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
5. Edit &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;add new..&amp;lt;/b&amp;gt; under &amp;lt;b&amp;gt;Tag prompt&amp;lt;/b&amp;gt; dropdown list&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
6. Click the green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; on the top-right of the popup window. Enter the value for &amp;lt;b&amp;gt;prompt&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;desc&amp;lt;/b&amp;gt; as shown in the screenshot below. Click green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button at the right most column.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
7. Select &amp;lt;b&amp;gt;Criterion&amp;lt;/b&amp;gt; for &amp;lt;b&amp;gt;apply to question type&amp;lt;/b&amp;gt;. Click &amp;lt;b&amp;gt;Save&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT8.png|600px]]&lt;br /&gt;
&lt;br /&gt;
8. Click the &amp;lt;b&amp;gt;Add Participants&amp;lt;/b&amp;gt; button, then add &amp;lt;b&amp;gt;student7339&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;student7430&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT9.png|600px]]&lt;br /&gt;
&lt;br /&gt;
9. Logged in as student7339 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and make a submission from &amp;lt;b&amp;gt;Your work&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
10. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Submission&amp;lt;/b&amp;gt; to be two days before today.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT11.png|400px]]&lt;br /&gt;
&lt;br /&gt;
11. Logged in as student7430 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and submit review from &amp;lt;b&amp;gt;Others' work&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT12_5.png|600px]]&lt;br /&gt;
[[File:E2082_MT12.png|400px]]&lt;br /&gt;
&lt;br /&gt;
12. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Review&amp;lt;/b&amp;gt; to be one day before today.&lt;br /&gt;
[[File:E2082_MT13.png|400px]]&lt;br /&gt;
&lt;br /&gt;
13. Logged in as student7339 and tag the review from &amp;lt;Your scores&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
14. Logged in as instructor6. Go to &amp;lt;b&amp;gt;manage...-&amp;gt;Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View Reports&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
15. Select &amp;lt;b&amp;gt;Answer Tagging Report&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View&amp;lt;/b&amp;gt; button. &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT17.png|600px]]&lt;br /&gt;
&lt;br /&gt;
16. The highlighted column in blue rectangle is the new feature we added&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
Tests were added to test the accuracy of calculating the statistics of the timings we have tracked in this project.&lt;br /&gt;
The comprehensive test can test all the math logic involved in our design.&lt;br /&gt;
&lt;br /&gt;
[[File:Test_cases2.png]]&lt;br /&gt;
&lt;br /&gt;
== Other Information ==&lt;br /&gt;
=== Pull Request ===&lt;br /&gt;
https://github.com/expertiza/expertiza/pull/1848&lt;br /&gt;
&lt;br /&gt;
=== Video URL ===&lt;br /&gt;
https://youtu.be/vw6zJLMDXh4&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137509</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137509"/>
		<updated>2020-11-18T00:26:51Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience, and also in evaluating the quality/sincerity of the reviews.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Our Implementation ==&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
'''helpers/review_mapping_helper.rb''' &amp;lt;br&amp;gt;&lt;br /&gt;
The method calculate_key_chart_information(intervals) was added to calculate the average, min, max, variance and standard deviation from the tagging intervals recorded.  These key analytics were then returned as a hash.&lt;br /&gt;
[[File:ECE517-Project4-review mapping helper.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''views/reports/_answer_tagging_report.html.erb''' &amp;lt;br&amp;gt;&lt;br /&gt;
This view was modified to print an additional column for the answer tagging report.  The column added was &amp;quot;Key Graph Info&amp;quot; which prints the hash that is returned from the method display_key_chart_information().  The hash is printed as a bulleted list.&lt;br /&gt;
[[File:ECE517-Project4-answer tagging report.png]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
We propose a method that aims to perform:&lt;br /&gt;
&lt;br /&gt;
1. Query the database for details on reviews and their tags&lt;br /&gt;
&lt;br /&gt;
2. Update the existing chart logic to process these numbers&lt;br /&gt;
&lt;br /&gt;
3. Update the report format to include these times&lt;br /&gt;
&lt;br /&gt;
4. Add tests for internal logic and manual UI-testing too&lt;br /&gt;
&lt;br /&gt;
HOW: We'll create an independent method for our logic and append it to the existing logic without necessarily modifying it&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
To manually reproduce the scenario on the UI and test the results on our new/modified time reports&lt;br /&gt;
&lt;br /&gt;
1. Manually impersonate the process of tagging reviews for a dummy assignment&lt;br /&gt;
&lt;br /&gt;
2. Test that the tag times are recorded and displayed properly&lt;br /&gt;
&lt;br /&gt;
3. Compare it with previous logic to check that values/logic is consistent&lt;br /&gt;
&lt;br /&gt;
4. Regression test just to see that the existing charts aren't broken&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
1. Logged in as Instructor 6 with username = &amp;lt;b&amp;gt;instructor6&amp;lt;/b&amp;gt; and password = &amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click &amp;quot;Manage...&amp;quot; -&amp;gt; &amp;quot;Assignments&amp;quot; from the top-left menu item&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT1.png|200px]]&lt;br /&gt;
&lt;br /&gt;
3. Create a new assignment by clicking the &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
4. Filling the necessary information in &amp;lt;b&amp;gt;&amp;quot;General&amp;quot;&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;&amp;quot;Rubrics&amp;quot;&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;&amp;quot;Due Dates&amp;quot;&amp;lt;/b&amp;gt; sections indicated in the following screenshots. Then click &amp;lt;b&amp;gt;Create&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
5. Edit &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;add new..&amp;lt;/b&amp;gt; under &amp;lt;b&amp;gt;Tag prompt&amp;lt;/b&amp;gt; dropdown list&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
6. Click the green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; on the top-right of the popup window. Enter the value for &amp;lt;b&amp;gt;prompt&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;desc&amp;lt;/b&amp;gt; as shown in the screenshot below. Click green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button at the right most column.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
7. Select &amp;lt;b&amp;gt;Criterion&amp;lt;/b&amp;gt; for &amp;lt;b&amp;gt;apply to question type&amp;lt;/b&amp;gt;. Click &amp;lt;b&amp;gt;Save&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT8.png|600px]]&lt;br /&gt;
&lt;br /&gt;
8. Click the &amp;lt;b&amp;gt;Add Participants&amp;lt;/b&amp;gt; button, then add &amp;lt;b&amp;gt;student7339&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;student7430&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT9.png|600px]]&lt;br /&gt;
&lt;br /&gt;
9. Logged in as student7339 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and make a submission from &amp;lt;b&amp;gt;Your work&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
10. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Submission&amp;lt;/b&amp;gt; to be two days before today.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT11.png|400px]]&lt;br /&gt;
&lt;br /&gt;
11. Logged in as student7430 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and submit review from &amp;lt;b&amp;gt;Others' work&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT12_5.png|600px]]&lt;br /&gt;
[[File:E2082_MT12.png|400px]]&lt;br /&gt;
&lt;br /&gt;
12. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Review&amp;lt;/b&amp;gt; to be one day before today.&lt;br /&gt;
[[File:E2082_MT13.png|400px]]&lt;br /&gt;
&lt;br /&gt;
13. Logged in as student7339 and tag the review from &amp;lt;Your scores&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
14. Logged in as instructor6. Go to &amp;lt;b&amp;gt;manage...-&amp;gt;Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View Reports&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
15. Select &amp;lt;b&amp;gt;Answer Tagging Report&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View&amp;lt;/b&amp;gt; button. &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT17.png|600px]]&lt;br /&gt;
&lt;br /&gt;
16. The highlighted column in blue rectangle is the new feature we added&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
Tests were added to test the accuracy of calculating the statistics of the timings we have tracked in this project.&lt;br /&gt;
The comprehensive test can test all the math logic involved in our design.&lt;br /&gt;
&lt;br /&gt;
[[File:Test_cases2.png]]&lt;br /&gt;
&lt;br /&gt;
== Other Information ==&lt;br /&gt;
=== Pull Request ===&lt;br /&gt;
https://github.com/expertiza/expertiza/pull/1848&lt;br /&gt;
&lt;br /&gt;
=== Video URL ===&lt;br /&gt;
https://youtu.be/vw6zJLMDXh4&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137508</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137508"/>
		<updated>2020-11-18T00:25:06Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience, and also in evaluating the quality/sincerity of the reviews.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
'''helpers/review_mapping_helper.rb''' &amp;lt;br&amp;gt;&lt;br /&gt;
The method calculate_key_chart_information(intervals) was added to calculate the average, min, max, variance and standard deviation from the tagging intervals recorded.  These key analytics were then returned as a hash.&lt;br /&gt;
[[File:ECE517-Project4-review mapping helper.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''views/reports/_answer_tagging_report.html.erb''' &amp;lt;br&amp;gt;&lt;br /&gt;
This view was modified to print an additional column for the answer tagging report.  The column added was &amp;quot;Key Graph Info&amp;quot; which prints the hash that is returned from the method display_key_chart_information().  The hash is printed as a bulleted list.&lt;br /&gt;
[[File:ECE517-Project4-answer tagging report.png]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
We propose a method that aims to perform:&lt;br /&gt;
&lt;br /&gt;
1. Query the database for details on reviews and their tags&lt;br /&gt;
&lt;br /&gt;
2. Update the existing chart logic to process these numbers&lt;br /&gt;
&lt;br /&gt;
3. Update the report format to include these times&lt;br /&gt;
&lt;br /&gt;
4. Add tests for internal logic and manual UI-testing too&lt;br /&gt;
&lt;br /&gt;
HOW: We'll create an independent method for our logic and append it to the existing logic without necessarily modifying it&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
To manually reproduce the scenario on the UI and test the results on our new/modified time reports&lt;br /&gt;
&lt;br /&gt;
1. Manually impersonate the process of tagging reviews for a dummy assignment&lt;br /&gt;
&lt;br /&gt;
2. Test that the tag times are recorded and displayed properly&lt;br /&gt;
&lt;br /&gt;
3. Compare it with previous logic to check that values/logic is consistent&lt;br /&gt;
&lt;br /&gt;
4. Regression test just to see that the existing charts aren't broken&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
1. Logged in as Instructor 6 with username = &amp;lt;b&amp;gt;instructor6&amp;lt;/b&amp;gt; and password = &amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click &amp;quot;Manage...&amp;quot; -&amp;gt; &amp;quot;Assignments&amp;quot; from the top-left menu item&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT1.png|200px]]&lt;br /&gt;
&lt;br /&gt;
3. Create a new assignment by clicking the &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
4. Filling the necessary information in &amp;lt;b&amp;gt;&amp;quot;General&amp;quot;&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;&amp;quot;Rubrics&amp;quot;&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;&amp;quot;Due Dates&amp;quot;&amp;lt;/b&amp;gt; sections indicated in the following screenshots. Then click &amp;lt;b&amp;gt;Create&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
5. Edit &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;add new..&amp;lt;/b&amp;gt; under &amp;lt;b&amp;gt;Tag prompt&amp;lt;/b&amp;gt; dropdown list&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
6. Click the green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; on the top-right of the popup window. Enter the value for &amp;lt;b&amp;gt;prompt&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;desc&amp;lt;/b&amp;gt; as shown in the screenshot below. Click green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button at the right most column.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
7. Select &amp;lt;b&amp;gt;Criterion&amp;lt;/b&amp;gt; for &amp;lt;b&amp;gt;apply to question type&amp;lt;/b&amp;gt;. Click &amp;lt;b&amp;gt;Save&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT8.png|600px]]&lt;br /&gt;
&lt;br /&gt;
8. Click the &amp;lt;b&amp;gt;Add Participants&amp;lt;/b&amp;gt; button, then add &amp;lt;b&amp;gt;student7339&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;student7430&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT9.png|600px]]&lt;br /&gt;
&lt;br /&gt;
9. Logged in as student7339 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and make a submission from &amp;lt;b&amp;gt;Your work&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
10. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Submission&amp;lt;/b&amp;gt; to be two days before today.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT11.png|400px]]&lt;br /&gt;
&lt;br /&gt;
11. Logged in as student7430 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and submit review from &amp;lt;b&amp;gt;Others' work&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT12_5.png|600px]]&lt;br /&gt;
[[File:E2082_MT12.png|400px]]&lt;br /&gt;
&lt;br /&gt;
12. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Review&amp;lt;/b&amp;gt; to be one day before today.&lt;br /&gt;
[[File:E2082_MT13.png|400px]]&lt;br /&gt;
&lt;br /&gt;
13. Logged in as student7339 and tag the review from &amp;lt;Your scores&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
14. Logged in as instructor6. Go to &amp;lt;b&amp;gt;manage...-&amp;gt;Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View Reports&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
15. Select &amp;lt;b&amp;gt;Answer Tagging Report&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View&amp;lt;/b&amp;gt; button. &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT17.png|600px]]&lt;br /&gt;
&lt;br /&gt;
16. The highlighted column in blue rectangle is the new feature we added&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
Tests were added to test the accuracy of calculating the statistics of the timings we have tracked in this project.&lt;br /&gt;
The comprehensive test can test all the math logic involved in our design.&lt;br /&gt;
&lt;br /&gt;
[[File:Test_cases2.png]]&lt;br /&gt;
&lt;br /&gt;
== Other Information ==&lt;br /&gt;
=== Pull Request ===&lt;br /&gt;
https://github.com/expertiza/expertiza/pull/1848&lt;br /&gt;
&lt;br /&gt;
=== Video URL ===&lt;br /&gt;
https://youtu.be/vw6zJLMDXh4&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137507</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137507"/>
		<updated>2020-11-18T00:24:55Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Previous Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience, and also in evaluating the quality/sincerity of the reviews.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
'''helpers/review_mapping_helper.rb''' &amp;lt;br&amp;gt;&lt;br /&gt;
The method calculate_key_chart_information(intervals) was added to calculate the average, min, max, variance and standard deviation from the tagging intervals recorded.  These key analytics were then returned as a hash.&lt;br /&gt;
[[File:ECE517-Project4-review mapping helper.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''views/reports/_answer_tagging_report.html.erb''' &amp;lt;br&amp;gt;&lt;br /&gt;
This view was modified to print an additional column for the answer tagging report.  The column added was &amp;quot;Key Graph Info&amp;quot; which prints the hash that is returned from the method display_key_chart_information().  The hash is printed as a bulleted list.&lt;br /&gt;
[[File:ECE517-Project4-answer tagging report.png]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
We propose a method that aims to perform:&lt;br /&gt;
&lt;br /&gt;
1. Query the database for details on reviews and their tags&lt;br /&gt;
&lt;br /&gt;
2. Update the existing chart logic to process these numbers&lt;br /&gt;
&lt;br /&gt;
3. Update the report format to include these times&lt;br /&gt;
&lt;br /&gt;
4. Add tests for internal logic and manual UI-testing too&lt;br /&gt;
&lt;br /&gt;
HOW: We'll create an independent method for our logic and append it to the existing logic without necessarily modifying it&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
To manually reproduce the scenario on the UI and test the results on our new/modified time reports&lt;br /&gt;
&lt;br /&gt;
1. Manually impersonate the process of tagging reviews for a dummy assignment&lt;br /&gt;
&lt;br /&gt;
2. Test that the tag times are recorded and displayed properly&lt;br /&gt;
&lt;br /&gt;
3. Compare it with previous logic to check that values/logic is consistent&lt;br /&gt;
&lt;br /&gt;
4. Regression test just to see that the existing charts aren't broken&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
1. Logged in as Instructor 6 with username = &amp;lt;b&amp;gt;instructor6&amp;lt;/b&amp;gt; and password = &amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click &amp;quot;Manage...&amp;quot; -&amp;gt; &amp;quot;Assignments&amp;quot; from the top-left menu item&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT1.png|200px]]&lt;br /&gt;
&lt;br /&gt;
3. Create a new assignment by clicking the &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
4. Filling the necessary information in &amp;lt;b&amp;gt;&amp;quot;General&amp;quot;&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;&amp;quot;Rubrics&amp;quot;&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;&amp;quot;Due Dates&amp;quot;&amp;lt;/b&amp;gt; sections indicated in the following screenshots. Then click &amp;lt;b&amp;gt;Create&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
5. Edit &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;add new..&amp;lt;/b&amp;gt; under &amp;lt;b&amp;gt;Tag prompt&amp;lt;/b&amp;gt; dropdown list&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
6. Click the green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; on the top-right of the popup window. Enter the value for &amp;lt;b&amp;gt;prompt&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;desc&amp;lt;/b&amp;gt; as shown in the screenshot below. Click green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button at the right most column.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
7. Select &amp;lt;b&amp;gt;Criterion&amp;lt;/b&amp;gt; for &amp;lt;b&amp;gt;apply to question type&amp;lt;/b&amp;gt;. Click &amp;lt;b&amp;gt;Save&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT8.png|600px]]&lt;br /&gt;
&lt;br /&gt;
8. Click the &amp;lt;b&amp;gt;Add Participants&amp;lt;/b&amp;gt; button, then add &amp;lt;b&amp;gt;student7339&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;student7430&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT9.png|600px]]&lt;br /&gt;
&lt;br /&gt;
9. Logged in as student7339 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and make a submission from &amp;lt;b&amp;gt;Your work&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
10. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Submission&amp;lt;/b&amp;gt; to be two days before today.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT11.png|400px]]&lt;br /&gt;
&lt;br /&gt;
11. Logged in as student7430 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and submit review from &amp;lt;b&amp;gt;Others' work&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT12_5.png|600px]]&lt;br /&gt;
[[File:E2082_MT12.png|400px]]&lt;br /&gt;
&lt;br /&gt;
12. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Review&amp;lt;/b&amp;gt; to be one day before today.&lt;br /&gt;
[[File:E2082_MT13.png|400px]]&lt;br /&gt;
&lt;br /&gt;
13. Logged in as student7339 and tag the review from &amp;lt;Your scores&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
14. Logged in as instructor6. Go to &amp;lt;b&amp;gt;manage...-&amp;gt;Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View Reports&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
15. Select &amp;lt;b&amp;gt;Answer Tagging Report&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View&amp;lt;/b&amp;gt; button. &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT17.png|600px]]&lt;br /&gt;
&lt;br /&gt;
16. The highlighted column in blue rectangle is the new feature we added&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
Tests were added to test the accuracy of calculating the statistics of the timings we have tracked in this project.&lt;br /&gt;
The comprehensive test can test all the math logic involved in our design.&lt;br /&gt;
&lt;br /&gt;
[[File:Test_cases2.png]]&lt;br /&gt;
&lt;br /&gt;
== Other Information ==&lt;br /&gt;
=== Pull Request ===&lt;br /&gt;
https://github.com/expertiza/expertiza/pull/1848&lt;br /&gt;
&lt;br /&gt;
=== Video URL ===&lt;br /&gt;
https://youtu.be/vw6zJLMDXh4&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137506</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137506"/>
		<updated>2020-11-18T00:24:39Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Other Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience, and also in evaluating the quality/sincerity of the reviews.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
'''helpers/review_mapping_helper.rb''' &amp;lt;br&amp;gt;&lt;br /&gt;
The method calculate_key_chart_information(intervals) was added to calculate the average, min, max, variance and standard deviation from the tagging intervals recorded.  These key analytics were then returned as a hash.&lt;br /&gt;
[[File:ECE517-Project4-review mapping helper.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''views/reports/_answer_tagging_report.html.erb''' &amp;lt;br&amp;gt;&lt;br /&gt;
This view was modified to print an additional column for the answer tagging report.  The column added was &amp;quot;Key Graph Info&amp;quot; which prints the hash that is returned from the method display_key_chart_information().  The hash is printed as a bulleted list.&lt;br /&gt;
[[File:ECE517-Project4-answer tagging report.png]]&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
We propose a method that aims to perform:&lt;br /&gt;
&lt;br /&gt;
1. Query the database for details on reviews and their tags&lt;br /&gt;
&lt;br /&gt;
2. Update the existing chart logic to process these numbers&lt;br /&gt;
&lt;br /&gt;
3. Update the report format to include these times&lt;br /&gt;
&lt;br /&gt;
4. Add tests for internal logic and manual UI-testing too&lt;br /&gt;
&lt;br /&gt;
HOW: We'll create an independent method for our logic and append it to the existing logic without necessarily modifying it&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
To manually reproduce the scenario on the UI and test the results on our new/modified time reports&lt;br /&gt;
&lt;br /&gt;
1. Manually impersonate the process of tagging reviews for a dummy assignment&lt;br /&gt;
&lt;br /&gt;
2. Test that the tag times are recorded and displayed properly&lt;br /&gt;
&lt;br /&gt;
3. Compare it with previous logic to check that values/logic is consistent&lt;br /&gt;
&lt;br /&gt;
4. Regression test just to see that the existing charts aren't broken&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
1. Logged in as Instructor 6 with username = &amp;lt;b&amp;gt;instructor6&amp;lt;/b&amp;gt; and password = &amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click &amp;quot;Manage...&amp;quot; -&amp;gt; &amp;quot;Assignments&amp;quot; from the top-left menu item&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT1.png|200px]]&lt;br /&gt;
&lt;br /&gt;
3. Create a new assignment by clicking the &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
4. Filling the necessary information in &amp;lt;b&amp;gt;&amp;quot;General&amp;quot;&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;&amp;quot;Rubrics&amp;quot;&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;&amp;quot;Due Dates&amp;quot;&amp;lt;/b&amp;gt; sections indicated in the following screenshots. Then click &amp;lt;b&amp;gt;Create&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
5. Edit &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;add new..&amp;lt;/b&amp;gt; under &amp;lt;b&amp;gt;Tag prompt&amp;lt;/b&amp;gt; dropdown list&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
6. Click the green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; on the top-right of the popup window. Enter the value for &amp;lt;b&amp;gt;prompt&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;desc&amp;lt;/b&amp;gt; as shown in the screenshot below. Click green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button at the right most column.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
7. Select &amp;lt;b&amp;gt;Criterion&amp;lt;/b&amp;gt; for &amp;lt;b&amp;gt;apply to question type&amp;lt;/b&amp;gt;. Click &amp;lt;b&amp;gt;Save&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT8.png|600px]]&lt;br /&gt;
&lt;br /&gt;
8. Click the &amp;lt;b&amp;gt;Add Participants&amp;lt;/b&amp;gt; button, then add &amp;lt;b&amp;gt;student7339&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;student7430&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT9.png|600px]]&lt;br /&gt;
&lt;br /&gt;
9. Logged in as student7339 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and make a submission from &amp;lt;b&amp;gt;Your work&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
10. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Submission&amp;lt;/b&amp;gt; to be two days before today.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT11.png|400px]]&lt;br /&gt;
&lt;br /&gt;
11. Logged in as student7430 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and submit review from &amp;lt;b&amp;gt;Others' work&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT12_5.png|600px]]&lt;br /&gt;
[[File:E2082_MT12.png|400px]]&lt;br /&gt;
&lt;br /&gt;
12. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Review&amp;lt;/b&amp;gt; to be one day before today.&lt;br /&gt;
[[File:E2082_MT13.png|400px]]&lt;br /&gt;
&lt;br /&gt;
13. Logged in as student7339 and tag the review from &amp;lt;Your scores&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
14. Logged in as instructor6. Go to &amp;lt;b&amp;gt;manage...-&amp;gt;Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View Reports&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
15. Select &amp;lt;b&amp;gt;Answer Tagging Report&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View&amp;lt;/b&amp;gt; button. &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT17.png|600px]]&lt;br /&gt;
&lt;br /&gt;
16. The highlighted column in blue rectangle is the new feature we added&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
Tests were added to test the accuracy of calculating the statistics of the timings we have tracked in this project.&lt;br /&gt;
The comprehensive test can test all the math logic involved in our design.&lt;br /&gt;
&lt;br /&gt;
[[File:Test_cases2.png]]&lt;br /&gt;
&lt;br /&gt;
== Other Information ==&lt;br /&gt;
=== Pull Request ===&lt;br /&gt;
https://github.com/expertiza/expertiza/pull/1848&lt;br /&gt;
&lt;br /&gt;
=== Video URL ===&lt;br /&gt;
https://youtu.be/vw6zJLMDXh4&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137505</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137505"/>
		<updated>2020-11-18T00:24:25Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience, and also in evaluating the quality/sincerity of the reviews.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
'''helpers/review_mapping_helper.rb''' &amp;lt;br&amp;gt;&lt;br /&gt;
The method calculate_key_chart_information(intervals) was added to calculate the average, min, max, variance and standard deviation from the tagging intervals recorded.  These key analytics were then returned as a hash.&lt;br /&gt;
[[File:ECE517-Project4-review mapping helper.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''views/reports/_answer_tagging_report.html.erb''' &amp;lt;br&amp;gt;&lt;br /&gt;
This view was modified to print an additional column for the answer tagging report.  The column added was &amp;quot;Key Graph Info&amp;quot; which prints the hash that is returned from the method display_key_chart_information().  The hash is printed as a bulleted list.&lt;br /&gt;
[[File:ECE517-Project4-answer tagging report.png]]&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
We propose a method that aims to perform:&lt;br /&gt;
&lt;br /&gt;
1. Query the database for details on reviews and their tags&lt;br /&gt;
&lt;br /&gt;
2. Update the existing chart logic to process these numbers&lt;br /&gt;
&lt;br /&gt;
3. Update the report format to include these times&lt;br /&gt;
&lt;br /&gt;
4. Add tests for internal logic and manual UI-testing too&lt;br /&gt;
&lt;br /&gt;
HOW: We'll create an independent method for our logic and append it to the existing logic without necessarily modifying it&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
To manually reproduce the scenario on the UI and test the results on our new/modified time reports&lt;br /&gt;
&lt;br /&gt;
1. Manually impersonate the process of tagging reviews for a dummy assignment&lt;br /&gt;
&lt;br /&gt;
2. Test that the tag times are recorded and displayed properly&lt;br /&gt;
&lt;br /&gt;
3. Compare it with previous logic to check that values/logic is consistent&lt;br /&gt;
&lt;br /&gt;
4. Regression test just to see that the existing charts aren't broken&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
1. Logged in as Instructor 6 with username = &amp;lt;b&amp;gt;instructor6&amp;lt;/b&amp;gt; and password = &amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click &amp;quot;Manage...&amp;quot; -&amp;gt; &amp;quot;Assignments&amp;quot; from the top-left menu item&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT1.png|200px]]&lt;br /&gt;
&lt;br /&gt;
3. Create a new assignment by clicking the &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
4. Filling the necessary information in &amp;lt;b&amp;gt;&amp;quot;General&amp;quot;&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;&amp;quot;Rubrics&amp;quot;&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;&amp;quot;Due Dates&amp;quot;&amp;lt;/b&amp;gt; sections indicated in the following screenshots. Then click &amp;lt;b&amp;gt;Create&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
5. Edit &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;add new..&amp;lt;/b&amp;gt; under &amp;lt;b&amp;gt;Tag prompt&amp;lt;/b&amp;gt; dropdown list&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
6. Click the green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; on the top-right of the popup window. Enter the value for &amp;lt;b&amp;gt;prompt&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;desc&amp;lt;/b&amp;gt; as shown in the screenshot below. Click green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button at the right most column.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
7. Select &amp;lt;b&amp;gt;Criterion&amp;lt;/b&amp;gt; for &amp;lt;b&amp;gt;apply to question type&amp;lt;/b&amp;gt;. Click &amp;lt;b&amp;gt;Save&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT8.png|600px]]&lt;br /&gt;
&lt;br /&gt;
8. Click the &amp;lt;b&amp;gt;Add Participants&amp;lt;/b&amp;gt; button, then add &amp;lt;b&amp;gt;student7339&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;student7430&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT9.png|600px]]&lt;br /&gt;
&lt;br /&gt;
9. Logged in as student7339 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and make a submission from &amp;lt;b&amp;gt;Your work&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
10. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Submission&amp;lt;/b&amp;gt; to be two days before today.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT11.png|400px]]&lt;br /&gt;
&lt;br /&gt;
11. Logged in as student7430 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and submit review from &amp;lt;b&amp;gt;Others' work&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT12_5.png|600px]]&lt;br /&gt;
[[File:E2082_MT12.png|400px]]&lt;br /&gt;
&lt;br /&gt;
12. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Review&amp;lt;/b&amp;gt; to be one day before today.&lt;br /&gt;
[[File:E2082_MT13.png|400px]]&lt;br /&gt;
&lt;br /&gt;
13. Logged in as student7339 and tag the review from &amp;lt;Your scores&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
14. Logged in as instructor6. Go to &amp;lt;b&amp;gt;manage...-&amp;gt;Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View Reports&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
15. Select &amp;lt;b&amp;gt;Answer Tagging Report&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View&amp;lt;/b&amp;gt; button. &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT17.png|600px]]&lt;br /&gt;
&lt;br /&gt;
16. The highlighted column in blue rectangle is the new feature we added&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
Tests were added to test the accuracy of calculating the statistics of the timings we have tracked in this project.&lt;br /&gt;
The comprehensive test can test all the math logic involved in our design.&lt;br /&gt;
&lt;br /&gt;
[[File:Test_cases2.png]]&lt;br /&gt;
&lt;br /&gt;
== Other Information ==&lt;br /&gt;
=== Pull Request ===&lt;br /&gt;
https://github.com/expertiza/expertiza/pull/1848&lt;br /&gt;
&lt;br /&gt;
=== Video URL ===&lt;br /&gt;
https://youtu.be/vw6zJLMDXh4&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137504</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137504"/>
		<updated>2020-11-18T00:24:14Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Video URL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience, and also in evaluating the quality/sincerity of the reviews.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
'''helpers/review_mapping_helper.rb''' &amp;lt;br&amp;gt;&lt;br /&gt;
The method calculate_key_chart_information(intervals) was added to calculate the average, min, max, variance and standard deviation from the tagging intervals recorded.  These key analytics were then returned as a hash.&lt;br /&gt;
[[File:ECE517-Project4-review mapping helper.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''views/reports/_answer_tagging_report.html.erb''' &amp;lt;br&amp;gt;&lt;br /&gt;
This view was modified to print an additional column for the answer tagging report.  The column added was &amp;quot;Key Graph Info&amp;quot; which prints the hash that is returned from the method display_key_chart_information().  The hash is printed as a bulleted list.&lt;br /&gt;
[[File:ECE517-Project4-answer tagging report.png]]&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
We propose a method that aims to perform:&lt;br /&gt;
&lt;br /&gt;
1. Query the database for details on reviews and their tags&lt;br /&gt;
&lt;br /&gt;
2. Update the existing chart logic to process these numbers&lt;br /&gt;
&lt;br /&gt;
3. Update the report format to include these times&lt;br /&gt;
&lt;br /&gt;
4. Add tests for internal logic and manual UI-testing too&lt;br /&gt;
&lt;br /&gt;
HOW: We'll create an independent method for our logic and append it to the existing logic without necessarily modifying it&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
To manually reproduce the scenario on the UI and test the results on our new/modified time reports&lt;br /&gt;
&lt;br /&gt;
1. Manually impersonate the process of tagging reviews for a dummy assignment&lt;br /&gt;
&lt;br /&gt;
2. Test that the tag times are recorded and displayed properly&lt;br /&gt;
&lt;br /&gt;
3. Compare it with previous logic to check that values/logic is consistent&lt;br /&gt;
&lt;br /&gt;
4. Regression test just to see that the existing charts aren't broken&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
1. Logged in as Instructor 6 with username = &amp;lt;b&amp;gt;instructor6&amp;lt;/b&amp;gt; and password = &amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click &amp;quot;Manage...&amp;quot; -&amp;gt; &amp;quot;Assignments&amp;quot; from the top-left menu item&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT1.png|200px]]&lt;br /&gt;
&lt;br /&gt;
3. Create a new assignment by clicking the &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
4. Filling the necessary information in &amp;lt;b&amp;gt;&amp;quot;General&amp;quot;&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;&amp;quot;Rubrics&amp;quot;&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;&amp;quot;Due Dates&amp;quot;&amp;lt;/b&amp;gt; sections indicated in the following screenshots. Then click &amp;lt;b&amp;gt;Create&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
5. Edit &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;add new..&amp;lt;/b&amp;gt; under &amp;lt;b&amp;gt;Tag prompt&amp;lt;/b&amp;gt; dropdown list&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
6. Click the green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; on the top-right of the popup window. Enter the value for &amp;lt;b&amp;gt;prompt&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;desc&amp;lt;/b&amp;gt; as shown in the screenshot below. Click green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button at the right most column.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
7. Select &amp;lt;b&amp;gt;Criterion&amp;lt;/b&amp;gt; for &amp;lt;b&amp;gt;apply to question type&amp;lt;/b&amp;gt;. Click &amp;lt;b&amp;gt;Save&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT8.png|600px]]&lt;br /&gt;
&lt;br /&gt;
8. Click the &amp;lt;b&amp;gt;Add Participants&amp;lt;/b&amp;gt; button, then add &amp;lt;b&amp;gt;student7339&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;student7430&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT9.png|600px]]&lt;br /&gt;
&lt;br /&gt;
9. Logged in as student7339 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and make a submission from &amp;lt;b&amp;gt;Your work&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
10. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Submission&amp;lt;/b&amp;gt; to be two days before today.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT11.png|400px]]&lt;br /&gt;
&lt;br /&gt;
11. Logged in as student7430 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and submit review from &amp;lt;b&amp;gt;Others' work&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT12_5.png|600px]]&lt;br /&gt;
[[File:E2082_MT12.png|400px]]&lt;br /&gt;
&lt;br /&gt;
12. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Review&amp;lt;/b&amp;gt; to be one day before today.&lt;br /&gt;
[[File:E2082_MT13.png|400px]]&lt;br /&gt;
&lt;br /&gt;
13. Logged in as student7339 and tag the review from &amp;lt;Your scores&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
14. Logged in as instructor6. Go to &amp;lt;b&amp;gt;manage...-&amp;gt;Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View Reports&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
15. Select &amp;lt;b&amp;gt;Answer Tagging Report&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View&amp;lt;/b&amp;gt; button. &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT17.png|600px]]&lt;br /&gt;
&lt;br /&gt;
16. The highlighted column in blue rectangle is the new feature we added&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
Tests were added to test the accuracy of calculating the statistics of the timings we have tracked in this project.&lt;br /&gt;
The comprehensive test can test all the math logic involved in our design.&lt;br /&gt;
&lt;br /&gt;
[[File:Test_cases2.png]]&lt;br /&gt;
&lt;br /&gt;
== Other Information ==&lt;br /&gt;
=== Pull Request ===&lt;br /&gt;
https://github.com/expertiza/expertiza/pull/1848&lt;br /&gt;
&lt;br /&gt;
=== Video URL ===&lt;br /&gt;
https://youtu.be/vw6zJLMDXh4&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137503</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137503"/>
		<updated>2020-11-18T00:23:07Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* File Involved */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience, and also in evaluating the quality/sincerity of the reviews.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
'''helpers/review_mapping_helper.rb''' &amp;lt;br&amp;gt;&lt;br /&gt;
The method calculate_key_chart_information(intervals) was added to calculate the average, min, max, variance and standard deviation from the tagging intervals recorded.  These key analytics were then returned as a hash.&lt;br /&gt;
[[File:ECE517-Project4-review mapping helper.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''views/reports/_answer_tagging_report.html.erb''' &amp;lt;br&amp;gt;&lt;br /&gt;
This view was modified to print an additional column for the answer tagging report.  The column added was &amp;quot;Key Graph Info&amp;quot; which prints the hash that is returned from the method display_key_chart_information().  The hash is printed as a bulleted list.&lt;br /&gt;
[[File:ECE517-Project4-answer tagging report.png]]&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
We propose a method that aims to perform:&lt;br /&gt;
&lt;br /&gt;
1. Query the database for details on reviews and their tags&lt;br /&gt;
&lt;br /&gt;
2. Update the existing chart logic to process these numbers&lt;br /&gt;
&lt;br /&gt;
3. Update the report format to include these times&lt;br /&gt;
&lt;br /&gt;
4. Add tests for internal logic and manual UI-testing too&lt;br /&gt;
&lt;br /&gt;
HOW: We'll create an independent method for our logic and append it to the existing logic without necessarily modifying it&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
To manually reproduce the scenario on the UI and test the results on our new/modified time reports&lt;br /&gt;
&lt;br /&gt;
1. Manually impersonate the process of tagging reviews for a dummy assignment&lt;br /&gt;
&lt;br /&gt;
2. Test that the tag times are recorded and displayed properly&lt;br /&gt;
&lt;br /&gt;
3. Compare it with previous logic to check that values/logic is consistent&lt;br /&gt;
&lt;br /&gt;
4. Regression test just to see that the existing charts aren't broken&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
1. Logged in as Instructor 6 with username = &amp;lt;b&amp;gt;instructor6&amp;lt;/b&amp;gt; and password = &amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click &amp;quot;Manage...&amp;quot; -&amp;gt; &amp;quot;Assignments&amp;quot; from the top-left menu item&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT1.png|200px]]&lt;br /&gt;
&lt;br /&gt;
3. Create a new assignment by clicking the &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
4. Filling the necessary information in &amp;lt;b&amp;gt;&amp;quot;General&amp;quot;&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;&amp;quot;Rubrics&amp;quot;&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;&amp;quot;Due Dates&amp;quot;&amp;lt;/b&amp;gt; sections indicated in the following screenshots. Then click &amp;lt;b&amp;gt;Create&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
5. Edit &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;add new..&amp;lt;/b&amp;gt; under &amp;lt;b&amp;gt;Tag prompt&amp;lt;/b&amp;gt; dropdown list&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
6. Click the green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; on the top-right of the popup window. Enter the value for &amp;lt;b&amp;gt;prompt&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;desc&amp;lt;/b&amp;gt; as shown in the screenshot below. Click green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button at the right most column.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
7. Select &amp;lt;b&amp;gt;Criterion&amp;lt;/b&amp;gt; for &amp;lt;b&amp;gt;apply to question type&amp;lt;/b&amp;gt;. Click &amp;lt;b&amp;gt;Save&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT8.png|600px]]&lt;br /&gt;
&lt;br /&gt;
8. Click the &amp;lt;b&amp;gt;Add Participants&amp;lt;/b&amp;gt; button, then add &amp;lt;b&amp;gt;student7339&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;student7430&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT9.png|600px]]&lt;br /&gt;
&lt;br /&gt;
9. Logged in as student7339 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and make a submission from &amp;lt;b&amp;gt;Your work&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
10. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Submission&amp;lt;/b&amp;gt; to be two days before today.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT11.png|400px]]&lt;br /&gt;
&lt;br /&gt;
11. Logged in as student7430 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and submit review from &amp;lt;b&amp;gt;Others' work&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT12_5.png|600px]]&lt;br /&gt;
[[File:E2082_MT12.png|400px]]&lt;br /&gt;
&lt;br /&gt;
12. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Review&amp;lt;/b&amp;gt; to be one day before today.&lt;br /&gt;
[[File:E2082_MT13.png|400px]]&lt;br /&gt;
&lt;br /&gt;
13. Logged in as student7339 and tag the review from &amp;lt;Your scores&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
14. Logged in as instructor6. Go to &amp;lt;b&amp;gt;manage...-&amp;gt;Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View Reports&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
15. Select &amp;lt;b&amp;gt;Answer Tagging Report&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View&amp;lt;/b&amp;gt; button. &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT17.png|600px]]&lt;br /&gt;
&lt;br /&gt;
16. The highlighted column in blue rectangle is the new feature we added&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
Tests were added to test the accuracy of calculating the statistics of the timings we have tracked in this project.&lt;br /&gt;
The comprehensive test can test all the math logic involved in our design.&lt;br /&gt;
&lt;br /&gt;
[[File:Test_cases2.png]]&lt;br /&gt;
&lt;br /&gt;
== Other Information ==&lt;br /&gt;
=== Pull Request ===&lt;br /&gt;
https://github.com/expertiza/expertiza/pull/1848&lt;br /&gt;
&lt;br /&gt;
=== Video URL ===&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:ECE517-Project4-review_mapping_helper.png&amp;diff=137502</id>
		<title>File:ECE517-Project4-review mapping helper.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:ECE517-Project4-review_mapping_helper.png&amp;diff=137502"/>
		<updated>2020-11-18T00:18:12Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:ECE517-Project4-answer_tagging_report.png&amp;diff=137501</id>
		<title>File:ECE517-Project4-answer tagging report.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:ECE517-Project4-answer_tagging_report.png&amp;diff=137501"/>
		<updated>2020-11-18T00:17:33Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137496</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=137496"/>
		<updated>2020-11-18T00:13:48Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Other possible changes to be made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience, and also in evaluating the quality/sincerity of the reviews.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
* helpers/report_formatter_helper.rb&lt;br /&gt;
* helpers/review_mapping_helper.rb &lt;br /&gt;
* models/tag_prompt_deployment.rb&lt;br /&gt;
* models/vm_user_answer_tagging.rb&lt;br /&gt;
* views/reports/_answer_tagging_report.html.erb&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
We propose a method that aims to perform:&lt;br /&gt;
&lt;br /&gt;
1. Query the database for details on reviews and their tags&lt;br /&gt;
&lt;br /&gt;
2. Update the existing chart logic to process these numbers&lt;br /&gt;
&lt;br /&gt;
3. Update the report format to include these times&lt;br /&gt;
&lt;br /&gt;
4. Add tests for internal logic and manual UI-testing too&lt;br /&gt;
&lt;br /&gt;
HOW: We'll create an independent method for our logic and append it to the existing logic without necessarily modifying it&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
To manually reproduce the scenario on the UI and test the results on our new/modified time reports&lt;br /&gt;
&lt;br /&gt;
1. Manually impersonate the process of tagging reviews for a dummy assignment&lt;br /&gt;
&lt;br /&gt;
2. Test that the tag times are recorded and displayed properly&lt;br /&gt;
&lt;br /&gt;
3. Compare it with previous logic to check that values/logic is consistent&lt;br /&gt;
&lt;br /&gt;
4. Regression test just to see that the existing charts aren't broken&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manual Testing ===&lt;br /&gt;
1. Logged in as Instructor 6 with username = &amp;lt;b&amp;gt;instructor6&amp;lt;/b&amp;gt; and password = &amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click &amp;quot;Manage...&amp;quot; -&amp;gt; &amp;quot;Assignments&amp;quot; from the top-left menu item&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT1.png|200px]]&lt;br /&gt;
&lt;br /&gt;
3. Create a new assignment by clicking the &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
4. Filling the necessary information in &amp;lt;b&amp;gt;&amp;quot;General&amp;quot;&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;&amp;quot;Rubrics&amp;quot;&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;&amp;quot;Due Dates&amp;quot;&amp;lt;/b&amp;gt; sections indicated in the following screenshots. Then click &amp;lt;b&amp;gt;Create&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
5. Edit &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;add new..&amp;lt;/b&amp;gt; under &amp;lt;b&amp;gt;Tag prompt&amp;lt;/b&amp;gt; dropdown list&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
6. Click the green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; on the top-right of the popup window. Enter the value for &amp;lt;b&amp;gt;prompt&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;desc&amp;lt;/b&amp;gt; as shown in the screenshot below. Click green &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; button at the right most column.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
7. Select &amp;lt;b&amp;gt;Criterion&amp;lt;/b&amp;gt; for &amp;lt;b&amp;gt;apply to question type&amp;lt;/b&amp;gt;. Click &amp;lt;b&amp;gt;Save&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT8.png|600px]]&lt;br /&gt;
&lt;br /&gt;
8. Click the &amp;lt;b&amp;gt;Add Participants&amp;lt;/b&amp;gt; button, then add &amp;lt;b&amp;gt;student7339&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;student7430&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT9.png|600px]]&lt;br /&gt;
&lt;br /&gt;
9. Logged in as student7339 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and make a submission from &amp;lt;b&amp;gt;Your work&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
10. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Submission&amp;lt;/b&amp;gt; to be two days before today.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT11.png|400px]]&lt;br /&gt;
&lt;br /&gt;
11. Logged in as student7430 with password=&amp;lt;b&amp;gt;password&amp;lt;/b&amp;gt; and submit review from &amp;lt;b&amp;gt;Others' work&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT12_5.png|600px]]&lt;br /&gt;
[[File:E2082_MT12.png|400px]]&lt;br /&gt;
&lt;br /&gt;
12. Logged in as instructor6 and modify &amp;lt;b&amp;gt;Tagging Assignment&amp;lt;/b&amp;gt; due date for &amp;lt;b&amp;gt;Round 1: Review&amp;lt;/b&amp;gt; to be one day before today.&lt;br /&gt;
[[File:E2082_MT13.png|400px]]&lt;br /&gt;
&lt;br /&gt;
13. Logged in as student7339 and tag the review from &amp;lt;Your scores&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
14. Logged in as instructor6. Go to &amp;lt;b&amp;gt;manage...-&amp;gt;Assignment&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View Reports&amp;lt;/b&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
15. Select &amp;lt;b&amp;gt;Answer Tagging Report&amp;lt;/b&amp;gt; and click &amp;lt;b&amp;gt;View&amp;lt;/b&amp;gt; button. &lt;br /&gt;
&lt;br /&gt;
[[File:E2082_MT17.png|600px]]&lt;br /&gt;
&lt;br /&gt;
16. The highlighted column in blue rectangle is the new feature we added&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
Tests were added to test the accuracy of calculating the statistics of the timings we have tracked in this project.&lt;br /&gt;
The comprehensive test can test all the math logic involved in our design.&lt;br /&gt;
&lt;br /&gt;
[[File:Test_cases2.png]]&lt;br /&gt;
&lt;br /&gt;
== Other Information ==&lt;br /&gt;
=== Pull Request ===&lt;br /&gt;
https://github.com/expertiza/expertiza/pull/1848&lt;br /&gt;
&lt;br /&gt;
=== Video URL ===&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=136092</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=136092"/>
		<updated>2020-10-22T22:05:25Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Objective */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Other possible changes to be made ===&lt;br /&gt;
* Refactor code from the previous implementation&lt;br /&gt;
* Display intervals using a different type of graph (bar graph, line graph, etc)&lt;br /&gt;
'''For loops that could be implemented into a separate method'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 ForLoops.png]]&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
* helpers/report_formatter_helper.rb&lt;br /&gt;
* helpers/review_mapping_helper.rb &lt;br /&gt;
* models/tag_prompt_deployment.rb&lt;br /&gt;
* models/vm_user_answer_tagging.rb&lt;br /&gt;
* views/reports/_answer_tagging_report.html.erb&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
== Implementation ==&lt;br /&gt;
== Test Plan ==&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:ECE517Project4_ForLoops.png&amp;diff=136091</id>
		<title>File:ECE517Project4 ForLoops.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:ECE517Project4_ForLoops.png&amp;diff=136091"/>
		<updated>2020-10-22T22:01:23Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: Possibly refactor this code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Possibly refactor this code&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=136090</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=136090"/>
		<updated>2020-10-22T21:57:48Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience.&lt;br /&gt;
&lt;br /&gt;
'''Previous work done in Fall 2019 enables tracking time between successive time tag assignment.''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
* helpers/report_formatter_helper.rb&lt;br /&gt;
* helpers/review_mapping_helper.rb &lt;br /&gt;
* models/tag_prompt_deployment.rb&lt;br /&gt;
* models/vm_user_answer_tagging.rb&lt;br /&gt;
* views/reports/_answer_tagging_report.html.erb&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
== Implementation ==&lt;br /&gt;
== Test Plan ==&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=136089</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=136089"/>
		<updated>2020-10-22T21:57:32Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Project Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience.&lt;br /&gt;
&lt;br /&gt;
Previous work done in Fall 2019 enables tracking time between successive time tag assignment. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
* helpers/report_formatter_helper.rb&lt;br /&gt;
* helpers/review_mapping_helper.rb &lt;br /&gt;
* models/tag_prompt_deployment.rb&lt;br /&gt;
* models/vm_user_answer_tagging.rb&lt;br /&gt;
* views/reports/_answer_tagging_report.html.erb&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
== Implementation ==&lt;br /&gt;
== Test Plan ==&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=136088</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=136088"/>
		<updated>2020-10-22T21:56:57Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Objective */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience.&lt;br /&gt;
&lt;br /&gt;
Previous work done in Fall 2019 enables tracking time between successive time tag assignment. &lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
'''Example Mockup of Added Column'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECE517Project4 Mockup.png]]&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
* helpers/report_formatter_helper.rb&lt;br /&gt;
* helpers/review_mapping_helper.rb &lt;br /&gt;
* models/tag_prompt_deployment.rb&lt;br /&gt;
* models/vm_user_answer_tagging.rb&lt;br /&gt;
* views/reports/_answer_tagging_report.html.erb&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;br /&gt;
== Design ==&lt;br /&gt;
== Implementation ==&lt;br /&gt;
== Test Plan ==&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:ECE517Project4_Mockup.png&amp;diff=136087</id>
		<title>File:ECE517Project4 Mockup.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:ECE517Project4_Mockup.png&amp;diff=136087"/>
		<updated>2020-10-22T21:55:24Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: Add an extra column that takes information from the graph&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add an extra column that takes information from the graph&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=136084</id>
		<title>CSC/ECE 517 Fall 2020 - E2082. Track time between successive tag assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2082._Track_time_between_successive_tag_assignments&amp;diff=136084"/>
		<updated>2020-10-22T21:44:54Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Objective */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Overview ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
The Expertiza project takes advantage of peer review among students to allow them to learn from each other. Tracking the time that a student spends on each submitted resource is meaningful for instructors to study and improve the teaching experience.&lt;br /&gt;
&lt;br /&gt;
Previous work done in Fall 2019 enables tracking time between successive time tag assignment. &lt;br /&gt;
[[File:Tagging1993.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
However, there are several problems with their solution:&lt;br /&gt;
* There is no automated tests using mocked data to test their implementation.&lt;br /&gt;
* The previous team added a tagging interval chart to each row (representing each participant) in the Answer Tagging report. However, the chart will be hard to read if there hundreds of tagging interval.&lt;br /&gt;
&lt;br /&gt;
=== Objective ===&lt;br /&gt;
* Display the tagging interval information as a number alongside the graph in order to make it more intuitive to read&lt;br /&gt;
* Add test cases regarding new changes&lt;br /&gt;
&lt;br /&gt;
=== File Involved ===&lt;br /&gt;
* helpers/report_formatter_helper.rb&lt;br /&gt;
* helpers/review_mapping_helper.rb &lt;br /&gt;
* models/tag_prompt_deployment.rb&lt;br /&gt;
* models/vm_user_answer_tagging.rb&lt;br /&gt;
* views/reports/_answer_tagging_report.html.erb&lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
The following links are the deliverables from the original implementation in Fall 2019.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://expertiza.csc.ncsu.edu/index.php/CSC/ECE_517_Fall_2019_-_E1993_Track_Time_Between_Successive_Tag_Assignments CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YxR9sitpZcs&amp;amp;feature=youtu.be&amp;amp;ab_channel=HackOverFlow Youtube Explanation]&lt;br /&gt;
* [https://github.com/Galactis/expertiza Git Repository]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/pull/1642 Git Pull Request]&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
Joshua Aaron Horwitz (jahorwit)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Varun Varadarajan (vvarada2)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nicholas Viado (ndviado)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tsu-Hsin Yeh (tyeh3)&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
'''Mentor:''' Kai Xiao (yxiao28)&lt;br /&gt;
== Design ==&lt;br /&gt;
== Implementation ==&lt;br /&gt;
== Test Plan ==&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135646</id>
		<title>CSC/ECE 517 Fall 2020 - E2054. Auto generate submission directory names based on assignment names</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135646"/>
		<updated>2020-10-20T01:19:45Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Changes made to code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page describes the changes made under E2054, in order to auto-generate submission directory names based on assignment names for Fall 2020, CSC/ECE 517.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is an open source project based on Ruby on Rails framework, created and maintained by the joint efforts of students and faculty at North Carolina State University. &lt;br /&gt;
&lt;br /&gt;
It allows the instructors to create new assignments and customize new or existing assignments. Expertiza also allows an instructor to create a list of topics the students can sign up for. Students can form teams on the web application to work on various projects and assignments together. Additionally, students can peer review each other's submissions allowing them to improve upon their work. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Need for the current project =&lt;br /&gt;
&lt;br /&gt;
== Goal ==&lt;br /&gt;
Each assignment should have its own unique auto-generated submission directory, which is named based on the assignment name entered by the teacher. &lt;br /&gt;
&lt;br /&gt;
== Issues to be fixed ==&lt;br /&gt;
In the current implementation of Expertiza, there are following issues need to be addressed: &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #1: The directory name should be auto-generated from the assignment name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #2: It should be done by changing spaces in the names  to underscores. E.g., the directory for Program 1 is by default &amp;quot;Program_1&amp;quot;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #3: A check should be added to prevent two assignments in the same course from having the same name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #4: Verify or add if not present - a check to stop two assignments from sharing the same directory. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #5: On changing name of an assignment while creating it, the code shouldn't throw a NoMethodError.&lt;br /&gt;
&lt;br /&gt;
== Issues that have been fixed ==&lt;br /&gt;
Fix #1: Submission directory is successfully being generated after the assignment name is typed in.  If needed, the submission directory can be changed, however any modifications to the assignment name will just auto-generate it to match.&amp;lt;br&amp;gt;  &lt;br /&gt;
Fix #2: A check was added to ensure that assignments in the same course do not share the same name.  When creating a course, if the assignment name is a duplicate, it will reset the entire form.&amp;lt;br&amp;gt;&lt;br /&gt;
Fix #3: A check was added to ensure that assignments in the same course do not share the same submission directory.  When creating a course, if the submission directory is a duplicate, it will reset the entire form. &amp;lt;br&amp;gt;&lt;br /&gt;
Fix #4: These checks were also put in place when modifying an existent assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project implementation =&lt;br /&gt;
&lt;br /&gt;
== Submitted work and demonstration of project == &lt;br /&gt;
* [http://152.7.99.132:8080/ Link to deployed code on NCSU VCL]&lt;br /&gt;
* [https://github.com/ndviado/expertiza Link to our Github repository]&lt;br /&gt;
&lt;br /&gt;
== Files involved ==&lt;br /&gt;
The controller, helper and spec were modified for this project: &amp;lt;br/&amp;gt;&lt;br /&gt;
1. Assignments Controller - assignments_controller.rb &amp;lt;br/&amp;gt;&lt;br /&gt;
2. Assignments View - _general.html.erb &amp;lt;br/&amp;gt;&lt;br /&gt;
3. Assignemnts Controller Spec - assignments_controller_spec.rb &amp;lt;br/&amp;gt;&lt;br /&gt;
4. Assignments Model - assignment.rb&lt;br /&gt;
&lt;br /&gt;
=== Assignments Controller ===&lt;br /&gt;
This is a controller that helps instructors create, modify, copy new assignments. Each assignment can be associated with specific Rubrics, Review Strategy and Due dates.&lt;br /&gt;
&lt;br /&gt;
=== Assignments View ===&lt;br /&gt;
This the view for creating the new assignments and editing the existing assignments. This view also handles specifications of Rubrics, Review Strategy and Dates.&lt;br /&gt;
&lt;br /&gt;
=== Assignemnts Controller Spec ===&lt;br /&gt;
Tests and bug fixes pertaining to assignments controller.&lt;br /&gt;
&lt;br /&gt;
=== Assignments Model ===&lt;br /&gt;
The ruby code which defines how the assignment model functions.&lt;br /&gt;
&lt;br /&gt;
== Description of current project ==&lt;br /&gt;
The project primarily deals with the AssignmentsController and AssignmentsView, and changes made are as follows:&lt;br /&gt;
&lt;br /&gt;
The directory name is auto-generated from the assignment name typed in by the instructor.&lt;br /&gt;
&lt;br /&gt;
This is achieved by replacing all spaces in the names with underscores, and removing all special characters like '/','\','$', etc from the auto-generated submission directory name.&lt;br /&gt;
&lt;br /&gt;
If any two assignments of the same name under the same course are attempted to be created, it is prevented and an error message is displayed to the user stating the the submission directory name already exists.&lt;br /&gt;
&lt;br /&gt;
The odd case of a teacher editing the name of an already existing assignment to one that already exists is also handled. Expertiza will display a similar error message stating that the assignment couldn't be saved.&lt;br /&gt;
&lt;br /&gt;
== Changes made to code ==&lt;br /&gt;
Most changes were made in the assignments_controller.rb file.  Checks were added to ensure that an existing assignment name or submission directory did not exist when creating a new assignment.  If the assignment was not created due to an error, the code would ''render new'' which would cause the assignment to be created even though it did not pass all of the checks.  Instead of using ''render new'', ''redirect_to &amp;quot;/assignments/new?private=1&amp;quot;'' was used to ensure the form would be reset upon any errors.  &lt;br /&gt;
&lt;br /&gt;
The following function was added to &amp;lt;b&amp;gt;app/views/assignments/edit/_general.html.erb&amp;lt;/b&amp;gt;, to generate submission directory names with underscores replacing spaces: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  // E2054 Javascript function to generate the submission directory&lt;br /&gt;
  $(function() {&lt;br /&gt;
      $(&amp;quot;#assignment_form_assignment_name&amp;quot;).change(function() {&lt;br /&gt;
          filename = $( &amp;quot;#assignment_form_assignment_name&amp;quot; ).val().replace(/ /g,&amp;quot;_&amp;quot;).replace(/[/\\?%*:|&amp;quot;&amp;lt;&amp;gt;/$&amp;amp;!#%^@]/g, '');;&lt;br /&gt;
          $('#assignment_form_assignment_directory_path').val(filename);&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes were made to the create function in &amp;lt;b&amp;gt;assignments_controller.rb&amp;lt;/b&amp;gt;, such that it only creates the assignment directory if the one with the same name doesn't already exist:&lt;br /&gt;
&lt;br /&gt;
'''Before'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def create&lt;br /&gt;
    @assignment_form = AssignmentForm.new(assignment_form_params)&lt;br /&gt;
    if params[:button]&lt;br /&gt;
      if @assignment_form.save&lt;br /&gt;
        @assignment_form.create_assignment_node&lt;br /&gt;
        exist_assignment = Assignment.find_by(id: @assignment_form.assignment.id)&lt;br /&gt;
        assignment_form_params[:assignment][:id] = exist_assignment.id.to_s&lt;br /&gt;
        if assignment_form_params[:assignment][:directory_path].blank?&lt;br /&gt;
          assignment_form_params[:assignment][:directory_path] = &amp;quot;assignment_#{assignment_form_params[:assignment][:id]}&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        ques_array = assignment_form_params[:assignment_questionnaire]&lt;br /&gt;
        due_array = assignment_form_params[:due_date]&lt;br /&gt;
        ques_array.each do |cur_questionnaire|&lt;br /&gt;
          cur_questionnaire[:assignment_id] = exist_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        due_array.each do |cur_due|&lt;br /&gt;
          cur_due[:parent_id] = exist_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        assignment_form_params[:assignment_questionnaire] = ques_array&lt;br /&gt;
        assignment_form_params[:due_date] = due_array&lt;br /&gt;
        @assignment_form.update(assignment_form_params, current_user)&lt;br /&gt;
        aid = Assignment.find_by(id: @assignment_form.assignment.id).id&lt;br /&gt;
        ExpertizaLogger.info &amp;quot;Assignment created: #{@assignment_form.as_json}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path aid&lt;br /&gt;
        undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
      else&lt;br /&gt;
        flash.now[:error] = &amp;quot;Failed to create assignment&amp;quot;&lt;br /&gt;
        render 'new'&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      render 'new'&lt;br /&gt;
      undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''After'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def create&lt;br /&gt;
    @assignment_form = AssignmentForm.new(assignment_form_params)&lt;br /&gt;
    if params[:button]&lt;br /&gt;
      # E2054 Query for existing directory name and assignment name&lt;br /&gt;
      find_existing_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      dir_path = assignment_form_params[:assignment][:directory_path]&lt;br /&gt;
      find_existing_directory = Assignment.find_by(directory_path: dir_path, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      if !find_existing_assignment and !find_existing_directory and @assignment_form.save #No existing names/directories &lt;br /&gt;
        @assignment_form.create_assignment_node&lt;br /&gt;
        current_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
        assignment_form_params[:assignment][:id] = current_assignment.id.to_s &lt;br /&gt;
        ques_array = assignment_form_params[:assignment_questionnaire]&lt;br /&gt;
        due_array = assignment_form_params[:due_date]&lt;br /&gt;
        ques_array.each do |cur_questionnaire|&lt;br /&gt;
          cur_questionnaire[:assignment_id] = current_assignment.id.to_s &lt;br /&gt;
        end&lt;br /&gt;
        due_array.each do |cur_due|&lt;br /&gt;
          cur_due[:parent_id] = current_assignment.id.to_s &lt;br /&gt;
        end&lt;br /&gt;
        assignment_form_params[:assignment_questionnaire] = ques_array&lt;br /&gt;
        assignment_form_params[:due_date] = due_array&lt;br /&gt;
        @assignment_form.update(assignment_form_params, current_user)&lt;br /&gt;
        aid = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id).id &lt;br /&gt;
        ExpertizaLogger.info &amp;quot;Assignment created: #{@assignment_form.as_json}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path aid&lt;br /&gt;
        undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
      else # E2054 Existing Directory or Assignment Name was Found&lt;br /&gt;
        if find_existing_assignment&lt;br /&gt;
          flash[:error] = @assignment_form.assignment.name + &amp;quot; already exists as an assignment name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if find_existing_directory&lt;br /&gt;
          flash[:error] = dir_path + &amp;quot; already exists as a submission directory name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        redirect_to &amp;quot;/assignments/new?private=1&amp;quot;&lt;br /&gt;
        # E2054 Rendering to this page instead of render new, this prevents it from creating a new assignment upon error &lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      render 'new'&lt;br /&gt;
      undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes were made to the '''update_feedback_assignment_form_attributes''' function in the same file to flash an error if an edited file has the same name:&lt;br /&gt;
&lt;br /&gt;
'''Before'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update_feedback_assignment_form_attributes&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.errors.get(:message)}&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ExpertizaLogger.info LoggerMessage.new(&amp;quot;&amp;quot;, session[:user].name, &amp;quot;The assignment was saved: #{@assignment_form.as_json}&amp;quot;, request)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''After'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update_feedback_assignment_form_attributes&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.assignment.name}&amp;quot; &lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ExpertizaLogger.info LoggerMessage.new(&amp;quot;&amp;quot;, session[:user].name, &amp;quot;The assignment was saved: #{@assignment_form.as_json}&amp;quot;, request)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following validations were added to &amp;lt;b&amp;gt;app/models/assignment.rb&amp;lt;/b&amp;gt;, without these validations the user was allowed to change the assignment name or submission directory to one that already exists.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  validates :directory_path, presence: true # E2054 Needs Validation for unique submission directory&lt;br /&gt;
  validates :directory_path, uniqueness: {scope: :course_id}  # E2054 Needs Validation for unique submission directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
== Manual UI Testing ==&lt;br /&gt;
The following steps must be performed to test the project UI:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 1:''' Log in as an Instructor, with Username - instructor6, Password - password&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:logging_in_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 2:''' Create a new assignment. In this case our assignment is called &amp;quot;E2054 Test Assignment&amp;quot;, under course CSC 216 Fall 2009&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:creating_assign_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 3:''' To save the assignment, the Review and Author Feedback rubrics need to be filled in&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:saving_rubric_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 4:''' On completion, the assignment will be saved&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:successful_save_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 5:''' If another assignment of the same name under the same course is created, the following error is displayed&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:already_exists_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 6:''' On editing an already made assignment to match the same details as &amp;quot;E2054 Test Assignment&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:editing_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We get the following error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:edit_fail_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RSpec Testing ==&lt;br /&gt;
The following RSpec tests were added to the &amp;lt;b&amp;gt;assignments_contoller_spec.rb&amp;lt;/b&amp;gt; file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # E2054 Ensure Assignment Names Cannot Match&lt;br /&gt;
    context 'when assignment_form is not saved successfully due to same assignment name already existing' do&lt;br /&gt;
      it 'raises validation error' do&lt;br /&gt;
        assignment1 = create(:assignment, name: 'Assignment 1', course_id: 1, directory_path: 'Assignment1')&lt;br /&gt;
        expect {create(:assignment, name: 'Assignment 1', course_id: 1,&lt;br /&gt;
                       directory_path: 'Assignment2')}.to raise_error(ActiveRecord::RecordInvalid)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    # E2054 Ensure Submission Directory Cannot Match&lt;br /&gt;
    context 'when assignment_form is not saved successfully due to same submission directory already existing' do&lt;br /&gt;
      it 'raises validation error' do&lt;br /&gt;
        assignment1 = create(:assignment, name: 'Assignment 1', course_id: 1, directory_path: 'Assignment1')&lt;br /&gt;
        expect {create(:assignment, name: 'Assignment 2', course_id: 1,&lt;br /&gt;
                       directory_path: 'Assignment1')}.to raise_error(ActiveRecord::RecordInvalid)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/497e8XQ0Jds '''Manual Rspec Testing Video Link''']&lt;br /&gt;
&lt;br /&gt;
= Team Information =&lt;br /&gt;
1) Nicholas Viado (ndviado)&lt;br /&gt;
&lt;br /&gt;
2) Akshay Podila (apodila)&lt;br /&gt;
&lt;br /&gt;
Mentor: Sanket Pai (sgpai2)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135643</id>
		<title>CSC/ECE 517 Fall 2020 - E2054. Auto generate submission directory names based on assignment names</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135643"/>
		<updated>2020-10-20T01:13:31Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Changes made to code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page describes the changes made under E2054, in order to auto-generate submission directory names based on assignment names for Fall 2020, CSC/ECE 517.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is an open source project based on Ruby on Rails framework, created and maintained by the joint efforts of students and faculty at North Carolina State University. &lt;br /&gt;
&lt;br /&gt;
It allows the instructors to create new assignments and customize new or existing assignments. Expertiza also allows an instructor to create a list of topics the students can sign up for. Students can form teams on the web application to work on various projects and assignments together. Additionally, students can peer review each other's submissions allowing them to improve upon their work. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Need for the current project =&lt;br /&gt;
&lt;br /&gt;
== Goal ==&lt;br /&gt;
Each assignment should have its own unique auto-generated submission directory, which is named based on the assignment name entered by the teacher. &lt;br /&gt;
&lt;br /&gt;
== Issues to be fixed ==&lt;br /&gt;
In the current implementation of Expertiza, there are following issues need to be addressed: &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #1: The directory name should be auto-generated from the assignment name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #2: It should be done by changing spaces in the names  to underscores. E.g., the directory for Program 1 is by default &amp;quot;Program_1&amp;quot;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #3: A check should be added to prevent two assignments in the same course from having the same name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #4: Verify or add if not present - a check to stop two assignments from sharing the same directory. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #5: On changing name of an assignment while creating it, the code shouldn't throw a NoMethodError.&lt;br /&gt;
&lt;br /&gt;
== Issues that have been fixed ==&lt;br /&gt;
Fix #1: Submission directory is successfully being generated after the assignment name is typed in.  If needed, the submission directory can be changed, however any modifications to the assignment name will just auto-generate it to match.&amp;lt;br&amp;gt;  &lt;br /&gt;
Fix #2: A check was added to ensure that assignments in the same course do not share the same name.  When creating a course, if the assignment name is a duplicate, it will reset the entire form.&amp;lt;br&amp;gt;&lt;br /&gt;
Fix #3: A check was added to ensure that assignments in the same course do not share the same submission directory.  When creating a course, if the submission directory is a duplicate, it will reset the entire form. &amp;lt;br&amp;gt;&lt;br /&gt;
Fix #4: These checks were also put in place when modifying an existent assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project implementation =&lt;br /&gt;
&lt;br /&gt;
== Submitted work and demonstration of project == &lt;br /&gt;
* [http://152.7.99.132:8080/ Link to deployed code on NCSU VCL]&lt;br /&gt;
* [https://github.com/ndviado/expertiza Link to our Github repository]&lt;br /&gt;
&lt;br /&gt;
== Files involved ==&lt;br /&gt;
The controller, helper and spec were modified for this project: &amp;lt;br/&amp;gt;&lt;br /&gt;
1. Assignments Controller - assignments_controller.rb &amp;lt;br/&amp;gt;&lt;br /&gt;
2. Assignments View - _general.html.erb &amp;lt;br/&amp;gt;&lt;br /&gt;
3. Assignemnts Controller Spec - assignments_controller_spec.rb &amp;lt;br/&amp;gt;&lt;br /&gt;
4. Assignments Model - assignment.rb&lt;br /&gt;
&lt;br /&gt;
=== Assignments Controller ===&lt;br /&gt;
This is a controller that helps instructors create, modify, copy new assignments. Each assignment can be associated with specific Rubrics, Review Strategy and Due dates.&lt;br /&gt;
&lt;br /&gt;
=== Assignments View ===&lt;br /&gt;
This the view for creating the new assignments and editing the existing assignments. This view also handles specifications of Rubrics, Review Strategy and Dates.&lt;br /&gt;
&lt;br /&gt;
=== Assignemnts Controller Spec ===&lt;br /&gt;
Tests and bug fixes pertaining to assignments controller.&lt;br /&gt;
&lt;br /&gt;
=== Assignments Model ===&lt;br /&gt;
The ruby code which defines how the assignment model functions.&lt;br /&gt;
&lt;br /&gt;
== Description of current project ==&lt;br /&gt;
The project primarily deals with the AssignmentsController and AssignmentsView, and changes made are as follows:&lt;br /&gt;
&lt;br /&gt;
The directory name is auto-generated from the assignment name typed in by the instructor.&lt;br /&gt;
&lt;br /&gt;
This is achieved by replacing all spaces in the names with underscores, and removing all special characters like '/','\','$', etc from the auto-generated submission directory name.&lt;br /&gt;
&lt;br /&gt;
If any two assignments of the same name under the same course are attempted to be created, it is prevented and an error message is displayed to the user stating the the submission directory name already exists.&lt;br /&gt;
&lt;br /&gt;
The odd case of a teacher editing the name of an already existing assignment to one that already exists is also handled. Expertiza will display a similar error message stating that the assignment couldn't be saved.&lt;br /&gt;
&lt;br /&gt;
== Changes made to code ==&lt;br /&gt;
&lt;br /&gt;
The following function was added to &amp;lt;b&amp;gt;app/views/assignments/edit/_general.html.erb&amp;lt;/b&amp;gt;, to generate submission directory names with underscores replacing spaces: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  // E2054 Javascript function to generate the submission directory&lt;br /&gt;
  $(function() {&lt;br /&gt;
      $(&amp;quot;#assignment_form_assignment_name&amp;quot;).change(function() {&lt;br /&gt;
          filename = $( &amp;quot;#assignment_form_assignment_name&amp;quot; ).val().replace(/ /g,&amp;quot;_&amp;quot;).replace(/[/\\?%*:|&amp;quot;&amp;lt;&amp;gt;/$&amp;amp;!#%^@]/g, '');;&lt;br /&gt;
          $('#assignment_form_assignment_directory_path').val(filename);&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes were made to the create function in &amp;lt;b&amp;gt;assignments_controller.rb&amp;lt;/b&amp;gt;, such that it only creates the assignment directory if the one with the same name doesn't already exist:&lt;br /&gt;
&lt;br /&gt;
'''Before'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def create&lt;br /&gt;
    @assignment_form = AssignmentForm.new(assignment_form_params)&lt;br /&gt;
    if params[:button]&lt;br /&gt;
      if @assignment_form.save&lt;br /&gt;
        @assignment_form.create_assignment_node&lt;br /&gt;
        exist_assignment = Assignment.find_by(id: @assignment_form.assignment.id)&lt;br /&gt;
        assignment_form_params[:assignment][:id] = exist_assignment.id.to_s&lt;br /&gt;
        if assignment_form_params[:assignment][:directory_path].blank?&lt;br /&gt;
          assignment_form_params[:assignment][:directory_path] = &amp;quot;assignment_#{assignment_form_params[:assignment][:id]}&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        ques_array = assignment_form_params[:assignment_questionnaire]&lt;br /&gt;
        due_array = assignment_form_params[:due_date]&lt;br /&gt;
        ques_array.each do |cur_questionnaire|&lt;br /&gt;
          cur_questionnaire[:assignment_id] = exist_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        due_array.each do |cur_due|&lt;br /&gt;
          cur_due[:parent_id] = exist_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        assignment_form_params[:assignment_questionnaire] = ques_array&lt;br /&gt;
        assignment_form_params[:due_date] = due_array&lt;br /&gt;
        @assignment_form.update(assignment_form_params, current_user)&lt;br /&gt;
        aid = Assignment.find_by(id: @assignment_form.assignment.id).id&lt;br /&gt;
        ExpertizaLogger.info &amp;quot;Assignment created: #{@assignment_form.as_json}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path aid&lt;br /&gt;
        undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
      else&lt;br /&gt;
        flash.now[:error] = &amp;quot;Failed to create assignment&amp;quot;&lt;br /&gt;
        render 'new'&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      render 'new'&lt;br /&gt;
      undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''After'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def create&lt;br /&gt;
    @assignment_form = AssignmentForm.new(assignment_form_params)&lt;br /&gt;
    if params[:button]&lt;br /&gt;
      # E2054 Query for existing directory name and assignment name&lt;br /&gt;
      find_existing_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      dir_path = assignment_form_params[:assignment][:directory_path]&lt;br /&gt;
      find_existing_directory = Assignment.find_by(directory_path: dir_path, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      if !find_existing_assignment and !find_existing_directory and @assignment_form.save #No existing names/directories &lt;br /&gt;
        @assignment_form.create_assignment_node&lt;br /&gt;
        current_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
        assignment_form_params[:assignment][:id] = current_assignment.id.to_s &lt;br /&gt;
        ques_array = assignment_form_params[:assignment_questionnaire]&lt;br /&gt;
        due_array = assignment_form_params[:due_date]&lt;br /&gt;
        ques_array.each do |cur_questionnaire|&lt;br /&gt;
          cur_questionnaire[:assignment_id] = current_assignment.id.to_s &lt;br /&gt;
        end&lt;br /&gt;
        due_array.each do |cur_due|&lt;br /&gt;
          cur_due[:parent_id] = current_assignment.id.to_s &lt;br /&gt;
        end&lt;br /&gt;
        assignment_form_params[:assignment_questionnaire] = ques_array&lt;br /&gt;
        assignment_form_params[:due_date] = due_array&lt;br /&gt;
        @assignment_form.update(assignment_form_params, current_user)&lt;br /&gt;
        aid = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id).id &lt;br /&gt;
        ExpertizaLogger.info &amp;quot;Assignment created: #{@assignment_form.as_json}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path aid&lt;br /&gt;
        undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
      else # E2054 Existing Directory or Assignment Name was Found&lt;br /&gt;
        if find_existing_assignment&lt;br /&gt;
          flash[:error] = @assignment_form.assignment.name + &amp;quot; already exists as an assignment name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if find_existing_directory&lt;br /&gt;
          flash[:error] = dir_path + &amp;quot; already exists as a submission directory name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        redirect_to &amp;quot;/assignments/new?private=1&amp;quot;&lt;br /&gt;
        # E2054 Rendering to this page instead of render new, this prevents it from creating a new assignment upon error &lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      render 'new'&lt;br /&gt;
      undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes were made to the '''update_feedback_assignment_form_attributes''' function in the same file to flash an error if an edited file has the same name:&lt;br /&gt;
&lt;br /&gt;
'''Before'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update_feedback_assignment_form_attributes&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.errors.get(:message)}&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ExpertizaLogger.info LoggerMessage.new(&amp;quot;&amp;quot;, session[:user].name, &amp;quot;The assignment was saved: #{@assignment_form.as_json}&amp;quot;, request)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''After'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update_feedback_assignment_form_attributes&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.assignment.name}&amp;quot; &lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ExpertizaLogger.info LoggerMessage.new(&amp;quot;&amp;quot;, session[:user].name, &amp;quot;The assignment was saved: #{@assignment_form.as_json}&amp;quot;, request)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following validations were added to &amp;lt;b&amp;gt;app/models/assignment.rb&amp;lt;/b&amp;gt;, without these validations the user was allowed to change the assignment name or submission directory to one that already exists.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  validates :directory_path, presence: true # E2054 Needs Validation for unique submission directory&lt;br /&gt;
  validates :directory_path, uniqueness: {scope: :course_id}  # E2054 Needs Validation for unique submission directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
== Manual UI Testing ==&lt;br /&gt;
The following steps must be performed to test the project UI:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 1:''' Log in as an Instructor, with Username - instructor6, Password - password&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:logging_in_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 2:''' Create a new assignment. In this case our assignment is called &amp;quot;E2054 Test Assignment&amp;quot;, under course CSC 216 Fall 2009&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:creating_assign_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 3:''' To save the assignment, the Review and Author Feedback rubrics need to be filled in&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:saving_rubric_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 4:''' On completion, the assignment will be saved&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:successful_save_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 5:''' If another assignment of the same name under the same course is created, the following error is displayed&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:already_exists_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 6:''' On editing an already made assignment to match the same details as &amp;quot;E2054 Test Assignment&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:editing_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We get the following error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:edit_fail_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RSpec Testing ==&lt;br /&gt;
The following RSpec tests were added to the &amp;lt;b&amp;gt;assignments_contoller_spec.rb&amp;lt;/b&amp;gt; file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # E2054 Ensure Assignment Names Cannot Match&lt;br /&gt;
    context 'when assignment_form is not saved successfully due to same assignment name already existing' do&lt;br /&gt;
      it 'raises validation error' do&lt;br /&gt;
        assignment1 = create(:assignment, name: 'Assignment 1', course_id: 1, directory_path: 'Assignment1')&lt;br /&gt;
        expect {create(:assignment, name: 'Assignment 1', course_id: 1,&lt;br /&gt;
                       directory_path: 'Assignment2')}.to raise_error(ActiveRecord::RecordInvalid)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    # E2054 Ensure Submission Directory Cannot Match&lt;br /&gt;
    context 'when assignment_form is not saved successfully due to same submission directory already existing' do&lt;br /&gt;
      it 'raises validation error' do&lt;br /&gt;
        assignment1 = create(:assignment, name: 'Assignment 1', course_id: 1, directory_path: 'Assignment1')&lt;br /&gt;
        expect {create(:assignment, name: 'Assignment 2', course_id: 1,&lt;br /&gt;
                       directory_path: 'Assignment1')}.to raise_error(ActiveRecord::RecordInvalid)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/497e8XQ0Jds '''Manual Rspec Testing Video Link''']&lt;br /&gt;
&lt;br /&gt;
= Team Information =&lt;br /&gt;
1) Nicholas Viado (ndviado)&lt;br /&gt;
&lt;br /&gt;
2) Akshay Podila (apodila)&lt;br /&gt;
&lt;br /&gt;
Mentor: Sanket Pai (sgpai2)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135641</id>
		<title>CSC/ECE 517 Fall 2020 - E2054. Auto generate submission directory names based on assignment names</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135641"/>
		<updated>2020-10-20T01:05:25Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* RSpec Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page describes the changes made under E2054, in order to auto-generate submission directory names based on assignment names for Fall 2020, CSC/ECE 517.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is an open source project based on Ruby on Rails framework, created and maintained by the joint efforts of students and faculty at North Carolina State University. &lt;br /&gt;
&lt;br /&gt;
It allows the instructors to create new assignments and customize new or existing assignments. Expertiza also allows an instructor to create a list of topics the students can sign up for. Students can form teams on the web application to work on various projects and assignments together. Additionally, students can peer review each other's submissions allowing them to improve upon their work. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Need for the current project =&lt;br /&gt;
&lt;br /&gt;
== Goal ==&lt;br /&gt;
Each assignment should have its own unique auto-generated submission directory, which is named based on the assignment name entered by the teacher. &lt;br /&gt;
&lt;br /&gt;
== Issues to be fixed ==&lt;br /&gt;
In the current implementation of Expertiza, there are following issues need to be addressed: &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #1: The directory name should be auto-generated from the assignment name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #2: It should be done by changing spaces in the names  to underscores. E.g., the directory for Program 1 is by default &amp;quot;Program_1&amp;quot;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #3: A check should be added to prevent two assignments in the same course from having the same name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #4: Verify or add if not present - a check to stop two assignments from sharing the same directory. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #5: On changing name of an assignment while creating it, the code shouldn't throw a NoMethodError.&lt;br /&gt;
&lt;br /&gt;
== Issues that have been fixed ==&lt;br /&gt;
Fix #1: Submission directory is successfully being generated after the assignment name is typed in.  If needed, the submission directory can be changed, however any modifications to the assignment name will just auto-generate it to match.&amp;lt;br&amp;gt;  &lt;br /&gt;
Fix #2: A check was added to ensure that assignments in the same course do not share the same name.  When creating a course, if the assignment name is a duplicate, it will reset the entire form.&amp;lt;br&amp;gt;&lt;br /&gt;
Fix #3: A check was added to ensure that assignments in the same course do not share the same submission directory.  When creating a course, if the submission directory is a duplicate, it will reset the entire form. &amp;lt;br&amp;gt;&lt;br /&gt;
Fix #4: These checks were also put in place when modifying an existent assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project implementation =&lt;br /&gt;
&lt;br /&gt;
== Submitted work and demonstration of project == &lt;br /&gt;
* [http://152.7.99.132:8080/ Link to deployed code on NCSU VCL]&lt;br /&gt;
* [https://github.com/ndviado/expertiza Link to our Github repository]&lt;br /&gt;
&lt;br /&gt;
== Files involved ==&lt;br /&gt;
The controller, helper and spec were modified for this project: &amp;lt;br/&amp;gt;&lt;br /&gt;
1. Assignments Controller - assignments_controller.rb &amp;lt;br/&amp;gt;&lt;br /&gt;
2. Assignments View - _general.html.erb &amp;lt;br/&amp;gt;&lt;br /&gt;
3. Assignemnts Controller Spec - assignments_controller_spec.rb &amp;lt;br/&amp;gt;&lt;br /&gt;
4. Assignments Model - assignment.rb&lt;br /&gt;
&lt;br /&gt;
=== Assignments Controller ===&lt;br /&gt;
This is a controller that helps instructors create, modify, copy new assignments. Each assignment can be associated with specific Rubrics, Review Strategy and Due dates.&lt;br /&gt;
&lt;br /&gt;
=== Assignments View ===&lt;br /&gt;
This the view for creating the new assignments and editing the existing assignments. This view also handles specifications of Rubrics, Review Strategy and Dates.&lt;br /&gt;
&lt;br /&gt;
=== Assignemnts Controller Spec ===&lt;br /&gt;
Tests and bug fixes pertaining to assignments controller.&lt;br /&gt;
&lt;br /&gt;
=== Assignments Model ===&lt;br /&gt;
The ruby code which defines how the assignment model functions.&lt;br /&gt;
&lt;br /&gt;
== Description of current project ==&lt;br /&gt;
The project primarily deals with the AssignmentsController and AssignmentsView, and changes made are as follows:&lt;br /&gt;
&lt;br /&gt;
The directory name is auto-generated from the assignment name typed in by the instructor.&lt;br /&gt;
&lt;br /&gt;
This is achieved by replacing all spaces in the names with underscores, and removing all special characters like '/','\','$', etc from the auto-generated submission directory name.&lt;br /&gt;
&lt;br /&gt;
If any two assignments of the same name under the same course are attempted to be created, it is prevented and an error message is displayed to the user stating the the submission directory name already exists.&lt;br /&gt;
&lt;br /&gt;
The odd case of a teacher editing the name of an already existing assignment to one that already exists is also handled. Expertiza will display a similar error message stating that the assignment couldn't be saved.&lt;br /&gt;
&lt;br /&gt;
== Changes made to code ==&lt;br /&gt;
&lt;br /&gt;
The following function was added to &amp;lt;b&amp;gt;app/views/assignments/edit/_general.html.erb&amp;lt;/b&amp;gt;, to generate submission directory names with underscores replacing spaces: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  // E2054 Javascript function to generate the submission directory&lt;br /&gt;
  $(function() {&lt;br /&gt;
      $(&amp;quot;#assignment_form_assignment_name&amp;quot;).change(function() {&lt;br /&gt;
          filename = $( &amp;quot;#assignment_form_assignment_name&amp;quot; ).val().replace(/ /g,&amp;quot;_&amp;quot;).replace(/[/\\?%*:|&amp;quot;&amp;lt;&amp;gt;/$&amp;amp;!#%^@]/g, '');;&lt;br /&gt;
          $('#assignment_form_assignment_directory_path').val(filename);&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes were made to the create function in &amp;lt;b&amp;gt;assignments_controller.rb&amp;lt;/b&amp;gt;, such that it only creates the assignment directory if the one with the same name doesn't already exist:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def create&lt;br /&gt;
    @assignment_form = AssignmentForm.new(assignment_form_params)&lt;br /&gt;
    if params[:button]&lt;br /&gt;
      # E2054 Query for existing directory name and assignment name&lt;br /&gt;
      find_existing_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      dir_path = assignment_form_params[:assignment][:directory_path]&lt;br /&gt;
      find_existing_directory = Assignment.find_by(directory_path: dir_path, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      if !find_existing_assignment and !find_existing_directory and @assignment_form.save #No existing names/directories &lt;br /&gt;
        @assignment_form.create_assignment_node&lt;br /&gt;
        current_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
        assignment_form_params[:assignment][:id] = current_assignment.id.to_s &lt;br /&gt;
        ques_array = assignment_form_params[:assignment_questionnaire]&lt;br /&gt;
        due_array = assignment_form_params[:due_date]&lt;br /&gt;
        ques_array.each do |cur_questionnaire|&lt;br /&gt;
          cur_questionnaire[:assignment_id] = current_assignment.id.to_s &lt;br /&gt;
        end&lt;br /&gt;
        due_array.each do |cur_due|&lt;br /&gt;
          cur_due[:parent_id] = current_assignment.id.to_s &lt;br /&gt;
        end&lt;br /&gt;
        assignment_form_params[:assignment_questionnaire] = ques_array&lt;br /&gt;
        assignment_form_params[:due_date] = due_array&lt;br /&gt;
        @assignment_form.update(assignment_form_params, current_user)&lt;br /&gt;
        aid = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id).id &lt;br /&gt;
        ExpertizaLogger.info &amp;quot;Assignment created: #{@assignment_form.as_json}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path aid&lt;br /&gt;
        undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
      else # E2054 Existing Directory or Assignment Name was Found&lt;br /&gt;
        if find_existing_assignment&lt;br /&gt;
          flash[:error] = @assignment_form.assignment.name + &amp;quot; already exists as an assignment name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if find_existing_directory&lt;br /&gt;
          flash[:error] = dir_path + &amp;quot; already exists as a submission directory name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        redirect_to &amp;quot;/assignments/new?private=1&amp;quot;&lt;br /&gt;
        # E2054 Rendering to this page instead of render new, this prevents it from creating a new assignment upon error &lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      render 'new'&lt;br /&gt;
      undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes were made to the update_feedback_assignment_form_attributes function in the same file to flash an error if an edited file has the same name:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update_feedback_assignment_form_attributes&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.assignment.name}&amp;quot; &lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ExpertizaLogger.info LoggerMessage.new(&amp;quot;&amp;quot;, session[:user].name, &amp;quot;The assignment was saved: #{@assignment_form.as_json}&amp;quot;, request)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following validations were added to &amp;lt;b&amp;gt;app/models/assignment.rb&amp;lt;/b&amp;gt;: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  validates :directory_path, presence: true # E2054 Needs Validation for unique submission directory&lt;br /&gt;
  validates :directory_path, uniqueness: {scope: :course_id}  # E2054 Needs Validation for unique submission directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
== Manual UI Testing ==&lt;br /&gt;
The following steps must be performed to test the project UI:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 1:''' Log in as an Instructor, with Username - instructor6, Password - password&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:logging_in_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 2:''' Create a new assignment. In this case our assignment is called &amp;quot;E2054 Test Assignment&amp;quot;, under course CSC 216 Fall 2009&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:creating_assign_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 3:''' To save the assignment, the Review and Author Feedback rubrics need to be filled in&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:saving_rubric_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 4:''' On completion, the assignment will be saved&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:successful_save_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 5:''' If another assignment of the same name under the same course is created, the following error is displayed&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:already_exists_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 6:''' On editing an already made assignment to match the same details as &amp;quot;E2054 Test Assignment&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:editing_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We get the following error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:edit_fail_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RSpec Testing ==&lt;br /&gt;
The following RSpec tests were added to the &amp;lt;b&amp;gt;assignments_contoller_spec.rb&amp;lt;/b&amp;gt; file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # E2054 Ensure Assignment Names Cannot Match&lt;br /&gt;
    context 'when assignment_form is not saved successfully due to same assignment name already existing' do&lt;br /&gt;
      it 'raises validation error' do&lt;br /&gt;
        assignment1 = create(:assignment, name: 'Assignment 1', course_id: 1, directory_path: 'Assignment1')&lt;br /&gt;
        expect {create(:assignment, name: 'Assignment 1', course_id: 1,&lt;br /&gt;
                       directory_path: 'Assignment2')}.to raise_error(ActiveRecord::RecordInvalid)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    # E2054 Ensure Submission Directory Cannot Match&lt;br /&gt;
    context 'when assignment_form is not saved successfully due to same submission directory already existing' do&lt;br /&gt;
      it 'raises validation error' do&lt;br /&gt;
        assignment1 = create(:assignment, name: 'Assignment 1', course_id: 1, directory_path: 'Assignment1')&lt;br /&gt;
        expect {create(:assignment, name: 'Assignment 2', course_id: 1,&lt;br /&gt;
                       directory_path: 'Assignment1')}.to raise_error(ActiveRecord::RecordInvalid)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/497e8XQ0Jds '''Manual Rspec Testing Video Link''']&lt;br /&gt;
&lt;br /&gt;
= Team Information =&lt;br /&gt;
1) Nicholas Viado (ndviado)&lt;br /&gt;
&lt;br /&gt;
2) Akshay Podila (apodila)&lt;br /&gt;
&lt;br /&gt;
Mentor: Sanket Pai (sgpai2)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135640</id>
		<title>CSC/ECE 517 Fall 2020 - E2054. Auto generate submission directory names based on assignment names</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135640"/>
		<updated>2020-10-20T01:04:54Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* RSpec Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page describes the changes made under E2054, in order to auto-generate submission directory names based on assignment names for Fall 2020, CSC/ECE 517.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is an open source project based on Ruby on Rails framework, created and maintained by the joint efforts of students and faculty at North Carolina State University. &lt;br /&gt;
&lt;br /&gt;
It allows the instructors to create new assignments and customize new or existing assignments. Expertiza also allows an instructor to create a list of topics the students can sign up for. Students can form teams on the web application to work on various projects and assignments together. Additionally, students can peer review each other's submissions allowing them to improve upon their work. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Need for the current project =&lt;br /&gt;
&lt;br /&gt;
== Goal ==&lt;br /&gt;
Each assignment should have its own unique auto-generated submission directory, which is named based on the assignment name entered by the teacher. &lt;br /&gt;
&lt;br /&gt;
== Issues to be fixed ==&lt;br /&gt;
In the current implementation of Expertiza, there are following issues need to be addressed: &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #1: The directory name should be auto-generated from the assignment name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #2: It should be done by changing spaces in the names  to underscores. E.g., the directory for Program 1 is by default &amp;quot;Program_1&amp;quot;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #3: A check should be added to prevent two assignments in the same course from having the same name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #4: Verify or add if not present - a check to stop two assignments from sharing the same directory. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #5: On changing name of an assignment while creating it, the code shouldn't throw a NoMethodError.&lt;br /&gt;
&lt;br /&gt;
== Issues that have been fixed ==&lt;br /&gt;
Fix #1: Submission directory is successfully being generated after the assignment name is typed in.  If needed, the submission directory can be changed, however any modifications to the assignment name will just auto-generate it to match.&amp;lt;br&amp;gt;  &lt;br /&gt;
Fix #2: A check was added to ensure that assignments in the same course do not share the same name.  When creating a course, if the assignment name is a duplicate, it will reset the entire form.&amp;lt;br&amp;gt;&lt;br /&gt;
Fix #3: A check was added to ensure that assignments in the same course do not share the same submission directory.  When creating a course, if the submission directory is a duplicate, it will reset the entire form. &amp;lt;br&amp;gt;&lt;br /&gt;
Fix #4: These checks were also put in place when modifying an existent assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project implementation =&lt;br /&gt;
&lt;br /&gt;
== Submitted work and demonstration of project == &lt;br /&gt;
* [http://152.7.99.132:8080/ Link to deployed code on NCSU VCL]&lt;br /&gt;
* [https://github.com/ndviado/expertiza Link to our Github repository]&lt;br /&gt;
&lt;br /&gt;
== Files involved ==&lt;br /&gt;
The controller, helper and spec were modified for this project: &amp;lt;br/&amp;gt;&lt;br /&gt;
1. Assignments Controller - assignments_controller.rb &amp;lt;br/&amp;gt;&lt;br /&gt;
2. Assignments View - _general.html.erb &amp;lt;br/&amp;gt;&lt;br /&gt;
3. Assignemnts Controller Spec - assignments_controller_spec.rb &amp;lt;br/&amp;gt;&lt;br /&gt;
4. Assignments Model - assignment.rb&lt;br /&gt;
&lt;br /&gt;
=== Assignments Controller ===&lt;br /&gt;
This is a controller that helps instructors create, modify, copy new assignments. Each assignment can be associated with specific Rubrics, Review Strategy and Due dates.&lt;br /&gt;
&lt;br /&gt;
=== Assignments View ===&lt;br /&gt;
This the view for creating the new assignments and editing the existing assignments. This view also handles specifications of Rubrics, Review Strategy and Dates.&lt;br /&gt;
&lt;br /&gt;
=== Assignemnts Controller Spec ===&lt;br /&gt;
Tests and bug fixes pertaining to assignments controller.&lt;br /&gt;
&lt;br /&gt;
=== Assignments Model ===&lt;br /&gt;
The ruby code which defines how the assignment model functions.&lt;br /&gt;
&lt;br /&gt;
== Description of current project ==&lt;br /&gt;
The project primarily deals with the AssignmentsController and AssignmentsView, and changes made are as follows:&lt;br /&gt;
&lt;br /&gt;
The directory name is auto-generated from the assignment name typed in by the instructor.&lt;br /&gt;
&lt;br /&gt;
This is achieved by replacing all spaces in the names with underscores, and removing all special characters like '/','\','$', etc from the auto-generated submission directory name.&lt;br /&gt;
&lt;br /&gt;
If any two assignments of the same name under the same course are attempted to be created, it is prevented and an error message is displayed to the user stating the the submission directory name already exists.&lt;br /&gt;
&lt;br /&gt;
The odd case of a teacher editing the name of an already existing assignment to one that already exists is also handled. Expertiza will display a similar error message stating that the assignment couldn't be saved.&lt;br /&gt;
&lt;br /&gt;
== Changes made to code ==&lt;br /&gt;
&lt;br /&gt;
The following function was added to &amp;lt;b&amp;gt;app/views/assignments/edit/_general.html.erb&amp;lt;/b&amp;gt;, to generate submission directory names with underscores replacing spaces: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  // E2054 Javascript function to generate the submission directory&lt;br /&gt;
  $(function() {&lt;br /&gt;
      $(&amp;quot;#assignment_form_assignment_name&amp;quot;).change(function() {&lt;br /&gt;
          filename = $( &amp;quot;#assignment_form_assignment_name&amp;quot; ).val().replace(/ /g,&amp;quot;_&amp;quot;).replace(/[/\\?%*:|&amp;quot;&amp;lt;&amp;gt;/$&amp;amp;!#%^@]/g, '');;&lt;br /&gt;
          $('#assignment_form_assignment_directory_path').val(filename);&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes were made to the create function in &amp;lt;b&amp;gt;assignments_controller.rb&amp;lt;/b&amp;gt;, such that it only creates the assignment directory if the one with the same name doesn't already exist:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def create&lt;br /&gt;
    @assignment_form = AssignmentForm.new(assignment_form_params)&lt;br /&gt;
    if params[:button]&lt;br /&gt;
      # E2054 Query for existing directory name and assignment name&lt;br /&gt;
      find_existing_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      dir_path = assignment_form_params[:assignment][:directory_path]&lt;br /&gt;
      find_existing_directory = Assignment.find_by(directory_path: dir_path, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      if !find_existing_assignment and !find_existing_directory and @assignment_form.save #No existing names/directories &lt;br /&gt;
        @assignment_form.create_assignment_node&lt;br /&gt;
        current_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
        assignment_form_params[:assignment][:id] = current_assignment.id.to_s &lt;br /&gt;
        ques_array = assignment_form_params[:assignment_questionnaire]&lt;br /&gt;
        due_array = assignment_form_params[:due_date]&lt;br /&gt;
        ques_array.each do |cur_questionnaire|&lt;br /&gt;
          cur_questionnaire[:assignment_id] = current_assignment.id.to_s &lt;br /&gt;
        end&lt;br /&gt;
        due_array.each do |cur_due|&lt;br /&gt;
          cur_due[:parent_id] = current_assignment.id.to_s &lt;br /&gt;
        end&lt;br /&gt;
        assignment_form_params[:assignment_questionnaire] = ques_array&lt;br /&gt;
        assignment_form_params[:due_date] = due_array&lt;br /&gt;
        @assignment_form.update(assignment_form_params, current_user)&lt;br /&gt;
        aid = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id).id &lt;br /&gt;
        ExpertizaLogger.info &amp;quot;Assignment created: #{@assignment_form.as_json}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path aid&lt;br /&gt;
        undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
      else # E2054 Existing Directory or Assignment Name was Found&lt;br /&gt;
        if find_existing_assignment&lt;br /&gt;
          flash[:error] = @assignment_form.assignment.name + &amp;quot; already exists as an assignment name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if find_existing_directory&lt;br /&gt;
          flash[:error] = dir_path + &amp;quot; already exists as a submission directory name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        redirect_to &amp;quot;/assignments/new?private=1&amp;quot;&lt;br /&gt;
        # E2054 Rendering to this page instead of render new, this prevents it from creating a new assignment upon error &lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      render 'new'&lt;br /&gt;
      undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes were made to the update_feedback_assignment_form_attributes function in the same file to flash an error if an edited file has the same name:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update_feedback_assignment_form_attributes&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.assignment.name}&amp;quot; &lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ExpertizaLogger.info LoggerMessage.new(&amp;quot;&amp;quot;, session[:user].name, &amp;quot;The assignment was saved: #{@assignment_form.as_json}&amp;quot;, request)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following validations were added to &amp;lt;b&amp;gt;app/models/assignment.rb&amp;lt;/b&amp;gt;: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  validates :directory_path, presence: true # E2054 Needs Validation for unique submission directory&lt;br /&gt;
  validates :directory_path, uniqueness: {scope: :course_id}  # E2054 Needs Validation for unique submission directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
== Manual UI Testing ==&lt;br /&gt;
The following steps must be performed to test the project UI:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 1:''' Log in as an Instructor, with Username - instructor6, Password - password&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:logging_in_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 2:''' Create a new assignment. In this case our assignment is called &amp;quot;E2054 Test Assignment&amp;quot;, under course CSC 216 Fall 2009&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:creating_assign_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 3:''' To save the assignment, the Review and Author Feedback rubrics need to be filled in&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:saving_rubric_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 4:''' On completion, the assignment will be saved&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:successful_save_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 5:''' If another assignment of the same name under the same course is created, the following error is displayed&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:already_exists_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 6:''' On editing an already made assignment to match the same details as &amp;quot;E2054 Test Assignment&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:editing_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We get the following error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:edit_fail_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RSpec Testing ==&lt;br /&gt;
The following RSpec tests were added to the &amp;lt;b&amp;gt;assignments_contoller_spec.rb&amp;lt;/b&amp;gt; file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # E2054 Ensure Assignment Names Cannot Match&lt;br /&gt;
    context 'when assignment_form is not saved successfully due to same assignment name already existing' do&lt;br /&gt;
      it 'raises validation error' do&lt;br /&gt;
        assignment1 = create(:assignment, name: 'Assignment 1', course_id: 1, directory_path: 'Assignment1')&lt;br /&gt;
        expect {create(:assignment, name: 'Assignment 1', course_id: 1,&lt;br /&gt;
                       directory_path: 'Assignment2')}.to raise_error(ActiveRecord::RecordInvalid)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    # E2054 Ensure Submission Directory Cannot Match&lt;br /&gt;
    context 'when assignment_form is not saved successfully due to same submission directory already existing' do&lt;br /&gt;
      it 'raises validation error' do&lt;br /&gt;
        assignment1 = create(:assignment, name: 'Assignment 1', course_id: 1, directory_path: 'Assignment1')&lt;br /&gt;
        expect {create(:assignment, name: 'Assignment 2', course_id: 1,&lt;br /&gt;
                       directory_path: 'Assignment1')}.to raise_error(ActiveRecord::RecordInvalid)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/497e8XQ0Jds Manual Rspec Testing Run]&lt;br /&gt;
&lt;br /&gt;
= Team Information =&lt;br /&gt;
1) Nicholas Viado (ndviado)&lt;br /&gt;
&lt;br /&gt;
2) Akshay Podila (apodila)&lt;br /&gt;
&lt;br /&gt;
Mentor: Sanket Pai (sgpai2)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135162</id>
		<title>CSC/ECE 517 Fall 2020 - E2054. Auto generate submission directory names based on assignment names</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135162"/>
		<updated>2020-10-14T05:35:48Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Background Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page describes the changes made under E2054, in order to auto-generate submission directory names based on assignment names for Fall 2020, CSC/ECE 517.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is an open source project based on Ruby on Rails framework, created and maintained by the joint efforts of students and faculty at North Carolina State University. &lt;br /&gt;
&lt;br /&gt;
It allows the instructors to create new assignments and customize new or existing assignments. Expertiza also allows an instructor to create a list of topics the students can sign up for. Students can form teams on the web application to work on various projects and assignments together. Additionally, students can peer review each other's submissions allowing them to improve upon their work. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Need for the current project =&lt;br /&gt;
&lt;br /&gt;
== Background / Links ==&lt;br /&gt;
Each assignment should have its own submission directory.&lt;br /&gt;
&lt;br /&gt;
Current Deployment: http://152.7.99.132:8080/ &amp;lt;br/&amp;gt;&lt;br /&gt;
Github Repo: https://github.com/ndviado/expertiza&lt;br /&gt;
&lt;br /&gt;
== Issues to be fixed ==&lt;br /&gt;
In the current implementation of Expertiza, there are following issues need to be addressed: &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #1: The directory name should be auto-generated from the assignment name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #2: It should be done by changing spaces in the names  to underscores. E.g., the directory for Program 1 is by default &amp;quot;Program_1&amp;quot;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #3: A check should be added to prevent two assignments in the same course from having the same name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #4: Verify or add if not present - a check to stop two assignments from sharing the same directory. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #5: On changing name of an assignment while creating it, the code shouldn't throw a NoMethodError.&lt;br /&gt;
&lt;br /&gt;
== Issues that have been fixed ==&lt;br /&gt;
Fix #1: Submission directory is successfully being generated after the assignment name is typed in.  If needed, the submission directory can be changed, however any modifications to the assignment name will just auto-generate it to match.  &lt;br /&gt;
Fix #2: A check was added to ensure that assignments in the same course do not share the same name.  When creating a course, if the assignment name is a duplicate, it will reset the entire form.&lt;br /&gt;
Fix #3: A check was added to ensure that assignments in the same course do not share the same submission directory.  When creating a course, if the submission directory is a duplicate, it will reset the entire form.&lt;br /&gt;
Fix #4: These checks were also put in place when modifying an existent assignment.&lt;br /&gt;
&lt;br /&gt;
== Current Technical Difficulties ==&lt;br /&gt;
- Build is currently failing the Travis CI checks&lt;br /&gt;
&lt;br /&gt;
= Project implementation =&lt;br /&gt;
&lt;br /&gt;
== Files involved ==&lt;br /&gt;
The controller, helper and spec were modified for this project: &amp;lt;br/&amp;gt;&lt;br /&gt;
1. AssignmentsController &amp;lt;br/&amp;gt;&lt;br /&gt;
2. AssignmentsView - _general.html.erb &amp;lt;br/&amp;gt;&lt;br /&gt;
3. AssignemntsControllerSpec - assignments_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
=== AssignmentsController ===&lt;br /&gt;
This is a controller that helps instructors create, modify, copy new assignments. Each assignment can be associated with specific Rubrics, Review Strategy and Due dates.&lt;br /&gt;
&lt;br /&gt;
=== AssignmentsView ===&lt;br /&gt;
This the view for creating the new assignments and editing the existing assignments. This view also handles specifications of Rubrics, Review Strategy and Dates.&lt;br /&gt;
&lt;br /&gt;
=== AssignemntsControllerSpec ===&lt;br /&gt;
Tests and bug fixes pertaining to assignments controller.&lt;br /&gt;
&lt;br /&gt;
== Description of current project ==&lt;br /&gt;
The project primarily deals with the AssignmentsController and AssignmentsView, and changes made are as follows:&lt;br /&gt;
&lt;br /&gt;
The directory name is auto-generated from the assignment name typed in by the instructor.&lt;br /&gt;
&lt;br /&gt;
This is achieved by replacing all spaces in the names with underscores, and removing all special characters like '/','\','$', etc from the auto-generated submission directory name.&lt;br /&gt;
&lt;br /&gt;
If any two assignments of the same name under the same course are attempted to be created, it is prevented and an error message is displayed to the user stating the the submission directory name already exists.&lt;br /&gt;
&lt;br /&gt;
The odd case of a teacher editing the name of an already existing assignment to one that already exists is also handled. Expertiza will display a similar error message stating that the assignment couldn't be saved.&lt;br /&gt;
&lt;br /&gt;
== Changes made to code ==&lt;br /&gt;
Changes were made to the create function in assignments_controller.rb, such that it only creates the assignment directory if the one with the same name doesn't already exist. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def create&lt;br /&gt;
    @assignment_form = AssignmentForm.new(assignment_form_params)&lt;br /&gt;
    if params[:button]&lt;br /&gt;
      # Do not create an assignment if the assignment name or directory name already present in the course&lt;br /&gt;
      exist_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      dir_path = assignment_form_params[:assignment][:directory_path]&lt;br /&gt;
      exist_directory = Assignment.find_by(directory_path: dir_path, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      if !exist_assignment and !exist_directory and @assignment_form.save&lt;br /&gt;
        @assignment_form.create_assignment_node&lt;br /&gt;
        current_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
        assignment_form_params[:assignment][:id] = current_assignment.id.to_s&lt;br /&gt;
        ques_array = assignment_form_params[:assignment_questionnaire]&lt;br /&gt;
        due_array = assignment_form_params[:due_date]&lt;br /&gt;
        ques_array.each do |cur_questionnaire|&lt;br /&gt;
          cur_questionnaire[:assignment_id] = current_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        due_array.each do |cur_due|&lt;br /&gt;
          cur_due[:parent_id] = current_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        assignment_form_params[:assignment_questionnaire] = ques_array&lt;br /&gt;
        assignment_form_params[:due_date] = due_array&lt;br /&gt;
        @assignment_form.update(assignment_form_params, current_user)&lt;br /&gt;
        aid = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id).id&lt;br /&gt;
        ExpertizaLogger.info &amp;quot;Assignment created: #{@assignment_form.as_json}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path aid&lt;br /&gt;
        undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
      else&lt;br /&gt;
        if exist_assignment&lt;br /&gt;
          flash[:error] = @assignment_form.assignment.name + &amp;quot; already exists as an assignment name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if exist_directory&lt;br /&gt;
          flash[:error] = dir_path + &amp;quot; already exists as a submisison directory name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        redirect_to &amp;quot;/assignments/new?private=1&amp;quot;&lt;br /&gt;
        #render 'new' This is redirecting to /assignments instead of /assignments/new&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      render 'new'&lt;br /&gt;
      undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changes were made to update_feedback_assignment_form_attributes in the same file to flash an error if an edited file has the same name: &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update_feedback_assignment_form_attributes&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.assignment.name}&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ExpertizaLogger.info LoggerMessage.new(&amp;quot;&amp;quot;, session[:user].name, &amp;quot;The assignment was saved: #{@assignment_form.as_json}&amp;quot;, request)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing == &lt;br /&gt;
&lt;br /&gt;
=== Manual UI Testing ===&lt;br /&gt;
The following steps must be performed to test the project UI:-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 1:''' Log in as an Instructor, with Username - instructor6, Password - password&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:logging_in_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 2:''' Create a new assignment. In this case our assignment is called &amp;quot;E2054 Test Assignment&amp;quot;, under course CSC 216 Fall 2009&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:creating_assign_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 3:''' To save the assignment, the Review and Author Feedback rubrics need to be filled in&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:saving_rubric_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 4:''' On completion, the assignment will be saved&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:successful_save_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 5:''' If another assignment of the same name under the same course is created, the following error is displayed&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:already_exists_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 6:''' On editing an already made assignment to match the same details as &amp;quot;E2054 Test Assignment&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:editing_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We get the following error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:edit_fail_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
1) Nicholas Viado (ndviado)&lt;br /&gt;
&lt;br /&gt;
2) Akshay Podila (apodila)&lt;br /&gt;
&lt;br /&gt;
Mentor: Sanket Pai (sgpai2)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135161</id>
		<title>CSC/ECE 517 Fall 2020 - E2054. Auto generate submission directory names based on assignment names</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135161"/>
		<updated>2020-10-14T05:35:40Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page describes the changes made under E2054, in order to auto-generate submission directory names based on assignment names for Fall 2020, CSC/ECE 517.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is an open source project based on Ruby on Rails framework, created and maintained by the joint efforts of students and faculty at North Carolina State University. &lt;br /&gt;
&lt;br /&gt;
It allows the instructors to create new assignments and customize new or existing assignments. Expertiza also allows an instructor to create a list of topics the students can sign up for. Students can form teams on the web application to work on various projects and assignments together. Additionally, students can peer review each other's submissions allowing them to improve upon their work. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Need for the current project =&lt;br /&gt;
&lt;br /&gt;
== Background Links ==&lt;br /&gt;
Each assignment should have its own submission directory.&lt;br /&gt;
&lt;br /&gt;
Current Deployment: http://152.7.99.132:8080/ &amp;lt;br/&amp;gt;&lt;br /&gt;
Github Repo: https://github.com/ndviado/expertiza&lt;br /&gt;
&lt;br /&gt;
== Issues to be fixed ==&lt;br /&gt;
In the current implementation of Expertiza, there are following issues need to be addressed: &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #1: The directory name should be auto-generated from the assignment name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #2: It should be done by changing spaces in the names  to underscores. E.g., the directory for Program 1 is by default &amp;quot;Program_1&amp;quot;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #3: A check should be added to prevent two assignments in the same course from having the same name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #4: Verify or add if not present - a check to stop two assignments from sharing the same directory. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #5: On changing name of an assignment while creating it, the code shouldn't throw a NoMethodError.&lt;br /&gt;
&lt;br /&gt;
== Issues that have been fixed ==&lt;br /&gt;
Fix #1: Submission directory is successfully being generated after the assignment name is typed in.  If needed, the submission directory can be changed, however any modifications to the assignment name will just auto-generate it to match.  &lt;br /&gt;
Fix #2: A check was added to ensure that assignments in the same course do not share the same name.  When creating a course, if the assignment name is a duplicate, it will reset the entire form.&lt;br /&gt;
Fix #3: A check was added to ensure that assignments in the same course do not share the same submission directory.  When creating a course, if the submission directory is a duplicate, it will reset the entire form.&lt;br /&gt;
Fix #4: These checks were also put in place when modifying an existent assignment.&lt;br /&gt;
&lt;br /&gt;
== Current Technical Difficulties ==&lt;br /&gt;
- Build is currently failing the Travis CI checks&lt;br /&gt;
&lt;br /&gt;
= Project implementation =&lt;br /&gt;
&lt;br /&gt;
== Files involved ==&lt;br /&gt;
The controller, helper and spec were modified for this project: &amp;lt;br/&amp;gt;&lt;br /&gt;
1. AssignmentsController &amp;lt;br/&amp;gt;&lt;br /&gt;
2. AssignmentsView - _general.html.erb &amp;lt;br/&amp;gt;&lt;br /&gt;
3. AssignemntsControllerSpec - assignments_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
=== AssignmentsController ===&lt;br /&gt;
This is a controller that helps instructors create, modify, copy new assignments. Each assignment can be associated with specific Rubrics, Review Strategy and Due dates.&lt;br /&gt;
&lt;br /&gt;
=== AssignmentsView ===&lt;br /&gt;
This the view for creating the new assignments and editing the existing assignments. This view also handles specifications of Rubrics, Review Strategy and Dates.&lt;br /&gt;
&lt;br /&gt;
=== AssignemntsControllerSpec ===&lt;br /&gt;
Tests and bug fixes pertaining to assignments controller.&lt;br /&gt;
&lt;br /&gt;
== Description of current project ==&lt;br /&gt;
The project primarily deals with the AssignmentsController and AssignmentsView, and changes made are as follows:&lt;br /&gt;
&lt;br /&gt;
The directory name is auto-generated from the assignment name typed in by the instructor.&lt;br /&gt;
&lt;br /&gt;
This is achieved by replacing all spaces in the names with underscores, and removing all special characters like '/','\','$', etc from the auto-generated submission directory name.&lt;br /&gt;
&lt;br /&gt;
If any two assignments of the same name under the same course are attempted to be created, it is prevented and an error message is displayed to the user stating the the submission directory name already exists.&lt;br /&gt;
&lt;br /&gt;
The odd case of a teacher editing the name of an already existing assignment to one that already exists is also handled. Expertiza will display a similar error message stating that the assignment couldn't be saved.&lt;br /&gt;
&lt;br /&gt;
== Changes made to code ==&lt;br /&gt;
Changes were made to the create function in assignments_controller.rb, such that it only creates the assignment directory if the one with the same name doesn't already exist. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def create&lt;br /&gt;
    @assignment_form = AssignmentForm.new(assignment_form_params)&lt;br /&gt;
    if params[:button]&lt;br /&gt;
      # Do not create an assignment if the assignment name or directory name already present in the course&lt;br /&gt;
      exist_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      dir_path = assignment_form_params[:assignment][:directory_path]&lt;br /&gt;
      exist_directory = Assignment.find_by(directory_path: dir_path, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      if !exist_assignment and !exist_directory and @assignment_form.save&lt;br /&gt;
        @assignment_form.create_assignment_node&lt;br /&gt;
        current_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
        assignment_form_params[:assignment][:id] = current_assignment.id.to_s&lt;br /&gt;
        ques_array = assignment_form_params[:assignment_questionnaire]&lt;br /&gt;
        due_array = assignment_form_params[:due_date]&lt;br /&gt;
        ques_array.each do |cur_questionnaire|&lt;br /&gt;
          cur_questionnaire[:assignment_id] = current_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        due_array.each do |cur_due|&lt;br /&gt;
          cur_due[:parent_id] = current_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        assignment_form_params[:assignment_questionnaire] = ques_array&lt;br /&gt;
        assignment_form_params[:due_date] = due_array&lt;br /&gt;
        @assignment_form.update(assignment_form_params, current_user)&lt;br /&gt;
        aid = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id).id&lt;br /&gt;
        ExpertizaLogger.info &amp;quot;Assignment created: #{@assignment_form.as_json}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path aid&lt;br /&gt;
        undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
      else&lt;br /&gt;
        if exist_assignment&lt;br /&gt;
          flash[:error] = @assignment_form.assignment.name + &amp;quot; already exists as an assignment name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if exist_directory&lt;br /&gt;
          flash[:error] = dir_path + &amp;quot; already exists as a submisison directory name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        redirect_to &amp;quot;/assignments/new?private=1&amp;quot;&lt;br /&gt;
        #render 'new' This is redirecting to /assignments instead of /assignments/new&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      render 'new'&lt;br /&gt;
      undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changes were made to update_feedback_assignment_form_attributes in the same file to flash an error if an edited file has the same name: &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update_feedback_assignment_form_attributes&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.assignment.name}&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ExpertizaLogger.info LoggerMessage.new(&amp;quot;&amp;quot;, session[:user].name, &amp;quot;The assignment was saved: #{@assignment_form.as_json}&amp;quot;, request)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing == &lt;br /&gt;
&lt;br /&gt;
=== Manual UI Testing ===&lt;br /&gt;
The following steps must be performed to test the project UI:-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 1:''' Log in as an Instructor, with Username - instructor6, Password - password&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:logging_in_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 2:''' Create a new assignment. In this case our assignment is called &amp;quot;E2054 Test Assignment&amp;quot;, under course CSC 216 Fall 2009&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:creating_assign_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 3:''' To save the assignment, the Review and Author Feedback rubrics need to be filled in&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:saving_rubric_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 4:''' On completion, the assignment will be saved&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:successful_save_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 5:''' If another assignment of the same name under the same course is created, the following error is displayed&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:already_exists_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 6:''' On editing an already made assignment to match the same details as &amp;quot;E2054 Test Assignment&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:editing_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We get the following error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:edit_fail_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
1) Nicholas Viado (ndviado)&lt;br /&gt;
&lt;br /&gt;
2) Akshay Podila (apodila)&lt;br /&gt;
&lt;br /&gt;
Mentor: Sanket Pai (sgpai2)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135160</id>
		<title>CSC/ECE 517 Fall 2020 - E2054. Auto generate submission directory names based on assignment names</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135160"/>
		<updated>2020-10-14T05:35:05Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page describes the changes made under E2054, in order to auto-generate submission directory names based on assignment names for Fall 2020, CSC/ECE 517.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is an open source project based on Ruby on Rails framework, created and maintained by the joint efforts of students and faculty at North Carolina State University. &lt;br /&gt;
&lt;br /&gt;
It allows the instructors to create new assignments and customize new or existing assignments. Expertiza also allows an instructor to create a list of topics the students can sign up for. Students can form teams on the web application to work on various projects and assignments together. Additionally, students can peer review each other's submissions allowing them to improve upon their work. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Need for the current project =&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Each assignment should have its own submission directory.&lt;br /&gt;
&lt;br /&gt;
Current Deployment: http://152.7.99.132:8080/ &amp;lt;br/&amp;gt;&lt;br /&gt;
Github Repo: https://github.com/ndviado/expertiza&lt;br /&gt;
&lt;br /&gt;
== Issues to be fixed ==&lt;br /&gt;
In the current implementation of Expertiza, there are following issues need to be addressed: &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #1: The directory name should be auto-generated from the assignment name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #2: It should be done by changing spaces in the names  to underscores. E.g., the directory for Program 1 is by default &amp;quot;Program_1&amp;quot;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #3: A check should be added to prevent two assignments in the same course from having the same name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #4: Verify or add if not present - a check to stop two assignments from sharing the same directory. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #5: On changing name of an assignment while creating it, the code shouldn't throw a NoMethodError.&lt;br /&gt;
&lt;br /&gt;
== Issues that have been fixed ==&lt;br /&gt;
Fix #1: Submission directory is successfully being generated after the assignment name is typed in.  If needed, the submission directory can be changed, however any modifications to the assignment name will just auto-generate it to match.  &lt;br /&gt;
Fix #2: A check was added to ensure that assignments in the same course do not share the same name.  When creating a course, if the assignment name is a duplicate, it will reset the entire form.&lt;br /&gt;
Fix #3: A check was added to ensure that assignments in the same course do not share the same submission directory.  When creating a course, if the submission directory is a duplicate, it will reset the entire form.&lt;br /&gt;
Fix #4: These checks were also put in place when modifying an existent assignment.&lt;br /&gt;
&lt;br /&gt;
== Current Technical Difficulties ==&lt;br /&gt;
- Build is currently failing the Travis CI checks&lt;br /&gt;
&lt;br /&gt;
= Project implementation =&lt;br /&gt;
&lt;br /&gt;
== Files involved ==&lt;br /&gt;
The controller, helper and spec were modified for this project: &amp;lt;br/&amp;gt;&lt;br /&gt;
1. AssignmentsController &amp;lt;br/&amp;gt;&lt;br /&gt;
2. AssignmentsView - _general.html.erb &amp;lt;br/&amp;gt;&lt;br /&gt;
3. AssignemntsControllerSpec - assignments_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
=== AssignmentsController ===&lt;br /&gt;
This is a controller that helps instructors create, modify, copy new assignments. Each assignment can be associated with specific Rubrics, Review Strategy and Due dates.&lt;br /&gt;
&lt;br /&gt;
=== AssignmentsView ===&lt;br /&gt;
This the view for creating the new assignments and editing the existing assignments. This view also handles specifications of Rubrics, Review Strategy and Dates.&lt;br /&gt;
&lt;br /&gt;
=== AssignemntsControllerSpec ===&lt;br /&gt;
Tests and bug fixes pertaining to assignments controller.&lt;br /&gt;
&lt;br /&gt;
== Description of current project ==&lt;br /&gt;
The project primarily deals with the AssignmentsController and AssignmentsView, and changes made are as follows:&lt;br /&gt;
&lt;br /&gt;
The directory name is auto-generated from the assignment name typed in by the instructor.&lt;br /&gt;
&lt;br /&gt;
This is achieved by replacing all spaces in the names with underscores, and removing all special characters like '/','\','$', etc from the auto-generated submission directory name.&lt;br /&gt;
&lt;br /&gt;
If any two assignments of the same name under the same course are attempted to be created, it is prevented and an error message is displayed to the user stating the the submission directory name already exists.&lt;br /&gt;
&lt;br /&gt;
The odd case of a teacher editing the name of an already existing assignment to one that already exists is also handled. Expertiza will display a similar error message stating that the assignment couldn't be saved.&lt;br /&gt;
&lt;br /&gt;
== Changes made to code ==&lt;br /&gt;
Changes were made to the create function in assignments_controller.rb, such that it only creates the assignment directory if the one with the same name doesn't already exist. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def create&lt;br /&gt;
    @assignment_form = AssignmentForm.new(assignment_form_params)&lt;br /&gt;
    if params[:button]&lt;br /&gt;
      # Do not create an assignment if the assignment name or directory name already present in the course&lt;br /&gt;
      exist_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      dir_path = assignment_form_params[:assignment][:directory_path]&lt;br /&gt;
      exist_directory = Assignment.find_by(directory_path: dir_path, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      if !exist_assignment and !exist_directory and @assignment_form.save&lt;br /&gt;
        @assignment_form.create_assignment_node&lt;br /&gt;
        current_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
        assignment_form_params[:assignment][:id] = current_assignment.id.to_s&lt;br /&gt;
        ques_array = assignment_form_params[:assignment_questionnaire]&lt;br /&gt;
        due_array = assignment_form_params[:due_date]&lt;br /&gt;
        ques_array.each do |cur_questionnaire|&lt;br /&gt;
          cur_questionnaire[:assignment_id] = current_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        due_array.each do |cur_due|&lt;br /&gt;
          cur_due[:parent_id] = current_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        assignment_form_params[:assignment_questionnaire] = ques_array&lt;br /&gt;
        assignment_form_params[:due_date] = due_array&lt;br /&gt;
        @assignment_form.update(assignment_form_params, current_user)&lt;br /&gt;
        aid = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id).id&lt;br /&gt;
        ExpertizaLogger.info &amp;quot;Assignment created: #{@assignment_form.as_json}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path aid&lt;br /&gt;
        undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
      else&lt;br /&gt;
        if exist_assignment&lt;br /&gt;
          flash[:error] = @assignment_form.assignment.name + &amp;quot; already exists as an assignment name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if exist_directory&lt;br /&gt;
          flash[:error] = dir_path + &amp;quot; already exists as a submisison directory name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        redirect_to &amp;quot;/assignments/new?private=1&amp;quot;&lt;br /&gt;
        #render 'new' This is redirecting to /assignments instead of /assignments/new&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      render 'new'&lt;br /&gt;
      undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changes were made to update_feedback_assignment_form_attributes in the same file to flash an error if an edited file has the same name: &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update_feedback_assignment_form_attributes&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.assignment.name}&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ExpertizaLogger.info LoggerMessage.new(&amp;quot;&amp;quot;, session[:user].name, &amp;quot;The assignment was saved: #{@assignment_form.as_json}&amp;quot;, request)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing == &lt;br /&gt;
&lt;br /&gt;
=== Manual UI Testing ===&lt;br /&gt;
The following steps must be performed to test the project UI:-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 1:''' Log in as an Instructor, with Username - instructor6, Password - password&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:logging_in_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 2:''' Create a new assignment. In this case our assignment is called &amp;quot;E2054 Test Assignment&amp;quot;, under course CSC 216 Fall 2009&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:creating_assign_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 3:''' To save the assignment, the Review and Author Feedback rubrics need to be filled in&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:saving_rubric_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 4:''' On completion, the assignment will be saved&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:successful_save_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 5:''' If another assignment of the same name under the same course is created, the following error is displayed&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:already_exists_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 6:''' On editing an already made assignment to match the same details as &amp;quot;E2054 Test Assignment&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:editing_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We get the following error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:edit_fail_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
1) Nicholas Viado (ndviado)&lt;br /&gt;
&lt;br /&gt;
2) Akshay Podila (apodila)&lt;br /&gt;
&lt;br /&gt;
Mentor: Sanket Pai (sgpai2)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135159</id>
		<title>CSC/ECE 517 Fall 2020 - E2054. Auto generate submission directory names based on assignment names</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135159"/>
		<updated>2020-10-14T05:33:45Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Issues to be fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page describes the changes made under E2054, in order to auto-generate submission directory names based on assignment names for Fall 2020, CSC/ECE 517.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is an open source project based on Ruby on Rails framework, created and maintained by the joint efforts of students and faculty at North Carolina State University. &lt;br /&gt;
&lt;br /&gt;
It allows the instructors to create new assignments and customize new or existing assignments. Expertiza also allows an instructor to create a list of topics the students can sign up for. Students can form teams on the web application to work on various projects and assignments together. Additionally, students can peer review each other's submissions allowing them to improve upon their work. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Need for the current project =&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Each assignment should have its own submission directory.&lt;br /&gt;
&lt;br /&gt;
Current Deployment: http://152.7.99.132:8080/&lt;br /&gt;
Github Repo: https://github.com/ndviado/expertiza&lt;br /&gt;
&lt;br /&gt;
== Issues to be fixed ==&lt;br /&gt;
In the current implementation of Expertiza, there are following issues need to be addressed: &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #1: The directory name should be auto-generated from the assignment name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #2: It should be done by changing spaces in the names  to underscores. E.g., the directory for Program 1 is by default &amp;quot;Program_1&amp;quot;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #3: A check should be added to prevent two assignments in the same course from having the same name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #4: Verify or add if not present - a check to stop two assignments from sharing the same directory. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #5: On changing name of an assignment while creating it, the code shouldn't throw a NoMethodError.&lt;br /&gt;
&lt;br /&gt;
== Issues that have been fixed ==&lt;br /&gt;
Fix #1: Submission directory is successfully being generated after the assignment name is typed in.  If needed, the submission directory can be changed, however any modifications to the assignment name will just auto-generate it to match.  &lt;br /&gt;
Fix #2: A check was added to ensure that assignments in the same course do not share the same name.  When creating a course, if the assignment name is a duplicate, it will reset the entire form.&lt;br /&gt;
Fix #3: A check was added to ensure that assignments in the same course do not share the same submission directory.  When creating a course, if the submission directory is a duplicate, it will reset the entire form.&lt;br /&gt;
Fix #4: These checks were also put in place when modifying an existent assignment.&lt;br /&gt;
&lt;br /&gt;
== Current Technical Difficulties ==&lt;br /&gt;
- Build is currently failing the Travis CI checks&lt;br /&gt;
&lt;br /&gt;
= Project implementation =&lt;br /&gt;
&lt;br /&gt;
== Files involved ==&lt;br /&gt;
The controller, helper and spec were modified for this project: &amp;lt;br/&amp;gt;&lt;br /&gt;
1. AssignmentsController &amp;lt;br/&amp;gt;&lt;br /&gt;
2. AssignmentsView - _general.html.erb &amp;lt;br/&amp;gt;&lt;br /&gt;
3. AssignemntsControllerSpec - assignments_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
=== AssignmentsController ===&lt;br /&gt;
This is a controller that helps instructors create, modify, copy new assignments. Each assignment can be associated with specific Rubrics, Review Strategy and Due dates.&lt;br /&gt;
&lt;br /&gt;
=== AssignmentsView ===&lt;br /&gt;
This the view for creating the new assignments and editing the existing assignments. This view also handles specifications of Rubrics, Review Strategy and Dates.&lt;br /&gt;
&lt;br /&gt;
=== AssignemntsControllerSpec ===&lt;br /&gt;
Tests and bug fixes pertaining to assignments controller.&lt;br /&gt;
&lt;br /&gt;
== Description of current project ==&lt;br /&gt;
The project primarily deals with the AssignmentsController and AssignmentsView, and changes made are as follows:&lt;br /&gt;
&lt;br /&gt;
The directory name is auto-generated from the assignment name typed in by the instructor.&lt;br /&gt;
&lt;br /&gt;
This is achieved by replacing all spaces in the names with underscores, and removing all special characters like '/','\','$', etc from the auto-generated submission directory name.&lt;br /&gt;
&lt;br /&gt;
If any two assignments of the same name under the same course are attempted to be created, it is prevented and an error message is displayed to the user stating the the submission directory name already exists.&lt;br /&gt;
&lt;br /&gt;
The odd case of a teacher editing the name of an already existing assignment to one that already exists is also handled. Expertiza will display a similar error message stating that the assignment couldn't be saved.&lt;br /&gt;
&lt;br /&gt;
== Changes made to code ==&lt;br /&gt;
Changes were made to the create function in assignments_controller.rb, such that it only creates the assignment directory if the one with the same name doesn't already exist. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def create&lt;br /&gt;
    @assignment_form = AssignmentForm.new(assignment_form_params)&lt;br /&gt;
    if params[:button]&lt;br /&gt;
      # Do not create an assignment if the assignment name or directory name already present in the course&lt;br /&gt;
      exist_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      dir_path = assignment_form_params[:assignment][:directory_path]&lt;br /&gt;
      exist_directory = Assignment.find_by(directory_path: dir_path, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      if !exist_assignment and !exist_directory and @assignment_form.save&lt;br /&gt;
        @assignment_form.create_assignment_node&lt;br /&gt;
        current_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
        assignment_form_params[:assignment][:id] = current_assignment.id.to_s&lt;br /&gt;
        ques_array = assignment_form_params[:assignment_questionnaire]&lt;br /&gt;
        due_array = assignment_form_params[:due_date]&lt;br /&gt;
        ques_array.each do |cur_questionnaire|&lt;br /&gt;
          cur_questionnaire[:assignment_id] = current_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        due_array.each do |cur_due|&lt;br /&gt;
          cur_due[:parent_id] = current_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        assignment_form_params[:assignment_questionnaire] = ques_array&lt;br /&gt;
        assignment_form_params[:due_date] = due_array&lt;br /&gt;
        @assignment_form.update(assignment_form_params, current_user)&lt;br /&gt;
        aid = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id).id&lt;br /&gt;
        ExpertizaLogger.info &amp;quot;Assignment created: #{@assignment_form.as_json}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path aid&lt;br /&gt;
        undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
      else&lt;br /&gt;
        if exist_assignment&lt;br /&gt;
          flash[:error] = @assignment_form.assignment.name + &amp;quot; already exists as an assignment name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if exist_directory&lt;br /&gt;
          flash[:error] = dir_path + &amp;quot; already exists as a submisison directory name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        redirect_to &amp;quot;/assignments/new?private=1&amp;quot;&lt;br /&gt;
        #render 'new' This is redirecting to /assignments instead of /assignments/new&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      render 'new'&lt;br /&gt;
      undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changes were made to update_feedback_assignment_form_attributes in the same file to flash an error if an edited file has the same name: &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update_feedback_assignment_form_attributes&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.assignment.name}&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ExpertizaLogger.info LoggerMessage.new(&amp;quot;&amp;quot;, session[:user].name, &amp;quot;The assignment was saved: #{@assignment_form.as_json}&amp;quot;, request)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing == &lt;br /&gt;
&lt;br /&gt;
=== Manual UI Testing ===&lt;br /&gt;
The following steps must be performed to test the project UI:-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 1:''' Log in as an Instructor, with Username - instructor6, Password - password&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:logging_in_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 2:''' Create a new assignment. In this case our assignment is called &amp;quot;E2054 Test Assignment&amp;quot;, under course CSC 216 Fall 2009&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:creating_assign_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 3:''' To save the assignment, the Review and Author Feedback rubrics need to be filled in&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:saving_rubric_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 4:''' On completion, the assignment will be saved&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:successful_save_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 5:''' If another assignment of the same name under the same course is created, the following error is displayed&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:already_exists_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 6:''' On editing an already made assignment to match the same details as &amp;quot;E2054 Test Assignment&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:editing_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We get the following error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:edit_fail_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
1) Nicholas Viado (ndviado)&lt;br /&gt;
&lt;br /&gt;
2) Akshay Podila (apodila)&lt;br /&gt;
&lt;br /&gt;
Mentor: Sanket Pai (sgpai2)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135158</id>
		<title>CSC/ECE 517 Fall 2020 - E2054. Auto generate submission directory names based on assignment names</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2020_-_E2054._Auto_generate_submission_directory_names_based_on_assignment_names&amp;diff=135158"/>
		<updated>2020-10-14T05:28:11Z</updated>

		<summary type="html">&lt;p&gt;Ndviado: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki page describes the changes made under E2054, in order to auto-generate submission directory names based on assignment names for Fall 2020, CSC/ECE 517.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
Expertiza is an open source project based on Ruby on Rails framework, created and maintained by the joint efforts of students and faculty at North Carolina State University. &lt;br /&gt;
&lt;br /&gt;
It allows the instructors to create new assignments and customize new or existing assignments. Expertiza also allows an instructor to create a list of topics the students can sign up for. Students can form teams on the web application to work on various projects and assignments together. Additionally, students can peer review each other's submissions allowing them to improve upon their work. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Need for the current project =&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Each assignment should have its own submission directory.&lt;br /&gt;
&lt;br /&gt;
Current Deployment: http://152.7.99.132:8080/&lt;br /&gt;
Github Repo: https://github.com/ndviado/expertiza&lt;br /&gt;
&lt;br /&gt;
== Issues to be fixed ==&lt;br /&gt;
In the current implementation of Expertiza, there are following issues need to be addressed: &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #1: The directory name should be auto-generated from the assignment name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #2: It should be done by changing spaces in the names  to underscores. E.g., the directory for Program 1 is by default &amp;quot;Program_1&amp;quot;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #3: A check should be added to prevent two assignments in the same course from having the same name. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #4: Verify or add if not present - a check to stop two assignments from sharing the same directory. &amp;lt;br/&amp;gt;&lt;br /&gt;
Issue #5: On changing name of an assignment while creating it, the code shouldn't throw a NoMethodError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project implementation =&lt;br /&gt;
&lt;br /&gt;
== Files involved ==&lt;br /&gt;
The controller, helper and spec were modified for this project: &amp;lt;br/&amp;gt;&lt;br /&gt;
1. AssignmentsController &amp;lt;br/&amp;gt;&lt;br /&gt;
2. AssignmentsView - _general.html.erb &amp;lt;br/&amp;gt;&lt;br /&gt;
3. AssignemntsControllerSpec - assignments_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
=== AssignmentsController ===&lt;br /&gt;
This is a controller that helps instructors create, modify, copy new assignments. Each assignment can be associated with specific Rubrics, Review Strategy and Due dates.&lt;br /&gt;
&lt;br /&gt;
=== AssignmentsView ===&lt;br /&gt;
This the view for creating the new assignments and editing the existing assignments. This view also handles specifications of Rubrics, Review Strategy and Dates.&lt;br /&gt;
&lt;br /&gt;
=== AssignemntsControllerSpec ===&lt;br /&gt;
Tests and bug fixes pertaining to assignments controller.&lt;br /&gt;
&lt;br /&gt;
== Description of current project ==&lt;br /&gt;
The project primarily deals with the AssignmentsController and AssignmentsView, and changes made are as follows:&lt;br /&gt;
&lt;br /&gt;
The directory name is auto-generated from the assignment name typed in by the instructor.&lt;br /&gt;
&lt;br /&gt;
This is achieved by replacing all spaces in the names with underscores, and removing all special characters like '/','\','$', etc from the auto-generated submission directory name.&lt;br /&gt;
&lt;br /&gt;
If any two assignments of the same name under the same course are attempted to be created, it is prevented and an error message is displayed to the user stating the the submission directory name already exists.&lt;br /&gt;
&lt;br /&gt;
The odd case of a teacher editing the name of an already existing assignment to one that already exists is also handled. Expertiza will display a similar error message stating that the assignment couldn't be saved.&lt;br /&gt;
&lt;br /&gt;
== Changes made to code ==&lt;br /&gt;
Changes were made to the create function in assignments_controller.rb, such that it only creates the assignment directory if the one with the same name doesn't already exist. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def create&lt;br /&gt;
    @assignment_form = AssignmentForm.new(assignment_form_params)&lt;br /&gt;
    if params[:button]&lt;br /&gt;
      # Do not create an assignment if the assignment name or directory name already present in the course&lt;br /&gt;
      exist_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      dir_path = assignment_form_params[:assignment][:directory_path]&lt;br /&gt;
      exist_directory = Assignment.find_by(directory_path: dir_path, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
      if !exist_assignment and !exist_directory and @assignment_form.save&lt;br /&gt;
        @assignment_form.create_assignment_node&lt;br /&gt;
        current_assignment = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id)&lt;br /&gt;
        assignment_form_params[:assignment][:id] = current_assignment.id.to_s&lt;br /&gt;
        ques_array = assignment_form_params[:assignment_questionnaire]&lt;br /&gt;
        due_array = assignment_form_params[:due_date]&lt;br /&gt;
        ques_array.each do |cur_questionnaire|&lt;br /&gt;
          cur_questionnaire[:assignment_id] = current_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        due_array.each do |cur_due|&lt;br /&gt;
          cur_due[:parent_id] = current_assignment.id.to_s&lt;br /&gt;
        end&lt;br /&gt;
        assignment_form_params[:assignment_questionnaire] = ques_array&lt;br /&gt;
        assignment_form_params[:due_date] = due_array&lt;br /&gt;
        @assignment_form.update(assignment_form_params, current_user)&lt;br /&gt;
        aid = Assignment.find_by(name: @assignment_form.assignment.name, course_id: @assignment_form.assignment.course_id).id&lt;br /&gt;
        ExpertizaLogger.info &amp;quot;Assignment created: #{@assignment_form.as_json}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path aid&lt;br /&gt;
        undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
      else&lt;br /&gt;
        if exist_assignment&lt;br /&gt;
          flash[:error] = @assignment_form.assignment.name + &amp;quot; already exists as an assignment name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if exist_directory&lt;br /&gt;
          flash[:error] = dir_path + &amp;quot; already exists as a submisison directory name&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        redirect_to &amp;quot;/assignments/new?private=1&amp;quot;&lt;br /&gt;
        #render 'new' This is redirecting to /assignments instead of /assignments/new&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      render 'new'&lt;br /&gt;
      undo_link(&amp;quot;Assignment \&amp;quot;#{@assignment_form.assignment.name}\&amp;quot; has been created successfully. &amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changes were made to update_feedback_assignment_form_attributes in the same file to flash an error if an edited file has the same name: &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update_feedback_assignment_form_attributes&lt;br /&gt;
    if params[:set_pressed][:bool] == 'false'&lt;br /&gt;
      flash[:error] = &amp;quot;There has been some submissions for the rounds of reviews that you're trying to reduce. You can only increase the round of review.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.assignment.name}&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ExpertizaLogger.info LoggerMessage.new(&amp;quot;&amp;quot;, session[:user].name, &amp;quot;The assignment was saved: #{@assignment_form.as_json}&amp;quot;, request)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing == &lt;br /&gt;
&lt;br /&gt;
=== Manual UI Testing ===&lt;br /&gt;
The following steps must be performed to test the project UI:-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 1:''' Log in as an Instructor, with Username - instructor6, Password - password&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:logging_in_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 2:''' Create a new assignment. In this case our assignment is called &amp;quot;E2054 Test Assignment&amp;quot;, under course CSC 216 Fall 2009&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:creating_assign_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 3:''' To save the assignment, the Review and Author Feedback rubrics need to be filled in&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:saving_rubric_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 4:''' On completion, the assignment will be saved&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:successful_save_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 5:''' If another assignment of the same name under the same course is created, the following error is displayed&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:already_exists_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Step 6:''' On editing an already made assignment to match the same details as &amp;quot;E2054 Test Assignment&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:editing_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We get the following error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:edit_fail_2054.JPG]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Team Information ==&lt;br /&gt;
1) Nicholas Viado (ndviado)&lt;br /&gt;
&lt;br /&gt;
2) Akshay Podila (apodila)&lt;br /&gt;
&lt;br /&gt;
Mentor: Sanket Pai (sgpai2)&lt;/div&gt;</summary>
		<author><name>Ndviado</name></author>
	</entry>
</feed>