Scanyonero/document/ingestor_test.go
David Vogel 853a1bb58d Rework into FTP scanning server
- Rename to Scanyonero
- Add FTP server that ingests TIFF, PNG, JPEG or PDF files
- Add web interface to check and modify ingested files
- Rework how ocrmypdf is invoked

Basics are working, but the program is not in a usable state.
2025-05-14 12:08:38 +02:00

111 lines
3.6 KiB
Go

package document
import (
"Scanyonero/unit"
"path/filepath"
"regexp"
"testing"
)
func TestIngestor_Ingest(t *testing.T) {
t.SkipNow()
tests := []struct {
name string
file File
want []Page
wantErr bool
}{
{"300 DPI Feed JPG", MustLoadFile(filepath.Join("..", "test-documents", "300 DPI Feeder.jpg")),
[]Page{{
Dimensions: unit.PageDimensions[unit.Millimeter]{
ScanSize: unit.Rectangle[unit.Millimeter]{
Size: unit.Vec2[unit.Millimeter]{X: 209.97, Y: 288.713}}},
}}, false},
{"300 DPI Feed PDF", MustLoadFile(filepath.Join("..", "test-documents", "300 DPI Feeder.pdf")),
[]Page{{
Dimensions: unit.PageDimensions[unit.Millimeter]{
ScanSize: unit.Rectangle[unit.Millimeter]{
Size: unit.Vec2[unit.Millimeter]{X: 209.8, Y: 288.5}}},
}}, false},
{"300 DPI Flat JPG", MustLoadFile(filepath.Join("..", "test-documents", "300 DPI Flatbed.jpg")),
[]Page{{
Dimensions: unit.PageDimensions[unit.Millimeter]{
ScanSize: unit.Rectangle[unit.Millimeter]{
Size: unit.Vec2[unit.Millimeter]{X: 203.2, Y: 290.83}}},
}}, false},
{"300 DPI Flat PDF", MustLoadFile(filepath.Join("..", "test-documents", "300 DPI Flatbed.pdf")),
[]Page{{
Dimensions: unit.PageDimensions[unit.Millimeter]{
ScanSize: unit.Rectangle[unit.Millimeter]{
Size: unit.Vec2[unit.Millimeter]{X: 203.2, Y: 290.8}}},
}}, false},
{"600 DPI Feed JPG", MustLoadFile(filepath.Join("..", "test-documents", "600 DPI Feeder.jpg")),
[]Page{{
Dimensions: unit.PageDimensions[unit.Millimeter]{
ScanSize: unit.Rectangle[unit.Millimeter]{
Size: unit.Vec2[unit.Millimeter]{X: 209.97, Y: 288.671}}},
}}, false},
{"600 DPI Feed PDF", MustLoadFile(filepath.Join("..", "test-documents", "600 DPI Feeder.pdf")),
[]Page{{
Dimensions: unit.PageDimensions[unit.Millimeter]{
ScanSize: unit.Rectangle[unit.Millimeter]{
Size: unit.Vec2[unit.Millimeter]{X: 209.8, Y: 288.0}}},
}}, false},
{"600 DPI Flat JPG", MustLoadFile(filepath.Join("..", "test-documents", "600 DPI Flatbed.jpg")),
[]Page{{
Dimensions: unit.PageDimensions[unit.Millimeter]{
ScanSize: unit.Rectangle[unit.Millimeter]{
Size: unit.Vec2[unit.Millimeter]{X: 203.88, Y: 290.872}}},
}}, false},
{"600 DPI Flat PDF", MustLoadFile(filepath.Join("..", "test-documents", "600 DPI Flatbed.pdf")),
[]Page{{
Dimensions: unit.PageDimensions[unit.Millimeter]{
ScanSize: unit.Rectangle[unit.Millimeter]{
Size: unit.Vec2[unit.Millimeter]{X: 203.7, Y: 290.8}}},
}}, false},
}
ingestor := Ingestor{
DefaultDPI: unit.PerInch(150),
Rules: []IngestorRule{{
Match: struct {
Name *regexp.Regexp
XPixels *int
YPixels *int
}{
Name: regexp.MustCompile(`^.*\.pdf$`),
},
Action: struct {
MediumWidth *unit.Millimeter
MediumHeight *unit.Millimeter
ScanOffsetX *unit.Millimeter
ScanOffsetY *unit.Millimeter
}{
MediumWidth: &([]unit.Millimeter{100}[0]),
},
}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ingestor.Ingest(tt.file)
if (err != nil) != tt.wantErr {
t.Errorf("Ingestor.Ingest() error = %v, wantErr %v.", err, tt.wantErr)
return
}
if len(got) != len(tt.want) {
t.Errorf("Got %d pages, but want %d pages.", len(got), len(tt.want))
return
}
for i, gotPage := range got {
wantPage := tt.want[i]
if !gotPage.Dimensions.ScanSize.Size.EqualWithPrecision(wantPage.Dimensions.ScanSize.Size, 0.1) {
t.Errorf("Resulting ScanSize is %v, want %v.", gotPage.Dimensions.ScanSize.Size, wantPage.Dimensions.ScanSize.Size)
}
}
})
}
}