From 75b7c69b5cd458a2cb395e7693fe0851d9680be5 Mon Sep 17 00:00:00 2001 From: James Hillyerd Date: Wed, 8 Feb 2023 17:20:57 -0800 Subject: [PATCH] lua: Add getter/setter tests for bound objects (#326) Signed-off-by: James Hillyerd --- pkg/extension/luahost/bind_address_test.go | 54 +++++++++++++ pkg/extension/luahost/bind_message_test.go | 91 ++++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 pkg/extension/luahost/bind_address_test.go create mode 100644 pkg/extension/luahost/bind_message_test.go diff --git a/pkg/extension/luahost/bind_address_test.go b/pkg/extension/luahost/bind_address_test.go new file mode 100644 index 0000000..a7ca5e6 --- /dev/null +++ b/pkg/extension/luahost/bind_address_test.go @@ -0,0 +1,54 @@ +package luahost + +import ( + "net/mail" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + lua "github.com/yuin/gopher-lua" +) + +func TestMailAddressGetters(t *testing.T) { + want := &mail.Address{ + Name: "Roberto I", + Address: "ri@example.com", + } + script := ` + assert(addr, "addr should not be nil") + + want = "Roberto I" + got = addr.name + assert(got == want, string.format("got name %q, want %q", got, want)) + + want = "ri@example.com" + got = addr.address + assert(got == want, string.format("got address %q, want %q", got, want)) + ` + + ls := lua.NewState() + registerMailAddressType(ls) + ls.SetGlobal("addr", wrapMailAddress(ls, want)) + require.NoError(t, ls.DoString(script)) +} + +func TestMailAddressSetters(t *testing.T) { + want := &mail.Address{ + Name: "Roberto I", + Address: "ri@example.com", + } + script := ` + assert(addr, "addr should not be nil") + + addr.name = "Roberto I" + addr.address = "ri@example.com" + ` + + got := &mail.Address{} + ls := lua.NewState() + registerMailAddressType(ls) + ls.SetGlobal("addr", wrapMailAddress(ls, got)) + require.NoError(t, ls.DoString(script)) + + assert.Equal(t, want, got) +} diff --git a/pkg/extension/luahost/bind_message_test.go b/pkg/extension/luahost/bind_message_test.go new file mode 100644 index 0000000..a88f9bb --- /dev/null +++ b/pkg/extension/luahost/bind_message_test.go @@ -0,0 +1,91 @@ +package luahost + +import ( + "net/mail" + "testing" + "time" + + "github.com/inbucket/inbucket/pkg/extension/event" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + lua "github.com/yuin/gopher-lua" +) + +func TestMessageMetadataGetters(t *testing.T) { + want := &event.MessageMetadata{ + Mailbox: "mb1", + ID: "id1", + From: &mail.Address{Name: "name1", Address: "addr1"}, + To: []*mail.Address{{Name: "name2", Address: "addr2"}}, + Date: time.Date(2001, time.February, 3, 4, 5, 6, 0, time.UTC), + Subject: "subj1", + Size: 42, + } + script := ` + assert(msg, "msg should not be nil") + + function assert_eq(got, want) + assert(got == want, string.format("got name %q, wanted %q", got, want)) + end + + assert_eq(msg.mailbox, "mb1") + assert_eq(msg.id, "id1") + assert_eq(msg.subject, "subj1") + assert_eq(msg.size, 42) + + assert_eq(msg.from.name, "name1") + assert_eq(msg.from.address, "addr1") + + assert_eq(table.getn(msg.to), 1) + assert_eq(msg.to[1].name, "name2") + assert_eq(msg.to[1].address, "addr2") + + assert_eq(msg.date, 981173106) + ` + + ls := lua.NewState() + registerMessageMetadataType(ls) + registerMailAddressType(ls) + ls.SetGlobal("msg", wrapMessageMetadata(ls, want)) + require.NoError(t, ls.DoString(script)) +} + +func TestMessageMetadataSetters(t *testing.T) { + want := &event.MessageMetadata{ + Mailbox: "mb1", + ID: "id1", + From: &mail.Address{Name: "name1", Address: "addr1"}, + To: []*mail.Address{{Name: "name2", Address: "addr2"}}, + Date: time.Date(2001, time.February, 3, 4, 5, 6, 0, time.UTC), + Subject: "subj1", + Size: 42, + } + script := ` + assert(msg, "msg should not be nil") + + msg.mailbox = "mb1" + msg.id = "id1" + msg.subject = "subj1" + msg.size = 42 + + msg.from = address.new("name1", "addr1") + msg.to = { address.new("name2", "addr2") } + + msg.date = 981173106 + ` + + got := &event.MessageMetadata{} + ls := lua.NewState() + registerMessageMetadataType(ls) + registerMailAddressType(ls) + ls.SetGlobal("msg", wrapMessageMetadata(ls, got)) + require.NoError(t, ls.DoString(script)) + + // Timezones will cause a naive comparison to fail. + assert.Equal(t, want.Date.Unix(), got.Date.Unix()) + now := time.Now() + want.Date = now + got.Date = now + + assert.Equal(t, want, got) +}