Skip to content

Commit 234e3e2

Browse files
Merge pull request #52 from oracle-samples/hkhasnis-add-tests-scanner
Add tests for scanner
2 parents da1a1f2 + c908df2 commit 234e3e2

File tree

1 file changed

+307
-0
lines changed

1 file changed

+307
-0
lines changed

tests/scanner_valuer_test.go

Lines changed: 307 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import (
5050
"strconv"
5151
"testing"
5252
"time"
53+
"math"
5354

5455
"github.com/godror/godror"
5556
. "github.com/oracle-samples/gorm-oracle/tests/utils"
@@ -480,3 +481,309 @@ func TestGORMValuer(t *testing.T) {
480481
t.Errorf("generated vars is not equal, got %v", stmt.Vars)
481482
}
482483
}
484+
485+
func TestEncryptedDataScanValue(t *testing.T) {
486+
var ed EncryptedData
487+
488+
if err := ed.Scan([]byte("***mypassword")); err != nil {
489+
t.Errorf("expected no error, got %v", err)
490+
}
491+
if string(ed) != "mypassword" {
492+
t.Errorf("expected 'mypassword', got %s", string(ed))
493+
}
494+
495+
if err := ed.Scan("***otherpass"); err != nil {
496+
t.Errorf("expected no error, got %v", err)
497+
}
498+
if string(ed) != "otherpass" {
499+
t.Errorf("expected 'otherpass', got %s", string(ed))
500+
}
501+
502+
if err := ed.Scan([]byte("no")); err == nil {
503+
t.Errorf("expected error for too short input")
504+
}
505+
506+
val, err := EncryptedData("mypassword").Value()
507+
if err != nil {
508+
t.Errorf("expected no error, got %v", err)
509+
}
510+
if string(val.([]byte)) != "***mypassword" {
511+
t.Errorf("expected '***mypassword', got %s", string(val.([]byte)))
512+
}
513+
514+
_, err = EncryptedData("xpass").Value()
515+
if err == nil {
516+
t.Errorf("expected error when starting with 'x'")
517+
}
518+
}
519+
520+
func TestNumScan(t *testing.T) {
521+
var n Num
522+
523+
if err := n.Scan(int64(42)); err != nil {
524+
t.Errorf("expected no error, got %v", err)
525+
}
526+
if n != 42 {
527+
t.Errorf("expected 42, got %d", n)
528+
}
529+
530+
if err := n.Scan("99"); err != nil {
531+
t.Errorf("expected no error, got %v", err)
532+
}
533+
if n != 99 {
534+
t.Errorf("expected 99, got %d", n)
535+
}
536+
537+
if err := n.Scan([]byte("123")); err != nil {
538+
t.Errorf("expected no error, got %v", err)
539+
}
540+
if n != 123 {
541+
t.Errorf("expected 123, got %d", n)
542+
}
543+
544+
if err := n.Scan(godror.Number("456")); err != nil {
545+
t.Errorf("expected no error, got %v", err)
546+
}
547+
if n != 456 {
548+
t.Errorf("expected 456, got %d", n)
549+
}
550+
551+
if err := n.Scan(nil); err != nil {
552+
t.Errorf("expected no error, got %v", err)
553+
}
554+
if n != 0 {
555+
t.Errorf("expected 0 after nil scan, got %d", n)
556+
}
557+
558+
if err := n.Scan(3.14); err == nil {
559+
t.Errorf("expected error for unsupported type")
560+
}
561+
562+
if err := n.Scan(int64(0)); err != nil {
563+
t.Errorf("expected no error, got %v", err)
564+
}
565+
if n != 0 {
566+
t.Errorf("expected 0, got %d", n)
567+
}
568+
569+
if err := n.Scan(int64(-123)); err != nil {
570+
t.Errorf("expected no error, got %v", err)
571+
}
572+
if n != -123 {
573+
t.Errorf("expected -123, got %d", n)
574+
}
575+
576+
large := int64(math.MaxInt64)
577+
if err := n.Scan(large); err != nil {
578+
t.Errorf("expected no error for large int, got %v", err)
579+
}
580+
if n != Num(large) {
581+
t.Errorf("expected %d, got %d", large, n)
582+
}
583+
584+
small := int64(math.MinInt64)
585+
if err := n.Scan(small); err != nil {
586+
t.Errorf("expected no error for small int, got %v", err)
587+
}
588+
if n != Num(small) {
589+
t.Errorf("expected %d, got %d", small, n)
590+
}
591+
592+
if err := n.Scan(" 77 "); err == nil {
593+
t.Errorf("expected error for spaced string")
594+
}
595+
596+
if err := n.Scan(""); err == nil {
597+
t.Errorf("expected error for empty string")
598+
}
599+
600+
if err := n.Scan([]byte("")); err == nil {
601+
t.Errorf("expected error for empty byte slice")
602+
}
603+
604+
if err := n.Scan("not-a-number"); err == nil {
605+
t.Errorf("expected error for invalid string")
606+
}
607+
608+
if err := n.Scan(godror.Number("abc")); err == nil {
609+
t.Errorf("expected error for invalid godror.Number")
610+
}
611+
612+
if err := n.Scan(uint64(123)); err == nil {
613+
t.Errorf("expected error for unsupported uint64 type")
614+
}
615+
616+
if err := n.Scan("9223372036854775808"); err == nil {
617+
t.Errorf("expected error for overflow string")
618+
}
619+
620+
if err := n.Scan(`"42"`); err == nil {
621+
t.Errorf("expected error for quoted JSON string")
622+
}
623+
624+
if err := n.Scan(true); err == nil {
625+
t.Errorf("expected error for bool input")
626+
}
627+
}
628+
629+
func TestStringsSliceScanValue(t *testing.T) {
630+
original := StringsSlice{"a", "b"}
631+
val, err := original.Value()
632+
if err != nil {
633+
t.Errorf("expected no error, got %v", err)
634+
}
635+
636+
var parsed StringsSlice
637+
if err := parsed.Scan(val.(string)); err != nil {
638+
t.Errorf("expected no error, got %v", err)
639+
}
640+
if len(parsed) != 2 || parsed[0] != "a" || parsed[1] != "b" {
641+
t.Errorf("unexpected parsed result: %#v", parsed)
642+
}
643+
644+
if err := parsed.Scan(123); err == nil {
645+
t.Errorf("expected error for unsupported type")
646+
}
647+
}
648+
649+
func TestStructsSliceScanValue(t *testing.T) {
650+
original := StructsSlice{
651+
{Name: "n1", Val: "v1"},
652+
{Name: "n2", Val: "v2"},
653+
}
654+
val, err := original.Value()
655+
if err != nil {
656+
t.Errorf("expected no error, got %v", err)
657+
}
658+
659+
var parsed StructsSlice
660+
if err := parsed.Scan(val.(string)); err != nil {
661+
t.Errorf("expected no error, got %v", err)
662+
}
663+
if len(parsed) != 2 || parsed[0].Name != "n1" || parsed[1].Val != "v2" {
664+
t.Errorf("unexpected parsed result: %#v", parsed)
665+
}
666+
}
667+
668+
func TestExampleStructScanValue(t *testing.T) {
669+
orig := ExampleStruct{Name: "foo", Val: "bar"}
670+
val, err := orig.Value()
671+
if err != nil {
672+
t.Errorf("expected no error, got %v", err)
673+
}
674+
675+
var parsed ExampleStruct
676+
if err := parsed.Scan(val.([]byte)); err != nil {
677+
t.Errorf("expected no error, got %v", err)
678+
}
679+
if parsed.Val != "bar" {
680+
t.Errorf("expected Val 'bar', got %s", parsed.Val)
681+
}
682+
683+
if err := parsed.Scan(123); err == nil {
684+
t.Errorf("expected error for unsupported type")
685+
}
686+
}
687+
688+
func TestRoleScanValue(t *testing.T) {
689+
var r Role
690+
if err := r.Scan([]byte("admin")); err != nil {
691+
t.Errorf("expected no error, got %v", err)
692+
}
693+
if !r.IsAdmin() {
694+
t.Errorf("expected role to be admin")
695+
}
696+
697+
if err := r.Scan("user"); err != nil {
698+
t.Errorf("expected no error, got %v", err)
699+
}
700+
if r.IsAdmin() {
701+
t.Errorf("expected role to be not admin")
702+
}
703+
704+
val, err := r.Value()
705+
if err != nil {
706+
t.Errorf("expected no error, got %v", err)
707+
}
708+
if val != "user" {
709+
t.Errorf("expected 'user', got %v", val)
710+
}
711+
}
712+
713+
func TestEmptyTimeScanValue(t *testing.T) {
714+
var et EmptyTime
715+
now := time.Now()
716+
if err := et.Scan(now); err != nil {
717+
t.Errorf("expected no error, got %v", err)
718+
}
719+
if !et.Time.Equal(now) {
720+
t.Errorf("expected %v, got %v", now, et.Time)
721+
}
722+
723+
val, err := et.Value()
724+
if err != nil {
725+
t.Errorf("expected no error, got %v", err)
726+
}
727+
if _, ok := val.(time.Time); !ok {
728+
t.Errorf("expected time.Time, got %T", val)
729+
}
730+
}
731+
732+
func TestStringsSliceEmptySlice(t *testing.T) {
733+
empty := StringsSlice{}
734+
val, err := empty.Value()
735+
if err != nil {
736+
t.Errorf("expected no error for empty slice, got %v", err)
737+
}
738+
739+
var parsed StringsSlice
740+
if err := parsed.Scan(val.(string)); err != nil {
741+
t.Errorf("expected no error scanning empty slice, got %v", err)
742+
}
743+
if len(parsed) != 0 {
744+
t.Errorf("expected empty slice, got %#v", parsed)
745+
}
746+
}
747+
748+
func TestStringsSliceNilSlice(t *testing.T) {
749+
var nilSlice StringsSlice
750+
val, err := nilSlice.Value()
751+
if err != nil {
752+
t.Errorf("expected no error for nil slice, got %v", err)
753+
}
754+
if val.(string) != "null" && val.(string) != "[]" {
755+
t.Errorf("expected JSON null or [], got %v", val)
756+
}
757+
}
758+
759+
func TestStringsSliceSpecialCharacters(t *testing.T) {
760+
special := StringsSlice{"a,b", "c\nd", "e\"f"}
761+
val, err := special.Value()
762+
if err != nil {
763+
t.Errorf("expected no error, got %v", err)
764+
}
765+
766+
var parsed StringsSlice
767+
if err := parsed.Scan(val.(string)); err != nil {
768+
t.Errorf("expected no error scanning special chars, got %v", err)
769+
}
770+
if parsed[0] != "a,b" || parsed[1] != "c\nd" || parsed[2] != "e\"f" {
771+
t.Errorf("unexpected parsed result with special chars: %#v", parsed)
772+
}
773+
}
774+
775+
func TestStringsSliceInvalidJSON(t *testing.T) {
776+
var parsed StringsSlice
777+
err := parsed.Scan("{bad json}")
778+
if err == nil {
779+
t.Errorf("expected error for malformed JSON, got nil")
780+
}
781+
}
782+
783+
func TestStringsSliceWrongType(t *testing.T) {
784+
slice := StringsSlice{"x"}
785+
err := slice.Scan(123)
786+
if err == nil {
787+
t.Errorf("expected error for wrong type, got nil")
788+
}
789+
}

0 commit comments

Comments
 (0)