def test_on_complete(stc):
    sequencer = CStcSystem.Instance().GetObject("Sequencer")
    project = CStcSystem.Instance().GetObject("Project")
    ctor = CScriptableCreator()
    route_mix = ctor.Create("StmTemplateMix", project)
    route_mix.Set("MixInfo", get_example_table_data())
    cmd = ctor.Create(RPKG + ".CreateRouteMixCommand", sequencer)
    cmd.Set("MixInfo", get_example_table_data())
    cmd.SetCollection("TargetObjectList", [route_mix.GetObjectHandle()])
    cmd.Set("AutoExpandTemplateMix", False)
    cmd.Set("StmTemplateMix", route_mix.GetObjectHandle())

    # Mock get_this_cmd
    gtc_p = patch(RPKG + ".CreateRouteMixCommand.get_this_cmd",
                  new=MagicMock(return_value=cmd))
    gtc_p.start()

    # Call on_complete
    CreateRouteMixCmd.on_complete([])

    # Check the MixInfo
    mi = route_mix.Get("MixInfo")
    err_str, mi_dict = json_utils.load_json(mi)
    assert err_str == ""
    assert mi_dict.get("routeCount", 0) == 1000
    comp_list = mi_dict.get("components", [])
    assert len(comp_list) == 2
    gtc_p.stop()
def test_on_complete_fail(stc):
    sequencer = CStcSystem.Instance().GetObject("Sequencer")
    project = CStcSystem.Instance().GetObject("Project")
    ctor = CScriptableCreator()
    route_mix = ctor.Create("StmTemplateMix", project)
    route_mix.Set("MixInfo", get_example_table_data())
    cmd = ctor.Create(RPKG + ".CreateRouteMixCommand", sequencer)
    cmd.Set("MixInfo", get_example_table_data())
    cmd.SetCollection("TargetObjectList", [route_mix.GetObjectHandle()])
    cmd.Set("AutoExpandTemplateMix", False)
    cmd.Set("StmTemplateMix", route_mix.GetObjectHandle())

    # Mock get_this_cmd
    gtc_p = patch(RPKG + ".CreateRouteMixCommand.get_this_cmd",
                  new=MagicMock(return_value=cmd))
    gtc_p.start()

    # "Fail" one of the child commands
    iter_group_cmd = cmd.GetObject(PKG + ".IterationGroupCommand")

    # Call on_complete
    res = CreateRouteMixCmd.on_complete([iter_group_cmd])
    assert not res
    assert "CreateRouteMixCommand.on_complete(): No additional" \
        in cmd.Get("Status")