<?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=Arungta</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=Arungta"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Arungta"/>
	<updated>2026-09-11T17:34:22Z</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_2019_-_E1986._Allow_reviewers_to_bid_on_what_to_review&amp;diff=128541</id>
		<title>CSC/ECE 517 Fall 2019 - E1986. Allow reviewers to bid on what to review</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1986._Allow_reviewers_to_bid_on_what_to_review&amp;diff=128541"/>
		<updated>2019-11-11T06:23:46Z</updated>

		<summary type="html">&lt;p&gt;Arungta: Created page with &amp;quot;== '''Why Should Participants bid for Reviews''' ==  If the choice of which submission to review is left to student itself, he/she would choose to review those topics which are r...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Why Should Participants bid for Reviews''' ==&lt;br /&gt;
&lt;br /&gt;
If the choice of which submission to review is left to student itself, he/she would choose to review those topics which are related to their project or whatever they are highly interested in. This would benefit both the reviewer and reviewer because &lt;br /&gt;
&lt;br /&gt;
From Student's Perspective:&lt;br /&gt;
&lt;br /&gt;
*Because he/she does not have to spend a lot of time on understanding what is going on.&lt;br /&gt;
*The Student would be more focused on giving the review and hence judgement made tend to be more objective than subjective.  &lt;br /&gt;
*This would improve the quality of reviews and will also be helpful for the reviewer.&lt;br /&gt;
*Also, Bidding in Fun !!!!!!!&lt;br /&gt;
&lt;br /&gt;
From Instructor's Standpoint:&lt;br /&gt;
&lt;br /&gt;
*Because opinions expressed in the reviews are a result of informed decisions, the inference made from the Machine Learning models trained on these data sets would make more sense.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
=== Current situation ===&lt;br /&gt;
&lt;br /&gt;
When an assignment participant wants to review others’ work, they will be asked to choose an assignment topic. The participant will be allowed to choose from among those assignment topics that have not been already assigned to 10 other participants. If they choose the ‘I do not care about the topic I review’ option, a random topic will be chosen from all the available topics and will be assigned to them.&lt;br /&gt;
&lt;br /&gt;
'''Previous Work on this issue'''&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1856_Allow_reviewers_to_bid_on_what_to_review '''E1856 Work''']&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Spring_2019_-_Project_E1928._Allow_reviewers_to_bid_on_what_to_review '''E1928 Work''']&lt;br /&gt;
&lt;br /&gt;
=== What’s Deeply wrong in those implementations ===&lt;br /&gt;
&lt;br /&gt;
To understand what's wrong, first consider the differences between Teams Bidding for Assignments and Students Bidding for Reviews. Both of these are Matching or resource Allocation Problems. &lt;br /&gt;
&lt;br /&gt;
The former can be modelled as a one-to-one matching problem. (i.e team and assignment has one-to-one correspondence).&lt;br /&gt;
&lt;br /&gt;
[[File:Teams_Assignments_2.png |center|]]&lt;br /&gt;
&lt;br /&gt;
However, Students and Reviews have many-to-many relationship (a student can choose multiple submissions for review and a submission can be given to multiple students for review)&lt;br /&gt;
&lt;br /&gt;
[[File:Teams_Assignments.png |center|]]&lt;br /&gt;
&lt;br /&gt;
The Mathematical formulation is itself wrong in E1856 and E1928 and they have used the below shown diagram to represent the relationship.&lt;br /&gt;
&lt;br /&gt;
[[File:Teams_Assignments_3.png |center|]]&lt;br /&gt;
&lt;br /&gt;
=== Why does the difference is representation matter ===&lt;br /&gt;
&lt;br /&gt;
Since they have modeled the problem on the same lines, they have used the same version of Gale-Shapley or Top Trading Cycles Algorithm used for one-to-many or one-to-one approach.&lt;br /&gt;
Famous Problems Dealt on these lines.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Stable_marriage_problem Stable_marriage_problem]&lt;br /&gt;
&lt;br /&gt;
[https://www.jstor.org/stable/3132114?seq=1&amp;amp;cid=pdf-reference#references_tab_contents Jsror reference tab content]&lt;br /&gt;
&lt;br /&gt;
=== Other Implementation pitfalls ===&lt;br /&gt;
&lt;br /&gt;
'''E1928'''&lt;br /&gt;
&lt;br /&gt;
*Once the bidding for review topics is done, the selections needs to be saved to the database which is not happening currently that means when the page is refreshed, the UI does not retain the bids.&lt;br /&gt;
*The button responsible for running the algorithm cannot be checked and it is a hunk- like icon.&lt;br /&gt;
*The button appears multiple times on the page.&lt;br /&gt;
*The algorithm needs to be implemented in the web service which should be ideally be used from the lottery controller which is not they have tried to implement. The entire code is written in Ruby.&lt;br /&gt;
*The algorithm needs to skip the review topic that the user has worked on. This Code already exists for topic and again written in the new implementation that needs to be integrated into the existing one and hence needs refactoring.&lt;br /&gt;
*Proper tests need to be written.&lt;br /&gt;
&lt;br /&gt;
== '''What needs to be done''' ==&lt;br /&gt;
&lt;br /&gt;
The participants should be able to bid for topics to review in the same way they bid for topics to work on. &lt;br /&gt;
=== Functional Requirements===&lt;br /&gt;
*Each participant should be able to submit a list of preferences in decreasing preference order for the topics they would like to review. The list may contain any number of topics.&lt;br /&gt;
*During bidding, the topics should be color coded according to the number of participants who are contending for each topic. The colors should range from green to red with green representing a topic with a low number of bids and red representing a topic with a high number of bids.&lt;br /&gt;
*There should be a deadline before which all participants must submit their list of preferences.&lt;br /&gt;
*After the deadline, the course instructor should be able to run the bidding algorithm after which each participant will be assigned a list of topics to review. The number of topics assigned to a participant should be minimum(4,k) where ‘k’ is the number of topics in their preference list.&lt;br /&gt;
*Once the topics to review have been assigned, the participants should be able to see those topics they have been assigned and give feedback to the submission for each topic.&lt;br /&gt;
*If a participant has given feedback to less than 4 topics and choose to review a submission, the topic with the minimum number of current reviewers will be assigned to that participant.&lt;br /&gt;
&lt;br /&gt;
=== Non-functional Requirements ===&lt;br /&gt;
&lt;br /&gt;
*There must exist a web service which takes the participants and their respective preference lists as input, runs a bidding algorithm like top trading cycles and returns a map of the participants and the list of topics assigned to each participant. &lt;br /&gt;
*This web service must either be called from the LotteryController or a new controller can be created on the same (if Lottery Controller becomes too complex).&lt;br /&gt;
&lt;br /&gt;
== '''Bidding Algorithm''' ==&lt;br /&gt;
&lt;br /&gt;
We have a many-to-many matching problem in our hand. The assignment topics each have a quota 10 of reviewers the topic can be assigned to at maximum. Each of the students have a quota 4 of topics they can be assigned at maximum. Gale and Shapely have proposed a mechanism called the Deferred Acceptance (DA) algorithm for finding a stable solution for one-to-one and many-to-one matching problems. The generalization of the DA algorithm other case of many-to-many matching with different preferences and quotas proposed by Freer et al. can be used as our bidding algorithm.&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
&lt;br /&gt;
*Check whether the UI reflects the bids made by the user &lt;br /&gt;
*Check if a user is assigned a maximum of 4 reviews and not more than that even though he bids for more.&lt;br /&gt;
*Regression testing if the code is added in the lottery controller. If new model/controller is added then relevant tests will be included based on the proposal acceptance.&lt;br /&gt;
*Tests to ensure that each review topic gets minimum number of reviews.&lt;br /&gt;
*Tests for color coding&lt;br /&gt;
*Tests to check whether the web service functionality works as expected. &lt;br /&gt;
&lt;br /&gt;
== Important references ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/peerlogic/IntelligentAssignment/blob/master/app/app.py InteligentAssignment]&lt;br /&gt;
&lt;br /&gt;
[http://ices.gmu.edu/wp-content/uploads/2015/02/Many-to-Many-Matching-Problem-with-Quotas-by-Freer-and-Titova.pdf Many-to-Many-Matching-Problem-with-Quotas-by-Freer-and-Titova]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Spring_2019_-_Project_E1928._Allow_reviewers_to_bid_on_what_to_review Project_E1928._Allow_reviewers_to_bid_on_what_to_review]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1856_Allow_reviewers_to_bid_on_what_to_review E1856_Allow_reviewers_to_bid_on_what_to_review]&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Teams_Assignments_3.png&amp;diff=128540</id>
		<title>File:Teams Assignments 3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Teams_Assignments_3.png&amp;diff=128540"/>
		<updated>2019-11-11T06:21:00Z</updated>

		<summary type="html">&lt;p&gt;Arungta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Teams_Assignments.png&amp;diff=128539</id>
		<title>File:Teams Assignments.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Teams_Assignments.png&amp;diff=128539"/>
		<updated>2019-11-11T06:20:16Z</updated>

		<summary type="html">&lt;p&gt;Arungta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Teams_Assignments_2.png&amp;diff=128538</id>
		<title>File:Teams Assignments 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Teams_Assignments_2.png&amp;diff=128538"/>
		<updated>2019-11-11T06:19:28Z</updated>

		<summary type="html">&lt;p&gt;Arungta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019&amp;diff=128519</id>
		<title>CSC/ECE 517 Fall 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019&amp;diff=128519"/>
		<updated>2019-11-11T05:35:58Z</updated>

		<summary type="html">&lt;p&gt;Arungta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2019 - Project E1947. Refactor quiz_questionnaire_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - Project E1965. Review report should link to the usual view for reviews]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - Project E1943. Refactor sign up sheet controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1972. OSS project J. Skellington: Accessing Assignment Rubrics]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1961. Email notification to reviewers and instructors]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1971. OSS project Finklestein: Instructors &amp;amp; Institutions]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1953. Tagging report for student]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1955.Write  unit tests for student_task.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1954. Auto-generate submission directory names based on assignment names]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1958. Two issues related to assignment management]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1948. Refactor review_mapping_helper.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1959. Intelligent copying of assignments without topics]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1968. Fixes for adding members to teams]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1969. Fixes for reviews not being available]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1951. Remove multiple topics at a time]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1957. Time travel Not Allowed..!!! Restrict TAs’ ability to change their own grade + limit file-size upload]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1963. Changing assignment participant role]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1941. Issues related to topic deadlines]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1966. Tabbed_reviews partial file refactor for displaying the alternate view of reviews]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1962. Email notification upon account creation]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1967. Fix glitches in author feedback]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1960. Create new late policy successfully and fixing &amp;quot;Back&amp;quot; link]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1939. OSS Project Juniper: Bookmark enhancements]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - M1950. Support Asynchronous Web Assembly Compilation]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1938. OSS project Duke Blue: Fix import glitches]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1985. Let course staff and students do reviews]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - M1951. Implement missing OffscreenCanvas APIs]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1940. Improving email notification]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1956. There is no shortcut to get free review points: Review Assignment Bug]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1942. Refactor stage deadlines in assignment.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - M1952. Missing DOM features project]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1945. Refactor users_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1964. Export review scores for projects]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1949. Write Unit Tests for Importing assignment participants and import glitches]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1944. Refactor review mapping controller]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1946. Refactor Questionnaire controller]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1982. Regulate changing of rubrics while projects are in progress]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1989. Track the time students look at other submissions]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1990. Integrate suggestion detection algorithm]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1995. Tests for email functionality]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1993 Track Time Between Successive Tag Assignments]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1979. Completion/Progress view]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1995. Weights in grade calculation]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1980. Sort instructor reports by name, ID, score, etc.]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1984. Improve self-review  Link peer review &amp;amp; self-review to derive grades]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1994. Mentor management for assignments without topics]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1997. Issues related to meta-reviewing]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1981. Student-generated questions added to rubric]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1996. Enhancements to review grader]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1987. Improving search facility in Expertiza]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1978. Fix issues related to deadlines and late policies]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1991. Improvements to anonymized view]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1998. Weights in grade calculation]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1986. Allow reviewers to bid on what to review]]&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=128057</id>
		<title>CSC/ECE 517 Fall 2019 - E1955.Write unit tests for student task.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=128057"/>
		<updated>2019-11-08T00:36:06Z</updated>

		<summary type="html">&lt;p&gt;Arungta: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the Expertiza based OSS project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza] is an open source project based on [https://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
This project in particular intends that the students collaborate with each other and work on making enhancements to the code base by applying the concepts of Rails,RSpec, DRY code,Test driven development etc. This provides an opportunity for students to contribute to an open source project and learn further about software deployment etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About RSpec ==&lt;br /&gt;
&lt;br /&gt;
RSpec is a unit test framework for the Ruby programming language. RSpec is different than traditional xUnit frameworks like JUnit because RSpec is a Behavior driven development tool. What this means is that, tests written in RSpec focus on the &amp;quot;behavior&amp;quot; of an application being tested. RSpec does not put emphasis on, how the application works but instead on how it behaves, in other words, what the application actually does.Each RSpec file contains one or more tests. Each test ensures if a particular feature of our website is working properly.The output of an RSpec run will tell you exactly what features aren't working. The benefit is that tested code is unlikely to break unnoticed.The tests are run every time someone makes, or updates, a [https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests Pull Request].&lt;br /&gt;
&lt;br /&gt;
== DB Schema ==&lt;br /&gt;
Below are the tables that are related ti student task functionality&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/images/7/7a/ExpertizaDbSchema.jpg DB Schema]&lt;br /&gt;
&lt;br /&gt;
== Description of the current project ==&lt;br /&gt;
&lt;br /&gt;
The following is an Expertiza based OSS project which deals primarily with the student_task.rb and student_task_spec.rb. It focuses on writing RSpec unit tests for the code affected or added. The goal of this project is to attempt to add sufficient unit tests to this part of the application and increase its path coverage to above 90 percent.&lt;br /&gt;
The following tasks were accomplished in this project:&lt;br /&gt;
&lt;br /&gt;
* Complete the insufficient unit tests for student_task.rb. &lt;br /&gt;
* Increase path coverage from only 31.91% with 30 lines covered to above 92.55% with 87 lines covered.&lt;br /&gt;
* Cover edge cases.&lt;br /&gt;
* High branch coverage to be achieved.&lt;br /&gt;
&lt;br /&gt;
There are different tasks that a student can perform. &lt;br /&gt;
* He can see all the assignments that he has been assigned to.&lt;br /&gt;
* He can see details of each assignment like marks, his team, send invitation to student to join a team&lt;br /&gt;
* Review other students' work&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/images/4/4c/StudentTaskHomePage.png Student Task Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/images/4/4d/StudentTaskAssignmentTasks.png Assignment Submission Tasks]&lt;br /&gt;
&lt;br /&gt;
The following functions were tested:&lt;br /&gt;
&lt;br /&gt;
* complete?&lt;br /&gt;
This function returns true if the participant stage deadline is &amp;quot;complete&amp;quot; or else return false.&lt;br /&gt;
* content_submitted_in_current_stage?&lt;br /&gt;
This function returns true if the participant has submitted hyperlinks in the current stage and the stage is in &amp;quot;submission&amp;quot;&lt;br /&gt;
* hyperlinks&lt;br /&gt;
This function returns all the hyperlinks submitted by the participant team&lt;br /&gt;
* in_work_stage?&lt;br /&gt;
A assignment is said to be in work stage if its stage is any of &amp;quot;submission&amp;quot;, &amp;quot;review&amp;quot; or &amp;quot;metareview&amp;quot;&lt;br /&gt;
* incomplete?&lt;br /&gt;
This function returns true if the participant stage deadline is not &amp;quot;complete&amp;quot; or else return false.&lt;br /&gt;
* metareviews_given? * reviews_given?&lt;br /&gt;
A participant can review other people's work and add comments.&lt;br /&gt;
Also a user can review a review, called &amp;quot;metareview&amp;quot; that is given to him.&lt;br /&gt;
A review comment is mapped to assignments or other reviews by the table response_tags via the reviewed_object_id.&lt;br /&gt;
This method checks if the participant has given any metareview and return true otherwise.&lt;br /&gt;
* metareviews_given_in_current_stage?&lt;br /&gt;
This function checks if the assignment is in &amp;quot;metareview&amp;quot; stage and metareviews. &lt;br /&gt;
* not_started?&lt;br /&gt;
This function checks if the assignment is in any of &amp;quot;submission&amp;quot;, &amp;quot;review&amp;quot; or &amp;quot;metareview&amp;quot; stage &lt;br /&gt;
* relative_deadline&lt;br /&gt;
* reviews_given_in_current_stage?&lt;br /&gt;
* revision?&lt;br /&gt;
* from_participant(participant)&lt;br /&gt;
This function return the StudentTask from the participant with assignment, topic, current_stage&lt;br /&gt;
* from_participant_id(id)&lt;br /&gt;
This function return the StudentTask from the participant with assignment, topic, current_stage using the participant id&lt;br /&gt;
* from_user(user)&lt;br /&gt;
* get_author_feedback_data(participant_id, timeline_list)&lt;br /&gt;
* get_due_date_data(assignment, timeline_list)&lt;br /&gt;
* get_peer_review_data(participant_id, timeline_list)&lt;br /&gt;
* get_submission_data(assignment_id, team_id, timeline_list)&lt;br /&gt;
* get_timeline_data(assignment, participant, team)&lt;br /&gt;
* teamed_students(user, ip_address = nil)&lt;br /&gt;
This function return the list of all the students that the logged on user has teamed up until now.&lt;br /&gt;
* started?&lt;br /&gt;
Checks if the current stage is &amp;quot;incomplete&amp;quot; and  content_submitted_in_current_stage? reviews_given_in_current_stage? || metareviews_given_in_current_stage? and return true and false&lt;br /&gt;
* topic_name&lt;br /&gt;
Return the name of the topic&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
* Mock Objects&lt;br /&gt;
The following mock objects were created/built before the commencement of automated testing for student_task.rb (model) code. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let(:participant) { build(:participant, id: 1, user_id: user.id, parent_id: assignment.id) }&lt;br /&gt;
let(:participant2) { build(:participant, id: 2, user_id: user2.id, parent_id: assignment.id) }&lt;br /&gt;
let(:participant3) { build(:participant, id: 3, user_id: user3.id, parent_id: assignment2.id) }&lt;br /&gt;
let(:user) { create(:student) }&lt;br /&gt;
let(:user2) { create(:student, name: &amp;quot;qwertyui&amp;quot;, id: 5) }&lt;br /&gt;
let(:user3) { create(:student, name: &amp;quot;qwertyui1234&amp;quot;, id: 6) }&lt;br /&gt;
let(:course) { build(:course) }&lt;br /&gt;
let(:assignment) { build(:assignment, name: 'assignment 1') }&lt;br /&gt;
let(:assignment2) { create(:assignment, name: 'assignment 2', is_calibrated: true) }&lt;br /&gt;
let(:team) { create(:assignment_team, id: 1, name: 'team 1', parent_id: assignment.id, users: [user, user2]) }&lt;br /&gt;
let(:team2) { create(:assignment_team, id: 2, name: 'team 2', parent_id: assignment2.id, users: [user3]) }&lt;br /&gt;
let(:team_user) { create(:team_user, id: 3, team_id: team.id, user_id: user.id) }&lt;br /&gt;
let(:team_user2) { create(:team_user, id: 4, team_id: team.id, user_id: user2.id) }&lt;br /&gt;
let(:team2_user3) { create(:team_user, id: 5, team_id: team2.id, user_id: user3.id) }&lt;br /&gt;
let(:course_team) { create(:course_team, id: 3, name: 'course team 1', parent_id: course.id) }&lt;br /&gt;
let(:cource_team_user) { create(:team_user, id: 6, team_id: course_team.id, user_id: user.id) }&lt;br /&gt;
let(:cource_team_user2) { create(:team_user, id: 7, team_id: course_team.id, user_id: user2.id) }&lt;br /&gt;
let(:topic) { build(:topic) }&lt;br /&gt;
let(:topic2) { create(:topic, topic_name: &amp;quot;TestReview&amp;quot;) }&lt;br /&gt;
let(:due_date) { build(:assignment_due_date, deadline_type_id: 1) }&lt;br /&gt;
let(:deadline_type) { build(:deadline_type, id: 1) }&lt;br /&gt;
let(:review_response_map) { build(:review_response_map, assignment: assignment, reviewer: participant, reviewee: team2) }&lt;br /&gt;
let(:metareview_response_map) { build(:meta_review_response_map, reviewed_object_id: 1) }&lt;br /&gt;
let(:response) { build(:response, id: 1, map_id: 1, response_map: review_response_map) }&lt;br /&gt;
let(:response2) { build(:response, id: 2, map_id: 1, response_map: review_response_map) }&lt;br /&gt;
let(:submission_record) {build(:submission_record, id:1, team_id: 1, assignment_id: 1) }    #added for submission_record method call test.&lt;br /&gt;
let(:student_task) do&lt;br /&gt;
  StudentTask.new(&lt;br /&gt;
    participant: participant,&lt;br /&gt;
    assignment: participant.assignment,&lt;br /&gt;
    topic: participant.topic,&lt;br /&gt;
    current_stage: participant.current_stage,&lt;br /&gt;
    stage_deadline: (Time.parse(participant.stage_deadline) rescue Time.now + 1.year)&lt;br /&gt;
  )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Below are some of the functions tested&lt;br /&gt;
* Function: teamed_students - Write a test case to find teamed up students.&lt;br /&gt;
This method is an instance method, having a user passed to it. It return the list of students that the current user has teamed up. It does not consider the teammates that are from calibration assignments&lt;br /&gt;
The test cases described check for the following scenarios: &lt;br /&gt;
1. When not in any team returns empty&lt;br /&gt;
2. When assigned in a cource_team returns empty&lt;br /&gt;
3. When assigned in a assignment_team return the list of teammates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 describe &amp;quot;#teamed_students&amp;quot; do&lt;br /&gt;
    context 'when not in any team' do&lt;br /&gt;
      it 'returns empty' do&lt;br /&gt;
        expect(StudentTask.teamed_students(user3)).to eq({})&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when assigned in a cource_team ' do&lt;br /&gt;
      it 'returns empty' do&lt;br /&gt;
        allow(user).to receive(:teams).and_return([course_team])&lt;br /&gt;
        expect(StudentTask.teamed_students(user)).to eq({})&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when assigned in a assignment_team ' do&lt;br /&gt;
      it 'returns empty' do&lt;br /&gt;
        allow(user).to receive(:teams).and_return([team])&lt;br /&gt;
        allow(AssignmentParticipant).to receive(:find_by).with(user_id: 1, parent_id: assignment.id).and_return(participant)&lt;br /&gt;
        allow(AssignmentParticipant).to receive(:find_by).with(user_id: 5, parent_id: assignment.id).and_return(participant2)&lt;br /&gt;
        allow(Assignment).to receive(:find_by).with(id: team.parent_id).and_return(assignment)&lt;br /&gt;
        # allow(Team).to receive(:find).with(team.id).and_return(team)&lt;br /&gt;
        expect(StudentTask.teamed_students(user)).to eq({assignment.course_id =&amp;gt; [user2.fullname]})&lt;br /&gt;
      end&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;
* Function: get_due_date_data - Write a test case to get the due dates of the assignment.&lt;br /&gt;
This method is an instance method, having an assignment and timeline_list list passed to it. The test cases described check for the following scenarios: &lt;br /&gt;
1. When an assignment passed to the method has no assignment attributes.&lt;br /&gt;
2. When an assignment passed to the method has some attributes but not the attribute due_at&lt;br /&gt;
3. When an assignment passed to the method has some attributes along with due_at&lt;br /&gt;
&lt;br /&gt;
due_at attribute is checked, upon which the timeline_list is populated with the updated_at and label values.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe &amp;quot;#get_due_date_data&amp;quot; do&lt;br /&gt;
    context 'when called with assignment having empty due dates' do&lt;br /&gt;
      it &amp;quot;return empty time_list array&amp;quot; do&lt;br /&gt;
        timeline_list = []&lt;br /&gt;
        StudentTask.get_due_date_data(assignment, timeline_list)&lt;br /&gt;
        expect(timeline_list).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when called with assignment having due date' do&lt;br /&gt;
      context 'and due_at value nil' do&lt;br /&gt;
        it &amp;quot;return empty time_list array&amp;quot; do&lt;br /&gt;
          allow(due_date).to receive(:deadline_type).and_return(deadline_type)&lt;br /&gt;
          timeline_list = []&lt;br /&gt;
          due_date.due_at=nil;&lt;br /&gt;
          assignment.due_dates = [due_date]&lt;br /&gt;
          StudentTask.get_due_date_data(assignment, timeline_list)&lt;br /&gt;
          expect(timeline_list).to eq([])&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      context 'and due_at value not nil' do&lt;br /&gt;
        it &amp;quot;return time_list array&amp;quot; do&lt;br /&gt;
          allow(due_date).to receive(:deadline_type).and_return(deadline_type)&lt;br /&gt;
          timeline_list = []&lt;br /&gt;
          assignment.due_dates = [due_date]&lt;br /&gt;
          StudentTask.get_due_date_data(assignment, timeline_list)&lt;br /&gt;
          expect(timeline_list).to eq([{&lt;br /&gt;
            :label=&amp;gt;(due_date.deadline_type.name + ' Deadline').humanize,&lt;br /&gt;
            :updated_at=&amp;gt;due_date.due_at.strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
          }])&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Function: get_peer_review_data - Write a test case to get the peer review data.&lt;br /&gt;
This method is an instance method, having an review and timeline_list list passed to it. The test cases described check for the following scenarios: &lt;br /&gt;
1. When no review response is mapped.&lt;br /&gt;
2. When review response is mapped.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe &amp;quot;#get_peer_review_data&amp;quot; do&lt;br /&gt;
    context 'when no review response mapped' do&lt;br /&gt;
      it 'returns empty' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        StudentTask.get_peer_review_data(user2,timeline_list)&lt;br /&gt;
        expect(timeline_list).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when mapped to review response map' do&lt;br /&gt;
      it 'returns timeline array' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        allow(ReviewResponseMap).to receive_message_chain(:where, :find_each).with(reviewer_id: 1).with(no_args).and_yield(review_response_map)&lt;br /&gt;
        allow(review_response_map).to receive(:id).and_return(1)&lt;br /&gt;
        allow(Response).to receive_message_chain(:where, :last).with(map_id: 1).with(no_args).and_return(response)&lt;br /&gt;
        allow(response).to receive(:round).and_return(1)&lt;br /&gt;
        allow(response).to receive(:updated_at).and_return(Time.new(2019))&lt;br /&gt;
        timevalue = Time.new(2019).strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
        expect(StudentTask.get_peer_review_data(1,timeline_list)).to eq([{:id=&amp;gt;1, :label=&amp;gt;&amp;quot;Round 1 peer review&amp;quot;, :updated_at=&amp;gt;timevalue}])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Function: get_author_feedback_data - Write a test case to get the feedback response&lt;br /&gt;
This method is an instance method, having feedback and timeline_list list passed to it. The test cases described check for the following scenarios: &lt;br /&gt;
1. when no feedback response is mapped.&lt;br /&gt;
2. when feedback response is mapped.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe &amp;quot;#get_author_feedback_data&amp;quot; do&lt;br /&gt;
    context 'when no feedback response mapped' do&lt;br /&gt;
      it 'returns empty' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        StudentTask.get_author_feedback_data(user2,timeline_list)&lt;br /&gt;
        expect(timeline_list).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when mapped to feedback response map' do&lt;br /&gt;
      it 'returns timeline array' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        allow(FeedbackResponseMap).to receive_message_chain(:where, :find_each).with(reviewer_id: 1).with(no_args).and_yield(review_response_map)&lt;br /&gt;
        allow(review_response_map).to receive(:id).and_return(1)&lt;br /&gt;
        allow(Response).to receive_message_chain(:where, :last).with(map_id: 1).with(no_args).and_return(response)&lt;br /&gt;
        allow(response).to receive(:updated_at).and_return(Time.now)&lt;br /&gt;
        timevalue = Time.now.strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
        expect(StudentTask.get_author_feedback_data(1,timeline_list)).to eq([{:id=&amp;gt;1, :label=&amp;gt;&amp;quot;Author feedback&amp;quot;, :updated_at=&amp;gt;timevalue}])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Function: get_submission_data - Write a test case to import participants&lt;br /&gt;
This method is an instance method, having a submission and timeline_list list passed to it. The test cases described check for the following scenarios: &lt;br /&gt;
1. When no submission data is mapped.&lt;br /&gt;
2. When submission data is mapped and hyperlink is not submitted or hyperlink is removed.&lt;br /&gt;
3. When submission data is mapped and operation is submit_hyperlink.&lt;br /&gt;
4. When submission data mapped and operation is Remove Hyperlink.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#get_submission_data' do&lt;br /&gt;
    context 'when no submission data mapped' do&lt;br /&gt;
      it 'returns nil' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        expect(StudentTask.get_submission_data(1,1,timeline_list)).to eq(nil)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when submission data mapped and not submit hyperlink or Remove hyperlink' do&lt;br /&gt;
      it 'returns timeline_list' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        allow(SubmissionRecord).to receive_message_chain(:where, :find_each).with(team_id: 1, assignment_id: 1).with(no_args).and_yield(submission_record)&lt;br /&gt;
        allow(submission_record).to receive(:operation).and_return('testing_label')&lt;br /&gt;
        allow(submission_record).to receive(:updated_at).and_return(Time.new(2019))&lt;br /&gt;
        timevalue = Time.new(2019).strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
        expect(StudentTask.get_submission_data(1,1,timeline_list)).to eq([{:label=&amp;gt;&amp;quot;Testing label&amp;quot;, :updated_at=&amp;gt;timevalue}])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when submission data mapped and operation is submit_hyperlink' do&lt;br /&gt;
      it 'returns timeline_list with link' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        allow(SubmissionRecord).to receive_message_chain(:where, :find_each).with(team_id: 1, assignment_id: 1).with(no_args).and_yield(submission_record)&lt;br /&gt;
        allow(submission_record).to receive(:operation).and_return('Submit Hyperlink')&lt;br /&gt;
        allow(submission_record).to receive(:updated_at).and_return(Time.new(2019))&lt;br /&gt;
        timevalue = Time.new(2019).strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
        expect(StudentTask.get_submission_data(1,1,timeline_list)).to eq([{:label=&amp;gt;&amp;quot;Submit hyperlink&amp;quot;, :updated_at=&amp;gt;timevalue, :link=&amp;gt;&amp;quot;www.wolfware.edu&amp;quot;}])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when submission data mapped and operation is Remove Hyperlink' do&lt;br /&gt;
      it 'returns timeline_list with link' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        allow(SubmissionRecord).to receive_message_chain(:where, :find_each).with(team_id: 1, assignment_id: 1).with(no_args).and_yield(submission_record)&lt;br /&gt;
        allow(submission_record).to receive(:operation).and_return('Remove Hyperlink')&lt;br /&gt;
        timevalue = Time.new(2019).strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
        allow(submission_record).to receive(:updated_at).and_return(Time.new(2019))&lt;br /&gt;
        expect(StudentTask.get_submission_data(1,1,timeline_list)).to eq([{:label=&amp;gt;&amp;quot;Remove hyperlink&amp;quot;, :updated_at=&amp;gt;timevalue, :link=&amp;gt;&amp;quot;www.wolfware.edu&amp;quot;}])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
&lt;br /&gt;
Carmen Bentley,Mentor&lt;br /&gt;
&lt;br /&gt;
* Tushar Kundra,tkundra&lt;br /&gt;
&lt;br /&gt;
* Ram Chavali,ramlohith&lt;br /&gt;
&lt;br /&gt;
* Ayushi Rungta,Rungta1001&lt;br /&gt;
&lt;br /&gt;
=== Running Tests ===&lt;br /&gt;
&lt;br /&gt;
What we need to do is to set up the environment and complete the 'student_task.rb' and 'student_task_spec.rb' to increase the path coverage from only 43.0% with 43 lines covered and 57 lines missed to above 90%.&lt;br /&gt;
&lt;br /&gt;
You can run RSpec tests by executing the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rspec spec/models/student_task_spec.rb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that, you can see the detailed coverage information by opening this file in your Expertiza folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
coverage/index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Our work====&lt;br /&gt;
The code we created can be found below. We have also linked the video of our tests running with coverage to showcase the work we have done.&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/1549 Pull request]&lt;br /&gt;
*[https://drive.google.com/file/d/1O-1k3mqo1yRMp0yxgTIuM3P5cegB5DCy/view?usp=sharing Video of tests running]&lt;br /&gt;
&lt;br /&gt;
Test Coverage:  [http://wiki.expertiza.ncsu.edu/images/b/b0/E1955before.png Initial]  [http://wiki.expertiza.ncsu.edu/images/0/05/E1955after.png Final]&lt;br /&gt;
&lt;br /&gt;
== Running the Project Locally ==&lt;br /&gt;
The project could be run locally by cloning the Github repository [https://github.com/tusharkundra/expertiza Expertiza] and then running the following commands sequentially.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bundle install&lt;br /&gt;
rake db:create:all&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rails s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Issues/Erros During Testing ==&lt;br /&gt;
* While creating the test for &amp;quot;reviews_given?&amp;quot;, given below, it seems the function is returning string value instead of boolean value as &amp;quot;j.class.to_s[/Review/]&amp;quot; gives a string when the class of &amp;quot;j&amp;quot; starts with &amp;quot;Review&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def reviews_given?&lt;br /&gt;
    response_maps.inject(nil) {|i, j| i || (j.response &amp;amp;&amp;amp; j.class.to_s[/Review/]) }&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=128056</id>
		<title>CSC/ECE 517 Fall 2019 - E1955.Write unit tests for student task.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=128056"/>
		<updated>2019-11-08T00:29:08Z</updated>

		<summary type="html">&lt;p&gt;Arungta: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the Expertiza based OSS project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza] is an open source project based on [https://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
This project in particular intends that the students collaborate with each other and work on making enhancements to the code base by applying the concepts of Rails,RSpec, DRY code,Test driven development etc. This provides an opportunity for students to contribute to an open source project and learn further about software deployment etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About RSpec ==&lt;br /&gt;
&lt;br /&gt;
RSpec is a unit test framework for the Ruby programming language. RSpec is different than traditional xUnit frameworks like JUnit because RSpec is a Behavior driven development tool. What this means is that, tests written in RSpec focus on the &amp;quot;behavior&amp;quot; of an application being tested. RSpec does not put emphasis on, how the application works but instead on how it behaves, in other words, what the application actually does.Each RSpec file contains one or more tests. Each test ensures if a particular feature of our website is working properly.The output of an RSpec run will tell you exactly what features aren't working. The benefit is that tested code is unlikely to break unnoticed.The tests are run every time someone makes, or updates, a [https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests Pull Request].&lt;br /&gt;
&lt;br /&gt;
== DB Schema ==&lt;br /&gt;
Below are the tables that are related ti student task functionality&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/images/7/7a/ExpertizaDbSchema.jpg DB Schema]&lt;br /&gt;
&lt;br /&gt;
== Description of the current project ==&lt;br /&gt;
&lt;br /&gt;
The following is an Expertiza based OSS project which deals primarily with the student_task.rb and student_task_spec.rb. It focuses on writing RSpec unit tests for the code affected or added. The goal of this project is to attempt to add sufficient unit tests to this part of the application and increase its path coverage to above 90 percent.&lt;br /&gt;
The following tasks were accomplished in this project:&lt;br /&gt;
&lt;br /&gt;
* Complete the insufficient unit tests for student_task.rb. &lt;br /&gt;
* Increase path coverage from only 31.91% with 30 lines covered to above 92.55% with 87 lines covered.&lt;br /&gt;
* Cover edge cases.&lt;br /&gt;
* High branch coverage to be achieved.&lt;br /&gt;
&lt;br /&gt;
There are different tasks that a student can perform. &lt;br /&gt;
* He can see all the assignments that he has been assigned to.&lt;br /&gt;
* He can see details of each assignment like marks, his team, send invitation to student to join a team&lt;br /&gt;
* Review other students' work&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/images/4/4c/StudentTaskHomePage.png Student Task Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/images/4/4d/StudentTaskAssignmentTasks.png Assignment Submission Tasks]&lt;br /&gt;
&lt;br /&gt;
The following functions were tested:&lt;br /&gt;
&lt;br /&gt;
* complete?&lt;br /&gt;
This function returns true if the participant stage deadline is &amp;quot;complete&amp;quot; or else return false.&lt;br /&gt;
* content_submitted_in_current_stage?&lt;br /&gt;
This function returns true if the participant has submitted hyperlinks in the current stage and the stage is in &amp;quot;submission&amp;quot;&lt;br /&gt;
* hyperlinks&lt;br /&gt;
This function returns all the hyperlinks submitted by the participant team&lt;br /&gt;
* in_work_stage?&lt;br /&gt;
A assignment is said to be in work stage if its stage is any of &amp;quot;submission&amp;quot;, &amp;quot;review&amp;quot; or &amp;quot;metareview&amp;quot;&lt;br /&gt;
* incomplete?&lt;br /&gt;
This function returns true if the participant stage deadline is not &amp;quot;complete&amp;quot; or else return false.&lt;br /&gt;
* metareviews_given? * reviews_given?&lt;br /&gt;
A participant can review other people's work and add comments.&lt;br /&gt;
Also a user can review a review, called &amp;quot;metareview&amp;quot; that is given to him.&lt;br /&gt;
A review comment is mapped to assignments or other reviews by the table response_tags via the reviewed_object_id.&lt;br /&gt;
This method checks if the participant has given any metareview and return true otherwise.&lt;br /&gt;
* metareviews_given_in_current_stage?&lt;br /&gt;
This function checks if the assignment is in &amp;quot;metareview&amp;quot; stage and metareviews. &lt;br /&gt;
* not_started?&lt;br /&gt;
This function checks if the assignment is in any of &amp;quot;submission&amp;quot;, &amp;quot;review&amp;quot; or &amp;quot;metareview&amp;quot; stage &lt;br /&gt;
* relative_deadline&lt;br /&gt;
* reviews_given_in_current_stage?&lt;br /&gt;
* revision?&lt;br /&gt;
* from_participant(participant)&lt;br /&gt;
This function return the StudentTask from the participant with assignment, topic, current_stage&lt;br /&gt;
* from_participant_id(id)&lt;br /&gt;
This function return the StudentTask from the participant with assignment, topic, current_stage using the participant id&lt;br /&gt;
* from_user(user)&lt;br /&gt;
* get_author_feedback_data(participant_id, timeline_list)&lt;br /&gt;
* get_due_date_data(assignment, timeline_list)&lt;br /&gt;
* get_peer_review_data(participant_id, timeline_list)&lt;br /&gt;
* get_submission_data(assignment_id, team_id, timeline_list)&lt;br /&gt;
* get_timeline_data(assignment, participant, team)&lt;br /&gt;
* teamed_students(user, ip_address = nil)&lt;br /&gt;
This function return the list of all the students that the logged on user has teamed up until now.&lt;br /&gt;
* started?&lt;br /&gt;
Checks if the current stage is &amp;quot;incomplete&amp;quot; and  content_submitted_in_current_stage? reviews_given_in_current_stage? || metareviews_given_in_current_stage? and return true and false&lt;br /&gt;
* topic_name&lt;br /&gt;
Return the name of the topic&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
&lt;br /&gt;
* Mock Objects&lt;br /&gt;
The following mock objects were created/built before the commencement of automated testing for student_task.rb (model) code. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let(:participant) { build(:participant, id: 1, user_id: user.id, parent_id: assignment.id) }&lt;br /&gt;
let(:participant2) { build(:participant, id: 2, user_id: user2.id, parent_id: assignment.id) }&lt;br /&gt;
let(:participant3) { build(:participant, id: 3, user_id: user3.id, parent_id: assignment2.id) }&lt;br /&gt;
let(:user) { create(:student) }&lt;br /&gt;
let(:user2) { create(:student, name: &amp;quot;qwertyui&amp;quot;, id: 5) }&lt;br /&gt;
let(:user3) { create(:student, name: &amp;quot;qwertyui1234&amp;quot;, id: 6) }&lt;br /&gt;
let(:course) { build(:course) }&lt;br /&gt;
let(:assignment) { build(:assignment, name: 'assignment 1') }&lt;br /&gt;
let(:assignment2) { create(:assignment, name: 'assignment 2', is_calibrated: true) }&lt;br /&gt;
let(:team) { create(:assignment_team, id: 1, name: 'team 1', parent_id: assignment.id, users: [user, user2]) }&lt;br /&gt;
let(:team2) { create(:assignment_team, id: 2, name: 'team 2', parent_id: assignment2.id, users: [user3]) }&lt;br /&gt;
let(:team_user) { create(:team_user, id: 3, team_id: team.id, user_id: user.id) }&lt;br /&gt;
let(:team_user2) { create(:team_user, id: 4, team_id: team.id, user_id: user2.id) }&lt;br /&gt;
let(:team2_user3) { create(:team_user, id: 5, team_id: team2.id, user_id: user3.id) }&lt;br /&gt;
let(:course_team) { create(:course_team, id: 3, name: 'course team 1', parent_id: course.id) }&lt;br /&gt;
let(:cource_team_user) { create(:team_user, id: 6, team_id: course_team.id, user_id: user.id) }&lt;br /&gt;
let(:cource_team_user2) { create(:team_user, id: 7, team_id: course_team.id, user_id: user2.id) }&lt;br /&gt;
let(:topic) { build(:topic) }&lt;br /&gt;
let(:topic2) { create(:topic, topic_name: &amp;quot;TestReview&amp;quot;) }&lt;br /&gt;
let(:due_date) { build(:assignment_due_date, deadline_type_id: 1) }&lt;br /&gt;
let(:deadline_type) { build(:deadline_type, id: 1) }&lt;br /&gt;
let(:review_response_map) { build(:review_response_map, assignment: assignment, reviewer: participant, reviewee: team2) }&lt;br /&gt;
let(:metareview_response_map) { build(:meta_review_response_map, reviewed_object_id: 1) }&lt;br /&gt;
let(:response) { build(:response, id: 1, map_id: 1, response_map: review_response_map) }&lt;br /&gt;
let(:response2) { build(:response, id: 2, map_id: 1, response_map: review_response_map) }&lt;br /&gt;
let(:submission_record) {build(:submission_record, id:1, team_id: 1, assignment_id: 1) }    #added for submission_record method call test.&lt;br /&gt;
let(:student_task) do&lt;br /&gt;
  StudentTask.new(&lt;br /&gt;
    participant: participant,&lt;br /&gt;
    assignment: participant.assignment,&lt;br /&gt;
    topic: participant.topic,&lt;br /&gt;
    current_stage: participant.current_stage,&lt;br /&gt;
    stage_deadline: (Time.parse(participant.stage_deadline) rescue Time.now + 1.year)&lt;br /&gt;
  )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Below are some of the functions tested&lt;br /&gt;
* Function: teamed_students - Write a test case to find teamed up students.&lt;br /&gt;
This method is an instance method, having a user passed to it. It return the list of students that the current user has teamed up. It does not consider the teammates that are from calibration assignments&lt;br /&gt;
The test cases described check for the following scenarios: &lt;br /&gt;
1. When not in any team returns empty&lt;br /&gt;
2. When assigned in a cource_team returns empty&lt;br /&gt;
3. When assigned in a assignment_team return the list of teammates&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 describe &amp;quot;#teamed_students&amp;quot; do&lt;br /&gt;
    context 'when not in any team' do&lt;br /&gt;
      it 'returns empty' do&lt;br /&gt;
        expect(StudentTask.teamed_students(user3)).to eq({})&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when assigned in a cource_team ' do&lt;br /&gt;
      it 'returns empty' do&lt;br /&gt;
        allow(user).to receive(:teams).and_return([course_team])&lt;br /&gt;
        expect(StudentTask.teamed_students(user)).to eq({})&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when assigned in a assignment_team ' do&lt;br /&gt;
      it 'returns empty' do&lt;br /&gt;
        allow(user).to receive(:teams).and_return([team])&lt;br /&gt;
        allow(AssignmentParticipant).to receive(:find_by).with(user_id: 1, parent_id: assignment.id).and_return(participant)&lt;br /&gt;
        allow(AssignmentParticipant).to receive(:find_by).with(user_id: 5, parent_id: assignment.id).and_return(participant2)&lt;br /&gt;
        allow(Assignment).to receive(:find_by).with(id: team.parent_id).and_return(assignment)&lt;br /&gt;
        # allow(Team).to receive(:find).with(team.id).and_return(team)&lt;br /&gt;
        expect(StudentTask.teamed_students(user)).to eq({assignment.course_id =&amp;gt; [user2.fullname]})&lt;br /&gt;
      end&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;
* Function: get_due_date_data - Write a test case to get the due dates of the assignment.&lt;br /&gt;
This method is an instance method, having an assignment and timeline_list list passed to it. The test cases described check for the following scenarios: &lt;br /&gt;
1. When an assignment passed to the method has no assignment attributes.&lt;br /&gt;
2. When an assignment passed to the method has some attributes but not the attribute due_at&lt;br /&gt;
3. When an assignment passed to the method has some attributes along with due_at&lt;br /&gt;
&lt;br /&gt;
due_at attribute is checked, upon which the timeline_list is populated with the updated_at and label values.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe &amp;quot;#get_due_date_data&amp;quot; do&lt;br /&gt;
    context 'when called with assignment having empty due dates' do&lt;br /&gt;
      it &amp;quot;return empty time_list array&amp;quot; do&lt;br /&gt;
        timeline_list = []&lt;br /&gt;
        StudentTask.get_due_date_data(assignment, timeline_list)&lt;br /&gt;
        expect(timeline_list).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when called with assignment having due date' do&lt;br /&gt;
      context 'and due_at value nil' do&lt;br /&gt;
        it &amp;quot;return empty time_list array&amp;quot; do&lt;br /&gt;
          allow(due_date).to receive(:deadline_type).and_return(deadline_type)&lt;br /&gt;
          timeline_list = []&lt;br /&gt;
          due_date.due_at=nil;&lt;br /&gt;
          assignment.due_dates = [due_date]&lt;br /&gt;
          StudentTask.get_due_date_data(assignment, timeline_list)&lt;br /&gt;
          expect(timeline_list).to eq([])&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      context 'and due_at value not nil' do&lt;br /&gt;
        it &amp;quot;return time_list array&amp;quot; do&lt;br /&gt;
          allow(due_date).to receive(:deadline_type).and_return(deadline_type)&lt;br /&gt;
          timeline_list = []&lt;br /&gt;
          assignment.due_dates = [due_date]&lt;br /&gt;
          StudentTask.get_due_date_data(assignment, timeline_list)&lt;br /&gt;
          expect(timeline_list).to eq([{&lt;br /&gt;
            :label=&amp;gt;(due_date.deadline_type.name + ' Deadline').humanize,&lt;br /&gt;
            :updated_at=&amp;gt;due_date.due_at.strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
          }])&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Function: get_peer_review_data - Write a test case to get the peer review data.&lt;br /&gt;
This method is an instance method, having an review and timeline_list list passed to it. The test cases described check for the following scenarios: &lt;br /&gt;
1. When no review response is mapped.&lt;br /&gt;
2. When review response is mapped.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe &amp;quot;#get_peer_review_data&amp;quot; do&lt;br /&gt;
    context 'when no review response mapped' do&lt;br /&gt;
      it 'returns empty' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        StudentTask.get_peer_review_data(user2,timeline_list)&lt;br /&gt;
        expect(timeline_list).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when mapped to review response map' do&lt;br /&gt;
      it 'returns timeline array' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        allow(ReviewResponseMap).to receive_message_chain(:where, :find_each).with(reviewer_id: 1).with(no_args).and_yield(review_response_map)&lt;br /&gt;
        allow(review_response_map).to receive(:id).and_return(1)&lt;br /&gt;
        allow(Response).to receive_message_chain(:where, :last).with(map_id: 1).with(no_args).and_return(response)&lt;br /&gt;
        allow(response).to receive(:round).and_return(1)&lt;br /&gt;
        allow(response).to receive(:updated_at).and_return(Time.new(2019))&lt;br /&gt;
        timevalue = Time.new(2019).strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
        expect(StudentTask.get_peer_review_data(1,timeline_list)).to eq([{:id=&amp;gt;1, :label=&amp;gt;&amp;quot;Round 1 peer review&amp;quot;, :updated_at=&amp;gt;timevalue}])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Function: get_author_feedback_data - Write a test case to get the feedback response&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe &amp;quot;#get_author_feedback_data&amp;quot; do&lt;br /&gt;
    context 'when no feedback response mapped' do&lt;br /&gt;
      it 'returns empty' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        StudentTask.get_author_feedback_data(user2,timeline_list)&lt;br /&gt;
        expect(timeline_list).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when mapped to feedback response map' do&lt;br /&gt;
      it 'returns timeline array' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        allow(FeedbackResponseMap).to receive_message_chain(:where, :find_each).with(reviewer_id: 1).with(no_args).and_yield(review_response_map)&lt;br /&gt;
        allow(review_response_map).to receive(:id).and_return(1)&lt;br /&gt;
        allow(Response).to receive_message_chain(:where, :last).with(map_id: 1).with(no_args).and_return(response)&lt;br /&gt;
        allow(response).to receive(:updated_at).and_return(Time.now)&lt;br /&gt;
        timevalue = Time.now.strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
        expect(StudentTask.get_author_feedback_data(1,timeline_list)).to eq([{:id=&amp;gt;1, :label=&amp;gt;&amp;quot;Author feedback&amp;quot;, :updated_at=&amp;gt;timevalue}])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Function: get_submission_data - Write a test case to import participants&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#get_submission_data' do&lt;br /&gt;
    context 'when no submission data mapped' do&lt;br /&gt;
      it 'returns nil' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        expect(StudentTask.get_submission_data(1,1,timeline_list)).to eq(nil)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when submission data mapped and not submit hyperlink or Remove hyperlink' do&lt;br /&gt;
      it 'returns timeline_list' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        allow(SubmissionRecord).to receive_message_chain(:where, :find_each).with(team_id: 1, assignment_id: 1).with(no_args).and_yield(submission_record)&lt;br /&gt;
        allow(submission_record).to receive(:operation).and_return('testing_label')&lt;br /&gt;
        allow(submission_record).to receive(:updated_at).and_return(Time.new(2019))&lt;br /&gt;
        timevalue = Time.new(2019).strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
        expect(StudentTask.get_submission_data(1,1,timeline_list)).to eq([{:label=&amp;gt;&amp;quot;Testing label&amp;quot;, :updated_at=&amp;gt;timevalue}])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when submission data mapped and operation is submit_hyperlink' do&lt;br /&gt;
      it 'returns timeline_list with link' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        allow(SubmissionRecord).to receive_message_chain(:where, :find_each).with(team_id: 1, assignment_id: 1).with(no_args).and_yield(submission_record)&lt;br /&gt;
        allow(submission_record).to receive(:operation).and_return('Submit Hyperlink')&lt;br /&gt;
        allow(submission_record).to receive(:updated_at).and_return(Time.new(2019))&lt;br /&gt;
        timevalue = Time.new(2019).strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
        expect(StudentTask.get_submission_data(1,1,timeline_list)).to eq([{:label=&amp;gt;&amp;quot;Submit hyperlink&amp;quot;, :updated_at=&amp;gt;timevalue, :link=&amp;gt;&amp;quot;www.wolfware.edu&amp;quot;}])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    context 'when submission data mapped and operation is Remove Hyperlink' do&lt;br /&gt;
      it 'returns timeline_list with link' do&lt;br /&gt;
        timeline_list=[]&lt;br /&gt;
        allow(SubmissionRecord).to receive_message_chain(:where, :find_each).with(team_id: 1, assignment_id: 1).with(no_args).and_yield(submission_record)&lt;br /&gt;
        allow(submission_record).to receive(:operation).and_return('Remove Hyperlink')&lt;br /&gt;
        timevalue = Time.new(2019).strftime('%a, %d %b %Y %H:%M')&lt;br /&gt;
        allow(submission_record).to receive(:updated_at).and_return(Time.new(2019))&lt;br /&gt;
        expect(StudentTask.get_submission_data(1,1,timeline_list)).to eq([{:label=&amp;gt;&amp;quot;Remove hyperlink&amp;quot;, :updated_at=&amp;gt;timevalue, :link=&amp;gt;&amp;quot;www.wolfware.edu&amp;quot;}])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
&lt;br /&gt;
Carmen Bentley,Mentor&lt;br /&gt;
&lt;br /&gt;
* Tushar Kundra,tkundra&lt;br /&gt;
&lt;br /&gt;
* Ram Chavali,ramlohith&lt;br /&gt;
&lt;br /&gt;
* Ayushi Rungta,Rungta1001&lt;br /&gt;
&lt;br /&gt;
=== Running Tests ===&lt;br /&gt;
&lt;br /&gt;
What we need to do is to set up the environment and complete the 'student_task.rb' and 'student_task_spec.rb' to increase the path coverage from only 43.0% with 43 lines covered and 57 lines missed to above 90%.&lt;br /&gt;
&lt;br /&gt;
You can run RSpec tests by executing the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rspec spec/models/student_task_spec.rb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that, you can see the detailed coverage information by opening this file in your Expertiza folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
coverage/index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Our work====&lt;br /&gt;
The code we created can be found below. We have also linked the video of our tests running with coverage to showcase the work we have done.&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/1549 Pull request]&lt;br /&gt;
*[https://drive.google.com/file/d/1O-1k3mqo1yRMp0yxgTIuM3P5cegB5DCy/view?usp=sharing Video of tests running]&lt;br /&gt;
&lt;br /&gt;
Test Coverage:  [http://wiki.expertiza.ncsu.edu/images/b/b0/E1955before.png Initial]  [http://wiki.expertiza.ncsu.edu/images/0/05/E1955after.png Final]&lt;br /&gt;
&lt;br /&gt;
== Running the Project Locally ==&lt;br /&gt;
The project could be run locally by cloning the Github repository [https://github.com/tusharkundra/expertiza Expertiza] and then running the following commands sequentially.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bundle install&lt;br /&gt;
rake db:create:all&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rails s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Issues/Erros During Testing ==&lt;br /&gt;
* While creating the test for &amp;quot;reviews_given?&amp;quot;, given below, it seems the function is returning string value instead of boolean value as &amp;quot;j.class.to_s[/Review/]&amp;quot; gives a string when the class of &amp;quot;j&amp;quot; starts with &amp;quot;Review&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def reviews_given?&lt;br /&gt;
    response_maps.inject(nil) {|i, j| i || (j.response &amp;amp;&amp;amp; j.class.to_s[/Review/]) }&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125230</id>
		<title>CSC/ECE 517 Fall 2019 - E1955.Write unit tests for student task.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125230"/>
		<updated>2019-10-24T04:59:53Z</updated>

		<summary type="html">&lt;p&gt;Arungta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the Expertiza based OSS project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza] is an open source project based on [https://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
This project in particular intends that the students collaborate with each other and work on making enhancements to the code base by applying the concepts of Rails,RSpec, DRY code,Test driven development etc. This provides an opportunity for students to contribute to an open source project and learn further about software deployment etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About RSpec Ruby Code==&lt;br /&gt;
&lt;br /&gt;
RSpec is a unit test framework for the Ruby programming language. RSpec is different than traditional xUnit frameworks like JUnit because RSpec is a Behavior driven development tool. What this means is that, tests written in RSpec focus on the &amp;quot;behavior&amp;quot; of an application being tested. RSpec does not put emphasis on, how the application works but instead on how it behaves, in other words, what the application actually does.Each RSpec file contains one or more tests. Each test ensures if a particular feature of our website is working properly.The output of an RSpec run will tell you exactly what features aren't working. The benefit is that tested code is unlikely to break unnoticed.The tests are run every time someone makes, or updates, a [https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests Pull Request].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Description of the current project ==&lt;br /&gt;
&lt;br /&gt;
The following is an Expertiza based OSS project which deals primarily with the student_task.rb and student_task_spec.rb. It focuses on writing RSpec unit tests for the code affected or added.The goal of this project is to attempt to add suffivient unit tests to this part of the application and increase its path coverage.&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
&lt;br /&gt;
Carmen Bentley,Mentor&lt;br /&gt;
&lt;br /&gt;
* Tushar Kundra,tusharkundra&lt;br /&gt;
&lt;br /&gt;
* Ram Chavali,ramlohith&lt;br /&gt;
&lt;br /&gt;
* Ayushi Rungta,Rungta1001&lt;br /&gt;
&lt;br /&gt;
=== Files modified in current project ===&lt;br /&gt;
&lt;br /&gt;
A model and a rspec file were modified for this project namely:&lt;br /&gt;
&lt;br /&gt;
* student_task.rb&lt;br /&gt;
&lt;br /&gt;
* student_task_spec.rb&lt;br /&gt;
&lt;br /&gt;
=== Running Tests ===&lt;br /&gt;
&lt;br /&gt;
What we need to do is to set up the environment and complete the 'student_task.rb' and 'student_task_spec.rb' to increase the path coverage from only 43.0% with 43 lines covered and 57 lines missed to above 90%.&lt;br /&gt;
&lt;br /&gt;
You can run RSpec tests by executing the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rspec spec/models/student_task_spec.rb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that, you can see the detailed coverage information by opening this file in your Expertiza folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
coverage/index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
The following tasks were accomplished in this project:&lt;br /&gt;
&lt;br /&gt;
* Complete the insufficient unit tests for student_task.rb. &lt;br /&gt;
&lt;br /&gt;
* Increase path coverage from only 43.0% with 43 lines covered and 57 lines missed to above 90%.&lt;br /&gt;
&lt;br /&gt;
* Cover edge cases.&lt;br /&gt;
&lt;br /&gt;
* High branch coverage to be achieved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the Project Locally ==&lt;br /&gt;
The project could be run locally by cloning the Github repository [https://github.com/tusharkundra/expertiza Expertiza] and then running the following commands sequentially.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bundle install&lt;br /&gt;
rake db:create:all&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rails s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125229</id>
		<title>CSC/ECE 517 Fall 2019 - E1955.Write unit tests for student task.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125229"/>
		<updated>2019-10-24T04:55:38Z</updated>

		<summary type="html">&lt;p&gt;Arungta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the Expertiza based OSS project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza] is an open source project based on [https://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
This project in particular intends that the students collaborate with each other and work on making enhancements to the code base by applying the concepts of Rails,RSpec, DRY code,Test driven development etc. This provides an opportunity for students to contribute to an open source project and learn further about software deployment etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Description of the current project ==&lt;br /&gt;
&lt;br /&gt;
The following is an Expertiza based OSS project which deals primarily with the student_task.rb and student_task_spec.rb. It focuses on writing RSpec unit tests for the code affected or added.The goal of this project is to attempt to add suffivient unit tests to this part of the application and increase its path coverage.&lt;br /&gt;
&lt;br /&gt;
=== Team ===&lt;br /&gt;
&lt;br /&gt;
Carmen Bentley,Mentor&lt;br /&gt;
&lt;br /&gt;
* Tushar Kundra,tusharkundra&lt;br /&gt;
&lt;br /&gt;
* Ram Chavali,ramlohith&lt;br /&gt;
&lt;br /&gt;
* Ayushi Rungta,Rungta1001&lt;br /&gt;
&lt;br /&gt;
=== Files modified in current project ===&lt;br /&gt;
&lt;br /&gt;
A model and a rspec file were modified for this project namely:&lt;br /&gt;
&lt;br /&gt;
* student_task.rb&lt;br /&gt;
&lt;br /&gt;
* student_task_spec.rb&lt;br /&gt;
&lt;br /&gt;
=== Running Tests ===&lt;br /&gt;
&lt;br /&gt;
What we need to do is to set up the environment and complete the 'student_task.rb' and 'student_task_spec.rb' to increase the path coverage from only 43.0% with 43 lines covered and 57 lines missed to above 90%.&lt;br /&gt;
&lt;br /&gt;
You can run RSpec tests by executing the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rspec spec/models/student_task_spec.rb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that, you can see the detailed coverage information by opening this file in your Expertiza folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
coverage/index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
The following tasks were accomplished in this project:&lt;br /&gt;
&lt;br /&gt;
* Complete the insufficient unit tests for student_task.rb. &lt;br /&gt;
&lt;br /&gt;
* Increase path coverage from only 43.0% with 43 lines covered and 57 lines missed to above 90%.&lt;br /&gt;
&lt;br /&gt;
* Cover edge cases.&lt;br /&gt;
&lt;br /&gt;
* High branch coverage to be achieved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About RSpec Ruby Code==&lt;br /&gt;
&lt;br /&gt;
RSpec is a unit test framework for the Ruby programming language. RSpec is different than traditional xUnit frameworks like JUnit because RSpec is a Behavior driven development tool. What this means is that, tests written in RSpec focus on the &amp;quot;behavior&amp;quot; of an application being tested. RSpec does not put emphasis on, how the application works but instead on how it behaves, in other words, what the application actually does.Each RSpec file contains one or more tests. Each test ensures if a particular feature of our website is working properly.The output of an RSpec run will tell you exactly what features aren't working. The benefit is that tested code is unlikely to break unnoticed.The tests are run every time someone makes, or updates, a [https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests Pull Request].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the Project Locally ==&lt;br /&gt;
The project could be run locally by cloning the Github repository [https://github.com/tusharkundra/expertiza Expertiza] and then running the following commands sequentially.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bundle install&lt;br /&gt;
rake db:create:all&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rails s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125228</id>
		<title>CSC/ECE 517 Fall 2019 - E1955.Write unit tests for student task.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125228"/>
		<updated>2019-10-24T04:37:44Z</updated>

		<summary type="html">&lt;p&gt;Arungta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the Expertiza based OSS project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza] is an open source project based on [https://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
This project in particular intends that the students collaborate with each other and work on making enhancements to the code base by applying the concepts of Rails,RSpec, DRY code,Test driven development etc. This provides an opportunity for students to contribute to an open source project and learn further about software deployment etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Description of the current project ==&lt;br /&gt;
&lt;br /&gt;
The following is an Expertiza based OSS project which deals primarily with the student_task.rb and student_task_spec.rb. It focuses on writing RSpec unit tests for the code affected or added.The goal of this project is to attempt to add suffivient unit tests to this part of the application and increase its path coverage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Files modified in current project ==&lt;br /&gt;
&lt;br /&gt;
A model and a rspec file were modified for this project namely:&lt;br /&gt;
&lt;br /&gt;
1. student_task.rb&lt;br /&gt;
&lt;br /&gt;
2. student_task_spec.rb&lt;br /&gt;
&lt;br /&gt;
'''student_task.rb'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
The following tasks were accomplished in this project:&lt;br /&gt;
&lt;br /&gt;
1- Complete the insufficient unit tests for student_task.rb. &lt;br /&gt;
&lt;br /&gt;
2- Increase path coverage from only 43.0% with 43 lines covered and 57 lines missed to above 90%.&lt;br /&gt;
&lt;br /&gt;
3- Cover edge cases.&lt;br /&gt;
&lt;br /&gt;
4- High branch coverage to be achieved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About RSpec Ruby Code==&lt;br /&gt;
&lt;br /&gt;
RSpec is a unit test framework for the Ruby programming language. RSpec is different than traditional xUnit frameworks like JUnit because RSpec is a Behavior driven development tool. What this means is that, tests written in RSpec focus on the &amp;quot;behavior&amp;quot; of an application being tested. RSpec does not put emphasis on, how the application works but instead on how it behaves, in other words, what the application actually does.Each RSpec file contains one or more tests. Each test ensures if a particular feature of our website is working properly.The output of an RSpec run will tell you exactly what features aren't working. The benefit is that tested code is unlikely to break unnoticed.The tests are run every time someone makes, or updates, a [https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests Pull Request].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the Project Locally ==&lt;br /&gt;
The project could be run locally by cloning the Github repository [https://github.com/tusharkundra/expertiza Expertiza] and then running the following commands sequentially.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
bundle install&lt;br /&gt;
rake db:create:all&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rails s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125227</id>
		<title>CSC/ECE 517 Fall 2019 - E1955.Write unit tests for student task.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125227"/>
		<updated>2019-10-24T04:35:33Z</updated>

		<summary type="html">&lt;p&gt;Arungta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the Expertiza based OSS project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza] is an open source project based on [https://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
This project in particular intends that the students collaborate with each other and work on making enhancements to the code base by applying the concepts of Rails,RSpec, DRY code,Test driven development etc. This provides an opportunity for students to contribute to an open source project and learn further about software deployment etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Description of the current project ==&lt;br /&gt;
&lt;br /&gt;
The following is an Expertiza based OSS project which deals primarily with the student_task.rb and student_task_spec.rb. It focuses on writing RSpec unit tests for the code affected or added.The goal of this project is to attempt to add suffivient unit tests to this part of the application and increase its path coverage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Files modified in current project ==&lt;br /&gt;
&lt;br /&gt;
A model and a rspec file were modified for this project namely:&lt;br /&gt;
&lt;br /&gt;
1. student_task.rb&lt;br /&gt;
&lt;br /&gt;
2. student_task_spec.rb&lt;br /&gt;
&lt;br /&gt;
'''student_task.rb'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
The following tasks were accomplished in this project:&lt;br /&gt;
&lt;br /&gt;
1- Complete the insufficient unit tests for student_task.rb. &lt;br /&gt;
&lt;br /&gt;
2- Increase path coverage from only 43.0% with 43 lines covered and 57 lines missed to above 90%.&lt;br /&gt;
&lt;br /&gt;
3- Cover edge cases.&lt;br /&gt;
&lt;br /&gt;
4- High branch coverage to be achieved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About RSpec Ruby Code==&lt;br /&gt;
&lt;br /&gt;
RSpec is a unit test framework for the Ruby programming language. RSpec is different than traditional xUnit frameworks like JUnit because RSpec is a Behavior driven development tool. What this means is that, tests written in RSpec focus on the &amp;quot;behavior&amp;quot; of an application being tested. RSpec does not put emphasis on, how the application works but instead on how it behaves, in other words, what the application actually does.Each RSpec file contains one or more tests. Each test ensures if a particular feature of our website is working properly.The output of an RSpec run will tell you exactly what features aren't working. The benefit is that tested code is unlikely to break unnoticed.The tests are run every time someone makes, or updates, a [https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests Pull Request].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the Project Locally ==&lt;br /&gt;
The project could be run locally by cloning the Github repository [https://github.com/tusharkundra/expertiza Expertiza] and then running the following commands sequentially.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
bundle install&lt;br /&gt;
rake db:create:all&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rails s&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125226</id>
		<title>CSC/ECE 517 Fall 2019 - E1955.Write unit tests for student task.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125226"/>
		<updated>2019-10-24T04:34:35Z</updated>

		<summary type="html">&lt;p&gt;Arungta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the Expertiza based OSS project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza] is an open source project based on [https://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
'''Motivation'''&lt;br /&gt;
&lt;br /&gt;
This project in particular intends that the students collaborate with each other and work on making enhancements to the code base by applying the concepts of Rails,RSpec, DRY code,Test driven development etc. This provides an opportunity for students to contribute to an open source project and learn further about software deployment etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Description of the current project ==&lt;br /&gt;
&lt;br /&gt;
The following is an Expertiza based OSS project which deals primarily with the student_task.rb and student_task_spec.rb. It focuses on writing RSpec unit tests for the code affected or added.The goal of this project is to attempt to add suffivient unit tests to this part of the application and increase its path coverage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Files modified in current project ==&lt;br /&gt;
&lt;br /&gt;
A model and a rspec file were modified for this project namely:&lt;br /&gt;
&lt;br /&gt;
1. student_task.rb&lt;br /&gt;
&lt;br /&gt;
2. student_task_spec.rb&lt;br /&gt;
&lt;br /&gt;
'''student_task.rb'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
The following tasks were accomplished in this project:&lt;br /&gt;
&lt;br /&gt;
1- Complete the insufficient unit tests for student_task.rb. &lt;br /&gt;
&lt;br /&gt;
2- Increase path coverage from only 43.0% with 43 lines covered and 57 lines missed to above 90%.&lt;br /&gt;
&lt;br /&gt;
3- Cover edge cases.&lt;br /&gt;
&lt;br /&gt;
4- High branch coverage to be achieved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About RSpec Ruby Code==&lt;br /&gt;
&lt;br /&gt;
RSpec is a unit test framework for the Ruby programming language. RSpec is different than traditional xUnit frameworks like JUnit because RSpec is a Behavior driven development tool. What this means is that, tests written in RSpec focus on the &amp;quot;behavior&amp;quot; of an application being tested. RSpec does not put emphasis on, how the application works but instead on how it behaves, in other words, what the application actually does.Each RSpec file contains one or more tests. Each test ensures if a particular feature of our website is working properly.The output of an RSpec run will tell you exactly what features aren't working. The benefit is that tested code is unlikely to break unnoticed.The tests are run every time someone makes, or updates, a [https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests Pull Request].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the Project Locally ==&lt;br /&gt;
The project could be run locally by cloning the Github repository [https://github.com/tusharkundra/expertiza Expertiza] and then running the following commands sequentially.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
bundle install&lt;br /&gt;
rake db:create:all&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rails s&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125225</id>
		<title>CSC/ECE 517 Fall 2019 - E1955.Write unit tests for student task.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019_-_E1955.Write_unit_tests_for_student_task.rb&amp;diff=125225"/>
		<updated>2019-10-24T04:24:12Z</updated>

		<summary type="html">&lt;p&gt;Arungta: Created page with &amp;quot;This page provides a description of the Expertiza based OSS project.   == About Expertiza ==  [https://expertiza.ncsu.edu/ Expertiza] is an open source project based on [https://...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides a description of the Expertiza based OSS project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza] is an open source project based on [https://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Expertiza supports submission across various document types, including the URLs and wiki pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Description of the current project ==&lt;br /&gt;
&lt;br /&gt;
The following is an Expertiza based OSS project which deals primarily with the student_task.rb and student_task_spec.rb. It focuses on writing RSpec unit tests for the code affected or added.The goal of this project is to attempt to add suffivient unit tests to this part of the application and increase its path coverage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Files modified in current project ==&lt;br /&gt;
&lt;br /&gt;
A model and a rspec file were modified for this project namely:&lt;br /&gt;
&lt;br /&gt;
1. student_task.rb&lt;br /&gt;
&lt;br /&gt;
2. student_task_spec.rb&lt;br /&gt;
&lt;br /&gt;
'''student_task.rb'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
The following tasks were accomplished in this project:&lt;br /&gt;
&lt;br /&gt;
1- Complete the insufficient unit tests for student_task.rb. &lt;br /&gt;
&lt;br /&gt;
2- Increase path coverage from only 43.0% with 43 lines covered and 57 lines missed to above 90%.&lt;br /&gt;
&lt;br /&gt;
3- Cover edge cases.&lt;br /&gt;
&lt;br /&gt;
4- High branch coverage to be achieved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About RSpec Ruby Code==&lt;br /&gt;
&lt;br /&gt;
RSpec is a unit test framework for the Ruby programming language. RSpec is different than traditional xUnit frameworks like JUnit because RSpec is a Behavior driven development tool. What this means is that, tests written in RSpec focus on the &amp;quot;behavior&amp;quot; of an application being tested. RSpec does not put emphasis on, how the application works but instead on how it behaves, in other words, what the application actually does.Each RSpec file contains one or more tests. Each test ensures if a particular feature of our website is working properly.The output of an RSpec run will tell you exactly what features aren't working. The benefit is that tested code is unlikely to break unnoticed.The tests are run every time someone makes, or updates, a [https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests Pull Request].&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019&amp;diff=125224</id>
		<title>CSC/ECE 517 Fall 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2019&amp;diff=125224"/>
		<updated>2019-10-24T03:03:36Z</updated>

		<summary type="html">&lt;p&gt;Arungta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2019 - Project E1947. Refactor quiz_questionnaire_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - Project E1965. Review report should link to the usual view for reviews]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1972. OSS project J. Skellington: Accessing Assignment Rubrics]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1961. Email notification to reviewers and instructors]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1971. OSS project Finklestein: Instructors &amp;amp; Institutions]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2019 - E1955.Write  unit tests for student_task.rb]]&lt;/div&gt;</summary>
		<author><name>Arungta</name></author>
	</entry>
</feed>