github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/ui/dashboard/src/utils/snapshot.test.ts (about) 1 import { DashboardExecutionEventWithSchema, PanelDefinition } from "../types"; 2 import { 3 EXECUTION_SCHEMA_VERSION_20220614, 4 EXECUTION_SCHEMA_VERSION_20220929, 5 } from "../constants/versions"; 6 import { stripSnapshotDataForExport } from "./snapshot"; 7 8 describe("snapshot utils", () => { 9 describe("stripSnapshotDataForExport", () => { 10 test("Schema 20220614", () => { 11 const inputSnapshot: DashboardExecutionEventWithSchema = { 12 schema_version: EXECUTION_SCHEMA_VERSION_20220614, 13 execution_id: "0x140029247e0", 14 dashboard_node: { 15 name: "aws_insights.dashboard.aws_iam_user_dashboard", 16 }, 17 layout: { 18 name: "aws_insights.dashboard.aws_iam_user_dashboard", 19 panel_type: "dashboard", 20 children: [ 21 { 22 name: "aws_insights.container.dashboard_aws_iam_user_dashboard_anonymous_container_0", 23 panel_type: "container", 24 }, 25 ], 26 }, 27 panels: { 28 "aws_insights.dashboard.aws_iam_user_dashboard": { 29 name: "aws_insights.dashboard.aws_iam_user_dashboard", 30 documentation: "# Some documentation", 31 sql: "select something from somewhere", 32 source_definition: 'some { hcl: "values" }', 33 properties: { 34 search_path: ["some_schema"], 35 search_path_prefix: ["some_prefix"], 36 sql: "select something from somewhere", 37 }, 38 }, 39 "aws_insights.container.dashboard_aws_iam_user_dashboard_anonymous_container_0": 40 { 41 name: "aws_insights.container.dashboard_aws_iam_user_dashboard_anonymous_container_0", 42 documentation: "# Some documentation", 43 sql: "select something from somewhere", 44 source_definition: 'some { hcl: "values" }', 45 properties: { 46 search_path: ["some_schema"], 47 search_path_prefix: ["some_prefix"], 48 sql: "select something from somewhere", 49 }, 50 }, 51 }, 52 inputs: { 53 "input.foo": "bar", 54 }, 55 variables: { 56 foo: "bar", 57 }, 58 search_path: ["some_schema"], 59 search_path_prefix: ["some_prefix"], 60 start_time: "2022-10-27T14:43:57.79514+01:00", 61 end_time: "2022-10-27T14:43:58.045925+01:00", 62 }; 63 64 const migratedEvent = stripSnapshotDataForExport(inputSnapshot); 65 66 const expectedPanels = {}; 67 68 for (const [name, panel] of Object.entries(inputSnapshot.panels)) { 69 const { documentation, sql, source_definition, ...rest } = 70 panel as PanelDefinition; 71 expectedPanels[name] = { ...rest, properties: {} }; 72 } 73 74 const expectedEvent = { 75 schema_version: inputSnapshot.schema_version, 76 dashboard_node: inputSnapshot.dashboard_node, 77 execution_id: inputSnapshot.execution_id, 78 layout: inputSnapshot.layout, 79 panels: expectedPanels, 80 inputs: inputSnapshot.inputs, 81 variables: inputSnapshot.variables, 82 start_time: inputSnapshot.start_time, 83 end_time: inputSnapshot.end_time, 84 }; 85 86 expect(migratedEvent).toEqual(expectedEvent); 87 }); 88 89 test("Schema 20220929", () => { 90 const inputSnapshot: DashboardExecutionEventWithSchema = { 91 schema_version: EXECUTION_SCHEMA_VERSION_20220929, 92 layout: { 93 name: "aws_insights.dashboard.aws_iam_user_dashboard", 94 panel_type: "dashboard", 95 children: [ 96 { 97 name: "aws_insights.container.dashboard_aws_iam_user_dashboard_anonymous_container_0", 98 panel_type: "container", 99 }, 100 ], 101 }, 102 panels: { 103 "aws_insights.dashboard.aws_iam_user_dashboard": { 104 name: "aws_insights.dashboard.aws_iam_user_dashboard", 105 documentation: "# Some documentation", 106 sql: "select something from somewhere", 107 source_definition: 'some { hcl: "values" }', 108 properties: { 109 search_path: ["some_schema"], 110 search_path_prefix: ["some_prefix"], 111 sql: "select something from somewhere", 112 }, 113 }, 114 "aws_insights.container.dashboard_aws_iam_user_dashboard_anonymous_container_0": 115 { 116 name: "aws_insights.container.dashboard_aws_iam_user_dashboard_anonymous_container_0", 117 documentation: "# Some documentation", 118 sql: "select something from somewhere", 119 source_definition: 'some { hcl: "values" }', 120 properties: { 121 search_path: ["some_schema"], 122 search_path_prefix: ["some_prefix"], 123 sql: "select something from somewhere", 124 }, 125 }, 126 }, 127 inputs: { 128 "input.foo": "bar", 129 }, 130 variables: { 131 foo: "bar", 132 }, 133 search_path: ["some_schema"], 134 search_path_prefix: ["some_prefix"], 135 start_time: "2022-10-27T14:43:57.79514+01:00", 136 end_time: "2022-10-27T14:43:58.045925+01:00", 137 }; 138 139 const migratedEvent = stripSnapshotDataForExport(inputSnapshot); 140 141 const expectedPanels = {}; 142 143 for (const [name, panel] of Object.entries(inputSnapshot.panels)) { 144 const { documentation, sql, source_definition, ...rest } = 145 panel as PanelDefinition; 146 expectedPanels[name] = { ...rest, properties: {} }; 147 } 148 149 const expectedEvent = { 150 schema_version: inputSnapshot.schema_version, 151 layout: inputSnapshot.layout, 152 panels: expectedPanels, 153 inputs: inputSnapshot.inputs, 154 variables: inputSnapshot.variables, 155 start_time: inputSnapshot.start_time, 156 end_time: inputSnapshot.end_time, 157 }; 158 159 expect(migratedEvent).toEqual(expectedEvent); 160 }); 161 162 test("Unsupported schema", () => { 163 const inputSnapshot: DashboardExecutionEventWithSchema = { 164 // @ts-ignore 165 schema_version: "20221010", 166 }; 167 168 expect(() => stripSnapshotDataForExport(inputSnapshot)).toThrow( 169 `Unsupported dashboard event schema ${inputSnapshot.schema_version}` 170 ); 171 }); 172 }); 173 });