class ProductResourceTestCase(MultiproductTestCase): def setUp(self): self._mp_setup() self.global_env = self.env self._load_product_from_data(self.global_env, u'xü') self.env = ProductEnvironment(self.global_env, self.default_product) self.env1 = ProductEnvironment(self.global_env, u'xü') self._load_default_data(self.global_env) self._load_default_data(self.env1) # Enable product system component in product context self.env.enable_component(MultiProductSystem) def tearDown(self): self.global_env.reset_db() self.global_env = self.env = None
class ProductModuleTestCase(RequestHandlerTestCase): def setUp(self): self._mp_setup() self.global_env = self.env self.env = ProductEnvironment(self.global_env, self.default_product) self.global_env.enable_component(TestRequestSpy) self.env.enable_component(TestRequestSpy) TestRequestSpy(self.global_env).testMatch = self._assert_product_match PermissionSystem(self.global_env).grant_permission("testuser", "PRODUCT_CREATE") PermissionSystem(self.global_env).grant_permission("testuser", "PRODUCT_VIEW") PermissionSystem(self.global_env).grant_permission("testuser", "PRODUCT_MODIFY") def tearDown(self): self.global_env.reset_db() self.env = self.global_env = None expectedPrefix = None expectedPathInfo = None def _assert_product_match(self, req, handler): self.assertIs(ProductModule(self.global_env), handler) self.assertEqual(self.expectedPrefix, req.args["productid"], "Unexpected product prefix") self.assertEqual(self.expectedPathInfo, req.args["pathinfo"], "Unexpected sub path") def test_product_list(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) req = self._get_request_obj(self.global_env) req.authname = "testuser" req.environ["PATH_INFO"] = "/products" mps = MultiProductSystem(self.global_env) def assert_product_list(req, template, data, content_type): self.assertEquals("product_list.html", template) self.assertIs(None, content_type) self.assertEquals( [mps.default_product_prefix, self.default_product], [p.prefix for p in data.get("products")] ) self.assertTrue("context" in data) ctx = data["context"] self.assertEquals("product", ctx.resource.realm) self.assertEquals(None, ctx.resource.id) spy.testProcessing = assert_product_list with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) def test_product_new(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) req = self._get_request_obj(self.global_env) req.authname = "testuser" req.environ["PATH_INFO"] = "/products" req.environ["QUERY_STRING"] = "action=new" def assert_product_new(req, template, data, content_type): self.assertEquals("product_edit.html", template) self.assertIs(None, content_type) self.assertFalse("products" in data) self.assertTrue("context" in data) ctx = data["context"] self.assertEquals("product", ctx.resource.realm) self.assertEquals(None, ctx.resource.id) spy.testProcessing = assert_product_new with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) def test_product_view(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) def assert_product_view(req, template, data, content_type): self.assertEquals("product_view.html", template) self.assertIs(None, content_type) self.assertFalse("products" in data) self.assertTrue("context" in data) ctx = data["context"] self.assertEquals("product", ctx.resource.realm) self.assertEquals(real_prefix, ctx.resource.id) self.assertTrue("product" in data) self.assertEquals(real_prefix, data["product"].prefix) spy.testProcessing = assert_product_view # Existing product req = self._get_request_obj(self.global_env) req.authname = "testuser" req.environ["PATH_INFO"] = "/products/%s" % (self.default_product,) real_prefix = self.default_product self.expectedPrefix = self.default_product self.expectedPathInfo = "" with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) def test_missing_product(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) mps = MultiProductSystem(self.global_env) def assert_product_list(req, template, data, content_type): self.assertEquals("product_list.html", template) self.assertIs(None, content_type) self.assertEquals( [mps.default_product_prefix, self.default_product], [p.prefix for p in data.get("products")] ) self.assertTrue("context" in data) ctx = data["context"] self.assertEquals("product", ctx.resource.realm) self.assertEquals(None, ctx.resource.id) spy.testProcessing = assert_product_list # Missing product req = self._get_request_obj(self.global_env) req.authname = "testuser" req.environ["PATH_INFO"] = "/products/missing" self.expectedPrefix = "missing" self.expectedPathInfo = "" with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) self.assertEqual(1, len(req.chrome["warnings"])) self.assertEqual("Product missing not found", req.chrome["warnings"][0].unescape()) def test_product_edit(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) # HTTP GET req = self._get_request_obj(self.global_env) req.authname = "testuser" req.environ["PATH_INFO"] = "/products/%s" % (self.default_product,) req.environ["QUERY_STRING"] = "action=edit" real_prefix = self.default_product def assert_product_edit(req, template, data, content_type): self.assertEquals("product_edit.html", template) self.assertIs(None, content_type) self.assertFalse("products" in data) self.assertTrue("context" in data) ctx = data["context"] self.assertEquals("product", ctx.resource.realm) self.assertEquals(real_prefix, ctx.resource.id) self.assertTrue("product" in data) self.assertEquals(real_prefix, data["product"].prefix) spy.testProcessing = assert_product_edit self.expectedPrefix = self.default_product self.expectedPathInfo = "" with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) # HTTP POST req = self._get_request_obj(self.global_env) req.authname = "testuser" req.environ["REQUEST_METHOD"] = "POST" req.environ["PATH_INFO"] = "/products/%s" % (self.default_product,) req.args = dict( action="edit", description="New description", prefix=self.default_product, name=self.env.product.name ) spy.testProcessing = assert_product_edit self.expectedPrefix = self.default_product self.expectedPathInfo = "" self.record_response = True with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) try: product = Product(self.global_env, {"prefix": self.env.product.prefix}) except ResourceNotFound: self.fail("Default test product deleted ?") else: self.assertEquals("New description", product.description) product_url = Href(req.base_path).products(self.default_product) self.assertRedirect(req, product_url) def test_product_delete(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) req = self._get_request_obj(self.global_env) req.authname = "testuser" req.environ["PATH_INFO"] = "/products/%s" % (self.default_product,) req.environ["QUERY_STRING"] = "action=delete" self.expectedPrefix = self.default_product self.expectedPathInfo = "" spy.testProcessing = lambda *args, **kwargs: None with self.assertRaises(HTTPInternalError) as test_cm: self._dispatch(req, self.global_env) self.assertEqual("500 Trac Error (Product removal is not allowed!)", unicode(test_cm.exception))
class ProductModuleTestCase(RequestHandlerTestCase): def setUp(self): self._mp_setup() self.global_env = self.env self.env = ProductEnvironment(self.global_env, self.default_product) self.global_env.enable_component(TestRequestSpy) self.env.enable_component(TestRequestSpy) TestRequestSpy(self.global_env).testMatch = self._assert_product_match PermissionSystem(self.global_env).grant_permission('testuser', 'PRODUCT_CREATE') PermissionSystem(self.global_env).grant_permission('testuser', 'PRODUCT_VIEW') PermissionSystem(self.global_env).grant_permission('testuser', 'PRODUCT_MODIFY') def tearDown(self): self.global_env.reset_db() self.env = self.global_env = None expectedPrefix = None expectedPathInfo = None def _assert_product_match(self, req, handler): self.assertIs(ProductModule(self.global_env), handler) self.assertEqual(self.expectedPrefix, req.args['productid'], "Unexpected product prefix") self.assertEqual(self.expectedPathInfo, req.args['pathinfo'], "Unexpected sub path") def test_product_list(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products' mps = MultiProductSystem(self.global_env) def assert_product_list(req, template, data, content_type): self.assertEquals('product_list.html', template) self.assertIs(None, content_type) self.assertEquals([mps.default_product_prefix, self.default_product], [p.prefix for p in data.get('products')]) self.assertTrue('context' in data) ctx = data['context'] self.assertEquals('product', ctx.resource.realm) self.assertEquals(None, ctx.resource.id) spy.testProcessing = assert_product_list with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) def test_product_new(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products' req.environ['QUERY_STRING'] = 'action=new' def assert_product_new(req, template, data, content_type): self.assertEquals('product_edit.html', template) self.assertIs(None, content_type) self.assertFalse('products' in data) self.assertTrue('context' in data) ctx = data['context'] self.assertEquals('product', ctx.resource.realm) self.assertEquals(None, ctx.resource.id) spy.testProcessing = assert_product_new with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) def test_product_view(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) def assert_product_view(req, template, data, content_type): self.assertEquals('product_view.html', template) self.assertIs(None, content_type) self.assertFalse('products' in data) self.assertTrue('context' in data) ctx = data['context'] self.assertEquals('product', ctx.resource.realm) self.assertEquals(real_prefix, ctx.resource.id) self.assertTrue('product' in data) self.assertEquals(real_prefix, data['product'].prefix) spy.testProcessing = assert_product_view # Existing product req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products/%s' % (self.default_product,) real_prefix = self.default_product self.expectedPrefix = self.default_product self.expectedPathInfo = '' with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) def test_missing_product(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) mps = MultiProductSystem(self.global_env) def assert_product_list(req, template, data, content_type): self.assertEquals('product_list.html', template) self.assertIs(None, content_type) self.assertEquals([mps.default_product_prefix, self.default_product], [p.prefix for p in data.get('products')]) self.assertTrue('context' in data) ctx = data['context'] self.assertEquals('product', ctx.resource.realm) self.assertEquals(None, ctx.resource.id) spy.testProcessing = assert_product_list # Missing product req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products/missing' self.expectedPrefix = 'missing' self.expectedPathInfo = '' with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) self.assertEqual(1, len(req.chrome['warnings'])) self.assertEqual('Product missing not found', req.chrome['warnings'][0].unescape()) def test_product_edit(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) # HTTP GET req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products/%s' % (self.default_product,) req.environ['QUERY_STRING'] = 'action=edit' real_prefix = self.default_product def assert_product_edit(req, template, data, content_type): self.assertEquals('product_edit.html', template) self.assertIs(None, content_type) self.assertFalse('products' in data) self.assertTrue('context' in data) ctx = data['context'] self.assertEquals('product', ctx.resource.realm) self.assertEquals(real_prefix, ctx.resource.id) self.assertTrue('product' in data) self.assertEquals(real_prefix, data['product'].prefix) spy.testProcessing = assert_product_edit self.expectedPrefix = self.default_product self.expectedPathInfo = '' with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) # HTTP POST req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['REQUEST_METHOD'] = 'POST' req.environ['PATH_INFO'] = '/products/%s' % (self.default_product,) req.args = dict(action='edit', description='New description', prefix=self.default_product, name=self.env.product.name) spy.testProcessing = assert_product_edit self.expectedPrefix = self.default_product self.expectedPathInfo = '' self.record_response = True with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) try: product = Product(self.global_env, {'prefix' : self.env.product.prefix}) except ResourceNotFound: self.fail('Default test product deleted ?') else: self.assertEquals('New description', product.description) product_url = Href(req.base_path).products(self.default_product) self.assertRedirect(req, product_url) def test_product_delete(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products/%s' % (self.default_product,) req.environ['QUERY_STRING'] = 'action=delete' self.expectedPrefix = self.default_product self.expectedPathInfo = '' spy.testProcessing = lambda *args, **kwargs: None with self.assertRaises(HTTPInternalError) as test_cm: self._dispatch(req, self.global_env) self.assertEqual('500 Trac Error (Product removal is not allowed!)', unicode(test_cm.exception))
class ProductModuleTestCase(RequestHandlerTestCase): def setUp(self): self._mp_setup() self.global_env = self.env self.env = ProductEnvironment(self.global_env, self.default_product) self.global_env.enable_component(TestRequestSpy) self.env.enable_component(TestRequestSpy) TestRequestSpy(self.global_env).testMatch = self._assert_product_match PermissionSystem(self.global_env).grant_permission( 'testuser', 'PRODUCT_CREATE') PermissionSystem(self.global_env).grant_permission( 'testuser', 'PRODUCT_VIEW') PermissionSystem(self.global_env).grant_permission( 'testuser', 'PRODUCT_MODIFY') def tearDown(self): self.global_env.reset_db() self.env = self.global_env = None expectedPrefix = None expectedPathInfo = None def _assert_product_match(self, req, handler): self.assertIs(ProductModule(self.global_env), handler) self.assertEqual(self.expectedPrefix, req.args['productid'], "Unexpected product prefix") self.assertEqual(self.expectedPathInfo, req.args['pathinfo'], "Unexpected sub path") def test_product_list(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products' mps = MultiProductSystem(self.global_env) def assert_product_list(req, template, data, content_type): self.assertEquals('product_list.html', template) self.assertIs(None, content_type) self.assertEquals( [mps.default_product_prefix, self.default_product], [p.prefix for p in data.get('products')]) self.assertTrue('context' in data) ctx = data['context'] self.assertEquals('product', ctx.resource.realm) self.assertEquals(None, ctx.resource.id) spy.testProcessing = assert_product_list with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) def test_product_new(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products' req.environ['QUERY_STRING'] = 'action=new' def assert_product_new(req, template, data, content_type): self.assertEquals('product_edit.html', template) self.assertIs(None, content_type) self.assertFalse('products' in data) self.assertTrue('context' in data) ctx = data['context'] self.assertEquals('product', ctx.resource.realm) self.assertEquals(None, ctx.resource.id) spy.testProcessing = assert_product_new with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) def test_product_view(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) def assert_product_view(req, template, data, content_type): self.assertEquals('product_view.html', template) self.assertIs(None, content_type) self.assertFalse('products' in data) self.assertTrue('context' in data) ctx = data['context'] self.assertEquals('product', ctx.resource.realm) self.assertEquals(real_prefix, ctx.resource.id) self.assertTrue('product' in data) self.assertEquals(real_prefix, data['product'].prefix) spy.testProcessing = assert_product_view # Existing product req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products/%s' % (self.default_product, ) real_prefix = self.default_product self.expectedPrefix = self.default_product self.expectedPathInfo = '' with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) def test_missing_product(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) mps = MultiProductSystem(self.global_env) def assert_product_list(req, template, data, content_type): self.assertEquals('product_list.html', template) self.assertIs(None, content_type) self.assertEquals( [mps.default_product_prefix, self.default_product], [p.prefix for p in data.get('products')]) self.assertTrue('context' in data) ctx = data['context'] self.assertEquals('product', ctx.resource.realm) self.assertEquals(None, ctx.resource.id) spy.testProcessing = assert_product_list # Missing product req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products/missing' self.expectedPrefix = 'missing' self.expectedPathInfo = '' with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) self.assertEqual(1, len(req.chrome['warnings'])) self.assertEqual('Product missing not found', req.chrome['warnings'][0].unescape()) def test_product_edit(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) # HTTP GET req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products/%s' % (self.default_product, ) req.environ['QUERY_STRING'] = 'action=edit' real_prefix = self.default_product def assert_product_edit(req, template, data, content_type): self.assertEquals('product_edit.html', template) self.assertIs(None, content_type) self.assertFalse('products' in data) self.assertTrue('context' in data) ctx = data['context'] self.assertEquals('product', ctx.resource.realm) self.assertEquals(real_prefix, ctx.resource.id) self.assertTrue('product' in data) self.assertEquals(real_prefix, data['product'].prefix) spy.testProcessing = assert_product_edit self.expectedPrefix = self.default_product self.expectedPathInfo = '' with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) # HTTP POST req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['REQUEST_METHOD'] = 'POST' req.environ['PATH_INFO'] = '/products/%s' % (self.default_product, ) req.args = dict(action='edit', description='New description', prefix=self.default_product, name=self.env.product.name) spy.testProcessing = assert_product_edit self.expectedPrefix = self.default_product self.expectedPathInfo = '' self.record_response = True with self.assertRaises(RequestDone): self._dispatch(req, self.global_env) try: product = Product(self.global_env, {'prefix': self.env.product.prefix}) except ResourceNotFound: self.fail('Default test product deleted ?') else: self.assertEquals('New description', product.description) product_url = Href(req.base_path).products(self.default_product) self.assertRedirect(req, product_url) def test_product_delete(self): spy = self.global_env[TestRequestSpy] self.assertIsNot(None, spy) req = self._get_request_obj(self.global_env) req.authname = 'testuser' req.environ['PATH_INFO'] = '/products/%s' % (self.default_product, ) req.environ['QUERY_STRING'] = 'action=delete' self.expectedPrefix = self.default_product self.expectedPathInfo = '' spy.testProcessing = lambda *args, **kwargs: None with self.assertRaises(HTTPInternalError) as test_cm: self._dispatch(req, self.global_env) self.assertEqual('500 Trac Error (Product removal is not allowed!)', unicode(test_cm.exception))