Add files from the old svn, r101.
[matthijs/upstream/mobilegtd.git] / tests / specs / model / projects_spec.py
diff --git a/tests/specs/model/projects_spec.py b/tests/specs/model/projects_spec.py
new file mode 100644 (file)
index 0000000..8c8f414
--- /dev/null
@@ -0,0 +1,53 @@
+import unittest
+from model.projects import Projects
+from mock import Mock
+
+class ProjectsBehaviour(unittest.TestCase):
+    def setUp(self):
+        self.projects = Projects()
+        self.observer = Mock()
+        self.projects.observers.append(self.observer)
+        
+    def create_project(self,name=None,status=None):
+        p = Mock()
+        if name != None:
+            p.name = name
+        if status != None:
+            p.status = status
+        return p
+    
+    def assert_observed(self,attribute,new=None,old=None):
+        self.observer.notify.assert_called_with(self.projects,attribute,new=new,old=old)
+    
+    def test_should_notify_observers_when_project_is_added(self):
+        p = self.create_project()
+        self.projects.append(p)
+        self.assert_observed('add_item',new=p,old=None)
+        
+
+class EmptyProjectsBehaviour(ProjectsBehaviour):
+    def test_should_not_contain_any_projects(self):
+        self.assertEqual(self.projects,[])
+
+class NonEmptyProjectsBehaviour(ProjectsBehaviour):
+
+    def setUp(self):
+        super(NonEmptyProjectsBehaviour,self).setUp()
+        self.searched_projects = [self.create_project(status=0),self.create_project(status=0)]
+        for p in self.searched_projects:
+            self.projects.append(p)
+        self.not_searched_projects = [self.create_project(status=1),self.create_project(status=2)]
+        for p in self.not_searched_projects:
+            self.projects.append(p)
+    
+    def test_should_remember_all_added_projects(self):
+        for p in self.searched_projects+self.not_searched_projects:
+            self.assertTrue(p in self.projects)
+
+    def test_should_be_able_to_filter_projects_by_status(self):
+        self.assertEqual(self.projects.with_status(0),self.searched_projects)
+
+    def test_should_notify_observers_when_project_is_removed(self):
+        p = self.projects[0]
+        self.projects.remove(p)
+        self.assert_observed('remove_item',new=p,old=None)