github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/cmd/bundle-static_test.go (about) 1 package cmd 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path" 7 "runtime" 8 "strings" 9 "testing" 10 "time" 11 12 "github.com/ngocphuongnb/tetua/app/asset" 13 "github.com/ngocphuongnb/tetua/app/config" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func fileMTime(name string) (mtime time.Time, err error) { 18 file, err := os.Stat(name) 19 if err != nil { 20 return 21 } 22 return file.ModTime(), nil 23 } 24 25 func readFile(name string) string { 26 b, err := ioutil.ReadFile(name) 27 if err != nil { 28 panic(err) 29 } 30 return string(b) 31 } 32 33 func TestBundleAssets(t *testing.T) { 34 themeDir := "../themes/default" 35 config.ROOT_DIR = "./someinvaliddir" 36 asset.Load(themeDir, true) 37 assert.Equal(t, true, strings.HasPrefix(BundleStaticAssets().Error(), "open someinvaliddir/")) 38 39 _, currentFile, _, _ := runtime.Caller(0) 40 rootDir := path.Dir(path.Dir(path.Dir(currentFile))) 41 42 if err := os.Chdir(rootDir); err != nil { 43 panic(err) 44 } 45 46 config.ROOT_DIR = "" 47 config.WD = config.ROOT_DIR 48 themeDir = "app/themes/default" 49 asset.Load(themeDir, true) 50 51 bundledCssMTime, _ := fileMTime("app/asset/bundled.css.go") 52 bundledJsMTime, _ := fileMTime("app/asset/bundled.js.go") 53 bundledOtherMTime, _ := fileMTime("app/asset/bundled.js.go") 54 55 bundledCssContent := readFile("app/asset/bundled.css.go") 56 bundledJsContent := readFile("app/asset/bundled.js.go") 57 bundledOtherContent := readFile("app/asset/bundled.other.go") 58 assert.Equal(t, nil, BundleStaticAssets()) 59 60 newBundledCssMTime, _ := fileMTime("app/asset/bundled.css.go") 61 newBundledJsMTime, _ := fileMTime("app/asset/bundled.js.go") 62 newBundledOtherMTime, _ := fileMTime("app/asset/bundled.js.go") 63 64 newBundledCssContent := readFile("app/asset/bundled.css.go") 65 newBundledJsContent := readFile("app/asset/bundled.js.go") 66 newBundledOtherContent := readFile("app/asset/bundled.other.go") 67 68 assert.Equal(t, true, bundledCssMTime.Before(newBundledCssMTime)) 69 assert.Equal(t, true, bundledJsMTime.Before(newBundledJsMTime)) 70 assert.Equal(t, true, bundledOtherMTime.Before(newBundledOtherMTime)) 71 72 assert.Equal(t, bundledCssContent, newBundledCssContent) 73 assert.Equal(t, bundledJsContent, newBundledJsContent) 74 assert.Equal(t, bundledOtherContent, newBundledOtherContent) 75 76 // Test minify js file error 77 _, testFile, _, _ := runtime.Caller(0) 78 rootDir = path.Dir(path.Dir(path.Dir(testFile))) 79 invalidJsFileContent := `alert(;` 80 invalidJsFilePath, err := ioutil.TempFile(rootDir+"/private/tmp", "jsfile-") 81 82 if err != nil { 83 panic(err) 84 } 85 86 defer os.RemoveAll(invalidJsFilePath.Name()) 87 88 if err := os.WriteFile(invalidJsFilePath.Name(), []byte(invalidJsFileContent), 0644); err != nil { 89 panic(err) 90 } 91 92 asset.AppendAsset(&asset.StaticAsset{ 93 Name: "invalidjsfile", 94 Path: invalidJsFilePath.Name(), 95 Type: "js", 96 }) 97 98 errContent := BundleStaticAssets().Error() 99 assert.Equal(t, true, strings.HasPrefix(errContent, "unexpected")) 100 assert.Equal(t, true, strings.Contains(errContent, "alert")) 101 102 asset.Load(themeDir, true) 103 cssBundledContent = "package asset\npackage asset2" 104 assert.Equal(t, "2:1: expected declaration, found 'package'", bundleAssets().Error()) 105 106 reset() 107 jsBundledContent = "package asset\npackage asset2" 108 assert.Equal(t, "2:1: expected declaration, found 'package'", bundleAssets().Error()) 109 110 reset() 111 otherBundledContent = "package asset\npackage asset2" 112 assert.Equal(t, "2:1: expected declaration, found 'package'", bundleAssets().Error()) 113 } 114 115 func TestWriteBundledAssetsError(t *testing.T) { 116 _, currentFile, _, _ := runtime.Caller(0) 117 rootDir := path.Dir(path.Dir(path.Dir(currentFile))) 118 119 if err := os.Chdir(rootDir); err != nil { 120 panic(err) 121 } 122 123 config.ROOT_DIR = "" 124 config.WD = config.ROOT_DIR 125 themeDir := "app/themes/default" 126 asset.Load(themeDir, true) 127 128 reset() 129 cssBundledFile = "./invaliddir/invalidFile" 130 assert.Equal(t, "open ./invaliddir/invalidFile: no such file or directory", bundleAssets().Error()) 131 132 reset() 133 jsBundledFile = "./invaliddir/invalidFile" 134 assert.Equal(t, "open ./invaliddir/invalidFile: no such file or directory", bundleAssets().Error()) 135 136 reset() 137 otherBundledFile = "./invaliddir/invalidFile" 138 assert.Equal(t, "open ./invaliddir/invalidFile: no such file or directory", bundleAssets().Error()) 139 }