def test_notification():
    init()
    with Feature(u"测试notification", ["flask.ext.report.test.tests.steps.notification_step"]):
        with Scenario(u"初始化"):
            given(u"初始化notification")

        with Scenario(u"notification的修改"):
            browser = when(u"访问notification", id_=1)
            browser = then(u"修改notification的name成功", browser)

            browser = when(u"启用notification", browser)
            then(u"启用成功", browser)
Beispiel #2
0
def test_notification():
    init()
    with Feature(u"测试notification",
                 ["flask.ext.report.test.tests.steps.notification_step"]):
        with Scenario(u"初始化"):
            given(u"初始化notification")

        with Scenario(u"notification的修改"):
            browser = when(u"访问notification", id_=1)
            browser = then(u"修改notification的name成功", browser)

            browser = when(u"启用notification", browser)
            then(u"启用成功", browser)
Beispiel #3
0
def test():
    flask_sqlalchemy_setup(app, db, create_step_prefix=u"创建",
                           model_name_getter=lambda model: model.__name__,
                           attr_name_getter=lambda model, attr: model.__col_desc__.get(attr, attr),
                           set_step_pattern=u'(\w+)([\.\w+]+)设置为(.+)')

    with Feature(u"订单测试",step_files=["litefac.test.at.steps.order"]):
        with Scenario(u"准备数据"):
            plate = given(u"创建Plate", name=generate(5))
            product_type_default = and_(u"创建ProductType", name=constants.DEFAULT_PRODUCT_TYPE_NAME)
            product_default = and_(u"创建Product", name=constants.DEFAULT_PRODUCT_NAME,
                                   product_type=product_type_default)
            group = and_(u'创建Group(cargo_clerk)', name='cargo_clerk', default_url='/cargo/unload-session-list')
            and_(u"创建User", username="******", password="******", groups=[group])
            customer = and_(u"创建Customer", name=generate(5), abbr=generate(2))
            department = and_(u"创建Department", name=generate(5))
            harbor = and_(u"创建Harbor", name=generate(5), department=department)

        with Scenario(u"最简单流程"):
            gr = given(u"收货单", customer, harbor)
            order = and_(u"生成订单", gr, order_type=constants.STANDARD_ORDER_TYPE)
            when(u"完善订单", order)
            status_code = and_(u"下发订单", order)
            then(u"操作成功", status_code)
Beispiel #4
0
def test():
    flask_sqlalchemy_setup(app, db, create_step_prefix=u"创建",
                           model_name_getter=lambda model: model.__name__,
                           attr_name_getter=lambda model, attr: model.__col_desc__.get(attr, attr),
                           set_step_pattern=u'(\w+)([\.\w+]+)设置为(.+)')

    with Feature(u"订单测试",step_files=["lite_mms.test.at.steps.order"]):
        with Scenario(u"准备数据"):
            plate = given(u"创建Plate", name=generate(5))
            product_type_default = and_(u"创建ProductType", name=constants.DEFAULT_PRODUCT_TYPE_NAME)
            product_default = and_(u"创建Product", name=constants.DEFAULT_PRODUCT_NAME,
                                   product_type=product_type_default)
            group = and_(u'创建Group(cargo_clerk)', name='cargo_clerk', default_url='/cargo/unload-session-list')
            and_(u"创建User", username="******", password="******", groups=[group])
            customer = and_(u"创建Customer", name=generate(5), abbr=generate(2))
            department = and_(u"创建Department", name=generate(5))
            harbor = and_(u"创建Harbor", name=generate(5), department=department)

        with Scenario(u"最简单流程"):
            gr = given(u"收货单", customer, harbor)
            order = and_(u"生成订单", gr, order_type=constants.STANDARD_ORDER_TYPE)
            when(u"完善订单", order)
            status_code = and_(u"下发订单", order)
            then(u"操作成功", status_code)
Beispiel #5
0
def test_it_works():
    init()
    with Feature(u"测试data_set的filter", ['flask.ext.report.test.tests.steps.data_set_step']):
        with Scenario(u"加载data_set"):
            browser = when(u"打开dataset", id_=1)
            then(u"配置shown的filter展示", browser)

        with Scenario(u"删除data_set的filter"):
            browser = when(u"打开dataset", id_=1)
            then(u"删除filter", browser)

        with Scenario(u"删除data_set的filter"):
            browser = when(u"打开dataset", id_=1)
            then(u"添加filter", browser)
Beispiel #6
0
def test_it_works():
    init()
    with Feature(u"测试data_set的filter",
                 ['flask.ext.report.test.tests.steps.data_set_step']):
        with Scenario(u"加载data_set"):
            browser = when(u"打开dataset", id_=1)
            then(u"配置shown的filter展示", browser)

        with Scenario(u"删除data_set的filter"):
            browser = when(u"打开dataset", id_=1)
            then(u"删除filter", browser)

        with Scenario(u"删除data_set的filter"):
            browser = when(u"打开dataset", id_=1)
            then(u"添加filter", browser)
Beispiel #7
0
def test():
    
    @before_each_feature
    def setup(feature):
        app.config['CODERNITY_DATABASE_PATH'] = mkdtemp()
        global patcher
        patcher = mock.patch.dict(litefac.database.__dict__, 
                                  {
                                      "codernity_db": Database(app.config['CODERNITY_DATABASE_PATH'])
                                  })
        patcher.start()
        litefac.database.codernity_db.create()
        

    @after_each_feature
    def teardown(feature):
        litefac.database.codernity_db.close()
        shutil.rmtree(app.config['CODERNITY_DATABASE_PATH'])
        patcher.stop()

    flask_sqlalchemy_setup(app, db, create_step_prefix=u"创建",
                           model_name_getter=lambda model: model.__name__,
                           attr_name_getter=lambda model, attr: model.__col_desc__.get(attr, attr),
                           set_step_pattern=u'(\w+)([\.\w+]+)设置为(.+)')

    with Feature(u"发货会话测试", step_files=["litefac.test.at.steps.delivery"]):
        with Scenario(u"准备数据"):
            plate = given(u"创建Plate", name=generate(5))
            product_type_default = and_(u"创建ProductType", name=constants.DEFAULT_PRODUCT_TYPE_NAME)
            product_default = and_(u"创建Product", name=constants.DEFAULT_PRODUCT_NAME,
                                   product_type=product_type_default)
            group_cc = and_(u'创建Group(cargo_clerk)', name='cargo_clerk', 
                            id=constants.groups.CARGO_CLERK, default_url='/cargo/unload-session-list')
            and_(u"创建User", username="******", password=md5("cc").hexdigest(), groups=[group_cc])
            group_loader = and_(u'创建Group(loader)', name='loader', id=constants.groups.LOADER)
            and_(u"创建User", username="******", password=md5("l").hexdigest(), groups=[group_loader])
            customer = and_(u"创建Customer", name=generate(5), abbr=generate(2))
            department = and_(u"创建Department", name=generate(5))
            harbor = and_(u"创建Harbor", name=generate(5), department=department)
            store_bill1 = and_(u"生成StoreBill", customer, harbor=harbor)
            store_bill2 = and_(u"生成StoreBill", customer, harbor=harbor)

        with Scenario(u"创建发货会话,并生成发货单"):
            delivery_session = when(u"收发员创建发货会话", plate=plate, tare=1500)
            then(u"收发员选择仓单", delivery_session, [store_bill1, store_bill2])
            and_(u"装卸工全部装货、完全装货", delivery_session, store_bill1)
            consignment = and_(u"收发员生成发货单", delivery_session)
            then(u"发货单产品与仓单相同", consignment, store_bill1)

        with Scenario(u"修改发货会话"):
            delivery_session = given(u"已关闭的发货会话", plate, tare=1000)
            status_code = when(u"修改发货会话", delivery_session)
            then(u"无法修改", status_code)
            when(u"重新打开发货会话", delivery_session)
            status_code = and_(u"修改发货会话", delivery_session)
            then(u"修改成功", status_code)

        with Scenario(u"修改发货任务"):
            delivery_session = given(u"已关闭的发货会话", plate, tare=1000)
            delivery_task = and_(u"发货任务", delivery_session)
            status_code = when(u"修改发货任务", delivery_task)
            then(u"无法修改", status_code)
            when(u"重新打开发货会话", delivery_session)
            status_code = and_(u"修改发货任务", delivery_task)
            then(u"修改成功", status_code)

        with Scenario(u"修改发货单"):
            consignment = given(u"未打印的发货单", customer, delivery_session, store_bill1.sub_order.product)
            status_code = when(u"修改发货单的产品", consignment)
            then(u"修改成功", status_code)
            when(u"打印发货单", consignment)
            status_code = and_(u"修改发货单的产品", consignment)
            then(u"无法修改", status_code)

        with Scenario(u"对已生成发货单的发货会话,新增发货任务"):
            delivery_session = given(u"已生成发货单的发货会话", plate, 1000, customer, store_bill1.sub_order.product)
            then(u"重新打开发货会话", delivery_session)
            when(u"新增发货任务", delivery_session, store_bill2)
            then(u"提示需要重新生成发货单", delivery_session)
        
    with Feature(u"剩余重量异常", step_files=["litefac.test.at.steps.delivery"]):
        with Scenario(u'数据准备'):
            plate = given(u"创建Plate", name=generate(5))
            product_type_default = and_(u"创建ProductType", name=constants.DEFAULT_PRODUCT_TYPE_NAME)
            product_default = and_(u"创建Product", name=constants.DEFAULT_PRODUCT_NAME,
                                   product_type=product_type_default)
            group_cc = and_(u'创建Group(cargo_clerk)', name='cargo_clerk', 
                            id=constants.groups.CARGO_CLERK, default_url='/cargo/unload-session-list')
            and_(u"创建User", username="******", password=md5("cc").hexdigest(), groups=[group_cc])
            group_loader = and_(u'创建Group(loader)', name='loader', id=constants.groups.LOADER)
            and_(u"创建User", username="******", password=md5("l").hexdigest(), groups=[group_loader])
            customer = and_(u"创建Customer", name=generate(5), abbr=generate(2))
            department = and_(u"创建Department", name=generate(5))
            harbor = and_(u"创建Harbor", name=generate(5), department=department)
            store_bill1 = and_(u"生成StoreBill", customer, harbor=harbor, weight=2000)
            store_bill2 = and_(u"生成StoreBill", customer, harbor=harbor, weight=1000)
            
        with Scenario(u'最简情况'):
            delivery_session = when(u"收发员创建发货会话", plate=plate, tare=1500)
            then(u"收发员选择仓单", delivery_session, [store_bill1, store_bill2])
            and_(u'创建发货任务, 包含两个仓单, 其中一个未完成, 剩余重量超过了原有仓单的重量', delivery_session, store_bill1, store_bill2)
            node_id = then(u'一个异常发货任务申请生成了', yawf.WorkFlowEngine.instance.db)
            then(u'不能再次创建发货任务,包含两个仓单,全部都完成', delivery_session, store_bill1, store_bill2)
            when(u'批准该申请', node_id)
            then(u'发货任务生成了, 存在一个未发货的仓单, 剩余重量是1001, 另外由两个仓单已经发货完毕, 其重量分别是2000, 1', delivery_session, store_bill1.id, store_bill2.id)

    clear_hooks()
Beispiel #8
0
def test():
    flask_sqlalchemy_setup(
        app, db, create_step_prefix=u"创建",
        model_name_getter=lambda model: model.__name__,
        attr_name_getter=lambda model, attr: model.__col_desc__.get(attr,
                                                                    attr),
        set_step_pattern=u'(\w+)([\.\w+]+)设置为(.+)')

    with Feature(u'工单测试', step_files=['lite_mms.test.at.steps.manufacture']):
        with Scenario(u'准备数据'):
            cargo_clerk_group = and_(u'创建Group(cargo_clerk)',
                                     id=lite_mms.constants.groups.CARGO_CLERK)
            cargo_clerk = and_(u'创建User', username='******',
                               password=md5('cc').hexdigest(),
                               groups=[cargo_clerk_group])
            scheduler_group = and_(u'创建Group(scheduler)',
                                   id=lite_mms.constants.groups.SCHEDULER)
            and_(u'创建User', username='******', password=md5('s').hexdigest(),
                 groups=[scheduler_group])
            customer = and_(u'创建Customer', name='foo', abbr='foo')
            plate = and_(u'创建Plate', name='foo')
            unload_session = and_(u'创建UnloadSession', plate_=plate,
                                  gross_weight=5000)
            goods_receipt = and_(u'创建GoodsReceipt', customer=customer,
                                 unload_session=unload_session,
                                 creator=cargo_clerk)
            order = and_(u'创建Order', goods_receipt=goods_receipt,
                         creator=cargo_clerk)
            product_type = and_(u'创建ProductType', name='foo')
            product = and_(u'创建Product', name='foo',
                           product_type=product_type)
            harbor = and_(u'创建Harbor', name='foo')
            sub_order = and_(u'创建SubOrder', product=product, weight=100,
                             harbor=harbor, order=order, quantity=100,
                             unit='KG')
            department_leader_group = and_(u'创建Group(department_leader)',
                                           id=groups_const.DEPARTMENT_LEADER)
            department_leader = and_(u'创建User', username='******',
                                     password=md5('dl').hexdigest(),
                                     groups=[department_leader_group])
            department = and_(u'创建Department', name='foo',
                              leader_list=[department_leader],
                              harbor_list=[harbor])
            team_leader_group = and_(u'创建Group(team_leader)',
                                     id=groups_const.TEAM_LEADER)
            team_leader = and_(u'创建User', username='******',
                               password=md5('tl').hexdigest(),
                               groups=[team_leader_group])
            team = and_(u'创建Team', name='foo', department=department,
                        leader_list=[team_leader])
            quality_inspector_group = and_(u'创建Group(quality_inspector)',
                                           id=groups_const.QUALITY_INSPECTOR)
            and_(u'创建User', username='******',
                 password=md5('qi').hexdigest(),
                 groups=[quality_inspector_group])

        with Scenario(u'最简流程'):
            when(u'调度员对子订单进行预排产60公斤', sub_order)
            wc = then(u'一条重量是60公斤的工单生成了', sub_order)
            and_(u'原子订单的剩余重量是40公斤', sub_order)
            when(u'调度员将工单排产给车间', wc, department)
            then(u'车间主任将看到工单', wc, department)
            then(u'车间主任将工单分配到班组', wc, department, team)
            then(u'班组长将看到工单', wc, team)

            when(u'班组长增加重量20公斤', wc)
            when(u'班组长增加重量30公斤', wc)
            when(u'班组长增加重量50公斤, 并且结束', wc)
            and_(u'工单的工序后重量是100公斤', wc)

            then(u'质检员可以看到工单', wc, team)

            qir = when(u'质检员全部通过该工单', wc)
            then(u'该工单已经结束', wc)
            and_(u'一条对应的仓单生成了', qir, harbor)

        with Scenario(u'临时保存质检报告'):
            when(u'调度员对子订单进行预排产40公斤', sub_order)
            wc = then(u'一条重量是40公斤的工单生成了', sub_order)
            and_(u'调度员将工单排产给车间', wc, department)
            and_(u'车间主任将工单分配到班组', wc, department, team)
            and_(u'班组长增加重量40公斤, 并且结束', wc)

            qir_list = when(u'质检员保存质检结果', wc)
            then(u'工单的质检报告列表正确保存了', wc, qir_list)

    clear_hooks()
Beispiel #9
0
def test_cargo():
    from pyfeature import flask_sqlalchemy_setup

    flask_sqlalchemy_setup(app, db, create_step_prefix=u"创建",
                           model_name_getter=lambda model: model.__name__,
                           attr_name_getter=lambda model, attr: model.__col_desc__.get(attr, attr),
                           set_step_pattern=u'(\w+)([\.\w+]+)设置为(.+)')

    with Feature(u"卸货会话生成收货单", ['lite_mms.test.at.steps.cargo'], verbose=False):
        with Scenario(u"准备数据"):
            plate = given(u"创建Plate(浙B 11112)")
            harbor = and_(u"创建Harbor(foo车间)")
            customer = and_(u"创建Customer(宁波机床厂)", abbr="aaa")
            customer2 = and_(u"创建Customer(宁力紧固件)", abbr="bbb")
            dpt = and_(u"创建ProductType(默认加工件)")
            and_(u"创建Product(默认加工件)", product_type=dpt)
            product_type = and_(u"创建ProductType(foo)")
            product = and_(u"创建Product(foo)", product_type=product_type)
            cargo_clerk_group = and_(u'创建Group(cargo_clerk)', id=lite_mms.constants.groups.CARGO_CLERK, 
                                     default_url='/cargo/unload-session-list')
            and_(u"创建User", username="******", password=md5("cc").hexdigest(), groups=[cargo_clerk_group])
            loader_group = and_(u'创建Group(loader)', id=lite_mms.constants.groups.LOADER)
            and_(u'创建User', username="******", password=md5("l").hexdigest(), groups=[loader_group])

        with Scenario(u"最简完整流程"):
            us = when(u'收发员创建UnloadSession, 毛重是10000公斤', plate)
            ut = and_(u'装卸工进行卸货,该货物来自宁波机床厂', customer, harbor, product, us, is_last=True)
            and_(u'收发员称重8000公斤', ut)

            then(u"卸货任务的重量是2000公斤", ut)
            and_(u'卸货会话已经关闭', us)

            gr_list = when(u'收发员生成收货单', us)
            then(u'该收货单中包含一个项目,该项目的客户是宁波机床厂, 项目的重量是2000公斤', gr_list)

        with Scenario(u"包含多次卸货任务的卸货会话"):
            us = when(u'收发员创建UnloadSession, 毛重是10000公斤', plate)
            ut1 = and_(u'装卸工进行卸货,该货物来自宁波机床厂', customer, harbor, product, us, is_last=False)
            then(u'装卸工此时不能进行卸货', us)

            when(u'收发员称重8000公斤', ut1)
            then(u"卸货任务的重量是2000公斤", ut1)
            and_(u'卸货会话没有关闭', us)

            ut2 = when(u'装卸工进行卸货,该货物来自宁力紧固件', customer2, harbor, product, us, is_last=True)
            and_(u'收发员称重5000公斤', ut2)
            then(u'卸货任务的重量是3000公斤', ut2)
            and_(u"卸货会话已经关闭", us)

            gr_list = when(u'收发员生成收货单', us)
            then(u'该会话中包含两个项目', gr_list)
            and_(u'项目的客户是宁波机床厂, 项目的重量是2000公斤', gr_list[0])
            and_(u'项目的客户是宁力紧固件, 项目的重量是3000公斤', gr_list[1])

        with Scenario(u'除非卸货会话关闭,否则卸货会话都可以修改'):
            us = when(u'收发员创建卸货会话, 其状态是待称重')
            ut = and_(u'装卸工创建卸货任务', customer, harbor, product, us)
            and_(u'修改卸货会话的车牌号为浙B 00002', us)
            and_(u'修改卸货会话的毛重为10000公斤', us)
            then(u'卸货会话的车牌号为浙B 00002', us)
            and_(u'卸货会话的重量为10000公斤', us)
            and_(u'修改卸货任务的重量为2000公斤', ut)
            then(u'卸货任务的重量是2000公斤', ut)

            when(u'关闭卸货会话',us)
            then(u'不能修改卸货会话',us)
            and_(u'不能修改卸货任务',ut)

        with Scenario(u'收发员删除卸货任务'):
            us = given(u"未关闭的卸货会话")
            ut1 = and_(u"已称重的卸货任务", us, customer, harbor, product)
            ut2 = and_(u"未称重的卸货任务", us, customer, harbor, product)
            rv = when(u"删除卸货任务", ut1)
            then(u"无法删除", rv)
            rv = when(u"删除卸货任务", ut2)
            then(u"删除成功", rv)

        with Scenario(u'收发员强行关闭卸货会话'):
            us = given(u"未称重未关闭的卸货会话", customer, harbor, product)
            rv = when(u"收发员关闭卸货会话", us)
            then(u"关闭失败", rv)
            when(u"收发员称重卸货会话", us)
            rv = and_(u"收发员关闭卸货会话", us)
            then(u"关闭成功", rv)

        with Scenario(u'收发员创建卸货会话时,不能选择正在装货或者卸货的车辆'):
            plate_a = given(u"正在装货的车辆", plate_name="Ijkdplate_a")
            plate_list = when(u"收发员创建新卸货会话")
            then(u"车辆列表中无上述车辆", plate_a, plate_list)

        with Scenario(u'收发员打开关闭的卸货会话,并且修改'):
            us = given(u"卸货会话已关闭,未生成收货单", customer, harbor,plate, product)
            when(u"收发员重新打开卸货会话", us)
            then(u"收发员修改其卸货任务的重量为5000KG", us)
            and_(u"收发员关闭卸货会话", us)
            gr = then(u"生成收货单。其产品重量为5000KG", us)
            when(u"收发员重新打开卸货会话", us)
            and_(u"收发员修改其卸货任务的重量为6000KG", us)
            then(u"收货单未过时", gr)
            when(u"又新增一卸货任务", us)
            then(u"收货单过时", gr)

        with Scenario(u'若收货单过时,或者已经生成了订单,那么不能修改收货单'):
            us = given(u"卸货会话已关闭,未生成收货单", customer, harbor,plate, product)
            gr_list = and_(u'收发员生成收货单', us)
            when(u"收发员重新打开卸货会话", us)
            and_(u'又新增一卸货任务',us)
            then(u'收货单过时', gr_list[0])
            and_(u'不能修改收货单', gr_list[0])

            gr_list = when(u'重新生成收货单', us)
            and_(u'生成订单',gr_list[0])
            then(u'不能修改收货单',gr_list[0])
    
    clear_hooks()
Beispiel #10
0
def test():
    
    @before_each_feature
    def setup(feature):
        app.config['CODERNITY_DATABASE_PATH'] = mkdtemp()
        global patcher
        patcher = mock.patch.dict(lite_mms.database.__dict__, 
                                  {
                                      "codernity_db": Database(app.config['CODERNITY_DATABASE_PATH'])
                                  })
        patcher.start()
        lite_mms.database.codernity_db.create()
        

    @after_each_feature
    def teardown(feature):
        lite_mms.database.codernity_db.close()
        shutil.rmtree(app.config['CODERNITY_DATABASE_PATH'])
        patcher.stop()

    flask_sqlalchemy_setup(app, db, create_step_prefix=u"创建",
                           model_name_getter=lambda model: model.__name__,
                           attr_name_getter=lambda model, attr: model.__col_desc__.get(attr, attr),
                           set_step_pattern=u'(\w+)([\.\w+]+)设置为(.+)')

    with Feature(u"发货会话测试", step_files=["lite_mms.test.at.steps.delivery"]):
        with Scenario(u"准备数据"):
            plate = given(u"创建Plate", name=generate(5))
            product_type_default = and_(u"创建ProductType", name=constants.DEFAULT_PRODUCT_TYPE_NAME)
            product_default = and_(u"创建Product", name=constants.DEFAULT_PRODUCT_NAME,
                                   product_type=product_type_default)
            group_cc = and_(u'创建Group(cargo_clerk)', name='cargo_clerk', 
                            id=constants.groups.CARGO_CLERK, default_url='/cargo/unload-session-list')
            and_(u"创建User", username="******", password=md5("cc").hexdigest(), groups=[group_cc])
            group_loader = and_(u'创建Group(loader)', name='loader', id=constants.groups.LOADER)
            and_(u"创建User", username="******", password=md5("l").hexdigest(), groups=[group_loader])
            customer = and_(u"创建Customer", name=generate(5), abbr=generate(2))
            department = and_(u"创建Department", name=generate(5))
            harbor = and_(u"创建Harbor", name=generate(5), department=department)
            store_bill1 = and_(u"生成StoreBill", customer, harbor=harbor)
            store_bill2 = and_(u"生成StoreBill", customer, harbor=harbor)

        with Scenario(u"创建发货会话,并生成发货单"):
            delivery_session = when(u"收发员创建发货会话", plate=plate, tare=1500)
            then(u"收发员选择仓单", delivery_session, [store_bill1, store_bill2])
            and_(u"装卸工全部装货、完全装货", delivery_session, store_bill1)
            consignment = and_(u"收发员生成发货单", delivery_session)
            then(u"发货单产品与仓单相同", consignment, store_bill1)

        with Scenario(u"修改发货会话"):
            delivery_session = given(u"已关闭的发货会话", plate, tare=1000)
            status_code = when(u"修改发货会话", delivery_session)
            then(u"无法修改", status_code)
            when(u"重新打开发货会话", delivery_session)
            status_code = and_(u"修改发货会话", delivery_session)
            then(u"修改成功", status_code)

        with Scenario(u"修改发货任务"):
            delivery_session = given(u"已关闭的发货会话", plate, tare=1000)
            delivery_task = and_(u"发货任务", delivery_session)
            status_code = when(u"修改发货任务", delivery_task)
            then(u"无法修改", status_code)
            when(u"重新打开发货会话", delivery_session)
            status_code = and_(u"修改发货任务", delivery_task)
            then(u"修改成功", status_code)

        with Scenario(u"修改发货单"):
            consignment = given(u"未打印的发货单", customer, delivery_session, store_bill1.sub_order.product)
            status_code = when(u"修改发货单的产品", consignment)
            then(u"修改成功", status_code)
            when(u"打印发货单", consignment)
            status_code = and_(u"修改发货单的产品", consignment)
            then(u"无法修改", status_code)

        with Scenario(u"对已生成发货单的发货会话,新增发货任务"):
            delivery_session = given(u"已生成发货单的发货会话", plate, 1000, customer, store_bill1.sub_order.product)
            then(u"重新打开发货会话", delivery_session)
            when(u"新增发货任务", delivery_session, store_bill2)
            then(u"提示需要重新生成发货单", delivery_session)
        
    with Feature(u"剩余重量异常", step_files=["lite_mms.test.at.steps.delivery"]):
        with Scenario(u'数据准备'):
            plate = given(u"创建Plate", name=generate(5))
            product_type_default = and_(u"创建ProductType", name=constants.DEFAULT_PRODUCT_TYPE_NAME)
            product_default = and_(u"创建Product", name=constants.DEFAULT_PRODUCT_NAME,
                                   product_type=product_type_default)
            group_cc = and_(u'创建Group(cargo_clerk)', name='cargo_clerk', 
                            id=constants.groups.CARGO_CLERK, default_url='/cargo/unload-session-list')
            and_(u"创建User", username="******", password=md5("cc").hexdigest(), groups=[group_cc])
            group_loader = and_(u'创建Group(loader)', name='loader', id=constants.groups.LOADER)
            and_(u"创建User", username="******", password=md5("l").hexdigest(), groups=[group_loader])
            customer = and_(u"创建Customer", name=generate(5), abbr=generate(2))
            department = and_(u"创建Department", name=generate(5))
            harbor = and_(u"创建Harbor", name=generate(5), department=department)
            store_bill1 = and_(u"生成StoreBill", customer, harbor=harbor, weight=2000)
            store_bill2 = and_(u"生成StoreBill", customer, harbor=harbor, weight=1000)
            
        with Scenario(u'最简情况'):
            delivery_session = when(u"收发员创建发货会话", plate=plate, tare=1500)
            then(u"收发员选择仓单", delivery_session, [store_bill1, store_bill2])
            and_(u'创建发货任务, 包含两个仓单, 其中一个未完成, 剩余重量超过了原有仓单的重量', delivery_session, store_bill1, store_bill2)
            node_id = then(u'一个异常发货任务申请生成了', yawf.WorkFlowEngine.instance.db)
            then(u'不能再次创建发货任务,包含两个仓单,全部都完成', delivery_session, store_bill1, store_bill2)
            when(u'批准该申请', node_id)
            then(u'发货任务生成了, 存在一个未发货的仓单, 剩余重量是1001, 另外由两个仓单已经发货完毕, 其重量分别是2000, 1', delivery_session, store_bill1.id, store_bill2.id)

    clear_hooks()