Skip to content

Commit 926d91f

Browse files
committed
feat: SRTM pre-filter
1 parent ea34e17 commit 926d91f

File tree

5 files changed

+39
-7
lines changed

5 files changed

+39
-7
lines changed

valentine/lib/valentine_web/live/workspace_live/components/filter_component.ex

+8-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,14 @@ defmodule ValentineWeb.WorkspaceLive.Components.FilterComponent do
88
if !Map.has_key?(assigns.filters, assigns.name) do
99
assign(assigns, :filters, Map.put(assigns.filters, assigns.name, []))
1010
else
11-
assigns
11+
# Filter any values that are not in the list of atomic values
12+
assign(
13+
assigns,
14+
:filters,
15+
Map.update!(assigns.filters, assigns.name, fn values ->
16+
Enum.filter(values, &(&1 in assigns.values))
17+
end)
18+
)
1219
end
1320

1421
~H"""

valentine/lib/valentine_web/live/workspace_live/srtm/index.ex

+20-3
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,18 @@ defmodule ValentineWeb.WorkspaceLive.SRTM.Index do
99
@impl true
1010
def mount(%{"workspace_id" => workspace_id} = _params, _session, socket) do
1111
workspace = get_workspace(workspace_id)
12-
controls = filter_controls(%{})
12+
13+
filters = %{
14+
profile: [workspace.cloud_profile],
15+
type: [workspace.cloud_profile_type]
16+
}
17+
18+
controls = filter_controls(filters)
1319

1420
{:ok,
1521
socket
1622
|> assign(:controls, map_controls(controls, workspace))
17-
|> assign(:filters, %{})
23+
|> assign(:filters, filters)
1824
|> assign(:workspace, workspace)}
1925
end
2026

@@ -100,7 +106,18 @@ defmodule ValentineWeb.WorkspaceLive.SRTM.Index do
100106
do: Composer.list_controls()
101107

102108
defp filter_controls(filters) do
103-
filters = Map.values(filters) |> List.flatten()
109+
# This should be dynamically generated
110+
valid_tags = [
111+
"CCCS Low Profile for Cloud",
112+
"CCCS Medium Profile for Cloud",
113+
"CSP Full Stack",
114+
"CSP Stacked PaaS",
115+
"CSP Stacked SaaS",
116+
"Client IaaS / PaaS",
117+
"Client SaaS"
118+
]
119+
120+
filters = Map.values(filters) |> List.flatten() |> Enum.filter(&(&1 in valid_tags))
104121
Composer.list_controls_by_tags(filters)
105122
end
106123

valentine/test/valentine_web/live/components/filter_component_test.exs

+8
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,14 @@ defmodule ValentineWeb.WorkspaceLive.Components.FilterComponentTest do
4040
assert html =~ "filter"
4141
end
4242

43+
test "removes any selected field that are not actually in the values list", %{
44+
assigns: assigns
45+
} do
46+
assigns = Map.put(assigns, :filters, Map.put(assigns.filters, :filter, [:four]))
47+
html = render_component(FilterComponent, assigns)
48+
refute html =~ "four"
49+
end
50+
4351
test "renders a counter if a filter has values", %{assigns: assigns} do
4452
assigns = Map.put(assigns, :filters, Map.put(assigns.filters, :filter, ["one"]))
4553
html = render_component(FilterComponent, assigns)

valentine/test/valentine_web/live/workspace/srtm/index_test.exs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ defmodule ValentineWeb.WorkspaceLive.SRTM.IndexTest do
55

66
setup do
77
control = control_fixture(%{nist_id: "AC-1", tags: ["A", "B", "C"]})
8-
workspace = workspace_fixture()
8+
workspace = workspace_fixture(%{cloud_profile: "A", cloud_profile_type: "B"})
99

1010
workspace =
1111
Valentine.Composer.get_workspace!(workspace.id,

valentine/test/valentine_web/live/workspace/srtm/index_view_test.exs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ defmodule ValentineWeb.WorkspaceLive.SRTM.IndexViewTest do
55
import Valentine.ComposerFixtures
66

77
setup do
8-
control = control_fixture()
9-
workspace = workspace_fixture()
8+
control = control_fixture(%{nist_id: "AC-1", tags: ["A", "B", "C"]})
9+
workspace = workspace_fixture(%{cloud_profile: "A", cloud_profile_type: "B"})
1010

1111
%{
1212
control: control,

0 commit comments

Comments
 (0)