def test_add_conditional_format_with_multiple_filters(api: APIWrapper, list_fixture): new_conditional_formats = [ conditional_format( query_filter=[ QueryFilter(column="column", value=10, filter_type=QueryFilter.Types.LESS_THAN), QueryFilter( column="column", value=100, filter_type=QueryFilter.Types.GREATER_THAN, ), ], text_color="ff0055", background_color="ffffff", bold=True, italic=False, strike_through=False, ) ] for field in list_fixture.fields: if field.name == "formatted": field.conditional_formats = [] field.conditional_formats = new_conditional_formats api.domain.save(LISTS_SCHEMA, LIST_NAME, list_fixture) saved_domain = api.domain.get(LISTS_SCHEMA, LIST_NAME) for field in saved_domain.fields: if field.name == "formatted": assert field.conditional_formats.__len__() == 1 assert field.conditional_formats[ 0].filter == "format.column~lt=10&format.column~gt=100"
def test_update_conditional_format_serialize_filter(api: APIWrapper, list_fixture): new_filter = QueryFilter("formatted", 15, QueryFilter.Types.GREATER_THAN_OR_EQUAL) cf = conditional_format(new_filter, text_color="ff00ff") for field in list_fixture.fields: if field.name == "formatted": field.conditional_formats[0] = cf api.domain.save(LISTS_SCHEMA, LIST_NAME, list_fixture) saved_domain = api.domain.get(LISTS_SCHEMA, LIST_NAME) for field in saved_domain.fields: if field.name == "formatted": assert field.conditional_formats[ 0].filter == "format.column~gte=15"
def test_add_conditional_format(api: APIWrapper, list_fixture): new_conditional_format = conditional_format( query_filter="format.column~lte=7", text_color="ff0055", background_color="ffffff", bold=True, italic=False, strike_through=False, ) for field in list_fixture.fields: if field.name == "formatted": field.conditional_formats.append(new_conditional_format) api.domain.save(LISTS_SCHEMA, LIST_NAME, list_fixture) saved_domain = api.domain.get(LISTS_SCHEMA, LIST_NAME) for field in saved_domain.fields: if field.name == "formatted": assert len(field.conditional_formats) == 2
def test_add_conditional_format_with_missing_filter(api: APIWrapper, list_fixture): missing_filter_type_filter = QueryFilter("formatted", 13) new_conditional_format = conditional_format( query_filter=missing_filter_type_filter, text_color="ff0055", background_color="ffffff", bold=True, italic=False, strike_through=False, ) for field in list_fixture.fields: if field.name == "formatted": field.conditional_formats = [] field.conditional_formats = [new_conditional_format] api.domain.save(LISTS_SCHEMA, LIST_NAME, list_fixture) saved_domain = api.domain.get(LISTS_SCHEMA, LIST_NAME) for field in saved_domain.fields: if field.name == "formatted": assert field.conditional_formats[0].filter == "format.column~eq=13"
def test_add_malformed_query_filter(api: APIWrapper, list_fixture): new_conditional_format = conditional_format( query_filter="this-is-a-badly-formed-filter", text_color="ff0055", background_color="ffffff", bold=True, italic=False, strike_through=False, ) for field in list_fixture.fields: if field.name == "formatted": field.conditional_formats = [] field.conditional_formats = [new_conditional_format] api.domain.save(LISTS_SCHEMA, LIST_NAME, list_fixture) saved_domain = api.domain.get(LISTS_SCHEMA, LIST_NAME) for field in saved_domain.fields: if field.name == "formatted": assert (field.conditional_formats[0].filter != "this-is-a-badly-formed-filter" ), "api should discard meaningless filters"
def setUp(self): self.test_domain = Domain( **{ "container": "TestContainer", "description": "A Test Domain", "domain_id": 5314, "fields": [{ "name": "theKey", "rangeURI": "int" }], }) self.test_domain.fields[0].conditional_formats = [ # create conditional format using our utility for a QueryFilter conditional_format( background_color="fcba03", bold=True, italic=True, query_filter=QueryFilter("theKey", 200), strike_through=True, text_color="f44e3b", ), # create conditional format using our utility for a QueryFilter list conditional_format( background_color="fcba03", bold=True, italic=True, query_filter=[ QueryFilter("theKey", 500, QueryFilter.Types.GREATER_THAN), QueryFilter("theKey", 1000, QueryFilter.Types.LESS_THAN), ], strike_through=True, text_color="f44e3b", ), ] class MockSave(MockLabKey): api = "saveDomain.api" default_action = domain_controller default_success_body = {} self.service = MockSave() payload = { "domainDesign": self.test_domain.to_json(), "queryName": self.query_name, "schemaName": self.schema_name, } self.expected_kwargs = { "expected_args": [self.service.get_server_url()], "data": json.dumps(payload, sort_keys=True), "headers": { "Content-Type": "application/json" }, "timeout": 300, } self.args = [ mock_server_context(self.service), self.schema_name, self.query_name, self.test_domain, ]
pytestmark = pytest.mark.integration # Mark all tests in this module as integration tests LISTS_SCHEMA = "lists" LIST_NAME = "testlist" CONDITIONAL_FORMAT = [{ "filter": "format.column~gte=25", "textcolor": "ff0000", "backgroundcolor": "ffffff", "bold": True, "italic": False, "strikethrough": False, }] SERIALIZED_QUERY_FILTER = QueryFilter("formatted", 35, QueryFilter.Types.LESS_THAN) SERIALIZED_CONDITIONAL_FORMAT = conditional_format( query_filter=SERIALIZED_QUERY_FILTER, bold=False, text_color="ffff00").to_json() LIST_DEFINITION = { "kind": "IntList", "domainDesign": { "name": LIST_NAME, "fields": [ { "name": "rowId", "rangeURI": "int" }, { "name": "formatted", "rangeURI": "int", "conditionalFormats": CONDITIONAL_FORMAT,
"options": {"keyName": "rowId", "keyType": "AutoIncrementInteger"}, } domain_cf = api.domain.create(list_with_cf) ################### # Edit an existing domain's conditional format ################### age_field = list(filter(lambda domain_field: domain_field.name == "age", domain_cf.fields))[0] print( 'The filter on field "' + age_field.name + '" was: ' + age_field.conditional_formats[0].filter ) for field in domain_cf.fields: if field.name == "age": cf = conditional_format(query_filter="format.column~eq=30", text_color="ff0000") field.conditional_formats = [cf] if field.name == "date": cf = conditional_format( query_filter=QueryFilter("date", "10/30/1995", QueryFilter.Types.DATE_LESS_THAN), text_color="f44e3b", ) field.conditional_formats = [cf] api.domain.save("lists", "ListWithConditionalFormats", domain_cf) print( 'The filter on field "' + age_field.name + '" has been updated to: ' + age_field.conditional_formats[0].filter )