github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/base/component/list_dir_test.go (about) 1 package component 2 3 import ( 4 "encoding/json" 5 "sort" 6 "testing" 7 8 "github.com/google/go-cmp/cmp" 9 ) 10 11 func TestListDirectoryComponents(t *testing.T) { 12 components, err := ListDirectoryComponents("./testdata/valid_mappings/some_json_components/") 13 if err != nil { 14 t.Fatalf(err.Error()) 15 } 16 17 names := getComponentNames(components) 18 expect := []string{"body", "meta", "readme"} 19 if diff := cmp.Diff(expect, names); diff != "" { 20 t.Fatalf("component names (-want +got):\n%s", diff) 21 } 22 23 err = ExpandListedComponents(components, nil) 24 if err != nil { 25 t.Fatalf(err.Error()) 26 } 27 28 bodyComponent := components.Base().GetSubcomponent("body").(*BodyComponent) 29 bodyComponent.LoadAndFill(nil) 30 data, err := json.Marshal(bodyComponent.Value) 31 if err != nil { 32 t.Fatalf(err.Error()) 33 } 34 expectStr := "[[1,2,3],[4,5,6]]" 35 if diff := cmp.Diff(expectStr, string(data)); diff != "" { 36 t.Errorf("body component (-want +got):\n%s", diff) 37 } 38 39 metaComponent := components.Base().GetSubcomponent("meta").(*MetaComponent) 40 metaComponent.LoadAndFill(nil) 41 data, err = json.Marshal(metaComponent.Value) 42 if err != nil { 43 t.Fatalf(err.Error()) 44 } 45 expectStr = "{\"qri\":\"md:0\",\"title\":\"title\"}" 46 if diff := cmp.Diff(expectStr, string(data)); diff != "" { 47 t.Errorf("meta component (-want +got):\n%s", diff) 48 } 49 50 readmeComponent := components.Base().GetSubcomponent("readme").(*ReadmeComponent) 51 readmeComponent.LoadAndFill(nil) 52 expectStr = "# Readme\n\nDescribes this dataset.\n" 53 if diff := cmp.Diff(expectStr, readmeComponent.Value.Text); diff != "" { 54 t.Errorf("readme component (-want +got):\n%s", diff) 55 } 56 } 57 58 func TestIsKnownFilename(t *testing.T) { 59 known := GetKnownFilenames() 60 61 goodCases := []struct { 62 description string 63 filename string 64 }{ 65 {"body csv file", "body.csv"}, 66 {"meta json file", "meta.json"}, 67 {"readme file", "readme.md"}, 68 {"readme file - uppercase", "README.md"}, 69 {"transform file", "transform.star"}, 70 {"dataset json", "dataset.json"}, 71 {"dataset yaml", "dataset.yaml"}, 72 } 73 74 badCases := []struct { 75 description string 76 filename string 77 }{ 78 {"body bad extension", "body.bin"}, 79 {"meta bad extension", "meta.jpg"}, 80 {"unknown filename", "my_content.csv"}, 81 {"vi temporary", ".body.csv.swp"}, 82 {"emacs temporary", "#body.csv"}, 83 } 84 85 for i, c := range goodCases { 86 if !IsKnownFilename(c.filename, known) { 87 t.Errorf("error for good case %d: %s", i, c.description) 88 } 89 } 90 for i, c := range badCases { 91 if IsKnownFilename(c.filename, known) { 92 t.Errorf("error for bad case %d: %s", i, c.description) 93 } 94 } 95 } 96 97 func getComponentNames(comp Component) []string { 98 names := make([]string, 0) 99 for _, name := range AllSubcomponentNames() { 100 sub := comp.Base().GetSubcomponent(name) 101 if sub != nil { 102 names = append(names, name) 103 } 104 } 105 sort.Strings(names) 106 return names 107 } 108 109 func TestIsKnownFilenameAllowNil(t *testing.T) { 110 goodFilename := "structure.json" 111 badFilename := "structure.format" 112 if !IsKnownFilename(goodFilename, nil) { 113 t.Errorf("expected goodFilename to be a known filename") 114 } 115 if IsKnownFilename(badFilename, nil) { 116 t.Errorf("expected badFilename to not be a known filename") 117 } 118 }