Added nested-view plugin and systest for it
authorlechat <ctpeko3a-github@gmail.com>
Tue, 9 Jul 2013 17:13:06 +0000 (01:13 +0800)
committerlechat <ctpeko3a-github@gmail.com>
Wed, 10 Jul 2013 15:03:24 +0000 (23:03 +0800)
Plus added __contains__ for View

jenkinsapi/view.py
jenkinsapi_tests/systests/__init__.py
jenkinsapi_tests/systests/test_views.py

index e9363d1..2df75d0 100644 (file)
@@ -18,10 +18,16 @@ class View(JenkinsBase):
     def __str__(self):
         return self.name
 
-    def __getitem__(self, str_job_id):
-        assert isinstance(str_job_id, str)
-        api_url = self.python_api_url(self.get_job_url(str_job_id))
-        return Job(api_url, str_job_id, self.jenkins_obj)
+    def __getitem__(self, job_name):
+        assert isinstance(job_name, str)
+        api_url = self.python_api_url(self.get_job_url(job_name))
+        return Job(api_url, job_name, self.jenkins_obj)
+
+    def __contains__(self, job_name):
+        """
+        True if view_name is the name of a defined view
+        """
+        return job_name in self.keys()
 
     def delete(self):
         """
index 3d9eb34..81b87ed 100644 (file)
@@ -5,7 +5,8 @@ state={}
 
 # Extra plugins required by the systests
 PLUGIN_DEPENDENCIES = ["http://updates.jenkins-ci.org/latest/git.hpi",
-                       "http://updates.jenkins-ci.org/latest/git-client.hpi"]
+                       "http://updates.jenkins-ci.org/latest/git-client.hpi",
+                       "https://updates.jenkins-ci.org/latest/nested-view.hpi"]
     
 def setUpPackage():
     systests_dir, _ = os.path.split(__file__)
index ca15a02..dda09bd 100644 (file)
@@ -5,6 +5,7 @@ import logging
 import unittest
 
 from jenkinsapi.view import View
+from jenkinsapi.views import Views
 from jenkinsapi.api import get_view_from_url
 from jenkinsapi_tests.systests.base import BaseSystemTest
 from jenkinsapi_tests.test_utils.random_strings import random_string
@@ -21,7 +22,7 @@ class TestViews(BaseSystemTest):
         self.assertIn(view_name, self.jenkins.views())
         self.assertIsInstance(v, View)
 
-        # Can we use the API comnvenience methods
+        # Can we use the API convenience methods
         v2 = get_view_from_url(v.baseurl)
         self.assertEquals(v, v2)
 
@@ -42,6 +43,33 @@ class TestViews(BaseSystemTest):
         del self.jenkins.views()[view1_name]
         self.assertNotIn(view1_name, self.jenkins.views())
 
+    def test_make_nested_views(self):
+        job = self._create_job()
+        top_view_name = random_string()
+        sub1_view_name = random_string()
+        sub2_view_name = random_string()
+
+        self.assertNotIn(top_view_name, self.jenkins.views())
+        tv = self.jenkins.views().create(top_view_name, Views.NESTED_VIEW)
+        self.assertIn(top_view_name, self.jenkins.views())
+        self.assertIsInstance(tv, View)
+
+        # Empty sub view
+        sv1 = tv.views().create(sub1_view_name) 
+        self.assertIn(sub1_view_name, tv.views())
+        self.assertIsInstance(sv1, View)
+
+        # Sub view with job in it
+        tv.views()[sub2_view_name] = job.name
+        self.assertIn(sub2_view_name, tv.views())
+        sv2 = tv.views()[sub2_view_name]
+        self.assertIsInstance(sv2, View)
+        print 'job.name, type(job.name)=', job.name, type(job.name)
+        self.assertTrue(job.name in sv2)
+
+        # Can we use the API convenience methods
+        v = get_view_from_url(sv2.baseurl)
+        self.assertEquals(v, sv2)
 
 if __name__ == '__main__':
     logging.basicConfig()