@@ -891,28 +891,24 @@ def test_multiple_instances_are_unique_on_api_key(caplog):
891891@responses .activate
892892def test_signals_feature_flag (cache ):
893893 # Set up API
894- responses .add (responses .POST , URL + REGISTER_URL , json = {}, status = 202 )
895894 responses .add (
896895 responses .GET , URL + FEATURES_URL , json = MOCK_FEATURE_RESPONSE , status = 200
897896 )
898- responses .add (responses .POST , URL + METRICS_URL , json = {}, status = 202 )
897+ flag_event = None
898+ variant_event = None
899899
900900 # Set up signals
901901 send_data = signal ("send-data" )
902902
903903 @send_data .connect
904904 def receive_data (sender , ** kw ):
905- print ("Caught signal from %r, data %r" % (sender , kw ))
906-
905+ # variant_event
907906 if kw ["data" ].event_type == UnleashEventType .FEATURE_FLAG :
908- assert kw [ "data" ]. feature_name == "testFlag"
909- assert kw ["data" ]. enabled
907+ nonlocal flag_event
908+ flag_event = kw ["data" ]
910909 elif kw ["data" ].event_type == UnleashEventType .VARIANT :
911- assert kw ["data" ].feature_name == "testVariations"
912- assert kw ["data" ].enabled
913- assert kw ["data" ].variant == "VarA"
914-
915- raise Exception ("Random!" )
910+ nonlocal variant_event
911+ variant_event = kw ["data" ]
916912
917913 def example_callback (event : UnleashEvent ):
918914 send_data .send ("anonymous" , data = event )
@@ -922,7 +918,8 @@ def example_callback(event: UnleashEvent):
922918 URL ,
923919 APP_NAME ,
924920 refresh_interval = REFRESH_INTERVAL ,
925- metrics_interval = METRICS_INTERVAL ,
921+ disable_registration = True ,
922+ disable_metrics = True ,
926923 cache = cache ,
927924 event_callback = example_callback ,
928925 )
@@ -935,6 +932,121 @@ def example_callback(event: UnleashEvent):
935932 variant = unleash_client .get_variant ("testVariations" , context = {"userId" : "2" })
936933 assert variant ["name" ] == "VarA"
937934
935+ assert flag_event .feature_name == "testFlag"
936+ assert flag_event .enabled
937+
938+ assert variant_event .feature_name == "testVariations"
939+ assert variant_event .enabled
940+ assert variant_event .variant == "VarA"
941+
942+
943+ @responses .activate
944+ def test_fetch_signal (cache ):
945+ # Set up API
946+ responses .add (responses .POST , URL + REGISTER_URL , json = {}, status = 202 )
947+ responses .add (
948+ responses .GET , URL + FEATURES_URL , json = MOCK_FEATURE_RESPONSE , status = 200
949+ )
950+ responses .add (responses .POST , URL + METRICS_URL , json = {}, status = 202 )
951+ trapped_event = None
952+
953+ # Set up signals
954+ send_data = signal ("send-data" )
955+
956+ @send_data .connect
957+ def receive_data (sender , ** kw ):
958+
959+ if kw ["data" ].event_type == UnleashEventType .FETCHED :
960+ nonlocal trapped_event
961+ trapped_event = kw ["data" ]
962+
963+ def example_callback (event : UnleashEvent ):
964+ send_data .send ("anonymous" , data = event )
965+
966+ # Set up Unleash
967+ unleash_client = UnleashClient (
968+ URL ,
969+ APP_NAME ,
970+ refresh_interval = REFRESH_INTERVAL ,
971+ metrics_interval = METRICS_INTERVAL ,
972+ cache = cache ,
973+ event_callback = example_callback ,
974+ )
975+
976+ # Create Unleash client and check initial load
977+ unleash_client .initialize_client ()
978+ time .sleep (1 )
979+
980+ assert trapped_event .features [0 ]["name" ] == "testFlag"
981+
982+
983+ @responses .activate
984+ def test_ready_signal (cache ):
985+ responses .add (
986+ responses .GET , URL + FEATURES_URL , json = MOCK_FEATURE_RESPONSE , status = 200
987+ )
988+ trapped_events = 0
989+
990+ # Set up signals
991+ send_data = signal ("send-data" )
992+
993+ @send_data .connect
994+ def receive_data (sender , ** kw ):
995+ if kw ["data" ].event_type == UnleashEventType .READY :
996+ nonlocal trapped_events
997+ trapped_events += 1
998+
999+ def example_callback (event : UnleashEvent ):
1000+ send_data .send ("anonymous" , data = event )
1001+
1002+ unleash_client = UnleashClient (
1003+ URL ,
1004+ APP_NAME ,
1005+ refresh_interval = 1 , # minimum interval is 1 second
1006+ disable_metrics = True ,
1007+ disable_registration = True ,
1008+ cache = cache ,
1009+ event_callback = example_callback ,
1010+ )
1011+
1012+ unleash_client .initialize_client ()
1013+ time .sleep (2 )
1014+
1015+ assert trapped_events == 1
1016+
1017+
1018+ def test_ready_signal_works_with_bootstrapping ():
1019+ cache = FileCache ("MOCK_CACHE" )
1020+ cache .bootstrap_from_dict (MOCK_FEATURE_WITH_DEPENDENCIES_RESPONSE )
1021+
1022+ trapped_events = 0
1023+
1024+ # Set up signals
1025+ send_data = signal ("send-data" )
1026+
1027+ @send_data .connect
1028+ def receive_data (sender , ** kw ):
1029+ if kw ["data" ].event_type == UnleashEventType .READY :
1030+ nonlocal trapped_events
1031+ trapped_events += 1
1032+
1033+ def example_callback (event : UnleashEvent ):
1034+ send_data .send ("anonymous" , data = event )
1035+
1036+ unleash_client = UnleashClient (
1037+ url = URL ,
1038+ app_name = APP_NAME ,
1039+ cache = cache ,
1040+ disable_metrics = True ,
1041+ disable_registration = True ,
1042+ event_callback = example_callback ,
1043+ )
1044+
1045+ unleash_client .initialize_client (fetch_toggles = False )
1046+ time .sleep (1 )
1047+
1048+ assert trapped_events == 1
1049+
9381050
9391051def test_context_handles_numerics ():
9401052 cache = FileCache ("MOCK_CACHE" )
0 commit comments