1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-17 17:47:03 +00:00

Handle missing .raw better, closes #19

- Add filestore unit tests to exercise #19
- Move deferred file close under error check
- Handle error message from server gracefully on message click
- Scroll to top of page when message loads successfully
This commit is contained in:
James Hillyerd
2013-11-09 08:47:20 -08:00
parent 425a1349c6
commit df11575b3a
3 changed files with 52 additions and 2 deletions

View File

@@ -330,10 +330,10 @@ func (m *FileMessage) rawPath() string {
// ReadHeader opens the .raw portion of a Message and returns a standard Go mail.Message object
func (m *FileMessage) ReadHeader() (msg *mail.Message, err error) {
file, err := os.Open(m.rawPath())
defer file.Close()
if err != nil {
return nil, err
}
defer file.Close()
reader := bufio.NewReader(file)
msg, err = mail.ReadMessage(reader)
return msg, err

View File

@@ -334,6 +334,48 @@ func TestFSSize(t *testing.T) {
}
}
// Test missing files
func TestFSMissing(t *testing.T) {
ds, logbuf := setupDataStore()
defer teardownDataStore(ds)
mbName := "fred"
subjects := []string{"a", "b", "c"}
sentIds := make([]string, len(subjects))
for i, subj := range subjects {
// Add a message
id, _ := deliverMessage(ds, mbName, subj, time.Now())
sentIds[i] = id
}
mb, err := ds.MailboxFor(mbName)
if err != nil {
t.Fatalf("Failed to MailboxFor(%q): %v", mbName, err)
}
// Delete a message file without removing it from index
msg, err := mb.GetMessage(sentIds[1])
assert.Nil(t, err)
fmsg := msg.(*FileMessage)
os.Remove(fmsg.rawPath())
msg, err = mb.GetMessage(sentIds[1])
assert.Nil(t, err)
// Try to read parts of message
_, err = msg.ReadHeader()
assert.Error(t, err)
_, err = msg.ReadBody()
assert.Error(t, err)
if t.Failed() {
// Wait for handler to finish logging
time.Sleep(2 * time.Second)
// Dump buffered log data if there was a failure
io.Copy(os.Stderr, logbuf)
}
}
// setupDataStore creates a new FileDataStore in a temporary directory
func setupDataStore() (*FileDataStore, *bytes.Buffer) {
path, err := ioutil.TempDir("", "inbucket")

View File

@@ -4,6 +4,14 @@
{{define "script"}}
<script>
var selected = "{{.selected}}"
function messageLoaded(responseText, textStatus, XMLHttpRequest) {
if (textStatus == "error") {
alert("Failed to load message, server said:\n" + responseText)
} else {
window.scrollTo(0,0)
}
}
function listLoaded() {
$('.listEntry').hover(
function() {
@@ -16,7 +24,7 @@
function() {
$('.listEntry').removeClass("listEntrySelected")
$(this).addClass("listEntrySelected")
$('#emailContent').load('/mailbox/{{.name}}/' + this.id)
$('#emailContent').load('/mailbox/{{.name}}/' + this.id, messageLoaded)
}
)
$("#messageList").slideDown()