# -*- 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 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_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("