<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>features/step_definitions/list_steps.rb</filename>
    </added>
    <added>
      <filename>features/step_definitions/person_steps.rb</filename>
    </added>
    <added>
      <filename>features/step_definitions/session_steps.rb</filename>
    </added>
    <added>
      <filename>features/step_definitions/task_steps.rb</filename>
    </added>
    <added>
      <filename>features/step_definitions/team_steps.rb</filename>
    </added>
    <added>
      <filename>features/task_filtering.feature</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -5,7 +5,7 @@ class AdminController &lt; ApplicationController
   def login
     case request.method
     when :post
-      if session[:person] = Person.authenticate(params[:person_login], params[:person_password])
+      if session[:person] = Person.authenticate(params[:person][:login], params[:person][:password])
       
       	# Load up their preferences too
       	session[:preference] = Preference.find(:first, :conditions =&gt; [&quot;person_id = ?&quot;, session[:person].id ])</diff>
      <filename>app/controllers/admin_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,10 +5,8 @@ module TasksHelper
       [&quot;Only my tasks&quot;.t, &quot;Only my tasks&quot;], 
       [&quot;Only today's tasks&quot;.t, &quot;Only today's tasks&quot;], 
     ]
-    person.teams.each do |team|
-      team.memberships.each do |membership|
-        display_list &lt;&lt; [&quot;Only &quot; + team.name + &quot;: &quot; + membership.person.name, membership.person.id.to_s]
-      end
+    person.fellow_team_members.each do |person|
+      display_list &lt;&lt; [&quot;Only #{person.name}'s tasks&quot;, person.id]
     end
     display_list
   end</diff>
      <filename>app/helpers/tasks_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,4 +3,6 @@ class Membership &lt; ActiveRecord::Base
 	belongs_to(:person) # people can be members ...
 	belongs_to(:team) # ... of teams
 	
+	named_scope :confirmed, :conditions =&gt; {:confirmed =&gt; true}
+	
 end</diff>
      <filename>app/models/membership.rb</filename>
    </modified>
    <modified>
      <diff>@@ -278,8 +278,13 @@ http://www.mychores.co.uk&quot;
   
   end
   
+  def confirmed_teams
+    Team.find(memberships.confirmed.map(&amp;:team_id))
+  end
   
-  
+  def fellow_team_members
+    confirmed_teams.map(&amp;:confirmed_members).flatten.uniq - [self]
+  end
   
   
   </diff>
      <filename>app/models/person.rb</filename>
    </modified>
    <modified>
      <diff>@@ -23,6 +23,11 @@ class Task &lt; ActiveRecord::Base
   def short_name
     truncate(name)
   end
+  
+  def list_name
+    return '' if list.nil?
+    list.name
+  end
 
 
   def describe_recurrence</diff>
      <filename>app/models/task.rb</filename>
    </modified>
    <modified>
      <diff>@@ -12,6 +12,9 @@ validates_presence_of(:name)
 validates_length_of(:name, :maximum=&gt;25)
 
 
+  def confirmed_members
+    Person.find(memberships.confirmed.map(&amp;:person_id))
+  end
 
 
 protected</diff>
      <filename>app/models/team.rb</filename>
    </modified>
    <modified>
      <diff>@@ -12,25 +12,25 @@
 &lt;% @links += [{:url =&gt; &quot;/home/privacy&quot;, :title =&gt; &quot;Privacy&quot;, :accesskey =&gt; &quot;p&quot;}] %&gt;
 
 
-&lt;% form_tag(:action=&gt; &quot;login&quot;) do %&gt;&lt;div&gt;
+&lt;% form_for(:person, :url =&gt; {:action =&gt; :login}) do |f| -%&gt;&lt;div&gt;
     
     	&lt;table&gt;
     		&lt;tr&gt;
-    			&lt;th&gt;Login id:&lt;/th&gt;
-	    		&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;person_login&quot; id=&quot;person_login&quot; class='styled' /&gt;&lt;/td&gt;
+    			&lt;th&gt;&lt;%= f.label(:login, 'Login ID') %&gt;:&lt;/th&gt;
+	    		&lt;td&gt;&lt;%= f.text_field(:login, :class =&gt; 'styled') %&gt;&lt;/td&gt;
 	    	&lt;/tr&gt;
     		&lt;tr&gt;
-    			&lt;th&gt;Password:&lt;/th&gt;
-	    		&lt;td&gt;&lt;input type=&quot;password&quot; name=&quot;person_password&quot; id=&quot;person_password&quot; class='styled' /&gt;&lt;/td&gt;
+    			&lt;th&gt;&lt;%= f.label(:password) %&gt;:&lt;/th&gt;
+	    		&lt;td&gt;&lt;%= f.password_field(:password, :class =&gt; 'styled') %&gt;&lt;/td&gt;
 	    	&lt;/tr&gt;
 	    &lt;/table&gt;
 	    
 	    &lt;br /&gt;
 	    
-    &lt;input type=&quot;submit&quot; name=&quot;login&quot; value=&quot;Login&quot; /&gt;
+    &lt;p&gt;&lt;%= f.submit('Login') %&gt;&lt;/p&gt;
 
 
-&lt;/div&gt;&lt;% end %&gt;
+&lt;/div&gt;&lt;% end -%&gt;
 
 &lt;br /&gt;
 
@@ -42,4 +42,4 @@
 &lt;h3&gt;&lt;img src='/images/openid-icon.png' width='16' height='15' alt='OpenID' /&gt; Login using OpenID&lt;/h3&gt;
 
 &lt;p&gt;If your account is associated with an OpenID you may use it to login.&lt;/p&gt;
-&lt;p&gt;&lt;a class='action' href='/openid/login'&gt;Login using OpenID&lt;/a&gt;&lt;/p&gt;
\ No newline at end of file
+&lt;p&gt;&lt;a class='action' href='/openid/login'&gt;Login using OpenID&lt;/a&gt;&lt;/p&gt;</diff>
      <filename>app/views/admin/login.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,3 @@
-Given /^I am not logged in$/ do
-  visits '/admin/logout'
-end
-
-Given /^a person called '(\w+)' with login ID '(\w+)'$/ do |name, login|
-  Person.create!(:name =&gt; name, :login =&gt; login, :email =&gt; &quot;#{name}@test.com&quot;,
-    :password =&gt; '12345', :password_confirmation =&gt; '12345')
-end
-
 Then /^the referrer ID for '(\w+)' should be set to '(\w+)'$/ do |login, referrer|
   person = Person.find_by_login(login)
   person.parent.should == Person.find_by_login(referrer)</diff>
      <filename>features/step_definitions/new_user_registration_steps.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,3 +15,14 @@ Then /^the text field with id '(\w+)' should be filled in with '(.+)'$/ do |fiel
   response.should have_tag('input[id=?][value=?]', field_id, value)
 end
 
+
+
+
+
+
+
+
+When /^I debug the page$/ do
+  raise response.body
+end
+</diff>
      <filename>features/step_definitions/viewing_steps.rb</filename>
    </modified>
    <modified>
      <diff>@@ -25,4 +25,71 @@ describe Person do
     end
   
   end
+  
+  describe &quot;confirmed_teams&quot; do
+    before(:each) do
+      @team1 = mock_model(Team)
+      Team.stub!(:find).and_return(@team1)
+      @mem1 = mock_model(Membership, :team_id =&gt; 1, :confirmed =&gt; true)
+      @mem2 = mock_model(Membership, :team_id =&gt; 2)
+      @memberships = [@mem1, @mem2]
+      @confirmed_memberships = [@mem1]
+      @person = Person.new(:memberships =&gt; @memberships)
+      @person.stub!(:memberships).and_return(@memberships)
+      @memberships.stub!(:confirmed).and_return(@confirmed_memberships)
+    end
+    
+    it &quot;should find the memberships&quot; do
+      @person.should_receive(:memberships).and_return(@memberships)
+      @memberships.should_receive(:confirmed).and_return(@confirmed_memberships)
+      @person.confirmed_teams
+    end
+    
+    it &quot;should look up the teams by memberships&quot; do
+      Team.should_receive(:find).with([1]).and_return([@team1])
+      @person.confirmed_teams.should == [@team1]
+    end
+    
+    it &quot;should find more than one team&quot; do
+      team3 = mock_model(Team)
+      mem3 = mock_model(Membership, :team_id =&gt; 3, :confirmed =&gt; true)
+      @memberships.stub!(:confirmed).and_return([@mem1, mem3])
+      Team.should_receive(:find).with([1, 3]).and_return([@team1, team3])
+      @person.confirmed_teams.should == [@team1, team3]
+    end
+  end
+  
+  describe &quot;fellow_team_members&quot; do
+    before(:each) do
+      @person = Person.new
+    end
+    
+    it &quot;should ask for the confirmed teams&quot; do
+      @person.should_receive(:confirmed_teams).and_return([])
+      @person.fellow_team_members
+    end
+    
+    it &quot;should look up the confirmed members of all teams, minus yourself&quot; do
+      team1 = mock_model(Team)
+      team2 = mock_model(Team)
+      person2 = mock_model(Person)
+      person3 = mock_model(Person)
+      @person.stub!(:confirmed_teams).and_return([team1, team2])
+      team1.should_receive(:confirmed_members).and_return([@person, person2])
+      team2.should_receive(:confirmed_members).and_return([@person, person3])
+      @person.fellow_team_members.should == [person2, person3]
+    end
+    
+    it &quot;should not break if a person belongs to no teams&quot; do
+      @person.stub!(:confirmed_teams).and_return([])
+      @person.fellow_team_members.should == []
+    end
+    
+    it &quot;should not break if a team contains no members&quot; do
+      team1 = mock_model(Team)
+      @person.stub!(:confirmed_teams).and_return([team1])
+      team1.stub!(:confirmed_members).and_return([])
+      @person.fellow_team_members.should == []
+    end
+  end
 end</diff>
      <filename>spec/models/person_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -55,6 +55,18 @@ describe Task do
     end
   end
   
+  describe &quot;list_name&quot; do
+    it &quot;should return empty string if there is no list&quot; do
+      task = Task.new
+      task.list_name.should == ''
+    end
+  
+    it &quot;should return the name of the list if there is one&quot; do
+      task = Task.new(:list =&gt; mock_model(List, :name =&gt; 'Bedroom'))
+      task.list_name.should == 'Bedroom'
+    end
+  end
+  
   describe &quot;describe_recurrence&quot; do
     it &quot;should describe a one off task&quot; do
       task = Task.new(:one_off =&gt; true)
@@ -150,4 +162,4 @@ describe Task do
     end
   end
   
-end
\ No newline at end of file
+end</diff>
      <filename>spec/models/task_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7fb5516dddb2c80b83ff6139dabf5ef6efb88a5e</id>
    </parent>
  </parents>
  <author>
    <name>sermoa</name>
    <email>aimee@mychores.co.uk</email>
  </author>
  <url>http://github.com/sermoa/mychores/commit/69486af837c52f434a0f038092ae9626b0bf41f8</url>
  <id>69486af837c52f434a0f038092ae9626b0bf41f8</id>
  <committed-date>2009-01-10T06:20:40-08:00</committed-date>
  <authored-date>2009-01-10T06:20:40-08:00</authored-date>
  <message>Verified the first story for task filtering by person.</message>
  <tree>9e9a4a53f00aaf73baf4a81dc4056f72bc4ce61b</tree>
  <committer>
    <name>sermoa</name>
    <email>aimee@mychores.co.uk</email>
  </committer>
</commit>
