class CollectionFactoryTestCase(unittest.TestCase): def setUp(self): super(CollectionFactoryTestCase, self).setUp() self.session = Session(FakeSession(TestCoreService())) self.test_dirs = [ os.path.join(os.path.dirname(__file__), 'test_data') ] self.test_loader = ResourceJSONLoader(self.test_dirs) self.cd = CollectionDetails( self.session, 'test', 'PipelineCollection', loader=self.test_loader ) self.cf = CollectionFactory( session=self.session, loader=self.test_loader ) # Fake in the class. self.session.cache.set_resource('test', 'Pipeline', FakePipeResource) def test_init(self): self.assertEqual(self.cf.session, self.session) self.assertTrue(isinstance(self.cf.loader, ResourceJSONLoader)) self.assertEqual(self.cf.base_collection_class, Collection) self.assertEqual(self.cf.details_class, CollectionDetails) # Test overrides (invalid for actual usage). import kotocore cf = CollectionFactory( loader=False, base_collection_class=PipeCollection, details_class=True ) self.assertEqual(cf.session, kotocore.session) self.assertEqual(cf.loader, False) self.assertEqual(cf.base_collection_class, PipeCollection) self.assertEqual(cf.details_class, True) def test_build_class_name(self): self.assertEqual( self.cf._build_class_name('PipelineCollection'), 'PipelineCollection' ) self.assertEqual( self.cf._build_class_name('TestName'), 'TestName' ) def test_build_methods(self): attrs = self.cf._build_methods(self.cd) self.assertEqual(len(attrs), 3) self.assertTrue('create' in attrs) self.assertTrue('each' in attrs) self.assertTrue('test_role' in attrs) def test_create_operation_method(self): class StubbyCollection(Collection): pass class StubbyResource(Resource): _details = ResourceDetails( self.session, 'test', 'Pipeline', loader=self.test_loader ) op_method = self.cf._create_operation_method('create', { "api_name": "CreatePipeline" }) self.assertEqual(op_method.__name__, 'create') self.assertEqual(op_method.__doc__, DEFAULT_DOCSTRING) # Assign it & call it. StubbyCollection._details = self.cd StubbyCollection.create = op_method StubbyCollection.change_resource(StubbyResource) sr = StubbyCollection(connection=FakeConn()) fake_pipe = sr.create() self.assertEqual(fake_pipe.id, '1872baf45') self.assertEqual(fake_pipe.title, 'A pipe') # Make sure an exception is raised when the underlying connection # doesn't have an analogous method. sr = StubbyCollection(connection=OopsConn()) with self.assertRaises(NoSuchMethod): fake_pipe = sr.create() def test_construct_for(self): col_class = self.cf.construct_for('test', 'PipelineCollection')