Skip to content

Commit 964bf09

Browse files
Add tests for scanner
1 parent b8d78f4 commit 964bf09

File tree

1 file changed

+181
-0
lines changed

1 file changed

+181
-0
lines changed

tests/scanner_valuer_test.go

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,3 +480,184 @@ func TestGORMValuer(t *testing.T) {
480480
t.Errorf("generated vars is not equal, got %v", stmt.Vars)
481481
}
482482
}
483+
484+
func TestEncryptedDataScanValue(t *testing.T) {
485+
var ed EncryptedData
486+
487+
if err := ed.Scan([]byte("***mypassword")); err != nil {
488+
t.Errorf("expected no error, got %v", err)
489+
}
490+
if string(ed) != "mypassword" {
491+
t.Errorf("expected 'mypassword', got %s", string(ed))
492+
}
493+
494+
if err := ed.Scan("***otherpass"); err != nil {
495+
t.Errorf("expected no error, got %v", err)
496+
}
497+
if string(ed) != "otherpass" {
498+
t.Errorf("expected 'otherpass', got %s", string(ed))
499+
}
500+
501+
if err := ed.Scan([]byte("no")); err == nil {
502+
t.Errorf("expected error for too short input")
503+
}
504+
505+
val, err := EncryptedData("mypassword").Value()
506+
if err != nil {
507+
t.Errorf("expected no error, got %v", err)
508+
}
509+
if string(val.([]byte)) != "***mypassword" {
510+
t.Errorf("expected '***mypassword', got %s", string(val.([]byte)))
511+
}
512+
513+
_, err = EncryptedData("xpass").Value()
514+
if err == nil {
515+
t.Errorf("expected error when starting with 'x'")
516+
}
517+
}
518+
519+
func TestNumScan(t *testing.T) {
520+
var n Num
521+
522+
if err := n.Scan(int64(42)); err != nil {
523+
t.Errorf("expected no error, got %v", err)
524+
}
525+
if n != 42 {
526+
t.Errorf("expected 42, got %d", n)
527+
}
528+
529+
if err := n.Scan("99"); err != nil {
530+
t.Errorf("expected no error, got %v", err)
531+
}
532+
if n != 99 {
533+
t.Errorf("expected 99, got %d", n)
534+
}
535+
536+
if err := n.Scan([]byte("123")); err != nil {
537+
t.Errorf("expected no error, got %v", err)
538+
}
539+
if n != 123 {
540+
t.Errorf("expected 123, got %d", n)
541+
}
542+
543+
if err := n.Scan(godror.Number("456")); err != nil {
544+
t.Errorf("expected no error, got %v", err)
545+
}
546+
if n != 456 {
547+
t.Errorf("expected 456, got %d", n)
548+
}
549+
550+
if err := n.Scan(nil); err != nil {
551+
t.Errorf("expected no error, got %v", err)
552+
}
553+
if n != 0 {
554+
t.Errorf("expected 0 after nil scan, got %d", n)
555+
}
556+
557+
if err := n.Scan(3.14); err == nil {
558+
t.Errorf("expected error for unsupported type")
559+
}
560+
}
561+
562+
func TestStringsSliceScanValue(t *testing.T) {
563+
original := StringsSlice{"a", "b"}
564+
val, err := original.Value()
565+
if err != nil {
566+
t.Errorf("expected no error, got %v", err)
567+
}
568+
569+
var parsed StringsSlice
570+
if err := parsed.Scan(val.(string)); err != nil {
571+
t.Errorf("expected no error, got %v", err)
572+
}
573+
if len(parsed) != 2 || parsed[0] != "a" || parsed[1] != "b" {
574+
t.Errorf("unexpected parsed result: %#v", parsed)
575+
}
576+
577+
if err := parsed.Scan(123); err == nil {
578+
t.Errorf("expected error for unsupported type")
579+
}
580+
}
581+
582+
func TestStructsSliceScanValue(t *testing.T) {
583+
original := StructsSlice{
584+
{Name: "n1", Val: "v1"},
585+
{Name: "n2", Val: "v2"},
586+
}
587+
val, err := original.Value()
588+
if err != nil {
589+
t.Errorf("expected no error, got %v", err)
590+
}
591+
592+
var parsed StructsSlice
593+
if err := parsed.Scan(val.(string)); err != nil {
594+
t.Errorf("expected no error, got %v", err)
595+
}
596+
if len(parsed) != 2 || parsed[0].Name != "n1" || parsed[1].Val != "v2" {
597+
t.Errorf("unexpected parsed result: %#v", parsed)
598+
}
599+
}
600+
601+
func TestExampleStructScanValue(t *testing.T) {
602+
orig := ExampleStruct{Name: "foo", Val: "bar"}
603+
val, err := orig.Value()
604+
if err != nil {
605+
t.Errorf("expected no error, got %v", err)
606+
}
607+
608+
var parsed ExampleStruct
609+
if err := parsed.Scan(val.([]byte)); err != nil {
610+
t.Errorf("expected no error, got %v", err)
611+
}
612+
if parsed.Val != "bar" {
613+
t.Errorf("expected Val 'bar', got %s", parsed.Val)
614+
}
615+
616+
if err := parsed.Scan(123); err == nil {
617+
t.Errorf("expected error for unsupported type")
618+
}
619+
}
620+
621+
func TestRoleScanValue(t *testing.T) {
622+
var r Role
623+
if err := r.Scan([]byte("admin")); err != nil {
624+
t.Errorf("expected no error, got %v", err)
625+
}
626+
if !r.IsAdmin() {
627+
t.Errorf("expected role to be admin")
628+
}
629+
630+
if err := r.Scan("user"); err != nil {
631+
t.Errorf("expected no error, got %v", err)
632+
}
633+
if r.IsAdmin() {
634+
t.Errorf("expected role to be not admin")
635+
}
636+
637+
val, err := r.Value()
638+
if err != nil {
639+
t.Errorf("expected no error, got %v", err)
640+
}
641+
if val != "user" {
642+
t.Errorf("expected 'user', got %v", val)
643+
}
644+
}
645+
646+
func TestEmptyTimeScanValue(t *testing.T) {
647+
var et EmptyTime
648+
now := time.Now()
649+
if err := et.Scan(now); err != nil {
650+
t.Errorf("expected no error, got %v", err)
651+
}
652+
if !et.Time.Equal(now) {
653+
t.Errorf("expected %v, got %v", now, et.Time)
654+
}
655+
656+
val, err := et.Value()
657+
if err != nil {
658+
t.Errorf("expected no error, got %v", err)
659+
}
660+
if _, ok := val.(time.Time); !ok {
661+
t.Errorf("expected time.Time, got %T", val)
662+
}
663+
}

0 commit comments

Comments
 (0)