Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 2.15.1 #3714

Closed
wants to merge 9 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .fides/db_dataset.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2240,4 +2240,41 @@ dataset:
description: 'The name of the organization this Fides deployment belongs to'
data_categories:
- user.workplace
data_qualifier: aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified
- name: cookies
description: 'Fides Generated Description for Table: cookies'
data_categories: []
data_qualifier: aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified
fields:
- name: created_at
data_categories:
- system.operations
data_qualifier: aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified
- name: domain
data_categories:
- system.operations
data_qualifier: aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified
- name: id
data_categories:
- system.operations
data_qualifier: aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified
- name: name
data_categories:
- system.operations
data_qualifier: aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified
- name: path
data_categories:
- system.operations
data_qualifier: aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified
- name: privacy_declaration_id
data_categories:
- system.operations
data_qualifier: aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified
- name: system_id
data_categories:
- system.operations
data_qualifier: aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified
- name: updated_at
data_categories:
- system.operations
data_qualifier: aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified
17 changes: 15 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,13 @@ The types of changes are:
- `Fixed` for any bug fixes.
- `Security` in case of vulnerabilities.

## [Unreleased](https://github.com/ethyca/fides/compare/2.15.0...main)
## [Unreleased](https://github.com/ethyca/fides/compare/2.15.1...main)

## [2.15.1](https://github.com/ethyca/fides/compare/2.15.0...2.15.1)

### Changed
- Privacy center action cards are now able to expand to accommodate longer text [#3669](https://github.com/ethyca/fides/pull/3669)
- Allow Privacy Notices banner and modal to scroll as needed [#3713](https://github.com/ethyca/fides/pull/3713)

## [2.15.0](https://github.com/ethyca/fides/compare/2.14.1...2.15.0)

Expand Down Expand Up @@ -44,6 +50,9 @@ The types of changes are:
- HTML format for privacy request storage destinations [#3427](https://github.com/ethyca/fides/pull/3427)
- Persistent message showing result and timestamp of last integration test to "Integrations" tab in system view [#3628](https://github.com/ethyca/fides/pull/3628)
- Access and erasure support for SurveyMonkey [#3590](https://github.com/ethyca/fides/pull/3590)
- New Cookies Table for storing cookies associated with systems and privacy declarations [#3572](https://github.com/ethyca/fides/pull/3572)
- `fides-js` and privacy center now delete cookies associated with notices that were opted out of [#3569](https://github.com/ethyca/fides/pull/3569)
- Cookie input field on system data use tab [#3571](https://github.com/ethyca/fides/pull/3571)

### Fixed

Expand All @@ -66,6 +75,10 @@ The types of changes are:
- Update to latest asyncpg dependency to avoid build error [#3614](https://github.com/ethyca/fides/pull/3614)
- Fix bug where editing a data use on a system could delete existing data uses [#3627](https://github.com/ethyca/fides/pull/3627)
- Restrict Privacy Center debug logging to development-only [#3638](https://github.com/ethyca/fides/pull/3638)
- Fix bug where linking an integration would not update the tab when creating a new system [#3662](https://github.com/ethyca/fides/pull/3662)
- Fix dataset yaml not properly reflecting the dataset in the dropdown of system integrations tab [#3666](https://github.com/ethyca/fides/pull/3666)
- Fix privacy notices not being able to be edited via the UI after the addition of the `cookies` field [#3670](https://github.com/ethyca/fides/pull/3670)
- Add a transform in the case of `null` name fields in privacy declarations for the data use forms [#3683](https://github.com/ethyca/fides/pull/3683)

### Changed

Expand Down Expand Up @@ -198,7 +211,7 @@ The types of changes are:

### Developer Experience

- Use prettier to format *all* source files in client packages [#3240](https://github.com/ethyca/fides/pull/3240)
- Use prettier to format _all_ source files in client packages [#3240](https://github.com/ethyca/fides/pull/3240)

### Deprecated

Expand Down
50 changes: 34 additions & 16 deletions clients/admin-ui/cypress/e2e/privacy-notices.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -227,23 +227,41 @@ describe("Privacy notices", () => {
});

it("can make an edit", () => {
cy.visit(`${PRIVACY_NOTICES_ROUTE}/${ESSENTIAL_NOTICE_ID}`);
cy.wait("@getNoticeDetail");
const newName = "new name";
cy.getByTestId("input-name").clear().type(newName);
// should not reflect the new name since this is the edit form
cy.getByTestId("input-notice_key").should("have.value", "essential");
// but we can still update it
const newKey = "custom_key";
cy.getByTestId("input-notice_key").clear().type(newKey);

cy.getByTestId("save-btn").click();
cy.wait("@patchNotices").then((interception) => {
const { body } = interception.request;
expect(body[0].name).to.eql(newName);
expect(body[0].notice_key).to.eql(newKey);
cy.fixture("privacy-notices/notice.json").then((notice) => {
cy.visit(`${PRIVACY_NOTICES_ROUTE}/${ESSENTIAL_NOTICE_ID}`);
cy.wait("@getNoticeDetail");
const newName = "new name";
cy.getByTestId("input-name").clear().type(newName);
// should not reflect the new name since this is the edit form
cy.getByTestId("input-notice_key").should("have.value", "essential");
// but we can still update it
const newKey = "custom_key";
cy.getByTestId("input-notice_key").clear().type(newKey);

cy.getByTestId("save-btn").click();
cy.wait("@patchNotices").then((interception) => {
const { body } = interception.request;
const expected = {
name: newName,
notice_key: newKey,
consent_mechanism: notice.consent_mechanism,
data_uses: notice.data_uses,
description: notice.description,
disabled: notice.disabled,
displayed_in_api: notice.displayed_in_api,
displayed_in_overlay: notice.displayed_in_overlay,
displayed_in_privacy_center: notice.displayed_in_privacy_center,
enforcement_level: notice.enforcement_level,
has_gpc_flag: notice.has_gpc_flag,
id: notice.id,
internal_description: notice.internal_description,
origin: notice.origin,
regions: notice.regions,
};
expect(body[0]).to.eql(expected);
});
cy.wait("@getNoticeDetail");
});
cy.wait("@getNoticeDetail");
});
});

Expand Down
70 changes: 43 additions & 27 deletions clients/admin-ui/cypress/e2e/systems.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,9 @@ describe("System management page", () => {

it("Can step through the flow", () => {
cy.fixture("systems/system.json").then((system) => {
cy.intercept("GET", "/api/v1/system/*", {
body: { ...system, privacy_declarations: [] },
}).as("getDemoSystem");
// Fill in the describe form based on fixture data
cy.visit(ADD_SYSTEMS_ROUTE);
cy.getByTestId("manual-btn").click();
Expand Down Expand Up @@ -145,6 +148,7 @@ describe("System management page", () => {
"@getDataSubjects",
"@getDataUses",
"@getFilteredDatasets",
"@getDemoSystem",
]);
cy.getByTestId("new-declaration-form");
const declaration = system.privacy_declarations[0];
Expand Down Expand Up @@ -172,38 +176,49 @@ describe("System management page", () => {
data_categories: declaration.data_categories,
data_subjects: declaration.data_subjects,
dataset_references: ["demo_users_dataset_2"],
cookies: [],
id: "",
});
});
});
});

it("can render a warning when there is unsaved data", () => {
cy.visit(ADD_SYSTEMS_MANUAL_ROUTE);
cy.wait("@getSystems");
cy.wait("@getConnectionTypes");
cy.getByTestId("create-system-btn").click();
cy.getByTestId("input-name").type("test");
cy.getByTestId("input-fides_key").type("test");
cy.getByTestId("save-btn").click();
cy.wait("@postSystem");
cy.fixture("systems/system.json").then((system) => {
cy.intercept("GET", "/api/v1/system/*", {
body: { ...system, privacy_declarations: [] },
}).as("getDemoSystem");
cy.visit(ADD_SYSTEMS_MANUAL_ROUTE);
cy.wait("@getSystems");
cy.wait("@getConnectionTypes");
cy.getByTestId("create-system-btn").click();
cy.getByTestId("input-name").type(system.name);
cy.getByTestId("input-fides_key").type(system.fides_key);
cy.getByTestId("input-description").type(system.description);
cy.getByTestId("save-btn").click();
cy.wait("@postSystem");

// start typing a description
const description = "half formed thought";
cy.getByTestId("input-description").type(description);
// then try navigating to the privacy declarations tab
cy.getByTestId("tab-Data uses").click();
cy.getByTestId("confirmation-modal");
// make sure canceling works
cy.getByTestId("cancel-btn").click();
cy.getByTestId("input-description").should("have.value", description);
// now actually discard
cy.getByTestId("tab-Data uses").click();
cy.getByTestId("continue-btn").click();
// should load the privacy declarations page
cy.getByTestId("privacy-declaration-step");
// navigate back
cy.getByTestId("tab-System information").click();
cy.getByTestId("input-description").should("have.value", "");
// start typing a description
const description = "half formed thought";
cy.getByTestId("input-description").clear().type(description);
// then try navigating to the privacy declarations tab
cy.getByTestId("tab-Data uses").click();
cy.getByTestId("confirmation-modal");
// make sure canceling works
cy.getByTestId("cancel-btn").click();
cy.getByTestId("input-description").should("have.value", description);
// now actually discard
cy.getByTestId("tab-Data uses").click();
cy.getByTestId("continue-btn").click();
// should load the privacy declarations page
cy.getByTestId("privacy-declaration-step");
// navigate back and make sure description has the original description
cy.getByTestId("tab-System information").click();
cy.getByTestId("input-description").should(
"have.value",
system.description
);
});
});
});
});
Expand Down Expand Up @@ -309,6 +324,7 @@ describe("System management page", () => {
const { body } = interception.request;
expect(body.joint_controller.name).to.eql(controllerName);
});
cy.wait("@getFidesctlSystem");

// Switch to the Data Uses tab
cy.getByTestId("tab-Data uses").click();
Expand All @@ -334,15 +350,15 @@ describe("System management page", () => {
// edit the existing declaration
cy.getByTestId("accordion-header-improve.system").click();
cy.getByTestId("improve.system-form").within(() => {
cy.getByTestId("input-data_subjects").type(`anonymous{enter}`);
cy.getByTestId("input-data_subjects").type(`customer{enter}`);
cy.getByTestId("save-btn").click();
});
cy.wait("@putSystem").then((interception) => {
const { body } = interception.request;
expect(body.privacy_declarations.length).to.eql(1);
expect(body.privacy_declarations[0].data_subjects).to.eql([
"customer",
"anonymous_user",
"customer",
]);
});
cy.getByTestId("saved-indicator");
Expand Down
4 changes: 3 additions & 1 deletion clients/admin-ui/cypress/fixtures/systems/system.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
"data_use": "improve.system",
"data_qualifier": "aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified",
"data_subjects": ["customer"],
"dataset_references": ["demo_users_dataset"]
"dataset_references": ["demo_users_dataset"],
"cookies": [],
"id": "pri_ac9d4dfb-d033-4b06-bc7f-968df8d125ff"
}
],
"joint_controller": { "name": "Sally Controller" },
Expand Down
12 changes: 9 additions & 3 deletions clients/admin-ui/cypress/fixtures/systems/systems.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
"data_use": "improve.system",
"data_qualifier": "aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified",
"data_subjects": ["anonymous_user"],
"dataset_references": ["public"]
"dataset_references": ["public"],
"cookies": [],
"id": "pri_ac9d4dfb-d033-4b06-bc7f-968df8d125ff"
}
],
"joint_controller": null,
Expand Down Expand Up @@ -59,7 +61,9 @@
"data_subjects": ["customer"],
"dataset_references": ["demo_users_dataset"],
"egress": null,
"ingress": null
"ingress": null,
"cookies": [],
"id": "pri_ac9d4dfb-d033-4b06-bc7f-968df8d125ff"
}
],
"joint_controller": null,
Expand Down Expand Up @@ -99,7 +103,9 @@
"data_subjects": ["customer"],
"dataset_references": null,
"egress": null,
"ingress": null
"ingress": null,
"cookies": [],
"id": "pri_06430a1c-1365-422e-90a7-d444ddb32181"
}
],
"joint_controller": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
"data_use": "improve.system",
"data_qualifier": "aggregated.anonymized.unlinked_pseudonymized.pseudonymized.identified",
"data_subjects": ["anonymous_user"],
"dataset_references": ["public"]
"dataset_references": ["public"],
"cookies": [],
"id": "pri_ac9d4dfb-d033-4b06-bc7f-968df8d125ff"
},
{
"name": "Collect data for marketing",
Expand All @@ -27,7 +29,9 @@
"data_subjects": ["customer"],
"dataset_references": null,
"egress": null,
"ingress": null
"ingress": null,
"cookies": [],
"id": "pri_bc6e6efe-f122-3e33-ac9a-732ae8b437bb"
}
],
"joint_controller": null,
Expand Down
19 changes: 12 additions & 7 deletions clients/admin-ui/src/features/common/form/inputs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -316,21 +316,26 @@ const CreatableSelectInput = ({
size={size}
classNamePrefix="custom-creatable-select"
chakraStyles={{
container: (provided) => ({ ...provided, flexGrow: 1 }),
container: (provided) => ({
...provided,
flexGrow: 1,
backgroundColor: "white",
}),
dropdownIndicator: (provided) => ({
...provided,
background: "white",
bg: "transparent",
px: 2,
cursor: "inherit",
}),
indicatorSeparator: (provided) => ({
...provided,
display: "none",
}),
multiValue: (provided) => ({
...provided,
background: "primary.400",
color: "white",
}),
multiValueRemove: (provided) => ({
...provided,
display: "none",
visibility: "hidden",
}),
}}
components={components}
isSearchable={isSearchable}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,10 @@ const ConnectorParametersForm: React.FC<ConnectorParametersFormProps> = ({
: null}
{SystemType.DATABASE === connectionOption.type &&
!isCreatingConnectionConfig ? (
<DatasetConfigField dropdownOptions={datasetDropdownOptions} />
<DatasetConfigField
dropdownOptions={datasetDropdownOptions}
connectionConfig={connectionConfig}
/>
) : null}
<ButtonGroup size="sm" spacing="8px" variant="outline">
<Button
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ export const DatasetSelect = ({
isInvalid={isInvalid}
isRequired={isRequired}
>
{/* <VStack align="flex-start" w="inherit"> */}
{label ? (
<Label htmlFor={props.id || props.name} {...labelProps}>
{label}
Expand Down Expand Up @@ -107,7 +106,6 @@ export const DatasetSelect = ({
/>
{tooltip ? <QuestionTooltip label={tooltip} /> : null}
</Flex>
{/* </VStack> */}
</FormControl>
);
};
Expand Down
Loading