52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package csvimport
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseOK(t *testing.T) {
|
|
rows, err := Parse(strings.NewReader("a@x,p1,a@y,p2\nb@x,p3,b@y,p4\n"))
|
|
if err != nil {
|
|
t.Fatalf("parse: %v", err)
|
|
}
|
|
if len(rows) != 2 || rows[0].SrcLogin != "a@x" || rows[1].DstPass != "p4" {
|
|
t.Fatalf("bad rows: %+v", rows)
|
|
}
|
|
}
|
|
|
|
func TestParseRejectsBadColumns(t *testing.T) {
|
|
if _, err := Parse(strings.NewReader("a,b,c\n")); err == nil {
|
|
t.Fatal("3 columns must error")
|
|
}
|
|
}
|
|
|
|
func TestParseRejectsDuplicateSrc(t *testing.T) {
|
|
if _, err := Parse(strings.NewReader("a@x,p,a@y,p\na@x,q,c@y,q\n")); err == nil {
|
|
t.Fatal("duplicate src_login must error")
|
|
}
|
|
}
|
|
|
|
func TestParseRejectsEmptyField(t *testing.T) {
|
|
if _, err := Parse(strings.NewReader("a@x,,a@y,p\n")); err == nil {
|
|
t.Fatal("empty password must error")
|
|
}
|
|
}
|
|
|
|
func TestParseBlankLineKeepsCorrectLineNumber(t *testing.T) {
|
|
// blank physical line 2, malformed row on physical line 3
|
|
_, err := Parse(strings.NewReader("a@x,p1,a@y,p2\n\nbad,row,here\n"))
|
|
if err == nil {
|
|
t.Fatal("expected error for 3-column row")
|
|
}
|
|
if !strings.Contains(err.Error(), "line 3") {
|
|
t.Fatalf("error must reference physical line 3, got: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestParseZeroRowsErrors(t *testing.T) {
|
|
if _, err := Parse(strings.NewReader("\n\n \n")); err == nil {
|
|
t.Fatal("expected error when no rows parsed")
|
|
}
|
|
}
|