Unreleased bug: Clear all pre-selected vuln filters when vulnerable filter is toggled off (#21821)

This commit is contained in:
RachelElysia 2024-09-04 16:15:34 -04:00 committed by GitHub
parent 73222541da
commit a4fb3f45a1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 57 additions and 7 deletions

View file

@ -36,9 +36,10 @@ import ManageAutomationsModal from "./components/ManageSoftwareAutomationsModal"
import AddSoftwareModal from "./components/AddSoftwareModal";
import {
buildSoftwareFilterQueryParams,
buildSoftwareVulnFiltersQueryParams,
getSoftwareFilterFromQueryParams,
getSoftwareVulnFiltersFromQueryParams,
ISoftwareVulnFilters,
ISoftwareVulnFiltersParams,
} from "./SoftwareTitles/SoftwareTable/helpers";
import SoftwareFiltersModal from "./components/SoftwareFiltersModal";
@ -308,7 +309,7 @@ const SoftwarePage = ({ children, router, location }: ISoftwarePageProps) => {
[handleTeamChange]
);
const onApplyVulnFilters = (vulnFilters: ISoftwareVulnFilters) => {
const onApplyVulnFilters = (vulnFilters: ISoftwareVulnFiltersParams) => {
const newQueryParams: ISoftwareApiParams = {
query,
teamId: currentTeamId,
@ -316,7 +317,7 @@ const SoftwarePage = ({ children, router, location }: ISoftwarePageProps) => {
orderKey: sortHeader,
page: 0, // resets page index
...buildSoftwareFilterQueryParams(softwareFilter),
...vulnFilters,
...buildSoftwareVulnFiltersQueryParams(vulnFilters),
};
router.replace(

View file

@ -0,0 +1,49 @@
import { isValidNumber } from "./helpers";
describe("isValidNumber", () => {
// Test valid numbers
it("returns true for valid numbers", () => {
expect(isValidNumber(0)).toBe(true);
expect(isValidNumber(42)).toBe(true);
expect(isValidNumber(-10)).toBe(true);
expect(isValidNumber(3.14)).toBe(true);
});
// Test invalid inputs
it("returns false for non-number inputs", () => {
expect(isValidNumber("42")).toBe(false);
expect(isValidNumber(null)).toBe(false);
expect(isValidNumber(undefined)).toBe(false);
expect(isValidNumber({})).toBe(false);
expect(isValidNumber([])).toBe(false);
expect(isValidNumber(true)).toBe(false);
});
// Test NaN
it("returns false for NaN", () => {
expect(isValidNumber(NaN)).toBe(false);
});
// Test with min value
it("respects min value when provided", () => {
expect(isValidNumber(5, 0)).toBe(true);
expect(isValidNumber(5, 5)).toBe(true);
expect(isValidNumber(5, 6)).toBe(false);
});
// Test with max value
it("respects max value when provided", () => {
expect(isValidNumber(5, undefined, 10)).toBe(true);
expect(isValidNumber(5, undefined, 5)).toBe(true);
expect(isValidNumber(5, undefined, 4)).toBe(false);
});
// Test with both min and max values
it("respects both min and max values when provided", () => {
expect(isValidNumber(5, 0, 10)).toBe(true);
expect(isValidNumber(0, 0, 10)).toBe(true);
expect(isValidNumber(10, 0, 10)).toBe(true);
expect(isValidNumber(-1, 0, 10)).toBe(false);
expect(isValidNumber(11, 0, 10)).toBe(false);
});
});

View file

@ -127,7 +127,7 @@ export type ISoftwareVulnFiltersParams = {
maxCvssScore?: number;
};
const isValidNumber = (
export const isValidNumber = (
value: any,
min?: number,
max?: number

View file

@ -18,7 +18,7 @@ const baseClass = "software-filters-modal";
interface ISoftwareFiltersModalProps {
onExit: () => void;
onSubmit: (vulnFilters: ISoftwareVulnFilters) => void;
onSubmit: (vulnFilters: ISoftwareVulnFiltersParams) => void;
vulnFilters: ISoftwareVulnFiltersParams;
isPremiumTier: boolean;
}
@ -53,8 +53,8 @@ const SoftwareFiltersModal = ({
onSubmit({
vulnerable: vulnSoftwareFilterEnabled,
exploit: hasKnownExploit || undefined,
min_cvss_score: severity?.minSeverity || undefined,
max_cvss_score: severity?.maxSeverity || undefined,
minCvssScore: severity?.minSeverity || undefined,
maxCvssScore: severity?.maxSeverity || undefined,
});
};