@@ -674,3 +674,270 @@ def test_task_types_are_translated(self, browser):
674674 'Zum Bericht / Antrag' ,
675675 'Zur Kenntnisnahme' ],
676676 task_type_labels )
677+
678+
679+ class TestForceCloseTask (IntegrationTestCase ):
680+
681+ @browsing
682+ def test_force_update_open_main_task_without_subtasks (self , browser ):
683+ self .login (self .dossier_responsible )
684+ dossier = create (Builder ('dossier' ))
685+ task = create (
686+ Builder ('task' )
687+ .within (dossier )
688+ .in_state ('task-state-open' )
689+ .titled ('Main task' )
690+ .having (
691+ issuer = self .dossier_responsible .getId (),
692+ responsible = self .dossier_responsible .getId (),
693+ responsible_client = 'fa' ,
694+ task_type = 'information'
695+ )
696+ )
697+
698+ self .assertEqual ('task-state-open' , api .content .get_state (task ))
699+ task .force_finish_task ()
700+ self .assertEqual ('task-state-cancelled' , api .content .get_state (task ))
701+
702+ @browsing
703+ def test_force_update_in_progress_main_task_without_subtasks (self , browser ):
704+ self .login (self .dossier_responsible )
705+ dossier = create (Builder ('dossier' ))
706+ task = create (
707+ Builder ('task' )
708+ .within (dossier )
709+ .in_state ('task-state-in-progress' )
710+ .titled ('Main task' )
711+ .having (
712+ issuer = self .dossier_responsible .getId (),
713+ responsible = self .dossier_responsible .getId (),
714+ responsible_client = 'fa' ,
715+ task_type = 'information'
716+ )
717+ )
718+
719+ self .assertEqual ('task-state-in-progress' , api .content .get_state (task ))
720+ task .force_finish_task ()
721+ self .assertEqual ('task-state-tested-and-closed' , api .content .get_state (task ))
722+
723+ @browsing
724+ def test_force_update_resolved_main_task_without_subtasks (self , browser ):
725+ self .login (self .dossier_responsible )
726+ dossier = create (Builder ('dossier' ))
727+ task = create (
728+ Builder ('task' )
729+ .within (dossier )
730+ .in_state ('task-state-resolved' )
731+ .titled ('Main task' )
732+ .having (
733+ issuer = self .dossier_responsible .getId (),
734+ responsible = self .dossier_responsible .getId (),
735+ responsible_client = 'fa' ,
736+ task_type = 'information'
737+ )
738+ )
739+
740+ self .assertEqual ('task-state-resolved' , api .content .get_state (task ))
741+ task .force_finish_task ()
742+ self .assertEqual ('task-state-tested-and-closed' , api .content .get_state (task ))
743+
744+ @browsing
745+ def test_force_finish_task_open_with_subtask (self , browser ):
746+ self .login (self .dossier_responsible )
747+
748+ dossier = create (Builder ('dossier' ))
749+ main_task = create (
750+ Builder ("task" )
751+ .within (dossier )
752+ .in_state ('task-state-open' )
753+ .titled ("Main Task" )
754+ .having (
755+ responsible = self .dossier_responsible .getId (),
756+ issuer = self .dossier_responsible .getId (),
757+ responsible_client = 'fa' ,
758+ task_type = 'information'
759+ )
760+ )
761+
762+ subtask1 = create (
763+ Builder ("task" )
764+ .within (main_task )
765+ .in_state ('task-state-resolved' )
766+ .titled ("Subtask 1" )
767+ .having (task_type = 'correction' ,
768+ issuer = self .dossier_responsible .getId (),
769+ responsible = self .dossier_responsible .getId (),
770+ responsible_client = 'fa' )
771+ )
772+ subtask2 = create (
773+ Builder ("task" )
774+ .within (main_task )
775+ .in_state ('task-state-in-progress' )
776+ .titled ("Subtask 2" )
777+ .having (task_type = 'information' ,
778+ issuer = self .dossier_responsible .getId (),
779+ responsible = self .dossier_responsible .getId (),
780+ responsible_client = 'fa' )
781+ )
782+ subtask3 = create (
783+ Builder ("task" )
784+ .within (main_task )
785+ .in_state ('task-state-open' )
786+ .titled ("Subtask 3" )
787+ .having (task_type = 'approval' ,
788+ issuer = self .dossier_responsible .getId (),
789+ responsible = self .dossier_responsible .getId (),
790+ responsible_client = 'fa' )
791+ )
792+ subtask4 = create (
793+ Builder ("task" )
794+ .within (main_task )
795+ .in_state ('task-state-rejected' )
796+ .titled ("Subtask 4" )
797+ .having (task_type = 'direct-execution' ,
798+ issuer = self .dossier_responsible .getId (),
799+ responsible = self .dossier_responsible .getId (),
800+ responsible_client = 'fa' )
801+ )
802+
803+ main_task .force_finish_task ()
804+
805+ self .assertEqual ('task-state-cancelled' , api .content .get_state (main_task ))
806+ self .assertEqual ('task-state-cancelled' , api .content .get_state (subtask1 ))
807+ self .assertEqual ('task-state-cancelled' , api .content .get_state (subtask2 ))
808+ self .assertEqual ('task-state-cancelled' , api .content .get_state (subtask3 ))
809+ self .assertEqual ('task-state-cancelled' , api .content .get_state (subtask4 ))
810+
811+ @browsing
812+ def test_force_finish_task_in_progress_with_subtask (self , browser ):
813+ self .login (self .dossier_responsible )
814+
815+ dossier = create (Builder ('dossier' ))
816+ main_task = create (
817+ Builder ("task" )
818+ .within (dossier )
819+ .in_state ('task-state-in-progress' )
820+ .titled ("Main Task" )
821+ .having (
822+ responsible = self .dossier_responsible .getId (),
823+ issuer = self .dossier_responsible .getId (),
824+ responsible_client = 'fa' ,
825+ task_type = 'information'
826+ )
827+ )
828+
829+ subtask1 = create (
830+ Builder ("task" )
831+ .within (main_task )
832+ .in_state ('task-state-resolved' )
833+ .titled ("Subtask 1" )
834+ .having (task_type = 'correction' ,
835+ issuer = self .dossier_responsible .getId (),
836+ responsible = self .dossier_responsible .getId (),
837+ responsible_client = 'fa' )
838+ )
839+ subtask2 = create (
840+ Builder ("task" )
841+ .within (main_task )
842+ .in_state ('task-state-in-progress' )
843+ .titled ("Subtask 2" )
844+ .having (task_type = 'information' ,
845+ issuer = self .dossier_responsible .getId (),
846+ responsible = self .dossier_responsible .getId (),
847+ responsible_client = 'fa' )
848+ )
849+ subtask3 = create (
850+ Builder ("task" )
851+ .within (main_task )
852+ .in_state ('task-state-open' )
853+ .titled ("Subtask 3" )
854+ .having (task_type = 'approval' ,
855+ issuer = self .dossier_responsible .getId (),
856+ responsible = self .dossier_responsible .getId (),
857+ responsible_client = 'fa' )
858+ )
859+ subtask4 = create (
860+ Builder ("task" )
861+ .within (main_task )
862+ .in_state ('task-state-rejected' )
863+ .titled ("Subtask 4" )
864+ .having (task_type = 'direct-execution' ,
865+ issuer = self .dossier_responsible .getId (),
866+ responsible = self .dossier_responsible .getId (),
867+ responsible_client = 'fa' )
868+ )
869+
870+ main_task .force_finish_task ()
871+
872+ self .assertEqual ('task-state-cancelled' , api .content .get_state (main_task ))
873+ self .assertEqual ('task-state-cancelled' , api .content .get_state (subtask1 ))
874+ self .assertEqual ('task-state-cancelled' , api .content .get_state (subtask2 ))
875+ self .assertEqual ('task-state-cancelled' , api .content .get_state (subtask3 ))
876+ self .assertEqual ('task-state-cancelled' , api .content .get_state (subtask4 ))
877+
878+ @browsing
879+ def test_force_finish_task_resolved_with_subtask (self , browser ):
880+ self .login (self .dossier_responsible )
881+
882+ dossier = create (Builder ('dossier' ))
883+ main_task = create (
884+ Builder ("task" )
885+ .within (dossier )
886+ .in_state ('task-state-resolved' )
887+ .titled ("Main Task" )
888+ .having (
889+ responsible = self .dossier_responsible .getId (),
890+ issuer = self .dossier_responsible .getId (),
891+ responsible_client = 'fa' ,
892+ task_type = 'information'
893+ )
894+ )
895+
896+ subtask1 = create (
897+ Builder ("task" )
898+ .within (main_task )
899+ .in_state ('task-state-resolved' )
900+ .titled ("Subtask 1" )
901+ .having (task_type = 'correction' ,
902+ issuer = self .dossier_responsible .getId (),
903+ responsible = self .dossier_responsible .getId (),
904+ responsible_client = 'fa' )
905+ )
906+ subtask2 = create (
907+ Builder ("task" )
908+ .within (main_task )
909+ .in_state ('task-state-in-progress' )
910+ .titled ("Subtask 2" )
911+ .having (task_type = 'information' ,
912+ issuer = self .dossier_responsible .getId (),
913+ responsible = self .dossier_responsible .getId (),
914+ responsible_client = 'fa' )
915+ )
916+ subtask3 = create (
917+ Builder ("task" )
918+ .within (main_task )
919+ .in_state ('task-state-open' )
920+ .titled ("Subtask 3" )
921+ .having (task_type = 'approval' ,
922+ issuer = self .dossier_responsible .getId (),
923+ responsible = self .dossier_responsible .getId (),
924+ responsible_client = 'fa' )
925+ )
926+ subtask4 = create (
927+ Builder ("task" )
928+ .within (main_task )
929+ .in_state ('task-state-rejected' )
930+ .titled ("Subtask 4" )
931+ .having (task_type = 'direct-execution' ,
932+ issuer = self .dossier_responsible .getId (),
933+ responsible = self .dossier_responsible .getId (),
934+ responsible_client = 'fa' )
935+ )
936+
937+ main_task .force_finish_task ()
938+
939+ self .assertEqual ('task-state-tested-and-closed' , api .content .get_state (main_task ))
940+ self .assertEqual ('task-state-tested-and-closed' , api .content .get_state (subtask1 ))
941+ self .assertEqual ('task-state-tested-and-closed' , api .content .get_state (subtask2 ))
942+ self .assertEqual ('task-state-cancelled' , api .content .get_state (subtask3 ))
943+ self .assertEqual ('task-state-rejected' , api .content .get_state (subtask4 ))
0 commit comments