Exemplo n.º 1
0
def test_matching_activity_tours_delegates_to_plan_activity_tours(
        mocker, plain_filter):
    mocker.patch.object(Plan, 'activity_tours')
    modify.MoveActivityTourToHomeLocation(['']).matching_activity_tours(
        Plan(1), plain_filter)

    Plan.activity_tours.assert_called_once()
Exemplo n.º 2
0
def test_MoveActivityTourToHomeLocation_throws_exception_if_apply_to_given_wrong_input(
        Bobby):
    policy = modify.MoveActivityTourToHomeLocation([''])
    with pytest.raises(NotImplementedError) as e:
        policy.apply_to(Bobby)
    assert 'Types passed incorrectly: <class \'pam.core.Person\'>, <class \'NoneType\'>, <class \'NoneType\'>. You need <class \'type\'> at the very least.' \
           in str(e.value)
Exemplo n.º 3
0
def test_is_part_of_tour_delegates_to_is_exact_method(mocker):
    mocker.patch.object(Activity, 'is_exact')
    a = Activity(1)
    b = Activity(2)
    modify.MoveActivityTourToHomeLocation(['']).is_part_of_tour(a, [[b]])

    Activity.is_exact.assert_called_once_with(b)
Exemplo n.º 4
0
def test_move_person_activities_delegates_to_remove_person_activities_for_persons_activities(
        mocker, Bobby):
    mocker.patch.object(modify.MoveActivityTourToHomeLocation,
                        'move_activities')

    policy = modify.MoveActivityTourToHomeLocation([''])
    policy.move_person_activities(Bobby)

    modify.MoveActivityTourToHomeLocation.move_activities.assert_called_once()
Exemplo n.º 5
0
def test_move_household_activities_delegates_to_remove_person_activities_for_persons_in_household(
        mocker, SmithHousehold):
    mocker.patch.object(modify.MoveActivityTourToHomeLocation,
                        'move_person_activities')

    policy = modify.MoveActivityTourToHomeLocation([''])
    policy.move_household_activities(SmithHousehold)

    assert modify.MoveActivityTourToHomeLocation.move_person_activities.call_count == 4
Exemplo n.º 6
0
def test_MoveActivityTourToHomeLocation_apply_to_delegates_to_helper_when_given_household(
        mocker, SmithHousehold):
    mocker.patch.object(modify.MoveActivityTourToHomeLocation,
                        'move_household_activities')

    policy = modify.MoveActivityTourToHomeLocation([''])
    policy.apply_to(SmithHousehold)

    modify.MoveActivityTourToHomeLocation.move_household_activities.assert_called_once_with(
        SmithHousehold)
Exemplo n.º 7
0
def test_tour_matches_activities_returns_True_when_there_is_a_matching_tour_and_individual_filter(
        activity_tours):
    def is_a_selected_activity(act):
        for other_act in activity_tours[0]:
            if act.is_exact(other_act):
                return True
        return False

    assert modify.MoveActivityTourToHomeLocation(
        ['education', 'shop']).tour_matches_activities(activity_tours[0],
                                                       is_a_selected_activity)
Exemplo n.º 8
0
def test_matching_activity_tours_matches_one_tour(mocker, activity_tours,
                                                  plain_filter):
    mocker.patch.object(Plan, 'activity_tours', return_value=activity_tours)
    mocker.patch.object(modify.MoveActivityTourToHomeLocation,
                        'tour_matches_activities',
                        side_effect=[True, False])

    matching_tours = modify.MoveActivityTourToHomeLocation(
        ['']).matching_activity_tours(Plan(1), plain_filter)

    assert matching_tours == [activity_tours[0]]
Exemplo n.º 9
0
def test_matching_activity_tours_delegates_to_tour_matches_activities(
        mocker, activity_tours, plain_filter):
    mocker.patch.object(Plan,
                        'activity_tours',
                        return_value=[activity_tours[0]])
    mocker.patch.object(modify.MoveActivityTourToHomeLocation,
                        'tour_matches_activities')
    modify.MoveActivityTourToHomeLocation(['']).matching_activity_tours(
        Plan(1), plain_filter)

    modify.MoveActivityTourToHomeLocation.tour_matches_activities.assert_called_once_with(
        activity_tours[0], plain_filter)
Exemplo n.º 10
0
def test_MoveActivityToHomeLocation_moves_shop_to_home_location():
    Hilda = Person(1,
                   attributes={
                       'age': 45,
                       'job': 'influencer',
                       'gender': 'female'
                   })
    Hilda.add(
        Activity(1, 'home', 'a', start_time=mtdt(0), end_time=mtdt(8 * 60)))
    Hilda.add(
        Leg(1,
            'car',
            'a',
            'b',
            start_time=mtdt(8 * 60),
            end_time=mtdt(8 * 60 + 30)))
    Hilda.add(
        Activity(2,
                 'shop',
                 'b',
                 start_time=mtdt(8 * 60 + 30),
                 end_time=mtdt(16 * 60 + 30)))
    Hilda.add(
        Leg(1,
            'car',
            'b',
            'a',
            start_time=mtdt(16 * 60 + 30),
            end_time=mtdt(17 * 60)))
    Hilda.add(
        Activity(5, 'home', 'a', start_time=mtdt(17 * 60),
                 end_time=END_OF_DAY))
    hhld = instantiate_household_with([Hilda])

    policy = modify.PersonPolicy(
        modify.MoveActivityTourToHomeLocation(['shop']),
        modify.PersonProbability(1))
    policy.apply_to(hhld)

    assert Hilda.plan[2].location == Hilda.home
    assert Hilda.plan[2].is_exact(
        Activity(2,
                 'shop',
                 'a',
                 start_time=mtdt(8 * 60 + 30),
                 end_time=mtdt(16 * 60 + 30)))
Exemplo n.º 11
0
def test_MoveActivityToHomeLocation_performs_mode_shift_to_walk_due_to_lack_of_driving_licence(
):
    Hilda = Person(1,
                   attributes={
                       'age': 45,
                       'job': 'influencer',
                       'gender': 'female',
                       'driving_licence': False
                   })
    Hilda.add(
        Activity(1, 'home', 'a', start_time=mtdt(0), end_time=mtdt(8 * 60)))
    Hilda.add(
        Leg(1,
            'pt',
            'a',
            'b',
            start_time=mtdt(8 * 60),
            end_time=mtdt(8 * 60 + 30)))
    Hilda.add(
        Activity(2,
                 'shop',
                 'b',
                 start_time=mtdt(8 * 60 + 30),
                 end_time=mtdt(16 * 60 + 30)))
    Hilda.add(
        Leg(1,
            'pt',
            'b',
            'a',
            start_time=mtdt(16 * 60 + 30),
            end_time=mtdt(17 * 60)))
    Hilda.add(
        Activity(5, 'home', 'a', start_time=mtdt(17 * 60),
                 end_time=END_OF_DAY))
    hhld = instantiate_household_with([Hilda])

    policy = modify.PersonPolicy(
        modify.MoveActivityTourToHomeLocation(['shop']),
        modify.PersonProbability(1))
    policy.apply_to(hhld)

    assert Hilda.plan[1].mode == 'walk'
    assert Hilda.plan[3].mode == 'walk'
Exemplo n.º 12
0
def test_MoveActivityToHomeLocation_does_moves_only_valid_shopping_tour(
        SmithHousehold):
    household = SmithHousehold
    Hilda = Person(2,
                   attributes={
                       'age': 45,
                       'job': 'influencer',
                       'gender': 'female'
                   })
    Hilda.add(
        Activity(1, 'home', 'a', start_time=mtdt(0), end_time=mtdt(8 * 60)))
    Hilda.add(
        Leg(1,
            'walk',
            'a',
            'b',
            start_time=mtdt(8 * 60),
            end_time=mtdt(8 * 60 + 30)))
    Hilda.add(
        Activity(2,
                 'shop',
                 'b',
                 start_time=mtdt(8 * 60 + 30),
                 end_time=mtdt(10 * 60 + 30)))
    Hilda.add(
        Leg(2,
            'walk',
            'a',
            'a',
            start_time=mtdt(10 * 60 + 30),
            end_time=mtdt(11 * 60)))
    Hilda.add(
        Activity(3,
                 'home',
                 'a',
                 start_time=mtdt(11 * 60),
                 end_time=mtdt(12 * 60)))
    Hilda.add(
        Leg(3,
            'walk',
            'a',
            'c',
            start_time=mtdt(12 * 60),
            end_time=mtdt(12 * 60 + 30)))
    Hilda.add(
        Activity(4,
                 'shop',
                 'c',
                 start_time=mtdt(12 * 60 + 30),
                 end_time=mtdt(16 * 60 + 30)))
    Hilda.add(
        Leg(4,
            'walk',
            'a',
            'c',
            start_time=mtdt(16 * 60 + 30),
            end_time=mtdt(17 * 60)))
    Hilda.add(
        Activity(5,
                 'leisure',
                 'c',
                 start_time=mtdt(17 * 60),
                 end_time=mtdt(17 * 60 + 30)))
    Hilda.add(
        Leg(5,
            'walk',
            'c',
            'a',
            start_time=mtdt(17 * 60 + 30),
            end_time=mtdt(18 * 60)))
    Hilda.add(
        Activity(6, 'home', 'a', start_time=mtdt(18 * 60),
                 end_time=END_OF_DAY))
    household.people['2'] = Hilda

    assert_correct_activities(person=Hilda,
                              ordered_activities_list=[
                                  'home', 'shop', 'home', 'shop', 'leisure',
                                  'home'
                              ])
    assert_correct_activities_locations(
        person=Hilda,
        ordered_activities_locations_list=['a', 'b', 'a', 'c', 'c', 'a'])

    policy = modify.PersonPolicy(
        modify.MoveActivityTourToHomeLocation(['shop']),
        modify.PersonProbability(1))
    policy.apply_to(household)

    assert_correct_activities(person=Hilda,
                              ordered_activities_list=[
                                  'home', 'shop', 'home', 'shop', 'leisure',
                                  'home'
                              ])
    assert_correct_activities_locations(
        person=Hilda,
        ordered_activities_locations_list=['a', 'a', 'a', 'c', 'c', 'a'])
Exemplo n.º 13
0
def test_activity_is_part_of_tour(activity_tours):
    activity_in_tour = activity_tours[0][0]
    assert modify.MoveActivityTourToHomeLocation(['']).is_part_of_tour(
        activity_in_tour, activity_tours)
Exemplo n.º 14
0
def test_MoveActivityTourToHomeLocation_doesnt_move_individual_activities_empty_selected_activities_list(
        Bobby):
    policy = modify.MoveActivityTourToHomeLocation(['education'])
    policy.move_individual_activities(Bobby, [])

    assert Bobby.plan[2].location.loc == 'b'
Exemplo n.º 15
0
def test_MoveActivityTourToHomeLocation_move_individual_activities_moves_an_activity(
        Bobby):
    policy = modify.MoveActivityTourToHomeLocation(['education'])
    policy.move_individual_activities(Bobby, [Bobby.plan[2]])

    assert Bobby.plan[2].location == Bobby.home
Exemplo n.º 16
0
def test_tour_matches_activities_returns_False_when_there_is_no_matching_tour_and_plain_filter(
        activity_tours, plain_filter):
    assert not modify.MoveActivityTourToHomeLocation([
        'education', 'shop'
    ]).tour_matches_activities(activity_tours[1], plain_filter)
Exemplo n.º 17
0
def test_MoveActivityToHomeLocation_moves_shopping_tour_to_home_location(
        SmithHousehold):
    household = SmithHousehold
    Steve = household.people['1']
    Timmy = household.people['3']
    Timmy.plan[4].act = 'shop_1'
    Bobby = household.people['4']

    Hilda = Person(2,
                   attributes={
                       'age': 45,
                       'job': 'influencer',
                       'gender': 'female'
                   })
    Hilda.add(
        Activity(1, 'home', 'a', start_time=mtdt(0), end_time=mtdt(8 * 60)))
    Hilda.add(
        Leg(1,
            'walk',
            'a',
            'b',
            start_time=mtdt(8 * 60),
            end_time=mtdt(8 * 60 + 30)))
    Hilda.add(
        Activity(2,
                 'shop_1',
                 'b',
                 start_time=mtdt(8 * 60 + 30),
                 end_time=mtdt(16 * 60 + 30)))
    Hilda.add(
        Leg(2,
            'walk',
            'b',
            'c',
            start_time=mtdt(8 * 60),
            end_time=mtdt(8 * 60 + 30)))
    Hilda.add(
        Activity(3,
                 'shop_2',
                 'c',
                 start_time=mtdt(8 * 60 + 30),
                 end_time=mtdt(16 * 60 + 30)))
    Hilda.add(
        Leg(3,
            'walk',
            'c',
            'a',
            start_time=mtdt(16 * 60 + 30),
            end_time=mtdt(17 * 60)))
    Hilda.add(
        Activity(4, 'home', 'a', start_time=mtdt(17 * 60),
                 end_time=END_OF_DAY))
    household.people['2'] = Hilda

    assert_correct_activities(
        person=Steve,
        ordered_activities_list=['home', 'work', 'leisure', 'work', 'home'])
    assert_correct_activities_locations(
        person=Steve,
        ordered_activities_locations_list=['a', 'b', 'c', 'b', 'a'])
    assert_correct_activities(
        person=Hilda,
        ordered_activities_list=['home', 'shop_1', 'shop_2', 'home'])
    assert_correct_activities_locations(
        person=Hilda, ordered_activities_locations_list=['a', 'b', 'c', 'a'])
    assert_correct_activities(person=Timmy,
                              ordered_activities_list=[
                                  'home', 'education', 'shop_1', 'education',
                                  'leisure', 'home'
                              ])
    assert_correct_activities_locations(
        person=Timmy,
        ordered_activities_locations_list=['a', 'b', 'c', 'b', 'd', 'a'])
    assert_correct_activities(
        person=Bobby, ordered_activities_list=['home', 'education', 'home'])
    assert_correct_activities_locations(
        person=Bobby, ordered_activities_locations_list=['a', 'b', 'a'])

    policy = modify.PersonPolicy(
        modify.MoveActivityTourToHomeLocation(['shop_1', 'shop_2']),
        modify.PersonProbability(1))
    policy.apply_to(household)

    assert_correct_activities(
        person=Steve,
        ordered_activities_list=['home', 'work', 'leisure', 'work', 'home'])
    assert_correct_activities_locations(
        person=Steve,
        ordered_activities_locations_list=['a', 'b', 'c', 'b', 'a'])
    assert_correct_activities(
        person=Hilda,
        ordered_activities_list=['home', 'shop_1', 'shop_2', 'home'])
    assert_correct_activities_locations(
        person=Hilda, ordered_activities_locations_list=['a', 'a', 'a', 'a'])
    assert_correct_activities(person=Timmy,
                              ordered_activities_list=[
                                  'home', 'education', 'shop_1', 'education',
                                  'leisure', 'home'
                              ])
    assert_correct_activities_locations(
        person=Timmy,
        ordered_activities_locations_list=['a', 'b', 'c', 'b', 'd', 'a'])
    assert_correct_activities(
        person=Bobby, ordered_activities_list=['home', 'education', 'home'])
    assert_correct_activities_locations(
        person=Bobby, ordered_activities_locations_list=['a', 'b', 'a'])
Exemplo n.º 18
0
def test_activity_is_not_part_of_tour(activity_tours):
    activity_not_in_tour = Activity(0, 'blah', 'bleh')
    assert not modify.MoveActivityTourToHomeLocation(['']).is_part_of_tour(
        activity_not_in_tour, activity_tours)