mirror of
https://github.com/kovetskiy/mark.git
synced 2026-03-17 07:57:37 +08:00
The range loop 'for _, attachment := range attachments' copied each element by value. Assigning attachment.Checksum inside the loop only modified the local copy; the original slice element was never updated. All returned attachments had empty Checksum fields, causing every attachment to be treated as changed on every run (the checksum comparison would never match). Switch to an index-based loop so the checksum is written directly to the slice element. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
91 lines
2.0 KiB
Go
91 lines
2.0 KiB
Go
package attachment
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
var (
|
|
replacements = []string{
|
|
"image1.jpg",
|
|
"images/image2.jpg",
|
|
"../image3.jpg",
|
|
}
|
|
)
|
|
|
|
type bufferCloser struct {
|
|
*bytes.Buffer
|
|
}
|
|
|
|
func (bufferCloser) Close() error { return nil }
|
|
|
|
type virtualOpener struct {
|
|
PathToBuf map[string]*bufferCloser
|
|
}
|
|
|
|
func (o *virtualOpener) Open(name string) (io.ReadCloser, error) {
|
|
if buf, ok := o.PathToBuf[name]; ok {
|
|
return buf, nil
|
|
}
|
|
return nil, os.ErrNotExist
|
|
}
|
|
|
|
func TestPrepareAttachmentsWithWorkDirBase(t *testing.T) {
|
|
|
|
testingOpener := &virtualOpener{
|
|
PathToBuf: map[string]*bufferCloser{
|
|
"image1.jpg": {bytes.NewBuffer(nil)},
|
|
"images/image2.jpg": {bytes.NewBuffer(nil)},
|
|
"../image3.jpg": {bytes.NewBuffer(nil)},
|
|
},
|
|
}
|
|
|
|
attaches, err := prepareAttachments(testingOpener, ".", replacements)
|
|
t.Logf("attaches: %v", err)
|
|
if err != nil {
|
|
println(err.Error())
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.Equal(t, "image1.jpg", attaches[0].Name)
|
|
assert.Equal(t, "image1.jpg", attaches[0].Replace)
|
|
|
|
assert.Equal(t, "images/image2.jpg", attaches[1].Name)
|
|
assert.Equal(t, "images/image2.jpg", attaches[1].Replace)
|
|
|
|
assert.Equal(t, "../image3.jpg", attaches[2].Name)
|
|
assert.Equal(t, "../image3.jpg", attaches[2].Replace)
|
|
|
|
assert.Equal(t, len(attaches), 3)
|
|
}
|
|
|
|
func TestPrepareAttachmentsWithSubDirBase(t *testing.T) {
|
|
|
|
testingOpener := &virtualOpener{
|
|
PathToBuf: map[string]*bufferCloser{
|
|
"a/b/image1.jpg": {bytes.NewBuffer(nil)},
|
|
"a/b/images/image2.jpg": {bytes.NewBuffer(nil)},
|
|
"a/image3.jpg": {bytes.NewBuffer(nil)},
|
|
},
|
|
}
|
|
|
|
attaches, err := prepareAttachments(testingOpener, "a/b", replacements)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, "image1.jpg", attaches[0].Name)
|
|
assert.Equal(t, "image1.jpg", attaches[0].Replace)
|
|
|
|
assert.Equal(t, "images/image2.jpg", attaches[1].Name)
|
|
assert.Equal(t, "images/image2.jpg", attaches[1].Replace)
|
|
|
|
assert.Equal(t, "../image3.jpg", attaches[2].Name)
|
|
assert.Equal(t, "../image3.jpg", attaches[2].Replace)
|
|
|
|
assert.Equal(t, len(attaches), 3)
|
|
}
|