Unverified Commit fa99d9bb authored by Tamika Tannis's avatar Tamika Tannis Committed by GitHub

Clean up some tests; Create constant for hardcoded text (#407)

parent ef49b887
...@@ -115,12 +115,6 @@ class TestConfig(LocalConfig): ...@@ -115,12 +115,6 @@ class TestConfig(LocalConfig):
ISSUE_TRACKER_CLIENT_ENABLED = True ISSUE_TRACKER_CLIENT_ENABLED = True
ISSUE_TRACKER_MAX_RESULTS = 3 ISSUE_TRACKER_MAX_RESULTS = 3
PROGRAMMATIC_DISPLAY = {
"a_1": {
"display_order": 0
}
}
class TestNotificationsDisabledConfig(LocalConfig): class TestNotificationsDisabledConfig(LocalConfig):
AUTH_USER_METHOD = get_test_user AUTH_USER_METHOD = get_test_user
......
...@@ -46,11 +46,15 @@ describe("EditableSection", () => { ...@@ -46,11 +46,15 @@ describe("EditableSection", () => {
}); });
describe("render", () => { describe("render", () => {
const customTitle = "custom title"; const mockTitle = 'Mock';
const { wrapper, props } = setup({ title: customTitle }, <TagInput/>); const convertTextSpy = jest.spyOn(EditableSection, 'convertText').mockImplementation(() => mockTitle);
const { wrapper, props } = setup({ title: 'custom title' }, <TagInput/>);
it("sets the title from a prop", () => {
expect(wrapper.find(".section-title").text()).toBe("Custom Title"); it("renders the converted props.title as the section title", () => {
convertTextSpy.mockClear();
wrapper.instance().render();
expect(convertTextSpy).toHaveBeenCalledWith(props.title);
expect(wrapper.find(".section-title").text()).toBe(mockTitle);
}); });
it("renders children with additional props", () => { it("renders children with additional props", () => {
...@@ -75,9 +79,5 @@ describe("EditableSection", () => { ...@@ -75,9 +79,5 @@ describe("EditableSection", () => {
const { wrapper } = setup({readOnly: true}, <TagInput/>); const { wrapper } = setup({readOnly: true}, <TagInput/>);
expect(wrapper.find(".edit-button").length).toEqual(0); expect(wrapper.find(".edit-button").length).toEqual(0);
}); });
it('renders modifies title to have no underscores', () => {
expect(EditableSection.convertText("testing_a123_b456 c789")).toEqual("Testing A123 B456 C789")
})
}); });
}); });
export const PROGRMMATIC_DESC_HEADER = 'Read-only information, auto-generated'
...@@ -15,6 +15,7 @@ import BookmarkIcon from 'components/common/Bookmark/BookmarkIcon'; ...@@ -15,6 +15,7 @@ import BookmarkIcon from 'components/common/Bookmark/BookmarkIcon';
import Breadcrumb from 'components/common/Breadcrumb'; import Breadcrumb from 'components/common/Breadcrumb';
import DataPreviewButton from 'components/TableDetail/DataPreviewButton'; import DataPreviewButton from 'components/TableDetail/DataPreviewButton';
import ColumnList from 'components/TableDetail/ColumnList'; import ColumnList from 'components/TableDetail/ColumnList';
import EditableText from 'components/common/EditableText';
import ExploreButton from 'components/TableDetail/ExploreButton'; import ExploreButton from 'components/TableDetail/ExploreButton';
import Flag from 'components/common/Flag'; import Flag from 'components/common/Flag';
import FrequentUsers from 'components/TableDetail/FrequentUsers'; import FrequentUsers from 'components/TableDetail/FrequentUsers';
...@@ -40,7 +41,8 @@ import { formatDateTimeShort } from 'utils/dateUtils'; ...@@ -40,7 +41,8 @@ import { formatDateTimeShort } from 'utils/dateUtils';
import './styles'; import './styles';
import RequestDescriptionText from './RequestDescriptionText'; import RequestDescriptionText from './RequestDescriptionText';
import RequestMetadataForm from './RequestMetadataForm'; import RequestMetadataForm from './RequestMetadataForm';
import EditableText from "components/common/EditableText";
import { PROGRMMATIC_DESC_HEADER } from './constants';
export interface StateFromProps { export interface StateFromProps {
isLoading: boolean; isLoading: boolean;
...@@ -211,9 +213,10 @@ class TableDetail extends React.Component<TableDetailProps & RouteComponentProps ...@@ -211,9 +213,10 @@ class TableDetail extends React.Component<TableDetailProps & RouteComponentProps
</EditableSection> </EditableSection>
</section> </section>
</section> </section>
{data.programmatic_descriptions.length > 0 && {
data.programmatic_descriptions.length > 0 &&
<> <>
<div className="programmatic-title title-4">Read-Only information, Auto-Generated.</div> <div className="programmatic-title title-4">{PROGRMMATIC_DESC_HEADER}</div>
<hr className="programmatic-hr hr1"/> <hr className="programmatic-hr hr1"/>
</> </>
} }
......
import unittest import unittest
from amundsen_application.api.utils.metadata_utils import marshall_table_full from unittest.mock import patch, Mock
from amundsen_application.api.utils.metadata_utils import _update_prog_descriptions, _sort_prog_descriptions
from amundsen_application import create_app from amundsen_application import create_app
local_app = create_app('amundsen_application.config.TestConfig', 'tests/templates') local_app = create_app('amundsen_application.config.TestConfig', 'tests/templates')
class MetadataUtilsTest(unittest.TestCase): class ProgrammaticDescriptionsTest(unittest.TestCase):
def setUp(self) -> None: def setUp(self) -> None:
self.input_data = { pass
'cluster': 'test_cluster',
'columns': [ @patch('amundsen_application.api.utils.metadata_utils._sort_prog_descriptions')
{ def test_update_prog_descriptions(self, sort_mock) -> None:
'name': 'column_1', with local_app.app_context():
'description': 'This is a test', test_desc = [
'col_type': 'bigint',
'sort_order': 0,
'stats': [
{'stat_type': 'count', 'stat_val': '100', 'start_epoch': 1538352000, 'end_epoch': 1538352000},
{'stat_type': 'count_null', 'stat_val': '0', 'start_epoch': 1538352000, 'end_epoch': 1538352000}
]
}
],
'database': 'test_db',
'is_view': False,
'key': 'test_db://test_cluster.test_schema/test_table',
'owners': [],
'schema': 'test_schema',
'name': 'test_table',
'table_description': 'This is a test',
'tags': [],
'table_readers': [
{'user': {'email': 'test@test.com', 'first_name': None, 'last_name': None}, 'read_count': 100}
],
'watermarks': [
{'watermark_type': 'low_watermark', 'partition_key': 'ds', 'partition_value': '', 'create_time': ''},
{'watermark_type': 'high_watermark', 'partition_key': 'ds', 'partition_value': '', 'create_time': ''}
],
'table_writer': {
'application_url': 'https://test-test.test.test',
'name': 'test_name',
'id': 'test_id',
'description': 'This is a test'
},
'programmatic_descriptions': [
{'source': 'c_1', 'text': 'description c'}, {'source': 'c_1', 'text': 'description c'},
{'source': 'a_1', 'text': 'description a'}, {'source': 'a_1', 'text': 'description a'},
{'source': 'b_1', 'text': 'description b'} {'source': 'b_1', 'text': 'description b'}
] ]
} # Pretend config exists
local_app.config['PROGRAMMATIC_DISPLAY'] = Mock()
# Mock the effects of the sort method
sort_mock.side_effect = [1, 0, 1]
# Expected order based on mocked side effect
expected_programmatic_desc = [
{'source': 'a_1', 'text': 'description a'},
{'source': 'c_1', 'text': 'description c'},
{'source': 'b_1', 'text': 'description b'}
]
_update_prog_descriptions(test_desc)
self.assertEqual(test_desc, expected_programmatic_desc)
self.expected_data = {'badges': [], def test_sort_prog_descriptions_returns_value_from_config(self) -> None:
'cluster': 'test_cluster', """
'columns': [{'col_type': 'bigint', Verify the method will return the display order from the programmtic description
'description': 'This is a test', configuration if it exists for the given source
'name': 'column_1', :return:
'sort_order': 0, """
'stats': [{'end_epoch': 1538352000, with local_app.app_context():
'start_epoch': 1538352000, mock_order = 1
'stat_type': 'count', mock_config = {
'stat_val': '100'}, "c_1": {
{'end_epoch': 1538352000, "display_order": mock_order
'start_epoch': 1538352000, }
'stat_type': 'count_null', }
'stat_val': '0'}]}], in_config_value = {'source': 'c_1', 'text': 'I am a test'}
'database': 'test_db', self.assertEqual(_sort_prog_descriptions(mock_config, in_config_value), mock_order)
'description': None,
'is_editable': True,
'is_view': False,
'key': 'test_db://test_cluster.test_schema/test_table',
'last_updated_timestamp': None,
'name': 'test_table',
'owners': [],
'partition': {'is_partitioned': True, 'key': 'ds', 'value': ''},
'programmatic_descriptions': [{'source': 'a_1', 'text': 'description a'},
{'source': 'c_1', 'text': 'description c'},
{'source': 'b_1', 'text': 'description b'}],
'schema': 'test_schema',
'source': None,
'table_readers': [{'read_count': 100,
'user': {'display_name': 'test@test.com',
'email': 'test@test.com',
'employee_type': None,
'first_name': None,
'full_name': None,
'github_username': None,
'is_active': True,
'last_name': None,
'manager_email': None,
'manager_fullname': None,
'profile_url': '',
'role_name': None,
'slack_id': None,
'team_name': None,
'user_id': 'test@test.com'}}],
'table_writer': {'application_url': 'https://test-test.test.test',
'description': 'This is a test',
'id': 'test_id',
'kind': None,
'name': 'test_name'},
'tags': [],
'watermarks': [{'create_time': '',
'partition_key': 'ds',
'partition_value': '',
'watermark_type': 'low_watermark'},
{'create_time': '',
'partition_key': 'ds',
'partition_value': '',
'watermark_type': 'high_watermark'}]}
def test_marshal_table_full(self) -> None: def test_sort_prog_descriptions_returns_default_value(self) -> None:
"""
Verify the method will return the expected default value if programmtic decsription
source is not included in teh configuration
:return:
"""
with local_app.app_context(): with local_app.app_context():
actual_result = marshall_table_full(self.input_data) mock_config = {
self.assertEqual(actual_result, self.expected_data) "c_1": {
"display_order": 0
}
}
not_in_config_value = {'source': 'test', 'text': 'I am a test'}
self.assertEqual(_sort_prog_descriptions(mock_config, not_in_config_value), len(mock_config))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment