Skip to content

Commit

Permalink
HJ-338 added sorting for system.privacy_declarations and a test to ve…
Browse files Browse the repository at this point in the history
…rify (#5683)

Co-authored-by: Jade Wibbels <[email protected]>
  • Loading branch information
JadeCara and Jade Wibbels authored Jan 23, 2025
1 parent 1174c2c commit a51da8f
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 21 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Changes can also be flagged with a GitHub label for tracking purposes. The URL o

### Changed
- Updated UI colors to new brand. Update logo, homepage cards. [#5668](https://github.com/ethyca/fides/pull/5668)
- The privacy declarations for a system are now sorted alphabetically by name. [#5683](https://github.com/ethyca/fides/pull/5683)

### Developer Experience
- Migrated radio buttons and groups to Ant Design [#5681](https://github.com/ethyca/fides/pull/5681)
Expand Down
1 change: 1 addition & 0 deletions src/fides/api/models/sql_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,7 @@ class System(Base, FidesBase):
cascade="all, delete",
back_populates="system",
lazy="selectin",
order_by="PrivacyDeclaration.name",
)

data_stewards = relationship(
Expand Down
24 changes: 24 additions & 0 deletions tests/ctl/core/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1263,6 +1263,30 @@ def test_data_stewards_included_in_response(
assert "first_name" in steward
assert "last_name" in steward

def test_system_privacy_declarations_are_sorted(self, test_config, system, db):
"""Test system Privacy Declarations are returned in alphabetical order by name."""
data = {
"data_use": "essential",
"name": "Another Declaration Name",
"system_id": system.id,
"data_subjects": [],
"data_categories": [],
}
new_pd = PrivacyDeclaration.create(db, data=data)

result = _api.get(
url=test_config.cli.server_url,
headers=test_config.user.auth_header,
resource_type="system",
resource_id=system.fides_key,
)
assert result.status_code == 200

privacy_declarations = result.json()["privacy_declarations"]
assert len(privacy_declarations) == 2
assert privacy_declarations[0]["name"] == "Another Declaration Name"
assert privacy_declarations[1]["name"] == "Collect data for marketing"


@pytest.mark.unit
class TestSystemList:
Expand Down
34 changes: 34 additions & 0 deletions tests/ctl/models/test_sql_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from fides.api.db.system import get_system
from fides.api.models.sql_models import PrivacyDeclaration


def test_system_privacy_declarations_in_alphabetical_order(db, system):
"""
Ensure that the system privacy declarations are in alphabetical order by name
"""
# Add more privacy declarations to the system
new_privacy_declarations = [
{
"data_use": "marketing.advertising.profiling",
"name": "Declaration Name",
"system_id": system.id,
},
{
"data_use": "essential",
"name": "Another Declaration Name",
"system_id": system.id,
},
]
for data in new_privacy_declarations:
PrivacyDeclaration.create(db=db, data=data)
db.commit()

db.refresh(system)
updated_system = get_system(db, system.fides_key)

privacy_declarations = updated_system.privacy_declarations
sorted_privacy_declarations = sorted(privacy_declarations, key=lambda x: x.name)

assert (
privacy_declarations == sorted_privacy_declarations
), "Privacy declarations are not in alphabetical order by name"
46 changes: 25 additions & 21 deletions tests/ops/integration_tests/test_sql_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -933,27 +933,31 @@ async def test_retry_access_request(

# All four nodes directly downstream of the root node attempt to process,
# and nothing further processes downstream
assert [
(
get_collection_identifier(log),
log.status.value,
)
for log in execution_logs.order_by(ExecutionLog.created_at)
] == [
("Dataset traversal", "complete"),
("postgres_example_test_dataset:customer", "in_processing"),
("postgres_example_test_dataset:customer", "retrying"),
("postgres_example_test_dataset:customer", "error"),
("postgres_example_test_dataset:employee", "in_processing"),
("postgres_example_test_dataset:employee", "retrying"),
("postgres_example_test_dataset:employee", "error"),
("postgres_example_test_dataset:report", "in_processing"),
("postgres_example_test_dataset:report", "retrying"),
("postgres_example_test_dataset:report", "error"),
("postgres_example_test_dataset:visit", "in_processing"),
("postgres_example_test_dataset:visit", "retrying"),
("postgres_example_test_dataset:visit", "error"),
]
assert set(
[
(
get_collection_identifier(log),
log.status.value,
)
for log in execution_logs.order_by(ExecutionLog.created_at)
]
) == set(
[
("Dataset traversal", "complete"),
("postgres_example_test_dataset:customer", "in_processing"),
("postgres_example_test_dataset:customer", "retrying"),
("postgres_example_test_dataset:customer", "error"),
("postgres_example_test_dataset:employee", "in_processing"),
("postgres_example_test_dataset:employee", "retrying"),
("postgres_example_test_dataset:employee", "error"),
("postgres_example_test_dataset:report", "in_processing"),
("postgres_example_test_dataset:report", "retrying"),
("postgres_example_test_dataset:report", "error"),
("postgres_example_test_dataset:visit", "in_processing"),
("postgres_example_test_dataset:visit", "retrying"),
("postgres_example_test_dataset:visit", "error"),
]
)
# Downstream request tasks were marked as error
assert [rt.status.value for rt in privacy_request.access_tasks] == [
"complete",
Expand Down

0 comments on commit a51da8f

Please sign in to comment.