# -*- coding: utf-8; -*- from unittest.mock import patch import colander from sideshow.testing import WebTestCase from sideshow.web.views import stores as mod class TestIncludeme(WebTestCase): def test_coverage(self): mod.includeme(self.pyramid_config) class TestStoreView(WebTestCase): def make_view(self): return mod.StoreView(self.request) def test_configure_grid(self): model = self.app.model view = self.make_view() grid = view.make_grid(model_class=model.Store) self.assertNotIn('store_id', grid.linked_columns) self.assertNotIn('name', grid.linked_columns) view.configure_grid(grid) self.assertIn('store_id', grid.linked_columns) self.assertIn('name', grid.linked_columns) def test_grid_row_class(self): model = self.app.model view = self.make_view() store = model.Store() self.assertFalse(store.archived) self.assertIsNone(view.grid_row_class(store, {}, 0)) store = model.Store(archived=True) self.assertTrue(store.archived) self.assertEqual(view.grid_row_class(store, {}, 0), 'has-background-warning') def test_configure_form(self): model = self.app.model view = self.make_view() # unique validators are set form = view.make_form(model_class=model.Store) self.assertNotIn('store_id', form.validators) self.assertNotIn('name', form.validators) view.configure_form(form) self.assertIn('store_id', form.validators) self.assertIn('name', form.validators) def test_unique_store_id(self): model = self.app.model view = self.make_view() store = model.Store(store_id='001', name='whatever') self.session.add(store) self.session.commit() with patch.object(view, 'Session', return_value=self.session): # invalid if same store_id in data node = colander.SchemaNode(colander.String(), name='store_id') self.assertRaises(colander.Invalid, view.unique_store_id, node, '001') # but not if store_id belongs to current store with patch.object(self.request, 'matchdict', new={'uuid': store.uuid}): with patch.object(view, 'editing', new=True): node = colander.SchemaNode(colander.String(), name='store_id') self.assertIsNone(view.unique_store_id(node, '001')) def test_unique_name(self): model = self.app.model view = self.make_view() store = model.Store(store_id='001', name='Acme Goods') self.session.add(store) self.session.commit() with patch.object(view, 'Session', return_value=self.session): # invalid if same name in data node = colander.SchemaNode(colander.String(), name='name') self.assertRaises(colander.Invalid, view.unique_name, node, 'Acme Goods') # but not if name belongs to current store with patch.object(self.request, 'matchdict', new={'uuid': store.uuid}): with patch.object(view, 'editing', new=True): node = colander.SchemaNode(colander.String(), name='name') self.assertIsNone(view.unique_name(node, 'Acme Goods'))