Files
proton-bridge/pkg/message/parser/walker_test.go
Jakub f3c69faf8b GODT-1260: Renaming
* Renaming GUI, CLI, no-impact config.
* License header and documentation rebranding.
* Rename app title and vendor. Impact: manual install
* Migrating mac keychain and launch on startup.
* Fix linter and linter renaming
2022-05-18 11:23:38 +02:00

99 lines
2.6 KiB
Go

// Copyright (c) 2022 Proton AG
//
// This file is part of Proton Mail Bridge.
//
// Proton Mail Bridge is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Proton Mail Bridge is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Proton Mail Bridge. If not, see <https://www.gnu.org/licenses/>.
package parser
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestWalker(t *testing.T) {
p := newTestParser(t, "text_html_octet_attachment.eml")
allBodies := [][]byte{}
walker := p.NewWalker().
RegisterDefaultHandler(func(p *Part) (err error) {
if p.Body != nil {
allBodies = append(allBodies, p.Body)
}
return
})
assert.NoError(t, walker.Walk())
assert.ElementsMatch(t, [][]byte{
[]byte("<html><body>This is body of <b>HTML mail</b> with attachment</body></html>"),
[]byte("if you are reading this, hi!"),
}, allBodies)
}
func TestWalkerTypeHandler(t *testing.T) {
p := newTestParser(t, "text_html_octet_attachment.eml")
html := [][]byte{}
walker := p.NewWalker().
RegisterContentTypeHandler("text/html", func(p *Part) (err error) {
html = append(html, p.Body)
return
})
assert.NoError(t, walker.Walk())
assert.ElementsMatch(t, [][]byte{
[]byte("<html><body>This is body of <b>HTML mail</b> with attachment</body></html>"),
}, html)
}
func TestWalkerDispositionHandler(t *testing.T) {
p := newTestParser(t, "text_html_octet_attachment.eml")
attachments := [][]byte{}
walker := p.NewWalker().
RegisterContentDispositionHandler("attachment", func(p *Part) (err error) {
attachments = append(attachments, p.Body)
return
})
assert.NoError(t, walker.Walk())
assert.ElementsMatch(t, [][]byte{
[]byte("if you are reading this, hi!"),
}, attachments)
}
func TestWalkerDispositionAndTypeHandler_TypeDefinedFirst(t *testing.T) {
p := newTestParser(t, "text_html_octet_attachment.eml")
var typeCalled, dispCalled bool
walker := p.NewWalker().
RegisterContentTypeHandler("application/octet-stream", func(p *Part) (err error) {
typeCalled = true
return
}).
RegisterContentDispositionHandler("attachment", func(p *Part) (err error) {
dispCalled = true
return
})
assert.NoError(t, walker.Walk())
assert.True(t, typeCalled)
assert.False(t, dispCalled)
}