github.com/andrewrech/ih-abstract@v0.0.0-20210322142951-2fec1c8d0f38/ih-abstract_test.go (about) 1 package main 2 3 import ( 4 "log" 5 "os" 6 "testing" 7 8 "github.com/google/go-cmp/cmp" 9 ) 10 11 // TestFile is a test CSV file containing simulated / de-identified input data. 12 const TestFile = "test.csv" 13 14 // TestFileOld is a test CSV file containing simulated / de-identified outdated input data. 15 // Some records are removed to simulate old data. 16 const TestFileOld = "test_old.csv" 17 18 // TestFilePhi is a test CSV file containing real input data. 19 // This file is available within our organization upon request. 20 const TestFilePhi = "test_phi.csv" 21 22 // TestFilePhiOld is a test CSV file containing real outdated input data. 23 // This file is available within our organization upon request. 24 const TestFilePhiOld = "test_phi_old.csv" 25 26 // TestFilePhiGeneric is a test CSV file containing real input data. 27 // The file contains generic pathology data. 28 // This file is available within our organization upon request. 29 const TestFilePhiGeneric = "test_phi_generic.csv" 30 31 // TestFilePhiGenericOld is a test CSV file containing real outdated input data. 32 // The file contains generic pathology data. 33 // This file is available within our organization upon request. 34 const TestFilePhiGenericOld = "test_phi_generic_old.csv" 35 36 func TestMain(m *testing.M) { 37 previousDir, err := os.Getwd() 38 if err != nil { 39 log.Println(err) 40 } 41 42 err = os.Chdir("./testdata") 43 if err != nil { 44 log.Println(err) 45 } 46 47 exitVal := m.Run() 48 49 // change to previous directory 50 err = os.Chdir(previousDir) 51 if err != nil { 52 log.Println(err) 53 } 54 55 os.Exit(exitVal) 56 } 57 58 func cleanupTestFull() { 59 testFiles := []string{ 60 "cpd.csv", 61 "msi-unique-strings.csv", 62 "msi-unique-strings-new.csv", 63 "msi.csv", 64 "new-ids.tst", 65 "pdl1-unique-strings.csv", 66 "pdl1-unique-strings-new.csv", 67 "pdl1.csv", 68 "results-increment.csv", 69 "results.csv", 70 "wbc.csv", 71 } 72 73 for _, f := range testFiles { 74 if _, err := os.Stat(f); err == nil { 75 err := os.Remove(f) 76 if err != nil { 77 log.Fatalln(err) 78 } 79 } 80 } 81 } 82 83 func innerTest(f flags, newFile string) { 84 conn, err := os.Open(newFile) 85 if err != nil { 86 log.Fatalln(err) 87 } 88 89 mainInner(f, conn) 90 } 91 92 func TestFullFilter(t *testing.T) { 93 cleanupTestFull() 94 95 config := "" 96 example := false 97 noFilter := false 98 old := TestFileOld 99 sql := false 100 101 var f flags 102 f.config = &config 103 f.example = &example 104 f.noFilter = &noFilter 105 f.old = &old 106 f.sql = &sql 107 108 defer cleanupTestFull() 109 innerTest(f, TestFile) 110 111 tests := map[string]struct { 112 input string 113 want int64 114 }{ 115 "integration: cpd.csv": {input: "cpd.csv", want: int64(2)}, 116 "integration: msi-unique-strings-new.csv": {input: "msi-unique-strings-new.csv", want: int64(3)}, 117 "integration: msi-unique-strings.csv": {input: "msi-unique-strings.csv", want: int64(3)}, 118 "integration: pdl1-unique-strings-new.csv": {input: "pdl1-unique-strings-new.csv", want: int64(2)}, 119 "integration: pdl1-unique-strings.csv": {input: "pdl1-unique-strings.csv", want: int64(2)}, 120 "integration: pdl1.csv": {input: "pdl1.csv", want: int64(5)}, 121 "integration: results-increment.csv": {input: "results-increment.csv", want: int64(8)}, 122 "integration: results.csv": {input: "results.csv", want: int64(12)}, 123 "integration: wbc.csv": {input: "wbc.csv", want: int64(5)}, 124 } 125 126 for name, tc := range tests { 127 name := name 128 tc := tc 129 130 t.Run(name, func(t *testing.T) { 131 got := helperCsvLines(tc.input) 132 133 diff := cmp.Diff(tc.want, got) 134 if diff != "" { 135 t.Fatalf(diff) 136 } 137 }) 138 } 139 } 140 141 func TestFullNoFilter(t *testing.T) { 142 cleanupTestFull() 143 144 config := "" 145 example := false 146 noFilter := true 147 old := TestFileOld 148 sql := false 149 150 var f flags 151 f.config = &config 152 f.example = &example 153 f.noFilter = &noFilter 154 f.old = &old 155 f.sql = &sql 156 157 defer cleanupTestFull() 158 innerTest(f, TestFile) 159 160 tests := map[string]struct { 161 input string 162 want int64 163 }{ 164 "integration: results-increment.csv": {input: "results-increment.csv", want: int64(13)}, 165 "integration: results.csv": {input: "results.csv", want: int64(13)}, 166 } 167 168 for name, tc := range tests { 169 name := name 170 tc := tc 171 172 t.Run(name, func(t *testing.T) { 173 got := helperCsvLines(tc.input) 174 175 diff := cmp.Diff(tc.want, got) 176 if diff != "" { 177 t.Fatalf(diff) 178 } 179 }) 180 } 181 } 182 183 func TestPHIFilter(t *testing.T) { 184 err := os.Chdir("./phi") 185 if err != nil { 186 log.Fatalln(err) 187 } 188 189 cleanupTestFull() 190 191 err = os.Link("pdl1-unique-strings.csv-test", "pdl1-unique-strings.csv") 192 if err != nil { 193 log.Fatalln(err) 194 } 195 196 err = os.Link("msi-unique-strings.csv-test", "msi-unique-strings.csv") 197 if err != nil { 198 log.Fatalln(err) 199 } 200 201 defer func() { 202 err := os.Chdir("../") 203 if err != nil { 204 log.Fatalln(err) 205 } 206 }() 207 208 config := "" 209 example := false 210 noFilter := false 211 old := TestFilePhiOld 212 sql := false 213 214 var f flags 215 f.config = &config 216 f.example = &example 217 f.noFilter = &noFilter 218 f.old = &old 219 f.sql = &sql 220 221 defer cleanupTestFull() 222 innerTest(f, TestFilePhi) 223 224 tests := map[string]struct { 225 input string 226 want int64 227 }{ 228 "integration: cpd.csv": {input: "cpd.csv", want: int64(559)}, 229 "integration: msi-unique-strings-new.csv": {input: "msi-unique-strings-new.csv", want: int64(1)}, 230 "integration: msi-unique-strings.csv": {input: "msi-unique-strings.csv", want: int64(3)}, 231 "integration: pdl1-unique-strings-new.csv": {input: "pdl1-unique-strings-new.csv", want: int64(1)}, 232 "integration: pdl1-unique-strings.csv": {input: "pdl1-unique-strings.csv", want: int64(16)}, 233 "integration: pdl1.csv": {input: "pdl1.csv", want: int64(118)}, 234 "integration: results-increment.csv": {input: "results-increment.csv", want: int64(725)}, 235 "integration: results.csv": {input: "results.csv", want: int64(334924)}, 236 "integration: wbc.csv": {input: "wbc.csv", want: int64(334200)}, 237 } 238 239 for name, tc := range tests { 240 name := name 241 tc := tc 242 243 t.Run(name, func(t *testing.T) { 244 got := helperCsvLines(tc.input) 245 246 diff := cmp.Diff(tc.want, got) 247 if diff != "" { 248 t.Fatalf(diff) 249 } 250 }) 251 } 252 } 253 254 func TestPHINoFilter(t *testing.T) { 255 err := os.Chdir("./phi") 256 if err != nil { 257 log.Fatalln(err) 258 } 259 260 cleanupTestFull() 261 262 defer func() { 263 err := os.Chdir("../") 264 if err != nil { 265 log.Fatalln(err) 266 } 267 }() 268 269 config := "" 270 example := false 271 noFilter := true 272 old := TestFilePhiGenericOld 273 sql := false 274 275 var f flags 276 f.config = &config 277 f.example = &example 278 f.noFilter = &noFilter 279 f.old = &old 280 f.sql = &sql 281 282 // defer cleanupTestFull() 283 innerTest(f, TestFilePhiGeneric) 284 285 tests := map[string]struct { 286 input string 287 want int64 288 }{ 289 "integration: results-increment.csv": {input: "results-increment.csv", want: int64(50001)}, 290 } 291 292 for name, tc := range tests { 293 name := name 294 tc := tc 295 296 t.Run(name, func(t *testing.T) { 297 got := helperCsvLines(tc.input) 298 299 diff := cmp.Diff(tc.want, got) 300 if diff != "" { 301 t.Fatalf(diff) 302 } 303 }) 304 } 305 }