@@ -551,7 +551,170 @@ func TestJsonbTermsOp(t *testing.T) {
551551 t .Fatalf ("Could not unmarshal %v" , err )
552552 }
553553 assert .Equal (t , expected_id , jsonData )
554+ }
555+
556+ func TestJsonbNullWriteRead (t * testing.T ) {
557+ engine := proxyEngine ()
558+ truncateDb (engine )
559+
560+ example_one := Example {
561+ NonEncryptedField : "sydney" ,
562+ EncryptedTextField :
"[email protected] " ,
563+ EncryptedIntField : 42 ,
564+ EncryptedJsonbField : nil ,
565+ EncryptedBoolField : true ,
566+ }
567+
568+ example_two := Example {
569+ NonEncryptedField : "melbourne" ,
570+ EncryptedIntField : 42 ,
571+ EncryptedTextField :
"[email protected] " ,
572+ EncryptedJsonbField : make (map [string ]interface {}),
573+ EncryptedBoolField : false ,
574+ }
575+
576+ examples := []Example {
577+ example_one ,
578+ example_two ,
579+ }
580+
581+ inserted , err := engine .Insert (& examples )
582+
583+ if err != nil {
584+ t .Errorf ("Error inserting examples: %v" , err )
585+ }
586+
587+ assert .Equal (t , int64 (2 ), inserted , "Expected to insert 2 rows" )
588+
589+ var returnedExamples []Example
590+ err = engine .Where ("encrypted_jsonb_field IS NULL" ).Find (& returnedExamples )
591+ if err != nil {
592+ t .Fatalf ("Could not retrieve example: %v" , err )
593+ }
594+
595+ for i := range returnedExamples {
596+ assert .Equal (t , EncryptedJsonbField (nil ), returnedExamples [i ].EncryptedJsonbField )
597+ }
598+ }
599+
600+ func TestTextNullWriteRead (t * testing.T ) {
601+ engine := proxyEngine ()
602+ truncateDb (engine )
603+
604+ example_one := Example {
605+ NonEncryptedField : "sydney" ,
606+ EncryptedIntField : 42 ,
607+ EncryptedJsonbField : generateJsonbData ("first" , "second" , "third" ),
608+ EncryptedBoolField : true ,
609+ }
610+
611+ example_two := Example {
612+ NonEncryptedField : "melbourne" ,
613+ EncryptedTextField :
"[email protected] " ,
614+ EncryptedIntField : 42 ,
615+ EncryptedJsonbField : make (map [string ]interface {}),
616+ EncryptedBoolField : false ,
617+ }
618+
619+ examples := []Example {
620+ example_one ,
621+ example_two ,
622+ }
623+
624+ inserted , err := engine .Insert (& examples )
625+
626+ if err != nil {
627+ t .Errorf ("Error inserting examples: %v" , err )
628+ }
629+
630+ assert .Equal (t , int64 (2 ), inserted , "Expected to insert 2 rows" )
631+
632+ results , err := engine .Query ("select * from examples" )
633+ if err != nil {
634+ t .Fatalf ("Could not retrieve examples: %v" , err )
635+ }
554636
637+ assert .Equal (t , 2 , len (results ))
638+ }
639+
640+ func TestIntNullWriteRead (t * testing.T ) {
641+ engine := proxyEngine ()
642+ truncateDb (engine )
643+
644+ example_one := Example {
645+ NonEncryptedField : "sydney" ,
646+ EncryptedTextField :
"[email protected] " ,
647+ EncryptedJsonbField : generateJsonbData ("first" , "second" , "third" ),
648+ EncryptedBoolField : true ,
649+ }
650+
651+ example_two := Example {
652+ NonEncryptedField : "melbourne" ,
653+ EncryptedTextField :
"[email protected] " ,
654+ EncryptedIntField : 42 ,
655+ EncryptedJsonbField : make (map [string ]interface {}),
656+ EncryptedBoolField : false ,
657+ }
658+
659+ examples := []Example {
660+ example_one ,
661+ example_two ,
662+ }
663+
664+ inserted , err := engine .Insert (& examples )
665+
666+ if err != nil {
667+ t .Errorf ("Error inserting examples: %v" , err )
668+ }
669+
670+ assert .Equal (t , int64 (2 ), inserted , "Expected to insert 2 rows" )
671+
672+ results , err := engine .Query ("select * from examples" )
673+ if err != nil {
674+ t .Fatalf ("Could not retrieve examples: %v" , err )
675+ }
676+
677+ assert .Equal (t , 2 , len (results ))
678+ }
679+
680+ func TestBooleanNullWriteRead (t * testing.T ) {
681+ engine := proxyEngine ()
682+ truncateDb (engine )
683+
684+ // Remove boolean field
685+ example_one := Example {
686+ NonEncryptedField : "sydney" ,
687+ EncryptedTextField :
"[email protected] " ,
688+ EncryptedJsonbField : generateJsonbData ("first" , "second" , "third" ),
689+ }
690+
691+ example_two := Example {
692+ NonEncryptedField : "melbourne" ,
693+ EncryptedTextField :
"[email protected] " ,
694+ EncryptedIntField : 42 ,
695+ EncryptedJsonbField : make (map [string ]interface {}),
696+ EncryptedBoolField : false ,
697+ }
698+
699+ examples := []Example {
700+ example_one ,
701+ example_two ,
702+ }
703+
704+ inserted , err := engine .Insert (& examples )
705+
706+ if err != nil {
707+ t .Errorf ("Error inserting examples: %v" , err )
708+ }
709+
710+ assert .Equal (t , int64 (2 ), inserted , "Expected to insert 2 rows" )
711+
712+ results , err := engine .Query ("select * from examples" )
713+ if err != nil {
714+ t .Fatalf ("Could not retrieve examples: %v" , err )
715+ }
716+
717+ assert .Equal (t , 2 , len (results ))
555718}
556719
557720func TestOreStringRangeQuery (t * testing.T ) {
0 commit comments