# -*- coding: utf-8; -*- from unittest.mock import patch from tests.views.utils import WebTestCase from pyramid.httpexceptions import HTTPNotFound from wuttaweb.views import settings class TestAppInfoView(WebTestCase): def make_view(self): return settings.AppInfoView(self.request) def test_index(self): # sanity/coverage check view = self.make_view() response = view.index() def test_configure_get_simple_settings(self): # sanity/coverage check view = self.make_view() simple = view.configure_get_simple_settings() def test_configure_get_context(self): # sanity/coverage check view = self.make_view() context = view.configure_get_context() class TestSettingView(WebTestCase): def make_view(self): return settings.SettingView(self.request) def test_index_get_grid_data(self): # empty data by default view = self.make_view() data = view.index_get_grid_data(session=self.session) self.assertEqual(len(data), 0) # unless we save some settings self.app.save_setting(self.session, 'foo', 'bar') self.session.commit() data = view.index_get_grid_data(session=self.session) self.assertEqual(len(data), 1) def test_get_instance(self): view = self.make_view() self.request.matchdict = {'name': 'foo'} # setting not found setting = view.get_instance(session=self.session) self.assertIsInstance(setting, HTTPNotFound) # setting is returned self.app.save_setting(self.session, 'foo', 'bar') self.session.commit() setting = view.get_instance(session=self.session) self.assertEqual(setting, {'name': 'foo', 'value': 'bar'}) def test_get_instance_title(self): setting = {'name': 'foo', 'value': 'bar'} view = self.make_view() title = view.get_instance_title(setting) self.assertEqual(title, 'foo') def test_configure_form(self): view = self.make_view() form = view.make_form(fields=view.get_form_fields()) self.assertNotIn('value', form.required_fields) view.configure_form(form) self.assertIn('value', form.required_fields) self.assertFalse(form.required_fields['value']) def test_persist(self): model = self.app.model view = self.make_view() # setup self.app.save_setting(self.session, 'foo', 'bar') self.session.commit() self.assertEqual(self.session.query(model.Setting).count(), 1) # setting is updated self.request.matchdict = {'name': 'foo'} view.persist({'name': 'foo', 'value': 'frazzle'}, session=self.session) self.session.commit() self.assertEqual(self.session.query(model.Setting).count(), 1) self.assertEqual(self.app.get_setting(self.session, 'foo'), 'frazzle') # new setting is created self.request.matchdict = {} with patch.object(view, 'creating', new=True): view.persist({'name': 'foo', 'value': 'frazzle'}, session=self.session) self.session.commit() self.assertEqual(self.session.query(model.Setting).count(), 1) self.assertEqual(self.app.get_setting(self.session, 'foo'), 'frazzle') def test_delete_instance(self): model = self.app.model view = self.make_view() # setup self.app.save_setting(self.session, 'foo', 'bar') self.session.commit() self.assertEqual(self.session.query(model.Setting).count(), 1) # setting is deleted self.request.matchdict = {'name': 'foo'} view.delete_instance({'name': 'foo', 'value': 'frazzle'}, session=self.session) self.session.commit() self.assertEqual(self.session.query(model.Setting).count(), 0)