9
9
from unittest .mock import patch , call
10
10
11
11
import numpy as np
12
+ from parameterized import parameterized
12
13
13
14
from mantidimaging .core .data import ImageStack
14
15
from mantidimaging .core .data .dataset import StrictDataset , MixedDataset , Dataset
@@ -621,11 +622,11 @@ def test_add_sinograms_to_dataset_with_no_sinograms_and_update_view(self):
621
622
dataset_item_mock .id = ds .id
622
623
self .view .get_sinograms_item .return_value = None
623
624
self .presenter .create_single_tabbed_images_stack = mock .Mock ()
624
- self .presenter ._delete_stack = mock .Mock ()
625
+ self .presenter ._delete_stack_visualiser = mock .Mock ()
625
626
626
627
self .presenter .add_sinograms_to_dataset_and_update_view (sinograms , ds .sample .id )
627
628
self .model .get_parent_dataset .assert_called_once_with (ds .sample .id )
628
- self .presenter ._delete_stack .assert_not_called ()
629
+ self .presenter ._delete_stack_visualiser .assert_not_called ()
629
630
self .assertIs (ds .sinograms , sinograms )
630
631
self .view .get_dataset_tree_view_item .assert_called_once_with (ds .id )
631
632
self .view .get_sinograms_item .assert_called_once_with (dataset_item_mock )
@@ -644,10 +645,10 @@ def test_add_sinograms_to_dataset_with_existing_sinograms_and_update_view(self):
644
645
dataset_item_mock .id = ds .id
645
646
sinograms_item_mock = self .view .get_sinograms_item .return_value
646
647
self .presenter .create_single_tabbed_images_stack = mock .Mock ()
647
- self .presenter ._delete_stack = mock .Mock ()
648
+ self .presenter ._delete_stack_visualiser = mock .Mock ()
648
649
649
650
self .presenter .add_sinograms_to_dataset_and_update_view (new_sinograms , ds .sample .id )
650
- self .presenter ._delete_stack .assert_called_once_with (existing_sinograms .id )
651
+ self .presenter ._delete_stack_visualiser .assert_called_once_with (existing_sinograms .id )
651
652
self .assertIs (ds .sinograms , new_sinograms )
652
653
self .view .get_dataset_tree_view_item .assert_called_once_with (ds .id )
653
654
self .view .get_sinograms_item .assert_called_once_with (dataset_item_mock )
@@ -764,87 +765,36 @@ def test_show_add_stack_to_dataset_dialog_called_with_stack_id(self):
764
765
self .presenter .notify (Notification .SHOW_ADD_STACK_DIALOG , container_id = "stack-id" )
765
766
self .view .show_add_stack_to_existing_dataset_dialog .assert_called_once_with (dataset_id )
766
767
767
- def test_add_new_stack_to_strict_dataset (self ):
768
+ @parameterized .expand (["Sample" , "Flat Before" , "Flat After" , "Dark Before" , "Dark After" , "Recon" , "Images" ])
769
+ def test_add_new_stack_to_dataset (self , images_type ):
768
770
self .dataset .flat_before = None
769
771
self .model .datasets [self .dataset .id ] = self .dataset
770
772
771
773
self .view .add_to_dataset_dialog = mock .Mock ()
772
774
self .view .add_to_dataset_dialog .dataset_id = self .dataset .id
773
775
self .view .add_to_dataset_dialog .presenter .images = new_images = generate_images ()
774
- self .view .add_to_dataset_dialog .images_type = images_type = "Flat Before"
776
+ self .view .add_to_dataset_dialog .images_type = images_type
775
777
776
- self .presenter .add_child_item_to_tree_view = mock .Mock ()
777
778
self .presenter .create_single_tabbed_images_stack = mock .Mock ()
779
+ self .presenter ._close_unused_visualisers = mock .Mock ()
780
+ self .view .add_toplevel_item_to_dataset_tree_widget .return_value = mock_top_item = mock .Mock ()
781
+ self .view .add_item_to_dataset_tree_widget .return_value = mock_top_item
778
782
779
- self .presenter ._add_images_to_existing_dataset ()
780
- self .presenter .add_child_item_to_tree_view .assert_called_once_with (self .dataset .id , new_images .id , images_type )
781
- self .presenter .create_single_tabbed_images_stack .assert_called_once_with (new_images )
782
- self .view .model_changed .emit .assert_called_once ()
783
- self .assertIs (self .dataset .flat_before , new_images )
784
-
785
- def test_replace_existing_stack_in_strict_dataset (self ):
786
- self .model .datasets [self .dataset .id ] = self .dataset
787
- prev_images_id = self .dataset .flat_before .id
783
+ treeview_label = images_type
784
+ if images_type == "Sample" :
785
+ treeview_label = "Projections"
786
+ elif images_type in ["Recon" , "Images" ]:
787
+ treeview_label = new_images .name
788
788
789
- self .view .add_to_dataset_dialog = mock .Mock ()
790
- self .view .add_to_dataset_dialog .dataset_id = self .dataset .id
791
- self .view .add_to_dataset_dialog .presenter .images = new_images = generate_images ()
792
- self .view .add_to_dataset_dialog .images_type = "Flat Before"
789
+ self .presenter ._add_images_to_existing_dataset ()
793
790
794
- self .presenter .create_single_tabbed_images_stack = mock .Mock ()
795
- self .presenter .replace_child_item_id = mock .Mock ()
796
- self .presenter ._delete_stack = mock .Mock ()
791
+ self .assertIn (call (treeview_label , new_images .id , mock_top_item ),
792
+ self .view .add_item_to_dataset_tree_widget .mock_calls )
797
793
798
- self .presenter .notify (Notification .DATASET_ADD )
799
- self .presenter .replace_child_item_id .assert_called_once_with (self .dataset .id , prev_images_id , new_images .id )
800
- self .presenter ._delete_stack .assert_called_once_with (prev_images_id )
801
794
self .presenter .create_single_tabbed_images_stack .assert_called_once_with (new_images )
802
795
self .view .model_changed .emit .assert_called_once ()
803
- self .assertIs (self .dataset .flat_before , new_images )
804
-
805
- def test_add_stack_to_mixed_dataset (self ):
806
- mixed_dataset = MixedDataset ()
807
- self .model .datasets [mixed_dataset .id ] = mixed_dataset
808
-
809
- self .view .add_to_dataset_dialog = mock .Mock ()
810
- self .view .add_to_dataset_dialog .dataset_id = mixed_dataset .id
811
- self .view .add_to_dataset_dialog .presenter .images = new_images = generate_images ()
812
- self .presenter .add_child_item_to_tree_view = mock .Mock ()
813
-
814
- self .presenter ._add_images_to_existing_dataset ()
815
- self .assertIn (new_images , mixed_dataset .all )
816
- self .presenter .add_child_item_to_tree_view .assert_called_once_with (mixed_dataset .id , new_images .id ,
817
- new_images .name )
818
-
819
- def test_add_recon_to_mixed_dataset (self ):
820
- mixed_dataset = MixedDataset (stacks = [generate_images ()])
821
- recon = generate_images ()
822
- recon .name = "recon-name"
823
-
824
- self .view .add_to_dataset_dialog .images_type = RECON_TEXT
825
- self .presenter .add_recon_item_to_tree_view = mock .Mock ()
826
- self .presenter .get_dataset = mock .Mock (return_value = mixed_dataset )
827
- self .view .add_to_dataset_dialog .presenter .images = recon
828
-
829
- self .presenter ._add_images_to_existing_dataset ()
830
-
831
- self .assertIn (recon , mixed_dataset .recons .stacks )
832
- self .presenter .add_recon_item_to_tree_view .assert_called_once_with (mixed_dataset .id , recon .id , recon .name )
833
-
834
- def test_add_recon_to_strict_dataset (self ):
835
- self .presenter .add_recon_item_to_tree_view = mock .Mock ()
836
- self .view .add_to_dataset_dialog .images_type = RECON_TEXT
837
-
838
- recon = generate_images ()
839
- recon .name = "recon-name"
840
- self .presenter .add_recon_item_to_tree_view = mock .Mock ()
841
- self .presenter .get_dataset = mock .Mock (return_value = self .dataset )
842
- self .view .add_to_dataset_dialog .presenter .images = recon
843
-
844
- self .presenter ._add_images_to_existing_dataset ()
845
-
846
- self .assertIn (recon , self .dataset .recons .stacks )
847
- self .presenter .add_recon_item_to_tree_view .assert_called_once_with (self .dataset .id , recon .id , recon .name )
796
+ self .assertIn (new_images , self .dataset .all )
797
+ self .presenter ._close_unused_visualisers .assert_called_once ()
848
798
849
799
def test_select_tree_widget_item (self ):
850
800
tree_widget_item = mock .Mock ()
@@ -949,7 +899,7 @@ def test_stack_moved_to_recon(self):
949
899
950
900
self .presenter .get_stack = mock .Mock (return_value = stack_to_move )
951
901
self .presenter .remove_item_from_tree_view = mock .Mock ()
952
- self .presenter ._add_recon_to_dataset_and_tree_view = mock .Mock ()
902
+ self .presenter ._add_images_to_existing_strict_dataset = mock .Mock ()
953
903
self .presenter .get_dataset = mock .Mock (side_effect = [origin_dataset , destination_dataset ])
954
904
955
905
self .presenter .notify (Notification .MOVE_STACK ,
@@ -958,7 +908,8 @@ def test_stack_moved_to_recon(self):
958
908
destination_stack_type = RECON_TEXT ,
959
909
destination_dataset_id = destination_dataset_id )
960
910
self .presenter .get_stack .assert_called_once_with (stack_to_move .id )
961
- self .presenter ._add_recon_to_dataset_and_tree_view .assert_called_once_with (destination_dataset , stack_to_move )
911
+ self .presenter ._add_images_to_existing_strict_dataset .assert_called_once_with (
912
+ destination_dataset , stack_to_move , RECON_TEXT )
962
913
963
914
self .assertNotIn (stack_to_move , origin_dataset )
964
915
@@ -971,34 +922,34 @@ def test_stack_moved_to_mixed_dataset_images(self):
971
922
self .presenter .get_dataset = mock .Mock (side_effect = [origin_dataset , destination_dataset ])
972
923
self .presenter .get_stack = mock .Mock (return_value = stack_to_move )
973
924
self .presenter .remove_item_from_tree_view = mock .Mock ()
974
- self .presenter ._add_images_to_existing_mixed_dataset = mock .Mock ()
925
+ self .presenter ._add_images_to_existing_strict_dataset = mock .Mock ()
975
926
976
927
self .presenter ._move_stack (origin_dataset .id , stack_to_move .id , "Images" , destination_dataset_id )
977
928
self .presenter .get_stack .assert_called_once_with (stack_to_move .id )
978
- self .presenter ._add_images_to_existing_mixed_dataset .assert_called_once_with (destination_dataset , stack_to_move )
929
+ self .presenter ._add_images_to_existing_strict_dataset .assert_called_once_with (
930
+ destination_dataset , stack_to_move , "Images" )
979
931
980
932
self .assertNotIn (stack_to_move , origin_dataset )
981
933
982
934
def test_move_stack_to_strict_dataset (self ):
983
935
stack_to_move = generate_images ()
936
+ print (f"{ stack_to_move .name = } " )
984
937
origin_dataset = MixedDataset (stacks = [stack_to_move ])
985
938
destination_dataset = StrictDataset (sample = generate_images ())
986
939
self .presenter .get_dataset = mock .Mock (side_effect = [origin_dataset , destination_dataset ])
987
940
self .presenter .get_stack = mock .Mock (return_value = stack_to_move )
988
941
989
942
self .presenter .remove_item_from_tree_view = mock .Mock ()
990
- self .presenter ._add_images_to_existing_strict_dataset = mock .Mock ()
943
+ self .presenter .update_dataset_tree = mock .Mock ()
991
944
992
945
self .view .move_stack_dialog = mock .Mock ()
993
946
self .view .move_stack_dialog .destination_stack_type = data_type = "Flat After"
994
- self ._add_images_to_existing_strict_dataset = mock .Mock ()
995
947
new_stack_name = "New Dataset Flat After"
996
948
self .presenter ._create_strict_dataset_stack_name = mock .Mock (return_value = new_stack_name )
997
949
998
950
self .presenter ._move_stack (origin_dataset .id , stack_to_move .id , data_type , destination_dataset .id )
999
951
self .presenter .get_stack .assert_called_once_with (stack_to_move .id )
1000
- self .presenter ._add_images_to_existing_strict_dataset .assert_called_once_with (
1001
- destination_dataset , stack_to_move , data_type )
952
+ self .presenter .update_dataset_tree .assert_called_once ()
1002
953
1003
954
self .assertNotIn (stack_to_move , origin_dataset )
1004
955
assert stack_to_move .name == new_stack_name
@@ -1107,6 +1058,21 @@ def test_update_dataset_tree_datasets_with_image_stacks(self):
1107
1058
]
1108
1059
self .assertListEqual (expected_calls , self .view .add_item_to_dataset_tree_widget .mock_calls )
1109
1060
1061
+ def test_close_unused_visualisers (self ):
1062
+ stacks_ids = [uuid .uuid4 () for _ in range (5 )]
1063
+ visualisers = {id : mock .Mock () for id in stacks_ids }
1064
+ stacks = [mock .Mock (id = id ) for id in stacks_ids ]
1065
+ self .presenter .stack_visualisers = visualisers
1066
+ self .presenter .get_all_stacks = mock .Mock (return_value = stacks )
1067
+ self .presenter ._delete_stack_visualiser = mock .Mock ()
1068
+
1069
+ self .presenter ._close_unused_visualisers ()
1070
+ self .presenter ._delete_stack_visualiser .assert_not_called ()
1071
+
1072
+ stacks .pop (2 )
1073
+ self .presenter ._close_unused_visualisers ()
1074
+ self .presenter ._delete_stack_visualiser .assert_called_with (stacks_ids [2 ])
1075
+
1110
1076
1111
1077
if __name__ == '__main__' :
1112
1078
unittest .main ()
0 commit comments