143 lines
2.9 KiB
V
143 lines
2.9 KiB
V
module mailbox
|
|
|
|
import time
|
|
|
|
fn test_mailbox_basic_operations() {
|
|
mut mb := Mailbox{
|
|
name: 'INBOX'
|
|
uid_validity: 1234
|
|
}
|
|
|
|
// Test empty mailbox
|
|
msgs := mb.list() or { panic(err) }
|
|
assert msgs.len == 0
|
|
|
|
// Test adding a message
|
|
msg1 := Message{
|
|
uid: 1
|
|
subject: 'Test email'
|
|
body: 'Hello world'
|
|
flags: ['\\Seen']
|
|
internal_date: time.now()
|
|
}
|
|
mb.set(1, msg1) or { panic(err) }
|
|
|
|
// Test listing messages
|
|
msgs2 := mb.list() or { panic(err) }
|
|
assert msgs2.len == 1
|
|
assert msgs2[0].subject == 'Test email'
|
|
|
|
// Test getting message by UID
|
|
found := mb.get(1) or { panic(err) }
|
|
assert found.uid == 1
|
|
assert found.subject == 'Test email'
|
|
assert found.body == 'Hello world'
|
|
assert found.flags == ['\\Seen']
|
|
}
|
|
|
|
fn test_mailbox_delete() {
|
|
mut mb := Mailbox{
|
|
name: 'INBOX'
|
|
uid_validity: 1234
|
|
}
|
|
|
|
// Add two messages
|
|
msg1 := Message{
|
|
uid: 1
|
|
subject: 'First email'
|
|
body: 'Content 1'
|
|
}
|
|
msg2 := Message{
|
|
uid: 2
|
|
subject: 'Second email'
|
|
body: 'Content 2'
|
|
}
|
|
mb.set(1, msg1) or { panic(err) }
|
|
mb.set(2, msg2) or { panic(err) }
|
|
|
|
// Delete first message
|
|
mb.delete(1) or { panic(err) }
|
|
|
|
// Verify only second message remains
|
|
msgs := mb.list() or { panic(err) }
|
|
assert msgs.len == 1
|
|
assert msgs[0].uid == 2
|
|
assert msgs[0].subject == 'Second email'
|
|
|
|
// Test deleting non-existent message
|
|
if _ := mb.delete(999) {
|
|
panic('Expected error when deleting non-existent message')
|
|
}
|
|
}
|
|
|
|
fn test_mailbox_find() {
|
|
mut mb := Mailbox{
|
|
name: 'INBOX'
|
|
uid_validity: 1234
|
|
}
|
|
|
|
// Add test messages
|
|
msg1 := Message{
|
|
uid: 1
|
|
subject: 'Important meeting'
|
|
body: 'Meeting at 2 PM'
|
|
flags: ['\\Seen', '\\Flagged']
|
|
}
|
|
msg2 := Message{
|
|
uid: 2
|
|
subject: 'Hello friend'
|
|
body: 'How are you?'
|
|
flags: ['\\Seen']
|
|
}
|
|
msg3 := Message{
|
|
uid: 3
|
|
subject: 'Another meeting'
|
|
body: 'Team sync at 3 PM'
|
|
flags: ['\\Draft']
|
|
}
|
|
|
|
mb.set(1, msg1) or { panic(err) }
|
|
mb.set(2, msg2) or { panic(err) }
|
|
mb.set(3, msg3) or { panic(err) }
|
|
|
|
// Test finding by subject
|
|
found_subject := mb.find(FindArgs{subject: 'meeting'}) or { panic(err) }
|
|
assert found_subject.len == 2
|
|
|
|
// Test finding by content
|
|
found_content := mb.find(FindArgs{content: 'PM'}) or { panic(err) }
|
|
assert found_content.len == 2
|
|
|
|
// Test finding by flags
|
|
found_flags := mb.find(FindArgs{flags: ['\\Seen', '\\Flagged']}) or { panic(err) }
|
|
assert found_flags.len == 1
|
|
assert found_flags[0].uid == 1
|
|
|
|
// Test finding with multiple criteria
|
|
found_multi := mb.find(FindArgs{
|
|
subject: 'meeting'
|
|
flags: ['\\Draft']
|
|
}) or { panic(err) }
|
|
assert found_multi.len == 1
|
|
assert found_multi[0].uid == 3
|
|
}
|
|
|
|
fn test_readonly_mailbox() {
|
|
mut mb := Mailbox{
|
|
name: 'INBOX'
|
|
uid_validity: 1234
|
|
read_only: true
|
|
}
|
|
|
|
msg := Message{
|
|
uid: 1
|
|
subject: 'Test email'
|
|
body: 'Hello world'
|
|
}
|
|
|
|
// Attempt to modify read-only mailbox should fail
|
|
if _ := mb.set(1, msg) {
|
|
panic('Expected error when modifying read-only mailbox')
|
|
}
|
|
}
|