# -*- coding: utf-8; -*-
import os
from unittest.mock import patch
from alembic import command as alembic_command
from wuttjamaican.db.conf import check_alembic_current, make_alembic_config
from wuttaweb.testing import WebTestCase
from wuttaweb.views import tables as mod
from wuttaweb.views.users import UserView
class TestAppTableView(WebTestCase):
def make_config(self, **kwargs):
sqlite_path = self.write_file("test.sqlite", "")
self.sqlite_engine_url = f"sqlite:///{sqlite_path}"
config_path = self.write_file(
"test.ini",
f"""
[wutta.db]
default.url = {self.sqlite_engine_url}
[alembic]
script_location = wuttjamaican.db:alembic
version_locations = wuttjamaican.db:alembic/versions
""",
)
return super().make_config([config_path], **kwargs)
def make_view(self):
return mod.AppTableView(self.request)
def test_includeme(self):
self.pyramid_config.include("wuttaweb.views.tables")
def test_get_grid_data(self):
view = self.make_view()
data = view.get_grid_data()
self.assertIsInstance(data, list)
self.assertGreater(len(data), 0)
table = data[0]
self.assertIsInstance(table, dict)
self.assertIn("name", table)
self.assertIn("schema", table)
def test_configure_grid(self):
view = self.make_view()
# sanity / coverage check
grid = view.make_grid(columns=["name", "schema"])
view.configure_grid(grid)
def test_get_instance(self):
view = self.make_view()
with patch.object(self.request, "matchdict", new={"name": "person"}):
table1 = view.get_instance()
self.assertIsInstance(table1, dict)
self.assertIn("name", table1)
self.assertEqual(table1["name"], "person")
self.assertIn("schema", table1)
table2 = view.get_instance()
self.assertIs(table2, table1)
self.assertEqual(table2["name"], "person")
def test_get_instance_title(self):
view = self.make_view()
table = {"name": "poser_foo"}
self.assertEqual(view.get_instance_title(table), "poser_foo")
def test_configure_form(self):
view = self.make_view()
table = {"name": "user", "description": "Represents a user"}
# no description widget by default
form = view.make_form(model_instance=table, fields=["name", "description"])
self.assertNotIn("description", form.widgets)
# but it gets added when configuring
view.configure_form(form)
self.assertIn("description", form.widgets)
def test_get_xref_buttons(self):
self.pyramid_config.add_route("users", "/users/")
self.pyramid_config.add_route("master_views.create", "/views/master/new")
model = self.app.model
view = self.make_view()
# nb. must add this first
self.pyramid_config.add_wutta_master_view(UserView)
# should be just one xref button by default
table = {"name": "user", "model_class": model.User}
buttons = view.get_xref_buttons(table)
self.assertEqual(len(buttons), 1)
button = buttons[0]
self.assertIn("Users", button)
self.assertIn("http://example.com/users/", button)
# unless we have perm to make new master view
with patch.object(self.request, "is_root", new=True):
table = {"name": "user", "model_class": model.User}
buttons = view.get_xref_buttons(table)
self.assertEqual(len(buttons), 3)
first, second, third = buttons
self.assertIn("Users", first)
self.assertIn("http://example.com/users/", first)
self.assertEqual(second, "
")
self.assertIn("New Master View", third)
self.assertIn("http://example.com/views/master/new", third)
def test_get_row_grid_data(self):
model = self.app.model
view = self.make_view()
table = model.Base.metadata.tables["person"]
table_dict = {"name": "person", "table": table}
data = view.get_row_grid_data(table_dict)
self.assertIsInstance(data, list)
self.assertGreater(len(data), 4)
columns = [c["column_name"] for c in data]
self.assertIn("full_name", columns)
self.assertIn("first_name", columns)
self.assertIn("last_name", columns)
def test_configure_row_grid(self):
view = self.make_view()
# sanity / coverage check
grid = view.make_grid(columns=["column_name", "data_type"])
view.configure_row_grid(grid)
def test_render_column_description(self):
view = self.make_view()
# nb. first 2 params are igored
text = view.render_column_description(None, None, "hello world")
self.assertEqual(text, "hello world")
text = view.render_column_description(None, None, "")
self.assertEqual(text, "")
text = view.render_column_description(None, None, None)
self.assertEqual(text, "")
msg = (
"This is a very long and rambling sentence. "
"There is no point to it except that it is long. "
"Far too long to be reasonable."
"I mean I am serious when I say this is simply too long."
)
text = view.render_column_description(None, None, msg)
self.assertNotEqual(text, msg)
self.assertIn("