88from django .test import TestCase
99from facility_profile .models import Facility
1010from facility_profile .models import MyUser
11+ from facility_profile .models import InteractionLog
1112from facility_profile .models import SummaryLog
1213from test .support import EnvironmentVarGuard
1314
@@ -616,6 +617,12 @@ def _test_deserialization_of_model_with_missing_parent(self, correct_self_ref_fk
616617 self .assertTrue (new_child .dirty_bit )
617618 self .assertIn ("exist" , new_child .deserialization_error )
618619
620+
621+ class ForeignKeyDeserializationTestCase (TestCase ):
622+ def setUp (self ):
623+ (self .current_id , _ ) = InstanceIDModel .get_or_create_current_instance ()
624+ self .mc = MorangoProfileController ("facilitydata" )
625+
619626 def test_deserialization_of_model_with_missing_foreignkey_referent (self ):
620627
621628 user = MyUser .objects .create (username = "penguin" )
@@ -636,6 +643,67 @@ def test_deserialization_of_model_with_missing_foreignkey_referent(self):
636643 self .assertTrue (new_log .dirty_bit )
637644 self .assertIn ("missing MyUser" , new_log .deserialization_error )
638645
646+ def test_deserialization_of_model_with_disallowed_null_foreignkey (self ):
647+
648+ user = MyUser .objects .create (username = "penguin" )
649+ log = SummaryLog .objects .create (user = user )
650+ self .mc .serialize_into_store ()
651+
652+ new_log = Store .objects .get (id = log .id )
653+ data = json .loads (new_log .serialized )
654+ new_log .id = data ["id" ] = "f" * 32
655+ data ["user_id" ] = None
656+ new_log .serialized = json .dumps (data )
657+ new_log .dirty_bit = True
658+ new_log .save ()
659+
660+ self .mc .deserialize_from_store ()
661+
662+ new_log .refresh_from_db ()
663+ self .assertTrue (new_log .dirty_bit )
664+ self .assertIn ("cannot be null" , new_log .deserialization_error )
665+
666+ def test_deserialization_of_model_with_allowed_null_foreignkey (self ):
667+
668+ user = MyUser .objects .create (username = "penguin" )
669+ log = InteractionLog .objects .create (user = user )
670+ self .mc .serialize_into_store ()
671+
672+ new_log = Store .objects .get (id = log .id )
673+ data = json .loads (new_log .serialized )
674+ new_log .id = data ["id" ] = "f" * 32
675+ data ["user_id" ] = None
676+ new_log .serialized = json .dumps (data )
677+ new_log .dirty_bit = True
678+ new_log .save ()
679+
680+ self .mc .deserialize_from_store ()
681+
682+ new_log .refresh_from_db ()
683+ self .assertFalse (new_log .dirty_bit )
684+ self .assertTrue (new_log .deserialization_error == "" )
685+ self .assertTrue (InteractionLog .objects .filter (id = new_log .id ).exists ())
686+
687+ def test_deserialization_of_model_with_valid_foreignkey_referent (self ):
688+
689+ user = MyUser .objects .create (username = "penguin" )
690+ log = SummaryLog .objects .create (user = user )
691+ self .mc .serialize_into_store ()
692+
693+ new_log = Store .objects .get (id = log .id )
694+ data = json .loads (new_log .serialized )
695+ new_log .id = data ["id" ] = "f" * 32
696+ new_log .serialized = json .dumps (data )
697+ new_log .dirty_bit = True
698+ new_log .save ()
699+
700+ self .mc .deserialize_from_store ()
701+
702+ new_log .refresh_from_db ()
703+ self .assertFalse (new_log .dirty_bit )
704+ self .assertTrue (new_log .deserialization_error == "" )
705+ self .assertTrue (SummaryLog .objects .filter (id = new_log .id ).exists ())
706+
639707
640708class SessionControllerTestCase (SimpleTestCase ):
641709 def setUp (self ):
0 commit comments