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  }