github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/export/manager_test.go (about) 1 package export 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/turbot/steampipe/pkg/constants" 8 ) 9 10 type testExporter struct { 11 alias string 12 extension string 13 name string 14 } 15 16 func (t *testExporter) Export(ctx context.Context, input ExportSourceData, destPath string) error { 17 return nil 18 } 19 func (t *testExporter) FileExtension() string { return t.extension } 20 func (t *testExporter) Name() string { return t.name } 21 func (t *testExporter) Alias() string { return t.alias } 22 23 var dummyCSVExporter = testExporter{alias: "", extension: ".csv", name: "csv"} 24 var dummyJSONExporter = testExporter{alias: "", extension: ".json", name: "json"} 25 var dummyASFFExporter = testExporter{alias: "asff.json", extension: ".json", name: "asff"} 26 var dummyNUNITExporter = testExporter{alias: "nunit3.xml", extension: ".xml", name: "nunit3"} 27 var dummySPSExporter = testExporter{alias: "sps", extension: constants.SnapshotExtension, name: constants.OutputFormatSnapshot} 28 29 type exporterTestCase struct { 30 name string 31 input string 32 expect interface{} 33 } 34 35 var exporterTestCases = []exporterTestCase{ 36 { 37 name: "Bad Format", 38 input: "bad-format", 39 expect: "ERROR", 40 }, 41 { 42 name: "csv file name", 43 input: "file.csv", 44 expect: &dummyCSVExporter, 45 }, 46 { 47 name: "csv format name", 48 input: "csv", 49 expect: &dummyCSVExporter, 50 }, 51 { 52 name: "Snapshot file name", 53 input: "file.sps", 54 expect: &dummySPSExporter, 55 }, 56 { 57 name: "Snapshot format name", 58 input: "sps", 59 expect: &dummySPSExporter, 60 }, 61 { 62 name: "json file name", 63 input: "file.json", 64 expect: &dummyJSONExporter, 65 }, 66 { 67 name: "json format name", 68 input: "json", 69 expect: &dummyJSONExporter, 70 }, 71 { 72 name: "asff json file name", 73 input: "file.asff.json", 74 expect: &dummyASFFExporter, 75 }, 76 { 77 name: "asff json format name", 78 input: "asff.json", 79 expect: &dummyASFFExporter, 80 }, 81 { 82 name: "nunit3 file name", 83 input: "file.nunit3.xml", 84 expect: &dummyNUNITExporter, 85 }, 86 { 87 name: "nunit3 format name", 88 input: "nunit3.xml", 89 expect: &dummyNUNITExporter, 90 }, 91 } 92 93 func TestDoExport(t *testing.T) { 94 exportersToRegister := []*testExporter{ 95 &dummyJSONExporter, 96 &dummyCSVExporter, 97 &dummySPSExporter, 98 &dummyASFFExporter, 99 &dummyNUNITExporter, 100 } 101 102 m := NewManager() 103 for _, e := range exportersToRegister { 104 m.Register(e) 105 } 106 for _, testCase := range exporterTestCases { 107 targets, err := m.resolveTargetsFromArgs([]string{testCase.input}, "dummy_execution_name") 108 shouldError := testCase.expect == "ERROR" 109 if shouldError { 110 if err == nil { 111 t.Errorf("Request for '%s' should have errored - but did not", testCase.input) 112 } 113 continue 114 } 115 if !shouldError { 116 if err != nil { 117 t.Errorf("Request for '%s' should not have errored - but did: %v", testCase.input, err) 118 } 119 continue 120 } 121 122 if len(targets) != 1 { 123 t.Errorf("%v with %v input => expected one target - got %d", testCase.name, testCase.input, len(targets)) 124 continue 125 } 126 actualTarget := targets[0] 127 expectedTargetExporter := testCase.expect.(*testExporter) 128 129 if actualTarget.exporter != expectedTargetExporter { 130 t.Errorf("%v with %v input => expected %s target - got %s", testCase.name, testCase.input, testCase.expect.(*testExporter).Name(), actualTarget.exporter.Name()) 131 continue 132 } 133 } 134 }