diff --git a/assets/fingerprint.go b/assets/fingerprint.go index 0b2e7d9..cbc3ad9 100644 --- a/assets/fingerprint.go +++ b/assets/fingerprint.go @@ -44,17 +44,14 @@ func (m *manager) PathFor(fname string) (string, error) { hashString := hex.EncodeToString(hash[:]) // Add the hash to the filename - filename := path.Base(normalized) ext := path.Ext(normalized) - newFilename := filename[:len(filename)-len(ext)] + "-" + hashString + ext + filename := strings.TrimSuffix(normalized, ext) + filename += "-" + hashString + ext m.fmut.Lock() defer m.fmut.Unlock() - m.fileToHash[normalized] = newFilename - m.HashToFile[newFilename] = normalized + m.fileToHash[normalized] = filename + m.HashToFile[filename] = normalized - result = path.Join(path.Dir(normalized), newFilename) - result = withPrefix(result) - - return result, nil + return withPrefix(filename), nil } diff --git a/assets/fingerprint_test.go b/assets/fingerprint_test.go index 045d331..bf0ee21 100644 --- a/assets/fingerprint_test.go +++ b/assets/fingerprint_test.go @@ -24,6 +24,16 @@ func TestFingerprint(t *testing.T) { if !strings.Contains(a, "/public/") { t.Errorf("Expected %s to have /public/ prefix", a) } + + a, _ = m.PathFor("public/other/main.js") + b, _ = m.PathFor("public/other/main.js") + if a != b { + t.Errorf("Expected %s to equal %s", a, b) + } + + if !strings.Contains(a, "/public/") { + t.Errorf("Expected %s to have /public/ prefix", a) + } }) t.Run("adds starting slash", func(t *testing.T) { @@ -51,18 +61,33 @@ func TestFingerprint(t *testing.T) { }) t.Run("respects folders", func(t *testing.T) { - a, err := m.PathFor("public/main.js") + a, err := m.PathFor("main.js") if err != nil { t.Fatal(err) } + if !strings.HasPrefix(a, "/public/main-") { + t.Errorf("Expected %s to contain /public/other/main-", a) + } + b, _ := m.PathFor("public/other/main.js") if err != nil { t.Fatal(err) } + if !strings.HasPrefix(b, "/public/other/main-") { + t.Errorf("Expected %s to contain /public/other/main-", b) + } + if a == b { t.Errorf("Expected %s to not equal %s", a, b) } }) + + t.Run("file does not exist", func(t *testing.T) { + a, err := m.PathFor("foo.js") + if err == nil { + t.Errorf("File must not exists: %s", a) + } + }) }