<?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=Jzhang97</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=Jzhang97"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Jzhang97"/>
	<updated>2026-09-16T11:59:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119188</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119188"/>
		<updated>2018-11-10T00:50:39Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: /* Memeber of Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memebers of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==File Involvement==&lt;br /&gt;
1.app/models/assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
2.spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. two test cases for method &amp;quot;include?&amp;quot;: When the team includes a given participant and When the team doesn't include a given participant&lt;br /&gt;
&lt;br /&gt;
2. one test case for method &amp;quot;parent_model&amp;quot;: It returns &amp;quot;Assignment&amp;quot; when the method is called.&lt;br /&gt;
&lt;br /&gt;
3. two test cases for method &amp;quot;self.parent_model(id)&amp;quot;: When it's given a correct id and When it's given an incorrect id.&lt;br /&gt;
&lt;br /&gt;
4. one test case for method &amp;quot;fullname&amp;quot;: When the participant has an full name.&lt;br /&gt;
&lt;br /&gt;
5. one test case for method &amp;quot;review_map_type&amp;quot;: It returns ReviewResponseMap when the method is called.&lt;br /&gt;
&lt;br /&gt;
6. one test case for method &amp;quot;self.prototype&amp;quot;: It returns an new instance of AssignmentTeam when the method is called.&lt;br /&gt;
&lt;br /&gt;
7. two test cases for method &amp;quot;assign_reviewer(reviewer)&amp;quot;: When the team has an assignment and When the assignment record can not be found.&lt;br /&gt;
&lt;br /&gt;
8. one test case for method &amp;quot;reviewd_by?&amp;quot;: When it gets correct reviewer and returns true as an result.&lt;br /&gt;
&lt;br /&gt;
9. one test case for method &amp;quot; topic&amp;quot;: When it returns the correct id.&lt;br /&gt;
&lt;br /&gt;
10. three test cases for method &amp;quot;has_submissions?&amp;quot;: When the team doesn't submit any file or link, when team submits a link instead of files and &lt;br /&gt;
when the team submits some files.&lt;br /&gt;
&lt;br /&gt;
11. two test cases for method &amp;quot;participants&amp;quot;: When no participants in this team and When adding some participants and get all the participants.&lt;br /&gt;
&lt;br /&gt;
12. one test case for method &amp;quot;add_participant&amp;quot;: When adding an participant, it will return an instance of AssignmentParticipant.&lt;br /&gt;
&lt;br /&gt;
13. two test cases for method &amp;quot; delete and destroy&amp;quot;: Testing delete and destory.&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
There is screenshot of the coverage page.&lt;br /&gt;
[https://drive.google.com/open?id=12jHYbHoL_MpjnM1tdy52DVjqasGmnHie]&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119187</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119187"/>
		<updated>2018-11-10T00:50:17Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==File Involvement==&lt;br /&gt;
1.app/models/assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
2.spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. two test cases for method &amp;quot;include?&amp;quot;: When the team includes a given participant and When the team doesn't include a given participant&lt;br /&gt;
&lt;br /&gt;
2. one test case for method &amp;quot;parent_model&amp;quot;: It returns &amp;quot;Assignment&amp;quot; when the method is called.&lt;br /&gt;
&lt;br /&gt;
3. two test cases for method &amp;quot;self.parent_model(id)&amp;quot;: When it's given a correct id and When it's given an incorrect id.&lt;br /&gt;
&lt;br /&gt;
4. one test case for method &amp;quot;fullname&amp;quot;: When the participant has an full name.&lt;br /&gt;
&lt;br /&gt;
5. one test case for method &amp;quot;review_map_type&amp;quot;: It returns ReviewResponseMap when the method is called.&lt;br /&gt;
&lt;br /&gt;
6. one test case for method &amp;quot;self.prototype&amp;quot;: It returns an new instance of AssignmentTeam when the method is called.&lt;br /&gt;
&lt;br /&gt;
7. two test cases for method &amp;quot;assign_reviewer(reviewer)&amp;quot;: When the team has an assignment and When the assignment record can not be found.&lt;br /&gt;
&lt;br /&gt;
8. one test case for method &amp;quot;reviewd_by?&amp;quot;: When it gets correct reviewer and returns true as an result.&lt;br /&gt;
&lt;br /&gt;
9. one test case for method &amp;quot; topic&amp;quot;: When it returns the correct id.&lt;br /&gt;
&lt;br /&gt;
10. three test cases for method &amp;quot;has_submissions?&amp;quot;: When the team doesn't submit any file or link, when team submits a link instead of files and &lt;br /&gt;
when the team submits some files.&lt;br /&gt;
&lt;br /&gt;
11. two test cases for method &amp;quot;participants&amp;quot;: When no participants in this team and When adding some participants and get all the participants.&lt;br /&gt;
&lt;br /&gt;
12. one test case for method &amp;quot;add_participant&amp;quot;: When adding an participant, it will return an instance of AssignmentParticipant.&lt;br /&gt;
&lt;br /&gt;
13. two test cases for method &amp;quot; delete and destroy&amp;quot;: Testing delete and destory.&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
There is screenshot of the coverage page.&lt;br /&gt;
[https://drive.google.com/open?id=12jHYbHoL_MpjnM1tdy52DVjqasGmnHie]&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119186</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119186"/>
		<updated>2018-11-10T00:50:05Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==File Involvement==&lt;br /&gt;
1.app/models/assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
2.spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. two test cases for method &amp;quot;include?&amp;quot;: When the team includes a given participant and When the team doesn't include a given participant&lt;br /&gt;
&lt;br /&gt;
2. one test case for method &amp;quot;parent_model&amp;quot;: It returns &amp;quot;Assignment&amp;quot; when the method is called.&lt;br /&gt;
&lt;br /&gt;
3. two test cases for method &amp;quot;self.parent_model(id)&amp;quot;: When it's given a correct id and When it's given an incorrect id.&lt;br /&gt;
&lt;br /&gt;
4. one test case for method &amp;quot;fullname&amp;quot;: When the participant has an full name.&lt;br /&gt;
&lt;br /&gt;
5. one test case for method &amp;quot;review_map_type&amp;quot;: It returns ReviewResponseMap when the method is called.&lt;br /&gt;
&lt;br /&gt;
6. one test case for method &amp;quot;self.prototype&amp;quot;: It returns an new instance of AssignmentTeam when the method is called.&lt;br /&gt;
&lt;br /&gt;
7. two test cases for method &amp;quot;assign_reviewer(reviewer)&amp;quot;: When the team has an assignment and When the assignment record can not be found.&lt;br /&gt;
&lt;br /&gt;
8. one test case for method &amp;quot;reviewd_by?&amp;quot;: When it gets correct reviewer and returns true as an result.&lt;br /&gt;
&lt;br /&gt;
9. one test case for method &amp;quot; topic&amp;quot;: When it returns the correct id.&lt;br /&gt;
&lt;br /&gt;
10. three test cases for method &amp;quot;has_submissions?&amp;quot;: When the team doesn't submit any file or link, when team submits a link instead of files and &lt;br /&gt;
    when the team submits some files.&lt;br /&gt;
&lt;br /&gt;
11. two test cases for method &amp;quot;participants&amp;quot;: When no participants in this team and When adding some participants and get all the participants.&lt;br /&gt;
&lt;br /&gt;
12. one test case for method &amp;quot;add_participant&amp;quot;: When adding an participant, it will return an instance of AssignmentParticipant.&lt;br /&gt;
&lt;br /&gt;
13. two test cases for method &amp;quot; delete and destroy&amp;quot;: Testing delete and destory.&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
There is screenshot of the coverage page.&lt;br /&gt;
[https://drive.google.com/open?id=12jHYbHoL_MpjnM1tdy52DVjqasGmnHie]&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119185</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119185"/>
		<updated>2018-11-10T00:49:18Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==File Involvement==&lt;br /&gt;
1.app/models/assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
2.spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. two test cases for method &amp;quot;include?&amp;quot;: When the team includes a given participant and When the team doesn't include a given participant&lt;br /&gt;
&lt;br /&gt;
2. one test case for method &amp;quot;parent_model&amp;quot;: It returns &amp;quot;Assignment&amp;quot; when the method is called.&lt;br /&gt;
&lt;br /&gt;
3. two test cases for method &amp;quot;self.parent_model(id)&amp;quot;: When it's given a correct id and When it's given an incorrect id.&lt;br /&gt;
&lt;br /&gt;
4. one test case for method &amp;quot;fullname&amp;quot;: When the participant has an full name.&lt;br /&gt;
&lt;br /&gt;
5. one test case for method &amp;quot;review_map_type&amp;quot;: It returns ReviewResponseMap when the method is called.&lt;br /&gt;
&lt;br /&gt;
6. one test case for method &amp;quot;self.prototype&amp;quot;: It returns an new instance of AssignmentTeam when the method is called.&lt;br /&gt;
&lt;br /&gt;
7. two test cases for method &amp;quot;assign_reviewer(reviewer)&amp;quot;: When the team has an assignment and When the assignment record can not be found.&lt;br /&gt;
&lt;br /&gt;
8. one test case for method &amp;quot;reviewd_by?&amp;quot;: When it gets correct reviewer and returns true as an result.&lt;br /&gt;
&lt;br /&gt;
9. one test case for method &amp;quot; topic&amp;quot;: When it returns the correct id.&lt;br /&gt;
&lt;br /&gt;
10. three test cases for method &amp;quot;has_submissions?&amp;quot;: When the team doesn't submit any file or link, when team submits a link instead of files and when the team submits some files. Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
11. two test cases for method &amp;quot;participants&amp;quot;: When no participants in this team and When adding some participants and get all the participants.&lt;br /&gt;
&lt;br /&gt;
12. one test case for method &amp;quot;add_participant&amp;quot;: When adding an participant, it will return an instance of AssignmentParticipant.&lt;br /&gt;
&lt;br /&gt;
13. two test cases for method &amp;quot; delete and destroy&amp;quot;: Testing delete and destory.&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
There is screenshot of the coverage page.&lt;br /&gt;
[https://drive.google.com/open?id=12jHYbHoL_MpjnM1tdy52DVjqasGmnHie]&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119184</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119184"/>
		<updated>2018-11-10T00:48:52Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==File Involvement==&lt;br /&gt;
1.app/models/assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
2.spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. two test cases for method &amp;quot;include?&amp;quot;: When the team includes a given participant and When the team doesn't include a given participant&lt;br /&gt;
&lt;br /&gt;
2. one test case for method &amp;quot;parent_model&amp;quot;: It returns &amp;quot;Assignment&amp;quot; when the method is called.&lt;br /&gt;
&lt;br /&gt;
3. two test cases for method &amp;quot;self.parent_model(id)&amp;quot;: When it's given a correct id and When it's given an incorrect id.&lt;br /&gt;
&lt;br /&gt;
4. one test case for method &amp;quot;fullname&amp;quot;: When the participant has an full name.&lt;br /&gt;
&lt;br /&gt;
5. one test case for method &amp;quot;review_map_type&amp;quot;: It returns ReviewResponseMap when the method is called.&lt;br /&gt;
&lt;br /&gt;
6. one test case for method &amp;quot;self.prototype&amp;quot;: It returns an new instance of AssignmentTeam when the method is called.&lt;br /&gt;
&lt;br /&gt;
7. two test cases for method &amp;quot;assign_reviewer(reviewer)&amp;quot;: When the team has an assignment and When the assignment record can not be found.&lt;br /&gt;
&lt;br /&gt;
8. one test case for method &amp;quot;reviewd_by?&amp;quot;: When it gets correct reviewer and returns true as an result.&lt;br /&gt;
&lt;br /&gt;
9. one test case for method &amp;quot; topic&amp;quot;: When it returns the correct id.&lt;br /&gt;
&lt;br /&gt;
10. three test cases for method &amp;quot;has_submissions?&amp;quot;: When the team doesn't submit any file or link, when team submits a link instead of files and   &lt;br /&gt;
    when the team submits some files. Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
11. two test cases for method &amp;quot;participants&amp;quot;: When no participants in this team and When adding some participants and get all the participants.&lt;br /&gt;
&lt;br /&gt;
12. one test case for method &amp;quot;add_participant&amp;quot;: When adding an participant, it will return an instance of AssignmentParticipant.&lt;br /&gt;
&lt;br /&gt;
13. two test cases for method &amp;quot; delete and destroy&amp;quot;: Testing delete and destory.&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
There is screenshot of the coverage page.&lt;br /&gt;
[https://drive.google.com/open?id=12jHYbHoL_MpjnM1tdy52DVjqasGmnHie]&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119183</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119183"/>
		<updated>2018-11-10T00:48:19Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==File Involvement==&lt;br /&gt;
1.app/models/assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
2.spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. two test cases for method &amp;quot;include?&amp;quot;: When the team includes a given participant and When the team doesn't include a given participant&lt;br /&gt;
&lt;br /&gt;
2. one test case for method &amp;quot;parent_model&amp;quot;: It returns &amp;quot;Assignment&amp;quot; when the method is called.&lt;br /&gt;
&lt;br /&gt;
3. two test cases for method &amp;quot;self.parent_model(id)&amp;quot;: When it's given a correct id and When it's given an incorrect id.&lt;br /&gt;
&lt;br /&gt;
4. one test case for method &amp;quot;fullname&amp;quot;: When the participant has an full name.&lt;br /&gt;
&lt;br /&gt;
5. one test case for method &amp;quot;review_map_type&amp;quot;: It returns ReviewResponseMap when the method is called.&lt;br /&gt;
&lt;br /&gt;
6. one test case for method &amp;quot;self.prototype&amp;quot;: It returns an new instance of AssignmentTeam when the method is called.&lt;br /&gt;
&lt;br /&gt;
7. two test cases for method &amp;quot;assign_reviewer(reviewer)&amp;quot;: When the team has an assignment and When the assignment record can not be found.&lt;br /&gt;
&lt;br /&gt;
8. one test case for method &amp;quot;reviewd_by?&amp;quot;: When it gets correct reviewer and returns true as an result.&lt;br /&gt;
&lt;br /&gt;
9. one test case for method &amp;quot; topic&amp;quot;: When it returns the correct id.&lt;br /&gt;
&lt;br /&gt;
10. three test cases for method &amp;quot;has_submissions?&amp;quot;: When the team doesn't submit any file or link, when team submits a link instead of files and when the team submits some files. Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
11. two test cases for method &amp;quot;participants&amp;quot;: When no participants in this team and When adding some participants and get all the participants.&lt;br /&gt;
&lt;br /&gt;
12. one test case for method &amp;quot;add_participant&amp;quot;: When adding an participant, it will return an instance of AssignmentParticipant.&lt;br /&gt;
&lt;br /&gt;
13. two test cases for method &amp;quot; delete and destroy&amp;quot;: Testing delete and destory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
There is screenshot of the coverage page.&lt;br /&gt;
[https://drive.google.com/open?id=12jHYbHoL_MpjnM1tdy52DVjqasGmnHie]&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119182</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119182"/>
		<updated>2018-11-10T00:42:49Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==File Involvement==&lt;br /&gt;
1.app/models/assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
2.spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. two test cases for method &amp;quot;include?&amp;quot;: When the team includes a given participant and When the team doesn't include a given participant&lt;br /&gt;
&lt;br /&gt;
2. one test case for method &amp;quot;parent_model&amp;quot;: It returns &amp;quot;Assignment&amp;quot; when the method is called.&lt;br /&gt;
&lt;br /&gt;
3. two test cases for method &amp;quot;self.parent_model(id)&amp;quot;: When it's given a correct id and When it's given an incorrect id.&lt;br /&gt;
&lt;br /&gt;
4. one test case for method &amp;quot;fullname&amp;quot;: When the participant has an full name.&lt;br /&gt;
&lt;br /&gt;
5. one test case for method &amp;quot;review_map_type&amp;quot;: It returns ReviewResponseMap when the method is called.&lt;br /&gt;
&lt;br /&gt;
6. one test case for method &amp;quot;self.prototype&amp;quot;: It returns an new instance of AssignmentTeam when the method is called.&lt;br /&gt;
&lt;br /&gt;
7. two test cases for method &amp;quot;assign_reviewer(reviewer)&amp;quot;: When the team has an assignment and When the assignment record can not be found.&lt;br /&gt;
&lt;br /&gt;
8. one test case for method &amp;quot;reviewd_by?&amp;quot;: When it gets correct reviewer and returns true as an result.&lt;br /&gt;
&lt;br /&gt;
9. one test case for method &amp;quot; topic&amp;quot;: When it returns the correct id.&lt;br /&gt;
&lt;br /&gt;
10. three test cases for method &amp;quot;has_submissions?&amp;quot;: When the team doesn't submit any file or link, when team submits a link instead of files and when the team submits some files. Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
11. two test cases for method &amp;quot;participants&amp;quot;: When no participants in this team and When adding some participants and get all the participants.&lt;br /&gt;
&lt;br /&gt;
12. one test case for method &amp;quot;add_participant&amp;quot;: When adding an participant, it will return an instance of AssignmentParticipant.&lt;br /&gt;
&lt;br /&gt;
13. two test cases for method &amp;quot; delete and destroy&amp;quot;: Testing delete and destory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
There is screenshot of the coverage page.&lt;br /&gt;
[[File:screenshot.jpg]]&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119180</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119180"/>
		<updated>2018-11-10T00:33:38Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==File Involvement==&lt;br /&gt;
1.app/models/assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
2.spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. two test cases for method &amp;quot;include?&amp;quot;: When the team includes a given participant and When the team doesn't include a given participant&lt;br /&gt;
&lt;br /&gt;
2. one test case for method &amp;quot;parent_model&amp;quot;: It returns &amp;quot;Assignment&amp;quot; when the method is called.&lt;br /&gt;
&lt;br /&gt;
3. two test cases for method &amp;quot;self.parent_model(id)&amp;quot;: When it's given a correct id and When it's given an incorrect id.&lt;br /&gt;
&lt;br /&gt;
4. one test case for method &amp;quot;fullname&amp;quot;: When the participant has an full name.&lt;br /&gt;
&lt;br /&gt;
5. one test case for method &amp;quot;review_map_type&amp;quot;: It returns ReviewResponseMap when the method is called.&lt;br /&gt;
&lt;br /&gt;
6. one test case for method &amp;quot;self.prototype&amp;quot;: It returns an new instance of AssignmentTeam when the method is called.&lt;br /&gt;
&lt;br /&gt;
7. two test cases for method &amp;quot;assign_reviewer(reviewer)&amp;quot;: When the team has an assignment and When the assignment record can not be found.&lt;br /&gt;
&lt;br /&gt;
8. one test case for method &amp;quot;reviewd_by?&amp;quot;: When it gets correct reviewer and returns true as an result.&lt;br /&gt;
&lt;br /&gt;
9. one test case for method &amp;quot; topic&amp;quot;: When it returns the correct id.&lt;br /&gt;
&lt;br /&gt;
10. three test cases for method &amp;quot;has_submissions?&amp;quot;: When the team doesn't submit any file or link, when team submits a link instead of files and when the team submits some files. Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
11. two test cases for method &amp;quot;participants&amp;quot;: When no participants in this team and When adding some participants and get all the participants.&lt;br /&gt;
&lt;br /&gt;
12. one test case for method &amp;quot;add_participant&amp;quot;: When adding an participant, it will return an instance of AssignmentParticipant.&lt;br /&gt;
&lt;br /&gt;
13. two test cases for method &amp;quot; delete and destroy&amp;quot;: Testing delete and destory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
There is screenshot of the coverage page.&lt;br /&gt;
[[File:Example.jpg]]&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119179</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119179"/>
		<updated>2018-11-10T00:32:02Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==File Involvement==&lt;br /&gt;
1.app/models/assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
2.spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. two test cases for method &amp;quot;include?&amp;quot;: When the team includes a given participant and When the team doesn't include a given participant&lt;br /&gt;
&lt;br /&gt;
2. one test case for method &amp;quot;parent_model&amp;quot;: It returns &amp;quot;Assignment&amp;quot; when the method is called.&lt;br /&gt;
&lt;br /&gt;
3. two test cases for method &amp;quot;self.parent_model(id)&amp;quot;: When it's given a correct id and When it's given an incorrect id.&lt;br /&gt;
&lt;br /&gt;
4. one test case for method &amp;quot;fullname&amp;quot;: When the participant has an full name.&lt;br /&gt;
&lt;br /&gt;
5. one test case for method &amp;quot;review_map_type&amp;quot;: It returns ReviewResponseMap when the method is called.&lt;br /&gt;
&lt;br /&gt;
6. one test case for method &amp;quot;self.prototype&amp;quot;: It returns an new instance of AssignmentTeam when the method is called.&lt;br /&gt;
&lt;br /&gt;
7. two test cases for method &amp;quot;assign_reviewer(reviewer)&amp;quot;: When the team has an assignment and When the assignment record can not be found.&lt;br /&gt;
&lt;br /&gt;
8. one test case for method &amp;quot;reviewd_by?&amp;quot;: When it gets correct reviewer and returns true as an result.&lt;br /&gt;
&lt;br /&gt;
9. one test case for method &amp;quot; topic&amp;quot;: When it returns the correct id.&lt;br /&gt;
&lt;br /&gt;
10. three test cases for method &amp;quot;has_submissions?&amp;quot;: When the team doesn't submit any file or link, when team submits a link instead of files and when the team submits some files. Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
11. two test cases for method &amp;quot;participants&amp;quot;: When no participants in this team and When adding some participants and get all the participants.&lt;br /&gt;
&lt;br /&gt;
12. one test case for method &amp;quot;add_participant&amp;quot;: When adding an participant, it will return an instance of AssignmentParticipant.&lt;br /&gt;
&lt;br /&gt;
13. two test cases for method &amp;quot; delete and destroy&amp;quot;: Testing delete and destory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
There is t/home/roy/Desktop/Screenshot from 2018-11-09 19-29-09.pnghe screen shot of the coverage page.&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119176</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119176"/>
		<updated>2018-11-10T00:24:26Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==File Involvement==&lt;br /&gt;
1.app/models/assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
2.spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
1. two test cases for method &amp;quot;include?&amp;quot;: When the team includes a given participant and When the team doesn't include a given participant&lt;br /&gt;
&lt;br /&gt;
2. one test case for method &amp;quot;parent_model&amp;quot;: It returns &amp;quot;Assignment&amp;quot; when the method is called.&lt;br /&gt;
&lt;br /&gt;
3. two test cases for method &amp;quot;self.parent_model(id)&amp;quot;: When it's given a correct id and When it's given an incorrect id.&lt;br /&gt;
&lt;br /&gt;
4. one test case for method &amp;quot;fullname&amp;quot;: When the participant has an full name.&lt;br /&gt;
&lt;br /&gt;
5. one test case for method &amp;quot;review_map_type&amp;quot;: It returns ReviewResponseMap when the method is called.&lt;br /&gt;
&lt;br /&gt;
6. one test case for method &amp;quot;self.prototype&amp;quot;: It returns an new instance of AssignmentTeam when the method is called.&lt;br /&gt;
&lt;br /&gt;
7. two test cases for method &amp;quot;assign_reviewer(reviewer)&amp;quot;: When the team has an assignment and When the assignment record can not be found.&lt;br /&gt;
&lt;br /&gt;
8. one test case for method &amp;quot;reviewd_by?&amp;quot;: When it gets correct reviewer and returns true as an result.&lt;br /&gt;
&lt;br /&gt;
9. one test case for method &amp;quot; topic&amp;quot;: When it returns the correct id.&lt;br /&gt;
&lt;br /&gt;
10. three test cases for method &amp;quot;has_submissions?&amp;quot;: When the team doesn't submit any file or link, when team submits a link instead of files and when the team submits some files. Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
11. two test cases for method &amp;quot;participants&amp;quot;: When no participants in this team and When adding some participants and get all the participants.&lt;br /&gt;
&lt;br /&gt;
12. one test case for method &amp;quot;add_participant&amp;quot;: When adding an participant, it will return an instance of AssignmentParticipant.&lt;br /&gt;
&lt;br /&gt;
13. two test cases for method &amp;quot; delete and destroy&amp;quot;: Testing delete and destory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119056</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119056"/>
		<updated>2018-11-09T18:07:34Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119053</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119053"/>
		<updated>2018-11-09T17:57:57Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119052</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=119052"/>
		<updated>2018-11-09T17:57:05Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Memeber of Project==&lt;br /&gt;
Jianshu Zhang&lt;br /&gt;
Wanjing Kuang&lt;br /&gt;
Wei Wu&lt;br /&gt;
&lt;br /&gt;
==Mentor==&lt;br /&gt;
Zhewei Hu&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing hyperlinks====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the current teams submitted hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team) }&lt;br /&gt;
      context &amp;quot;when current teams submitted hyperlinks&amp;quot; do&lt;br /&gt;
        it &amp;quot;returns the hyperlinks submitted by the team&amp;quot; do&lt;br /&gt;
          expect(assignment_team.hyperlinks).to eq([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when current teams did not submit hyperlinks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:team_without_submitted_hyperlinks) { build(:assignment_team, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
     context &amp;quot;when current teams did not submit hyperlinks&amp;quot; do&lt;br /&gt;
       it &amp;quot;returns an empty array&amp;quot; do&lt;br /&gt;
         expect(team_without_submitted_hyperlinks.hyperlinks).to eq([])&lt;br /&gt;
       end&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing files====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     before :each do&lt;br /&gt;
       @directory = &amp;quot;a&amp;quot;&lt;br /&gt;
       @files = [&amp;quot;b.txt&amp;quot;, &amp;quot;c.java&amp;quot;, &amp;quot;d.txt&amp;quot;]&lt;br /&gt;
       @files1 = [&amp;quot;b/c&amp;quot;, &amp;quot;d/e&amp;quot;]&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method in Dir&amp;quot; do&lt;br /&gt;
        expect(Dir).to receive(:[]).with(@directory + &amp;quot;/*&amp;quot;).and_return(@files)&lt;br /&gt;
        assignment_team.files(@directory)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing submit_hyperlink====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. when the hyperlink is empty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context &amp;quot;when the hyperlink is empty&amp;quot; do&lt;br /&gt;
      it &amp;quot;raise excpetion&amp;quot; do&lt;br /&gt;
        expect{(assignment_team.submit_hyperlink(&amp;quot;&amp;quot;))}.to raise_error('The hyperlink cannot be empty!')&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the hyperlink is not empty and it calls the method on NET::HTTP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @link = &amp;quot;htp.aa/..&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
      it &amp;quot;call the method on NET::HTTP&amp;quot; do&lt;br /&gt;
         expect(Net::HTTP).to receive(:get_response).with(URI(@link+'http://'))&lt;br /&gt;
         assignment_team.submit_hyperlink(@link)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the hyperlink is not empty and it raises error&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raise error&amp;quot; do&lt;br /&gt;
          allow(Net::HTTP).to receive(:get_response).with(URI(@link+'http://')).and_return(&amp;quot;402&amp;quot;)&lt;br /&gt;
          expect{(assignment_team.submit_hyperlink(@link))}.to raise_error('HTTP status code: 402')&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_hyperlink====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      before :each do&lt;br /&gt;
        @hyperlink = &amp;quot;http://a.com&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
     it 'call the hyperlinks method' do&lt;br /&gt;
        expect(assignment_team).to receive(:hyperlinks).and_return([&amp;quot;https://www.expertiza.ncsu.edu&amp;quot;])&lt;br /&gt;
        assignment_team.remove_hyperlink(@hyperlink)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing team====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the participant is nil then this method will return nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      context 'when the participant is nil then this method will return nil' do&lt;br /&gt;
        it 'the participant is nil' do&lt;br /&gt;
          expect(AssignmentTeam.team(nil)).to eq(nil)&lt;br /&gt;
        end&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when it can find the participant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:participant) { build(:participant) }&lt;br /&gt;
      context 'can find the participant' do&lt;br /&gt;
        it 'send the correct user_id to the TeamsUser.where method' do&lt;br /&gt;
          expect(TeamsUser).to receive(:where).with(user_id: participant.user_id).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
        end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the team user exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team_user) { build(:team_user) }&lt;br /&gt;
      context 'the team user exists' do&lt;br /&gt;
        before :each do&lt;br /&gt;
          allow(TeamsUser).to receive(:where).with(user_id: 1).and_return([team_user])&lt;br /&gt;
          AssignmentTeam.team(participant)&lt;br /&gt;
       end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing export_fields==== &lt;br /&gt;
2 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when the team_name equals false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals false' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;false&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Team members&amp;quot;,&amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the team_name equals true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'the team_name equals true' do&lt;br /&gt;
        options = {:team_name =&amp;gt;&amp;quot;true&amp;quot;}&lt;br /&gt;
        expect(AssignmentTeam.export_fields(options)).to eq([&amp;quot;Team Name&amp;quot;, &amp;quot;Assignment Name&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing remove_team_by_id====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send find to Assignment' do&lt;br /&gt;
        expect(AssignmentTeam).to receive(:find).with(1)&lt;br /&gt;
        AssignmentTeam.remove_team_by_id(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing path====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'can get the path' do&lt;br /&gt;
        expect(assignment_team.path).to eq(Rails.root.to_s+'/pg_data/instructor6/csc517/test/final_test/0')&lt;br /&gt;
        assignment_team.path&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing set_student_directory_num====&lt;br /&gt;
3 test cases are designed to test this method&lt;br /&gt;
&lt;br /&gt;
1. when directory_num &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     context 'directory_num &amp;gt;= 0' do&lt;br /&gt;
       it 'return when num&amp;gt;=0' do&lt;br /&gt;
         expect(assignment_team.set_student_directory_num).to eq(nil)&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. when the directory_num does not exist and it gets max num&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     let(:assignment_team1) {build(:assignment_team, directory_num: nil)}&lt;br /&gt;
     it 'get max num' do&lt;br /&gt;
        expect(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id:       assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. when the directory_num does not exist and it updates attribute&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'update attribute' do&lt;br /&gt;
        allow(AssignmentTeam).to receive_message_chain(:where,:order,:first,:directory_num).with(parent_id: assignment_team1.parent_id).with('directory_num desc').with(no_args).with(no_args).and_return(1)&lt;br /&gt;
        expect(assignment_team1).to receive(:update_attributes).with(directory_num: 2)&lt;br /&gt;
        assignment_team1.set_student_directory_num&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing received_any_peer_review?====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it 'send the request to where of the ResponseMap' do&lt;br /&gt;
        expect(ResponseMap).to receive(:where).with(reviewee_id: assignment_team.id, reviewed_object_id: assignment_team.parent_id).and_return([])&lt;br /&gt;
        assignment_team.received_any_peer_review?&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=117992</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=117992"/>
		<updated>2018-11-02T15:16:01Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=117990</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=117990"/>
		<updated>2018-11-02T15:15:14Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=117989</id>
		<title>E1848 Write unit tests for assignment team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1848_Write_unit_tests_for_assignment_team&amp;diff=117989"/>
		<updated>2018-11-02T15:14:05Z</updated>

		<summary type="html">&lt;p&gt;Jzhang97: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For this progect, the goal is to wirte up unit tests for assignment_team.rb&lt;br /&gt;
&lt;br /&gt;
==Project Introduction==&lt;br /&gt;
assignment_team.rb is the child class of team.rb. It is used to manage student teams in assignments.&lt;br /&gt;
There are not enough unit tests for this model in expertiza. The following tests are added to assignment_team.rb in this project.&lt;br /&gt;
&lt;br /&gt;
==Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Unit Test Tool===&lt;br /&gt;
Rspec&lt;br /&gt;
&lt;br /&gt;
===Unit Test File===&lt;br /&gt;
expertiza/spec/models/assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Unit Test Steps===&lt;br /&gt;
&lt;br /&gt;
*Create unit test cases in the assignment_team_spec.rb&lt;br /&gt;
&lt;br /&gt;
*run rspec spec/models/assignment_team_spec.rb under expertiza directory&lt;br /&gt;
&lt;br /&gt;
*the rspec outputs the number of test cases that are passed and those that are failed.&lt;br /&gt;
&lt;br /&gt;
===Unit Test Cases===&lt;br /&gt;
&lt;br /&gt;
====Testing include?====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. The team includes a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant1))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The team doesn't include a given participant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;full name&amp;quot;) }&lt;br /&gt;
      let(:participant1) { build(:participant, id: 2, user: user) }&lt;br /&gt;
      let(:participant2) { build(:participant, id: 3) }&lt;br /&gt;
      it &amp;quot;returns false&amp;quot; do&lt;br /&gt;
        allow(assignment_team).to receive(:add_participants).with(participant1)&lt;br /&gt;
        expect(assignment_team.includes?(participant2))&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing parent_model====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns Assignment as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.parent_model).to eq(&amp;quot;Assignment&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====self.parent_model(id)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.When it's given a correct id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment) { build(:assignment, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an assignemt&amp;quot; do&lt;br /&gt;
        allow(Assignment).to receive(:find).with(1).and_return(assignment)&lt;br /&gt;
        expect(AssignmentTeam.parent_model(1)).to eq(assignment)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.When it's given an incorrect id.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;raises an exception&amp;quot; do&lt;br /&gt;
        expect { AssignmentTeam.parent_model 2 }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test fullname====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns the full name of assignment team&amp;quot; do&lt;br /&gt;
        expect(assignment_team.fullname).to eq(&amp;quot;full name&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test review_map_type====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns ReviewResponseMap as result&amp;quot; do&lt;br /&gt;
        expect(assignment_team.review_map_type).to eq(&amp;quot;ReviewResponseMap&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test self.prototype====&lt;br /&gt;
1 test cases is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns an new instance of AssignmentTeam&amp;quot; do&lt;br /&gt;
        expect(AssignmentTeam.prototype).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing assign_reviewer(reviewer)====&lt;br /&gt;
2 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1. When the team has an assignment.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:reviewer) { build(:participant, id: 1) }&lt;br /&gt;
      it &amp;quot;returns an instance of ReviewResponseMap&amp;quot; do&lt;br /&gt;
        expect(assignment_team.assign_reviewer(reviewer)).to be_instance_of(ReviewResponseMap)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. When the assignment record can not be found&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:assignment_team2) { build(:assignment_team, id: 2, parent_id: 2) }&lt;br /&gt;
      it &amp;quot;returns an exception&amp;quot; do&lt;br /&gt;
        expect { assignment_team2.assign_reviewer(reviewer) }.to raise_exception(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test reviewd_by?====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(ReviewResponseMap).to receive(:where).\&lt;br /&gt;
          with('reviewee_id = ? &amp;amp;&amp;amp; reviewer_id = ? &amp;amp;&amp;amp; reviewed_object_id = ?', 1, 1, 1).and_return([review_response_map])&lt;br /&gt;
        expect(assignment_team.reviewed_by?(reviewer)).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test topic====&lt;br /&gt;
1 test case is designed to test this method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:signed_up_team) { build(:signed_up_team, id: 1, team_id: 1, is_waitlisted: 0, topic_id: 1) }&lt;br /&gt;
      it &amp;quot;returns a topic id&amp;quot; do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(team_id: 1, is_waitlisted: 0).and_return(signed_up_team)&lt;br /&gt;
        expect(assignment_team.topic).to eq(1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Testing has_submissions? ====&lt;br /&gt;
3 test cases are designed to test this method:&lt;br /&gt;
&lt;br /&gt;
1.The team doesn't submit any file or link. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team2) { build(:assignment_team, id: 2, parent_id: 1, name: &amp;quot;team2&amp;quot;, submitted_hyperlinks: &amp;quot;&amp;quot;) }&lt;br /&gt;
      it &amp;quot;no file or no link&amp;quot; do&lt;br /&gt;
        expect(team2.has_submissions?).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.The team submits a link instead of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:team1) { build(:assignment_team, id: 1, parent_id: 1, name: &amp;quot;team1&amp;quot;, submitted_hyperlinks: &amp;quot;http://example.com&amp;quot;) }&lt;br /&gt;
      it &amp;quot;submitted hyperlinks&amp;quot; do&lt;br /&gt;
        expect(team1.has_submissions?).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The team submits some files.  Stub is used to emulate the scenario that the team has submitted a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      it &amp;quot;returns true&amp;quot; do&lt;br /&gt;
        allow(team2).to receive(:submitted_files).and_return([double(:File)])&lt;br /&gt;
        expect(team2.has_submissions?).to be true&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing participants ====&lt;br /&gt;
&lt;br /&gt;
1. No participants in this team&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#no participant' do&lt;br /&gt;
        expect(team1.participants).to eq([])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. add some participants and get all the participants&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      let(:student1) { build(:student, id: 1, name: 'johns', fullname: 'johns franklin') }&lt;br /&gt;
      let(:student2) { build(:student, id: 2, name: 'kate', fullname: 'kate moss') }&lt;br /&gt;
      let(:par1) { build(:participant, id: 1, parent_id: 1, user_id: 1) }&lt;br /&gt;
      let(:par2) { build(:participant, id: 2, parent_id: 1, user_id: 2) }&lt;br /&gt;
      it '#1 participant' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:users).with(id: team1.id).and_return([student1,student2])&lt;br /&gt;
        expect(team1.participants).to eq([par1, par2])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing add_participant ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#add participants' do&lt;br /&gt;
        expect(team1.add_participant(ass1.id, par1)).to be_instance_of(AssignmentParticipant)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing the delete and destroy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#delete' do&lt;br /&gt;
        expect(team1.delete).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#destroy' do&lt;br /&gt;
        expect(team1.destroy).to be_instance_of(AssignmentTeam)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing members====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#get_first_member' do&lt;br /&gt;
        allow(AssignmentTeam).to receive(:find_by).with(id: team1.id).and_return(team1)&lt;br /&gt;
        allow(team1).to receive(:participants).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.get_first_member(team1.id)).to eq(par1)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing import and export====&lt;br /&gt;
&lt;br /&gt;
1. import a team to a non-existing assignment and expect an exception&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     it '#import an nonexisting assignment id' do&lt;br /&gt;
        row = {teamname: &amp;quot;hello_world&amp;quot;, teammembers: %w[johns kate]}&lt;br /&gt;
        options = {has_teamname: &amp;quot;true_first&amp;quot;}&lt;br /&gt;
        expect { AssignmentTeam.import(row, 99_999, options) }.to raise_error(ImportError)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. export teams into a csv file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#export' do&lt;br /&gt;
        options = {}&lt;br /&gt;
        csv = CSV.open(&amp;quot;assignment_team_export.csv&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
        assignment_id = ass1.id&lt;br /&gt;
        allow(AssignmentTeam).to receive(:where).with(parent_id: assignment_id).and_return([team1, team2, team3])&lt;br /&gt;
        allow(TeamsUser).to receive(:where).and_return([par1, par2])&lt;br /&gt;
        expect(AssignmentTeam.export(csv, assignment_id, options)).to be_instance_of(CSV)&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Testing copy====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      it '#copy' do&lt;br /&gt;
        allow(TeamsUser).to receive(:where).with(team_id: team1.id).and_return([par1])&lt;br /&gt;
        expect(team1.copy(course1.id)).to eq([par1])&lt;br /&gt;
      end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jzhang97</name></author>
	</entry>
</feed>