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  });