gis/internal/domain/dataset_test.go

75 lines
2.1 KiB
Go

package domain
import "testing"
func TestFileTypeValid(t *testing.T) {
valid := []FileType{FileTypeVectorWithKato, FileTypeVector, FileTypeRaster}
for _, ft := range valid {
if !ft.Valid() {
t.Errorf("%q should be valid", ft)
}
}
invalid := []FileType{"", "vector_with_table", "image", "bogus"}
for _, ft := range invalid {
if ft.Valid() {
t.Errorf("%q should be invalid", ft)
}
}
}
func TestValidateFileContent(t *testing.T) {
cases := []struct {
name string
ext string
head []byte
ok bool
}{
{"valid tiff LE", ".tif", []byte("II*\x00rest"), true},
{"valid tiff BE", ".tiff", []byte("MM\x00*rest"), true},
{"bad tiff", ".tif", []byte("not a tiff"), false},
{"valid zip", ".zip", []byte("PK\x03\x04rest"), true},
{"bad zip", ".zip", []byte("RARrest"), false},
{"valid gpkg", ".gpkg", []byte("SQLite format 3\x00rest"), true},
{"bad gpkg", ".gpkg", []byte("notsqlite"), false},
{"valid geojson", ".geojson", []byte(" \n{\"type\":\"FeatureCollection\"}"), true},
{"geojson with BOM", ".geojson", append([]byte{0xEF, 0xBB, 0xBF}, []byte("{}")...), true},
{"bad geojson", ".geojson", []byte("<html>"), false},
{"empty geojson", ".geojson", []byte(""), false},
{"unknown ext is permissive", ".dat", []byte("anything"), true},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
err := ValidateFileContent(c.ext, c.head)
if c.ok && err != nil {
t.Errorf("want ok, got %v", err)
}
if !c.ok && err == nil {
t.Errorf("want error, got nil")
}
})
}
}
func TestExtensionAllowedFor(t *testing.T) {
cases := []struct {
ft FileType
ext string
want bool
}{
{FileTypeVectorWithKato, ".zip", true},
{FileTypeVectorWithKato, ".geojson", true},
{FileTypeVectorWithKato, ".gpkg", true},
{FileTypeVectorWithKato, ".tif", false},
{FileTypeRaster, ".tif", true},
{FileTypeRaster, ".geojson", false},
{FileTypeVector, ".geojson", true},
{"bogus", ".zip", false},
}
for _, c := range cases {
if got := ExtensionAllowedFor(c.ft, c.ext); got != c.want {
t.Errorf("ExtensionAllowedFor(%q, %q) = %v, want %v", c.ft, c.ext, got, c.want)
}
}
}