def test_rule_match_success_dest_ctc_assign_same(pg_conn, loc_a1, loc_b1,
                                                 ctc_a1, ctc_b1):
    create_location_assign_type(pg_conn, 'keeper', 'Keeper')
    create_location_assign_type(pg_conn, 'dweller', 'Dweller')
    assign_contact_to_location(pg_conn, loc_a1, ctc_a1, 'dweller')
    assign_contact_to_location(pg_conn, loc_a1, ctc_b1, 'keeper')
    rule_1 = _create_auth_rule(pg_conn, 1, 'sys/none')
    rule_2 = _create_auth_rule(pg_conn, 2, 'sys/none')
    rule_3 = _create_auth_rule(pg_conn, 3, 'sys/none')
    patch_auth_rule(pg_conn, rule_1, loc_ass='dweller')
    patch_auth_rule(pg_conn, rule_2, loc_ass='keeper')
    proc_1 = create_process(pg_conn)
    proc_2 = create_process(pg_conn)
    proc_3 = create_process(pg_conn)
    update_process(pg_conn, proc_1, ctc_a1, None, loc_a1, None,
                   None)  # assignee aiming correct loc
    update_process(pg_conn, proc_2, ctc_b1, None, loc_a1, None,
                   None)  # assignee aiming correct loc
    update_process(pg_conn, proc_3, ctc_b1, None, loc_b1, None,
                   None)  # assignee aiming incorrect loc
    processes_matches = retrieve_processes_rule_matches(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == [rule_1, rule_3]
    assert _proc_matches(grouped, proc_2) == [rule_2, rule_3]
    assert _proc_matches(grouped, proc_3) == [rule_3]
def test_rule_match_success_ckp_null(pg_conn, ckp_a1, ckp_b1):
    rule_1 = _create_auth_rule(pg_conn, 1, 'sys/none')
    rule_2 = _create_auth_rule(pg_conn, 2, 'sys/none')
    proc_1 = create_process(pg_conn)
    proc_2 = create_process(pg_conn)
    update_process(pg_conn, proc_1, None, None, None, ckp_a1, None)
    update_process(pg_conn, proc_2, None, None, None, ckp_b1, None)
    processes_matches = retrieve_processes_rule_matches(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == [rule_1, rule_2]
    assert _proc_matches(grouped, proc_2) == [rule_1, rule_2]
def test_rule_match_success_daytime_range_max(pg_conn):
    rule_1 = _create_auth_rule(pg_conn, 1, 'sys/none')
    rule_2 = _create_auth_rule(pg_conn, 2, 'sys/none')
    patch_auth_rule(pg_conn, rule_1, hour1=0, minute1=0)
    patch_auth_rule(pg_conn, rule_2, hour1=23, minute1=59)
    proc_1 = create_process(pg_conn, started_at=dt(2018, 7, 15, 0, 0))
    proc_2 = create_process(pg_conn, started_at=dt(2018, 7, 15, 23, 59))
    processes_matches = retrieve_processes_rule_matches(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == [rule_1, rule_2]
    assert _proc_matches(grouped, proc_2) == [rule_2]
def test_rule_match_success_weekday_range_max(pg_conn):
    rule_1 = _create_auth_rule(pg_conn, 1, 'sys/none')
    rule_2 = _create_auth_rule(pg_conn, 2, 'sys/none')
    patch_auth_rule(pg_conn, rule_1, wday1=0)
    patch_auth_rule(pg_conn, rule_2, wday1=6)
    proc_1 = create_process(pg_conn, started_at=dt(2018, 7, 15))  # 0, monday
    proc_2 = create_process(pg_conn, started_at=dt(2018, 7, 14))  # 6, sunday
    processes_matches = retrieve_processes_rule_matches(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == [rule_1, rule_2]
    assert _proc_matches(grouped, proc_2) == [rule_2]
def test_rule_match_success_monthday_range_max(pg_conn):
    rule_1 = _create_auth_rule(pg_conn, 1, 'sys/none')
    rule_2 = _create_auth_rule(pg_conn, 2, 'sys/none')
    patch_auth_rule(pg_conn, rule_1, mday1=1)
    patch_auth_rule(pg_conn, rule_2, mday1=31)
    proc_1 = create_process(pg_conn, started_at=dt(2010, 1, 1))
    proc_2 = create_process(pg_conn, started_at=dt(2010, 1, 31))
    processes_matches = retrieve_processes_rule_matches(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == [rule_1, rule_2]
    assert _proc_matches(grouped, proc_2) == [rule_2]
def test_rule_match_success_year_range_min(pg_conn):
    rule_1 = _create_auth_rule(pg_conn, 1, 'sys/none')
    rule_2 = _create_auth_rule(pg_conn, 2, 'sys/none')
    patch_auth_rule(pg_conn, rule_1, year0=2018)
    patch_auth_rule(pg_conn, rule_2, year0=2010)
    proc_1 = create_process(pg_conn, started_at=dt(2018, 1, 1))
    proc_2 = create_process(pg_conn, started_at=dt(2010, 1, 1))
    processes_matches = retrieve_processes_rule_matches(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == [rule_1, rule_2]
    assert _proc_matches(grouped, proc_2) == [rule_2]
def test_processes_rule_matches_multiple_processes_match_single_rule(
        pg_conn, ctc_a1, ctc_b1):
    rule_1 = _create_auth_rule(pg_conn, 1, 'sys/none')
    patch_auth_rule(pg_conn, rule_1, ctc=ctc_a1)
    proc_1 = create_process(pg_conn)
    proc_2 = create_process(pg_conn)
    update_process(pg_conn, proc_1, ctc_a1, None, None, None, None)
    update_process(pg_conn, proc_2, ctc_a1, None, None, None, None)
    processes_matches = retrieve_processes_rule_matches(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == [rule_1]
    assert _proc_matches(grouped, proc_2) == [rule_1]
def test_create_process_auth_event(pg_conn):
    proc_id = create_process(pg_conn)
    create_process_auth_event(pg_conn, proc_id, 0, 'sys/none')
    create_process_auth_event(pg_conn, proc_id, 0, 'sys/none')
    create_process_auth_event(pg_conn, proc_id, 0, 'sys/none')
    assert fetch_scalar(pg_conn,
                        'select count(*) from ac_process_auth_events;') == 3
def test_retrieve_process_histories_by_ids(pg_conn):
    pk = create_process(pg_conn)
    create_process_auth_event(pg_conn, pk, 0, 'sys/none')
    create_process_auth_event(pg_conn, pk, 0, 'sys/none')
    create_process_auth_event(pg_conn, pk, 0, 'sys/none')
    rs = retrieve_process_histories_by_ids(pg_conn, (pk,))
    assert len(rs) == 3
def test_processes_rule_selections_highest_order_rule_selected_from_multiple_matches(
        pg_conn, ctc_a1, ctc_b1, vhc_a1):
    rule_1 = _create_auth_rule(pg_conn, 1, 'sys/none')
    rule_2 = _create_auth_rule(pg_conn, 2, 'sys/none')
    rule_3 = _create_auth_rule(pg_conn, 3, 'sys/none')
    patch_auth_rule(pg_conn, rule_1, ctc=ctc_b1)
    patch_auth_rule(pg_conn, rule_2, ctc=ctc_a1)
    patch_auth_rule(pg_conn, rule_3, ctc=ctc_b1, vhc=vhc_a1)
    proc_1 = create_process(pg_conn)
    proc_2 = create_process(pg_conn)
    update_process(pg_conn, proc_1, ctc_a1, None, None, None, None)
    update_process(pg_conn, proc_2, ctc_b1, None, None, None, vhc_a1)
    processes_matches = retrieve_processes_rule_selections(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == [rule_2]
    assert _proc_matches(grouped, proc_2) == [rule_1]
def test_processes_rule_matches_single_process_matches_no_rule(
        pg_conn, ctc_a1, ctc_b1):
    proc_1 = create_process(pg_conn)
    update_process(pg_conn, proc_1, ctc_a1, None, None, None, None)
    processes_matches = retrieve_processes_rule_matches(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == []
def test_rule_match_failure_daytime_above_max_hour_below_max_minute(pg_conn):
    rule_1 = _create_auth_rule(pg_conn, 1, 'sys/none')
    patch_auth_rule(pg_conn, rule_1, hour0=0, minute0=0, hour1=3, minute1=20)
    proc_1 = create_process(pg_conn, started_at=dt(2018, 7, 15, 4, 1))
    processes_matches = retrieve_processes_rule_matches(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == []
def test_create_process_should_use_auth_flow_setting(pg_conn):
    pk = create_process(pg_conn)
    rs = retrieve_processes_by_ids(pg_conn, (pk,))
    active_flow = retrieve_current_active_auth_flow(pg_conn)
    assert rs[0]['auth_flow'] == active_flow['auth_flow_id']

    auth_flow_1 = create_auth_flow(pg_conn, 'Flow 1')
    update_current_active_auth_flow(pg_conn, auth_flow_1)
    pk = create_process(pg_conn)
    rs = retrieve_processes_by_ids(pg_conn, (pk,))
    assert rs[0]['auth_flow'] == auth_flow_1

    auth_flow_2 = create_auth_flow(pg_conn, 'Flow 2')
    update_current_active_auth_flow(pg_conn, auth_flow_2)
    pk = create_process(pg_conn)
    rs = retrieve_processes_by_ids(pg_conn, (pk,))
    assert rs[0]['auth_flow'] == auth_flow_2
def test_rule_match_success_daytime_below_min_minute_within_daytime_range(
        pg_conn):
    rule_1 = _create_auth_rule(pg_conn, 1, 'sys/none')
    patch_auth_rule(pg_conn, rule_1, hour0=0, minute0=10, hour1=3, minute1=20)
    proc_1 = create_process(pg_conn, started_at=dt(2018, 7, 15, 2, 5))
    processes_matches = retrieve_processes_rule_matches(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == [rule_1]
def test_rule_match_success_dest_group_same(pg_conn, loc_a1, loc_b1, loc_nogrp,
                                            locgrp_a, locgrp_b):
    rule_1 = _create_auth_rule(pg_conn, 1, 'sys/none')
    rule_2 = _create_auth_rule(pg_conn, 2, 'sys/none')
    rule_3 = _create_auth_rule(pg_conn, 3, 'sys/none')
    patch_auth_rule(pg_conn, rule_1, loc_grp=locgrp_a)
    patch_auth_rule(pg_conn, rule_2, loc_grp=locgrp_b)
    proc_1 = create_process(pg_conn)
    proc_2 = create_process(pg_conn)
    proc_3 = create_process(pg_conn)
    update_process(pg_conn, proc_1, None, None, loc_a1, None, None)
    update_process(pg_conn, proc_2, None, None, loc_b1, None, None)
    update_process(pg_conn, proc_3, None, None, loc_nogrp, None, None)
    processes_matches = retrieve_processes_rule_matches(pg_conn)
    grouped = toolz.groupby('proc_id', processes_matches)
    assert _proc_matches(grouped, proc_1) == [rule_1, rule_3]
    assert _proc_matches(grouped, proc_2) == [rule_2, rule_3]
    assert _proc_matches(grouped, proc_3) == [rule_3]
def test_terminate_process_no_orig(pg_conn):
    dest = create_location(pg_conn, 'Dest')
    ctc = create_contact(pg_conn, 'Subject')
    ckp = create_checkpoint(pg_conn, 'Gate 1')
    vhc = create_vehicle(pg_conn, 'UUU0000')
    pk = create_process(pg_conn)
    time.sleep(0.01)
    update_process(pg_conn, pk, ctc, None, dest, ckp, vhc)
    with pytest.raises(Exception):
        terminate_process(pg_conn, pk)
def test_terminate_process_no_ckp(pg_conn):
    orig = create_location(pg_conn, 'Origin')
    dest = create_location(pg_conn, 'Dest')
    ctc = create_contact(pg_conn, 'Subject')
    vhc = create_vehicle(pg_conn, 'UUU0000')
    pk = create_process(pg_conn)
    time.sleep(0.01)
    update_process(pg_conn, pk, ctc, orig, dest, None, vhc)
    with pytest.raises(Exception):
        terminate_process(pg_conn, pk)
def test_terminate_process_no_ctc(pg_conn):
    orig = create_location(pg_conn, 'Origin')
    dest = create_location(pg_conn, 'Dest')
    ckp = create_checkpoint(pg_conn, 'Gate 1')
    vhc = create_vehicle(pg_conn, 'UUU0000')
    pk = create_process(pg_conn)
    time.sleep(0.01)
    update_process(pg_conn, pk, None, orig, dest, ckp, vhc)
    with pytest.raises(Exception):
        terminate_process(pg_conn, pk)
def test_terminate_process_no_vhc(pg_conn):
    orig = create_location(pg_conn, 'Origin')
    dest = create_location(pg_conn, 'Dest')
    ctc = create_contact(pg_conn, 'Subject')
    ckp = create_checkpoint(pg_conn, 'Gate 1')
    pk = create_process(pg_conn)
    time.sleep(0.01)
    update_process(pg_conn, pk, ctc, orig, dest, ckp, None)
    terminate_process(pg_conn, pk)
    rs = retrieve_processes_by_ids(pg_conn, (pk,))
    assert rs[0]['finished_at']
def test_create_process_auth_events_on_finished_process_err(pg_conn):
    orig = create_location(pg_conn, 'Origin')
    dest = create_location(pg_conn, 'Dest')
    ctc = create_contact(pg_conn, 'Subject')
    ckp = create_checkpoint(pg_conn, 'Gate 1')
    vhc = create_vehicle(pg_conn, 'UUU0000')
    proc_id = create_process(pg_conn)
    time.sleep(0.1)
    update_process(pg_conn, proc_id, ctc, orig, dest, ckp, vhc)
    terminate_process(pg_conn, proc_id)
    with pytest.raises(Exception):
        create_process_auth_event(pg_conn, proc_id, 0, 'sys/none')
def test_update_process_finished_err(pg_conn):
    orig = create_location(pg_conn, 'Origin')
    dest = create_location(pg_conn, 'Dest')
    ctc = create_contact(pg_conn, 'Subject')
    ckp = create_checkpoint(pg_conn, 'Gate 1')
    vhc = create_vehicle(pg_conn, 'UUU0000')
    pk = create_process(pg_conn)
    time.sleep(0.01)
    update_process(pg_conn, pk, ctc, orig, dest, ckp, vhc)
    terminate_process(pg_conn, pk)
    with pytest.raises(Exception):
        update_process(pg_conn, pk, ctc, orig, dest, ckp, vhc)
def test_process_archive_with_unresolved_terminated_process_should_archive_none(
        pg_conn):
    orig = create_location(pg_conn, 'Origin')
    dest = create_location(pg_conn, 'Dest')
    ctc = create_contact(pg_conn, 'Subject')
    ckp = create_checkpoint(pg_conn, 'Gate 1')
    vhc = create_vehicle(pg_conn, 'UUU0000')
    pk = create_process(pg_conn)
    time.sleep(0.1)
    update_process(pg_conn, pk, ctc, orig, dest, ckp, vhc)
    terminate_process(pg_conn, pk)
    results = archive_finished_processes(pg_conn)
    assert results == []
Exemple #23
0
def test_terminate_process(pg_conn):
    created_proc_id = dql_binds.create_process(pg_conn)
    created_ctc_id = dql_binds.create_contact(pg_conn, 'Joe')
    created_orig_id = dql_binds.create_location(pg_conn, 'Addr 1')
    created_dest_id = dql_binds.create_location(pg_conn, 'Addr 2')
    created_ckp_id = dql_binds.create_checkpoint(pg_conn, 'Gate 1')
    result = dql_binds.update_process(pg_conn,
                                      created_proc_id,
                                      ctc=created_ctc_id,
                                      loc_orig=created_orig_id,
                                      loc_dest=created_dest_id,
                                      ckp=created_ckp_id)
    result = dql_binds.terminate_process(pg_conn, created_proc_id)
    assert isinstance(result, datetime.datetime)
def test_process_archive_with_resolved_terminated_process_should_archive_two(
        pg_conn, basic_flow):
    orig = create_location(pg_conn, 'Origin')
    dest = create_location(pg_conn, 'Dest')
    ctc = create_contact(pg_conn, 'Subject')
    ckp = create_checkpoint(pg_conn, 'Gate 1')
    vhc = create_vehicle(pg_conn, 'UUU0000')

    pk0 = create_process(pg_conn)
    time.sleep(0.1)
    update_process(pg_conn, pk0, ctc, orig, dest, ckp, vhc)
    create_process_auth_event(pg_conn, pk0, ctc, 'sys/acc')
    terminate_process(pg_conn, pk0)

    pk1 = create_process(pg_conn)
    time.sleep(0.1)
    update_process(pg_conn, pk1, ctc, orig, dest, ckp, vhc)
    create_process_auth_event(pg_conn, pk1, ctc, 'sys/acc')
    terminate_process(pg_conn, pk1)

    results = archive_finished_processes(pg_conn)
    assert results[0]['archived_proc_id'] == pk0
    assert results[1]['archived_proc_id'] == pk1
def test_retrieve_process_histories_by_ids_flow(pg_conn, basic_flow):
    pk = create_process(pg_conn)
    update_process_auth_flow(pg_conn, pk, basic_flow)

    create_process_auth_event(pg_conn, pk, 0, 'sys/0001')
    rs = retrieve_process_histories_by_ids(pg_conn, (pk,))
    assert [r['curr_auth_flow_st'] for r in rs] == ['sys/0001']

    create_process_auth_event(pg_conn, pk, 0, 'sys/0002')
    rs = retrieve_process_histories_by_ids(pg_conn, (pk,))
    assert [r['curr_auth_flow_st'] for r in rs] == ['sys/0001', 'sys/0002']

    create_process_auth_event(pg_conn, pk, 0, 'sys/0003')
    rs = retrieve_process_histories_by_ids(pg_conn, (pk,))
    assert [r['curr_auth_flow_st'] for r in rs] == ['sys/0001', 'sys/0002', 'sys/0003']
def test_update_process(pg_conn):
    orig = create_location(pg_conn, 'Origin')
    dest = create_location(pg_conn, 'Dest')
    ctc = create_contact(pg_conn, 'Subject')
    ckp = create_checkpoint(pg_conn, 'Gate 1')
    vhc = create_vehicle(pg_conn, 'UUU0000')
    pk = create_process(pg_conn)
    update_process(pg_conn, pk, ctc, orig, dest, ckp, vhc)
    rs = retrieve_processes_by_ids(pg_conn, (pk,))
    assert len(rs) == 1
    assert rs[0]['proc_id'] == pk
    assert rs[0]['ctc'] == ctc
    assert rs[0]['vhc'] == vhc
    assert rs[0]['ckp'] == ckp
    assert rs[0]['loc_orig'] == orig
    assert rs[0]['loc_dest'] == dest
Exemple #27
0
def test_retrieve_process_histories_by_ids(pg_conn):
    dql_binds.create_auth_level(pg_conn, 'sys/acc', auth_grant=True)
    dql_binds.create_auth_flow_st(pg_conn, 0, 'sys/acc', st_term=True)
    dql_binds.create_auth_flow_tr(pg_conn, 0, 'sys/acc', 'sys/none', 'sys/acc')

    created_proc_id = dql_binds.create_process(pg_conn)
    ctc = dql_binds.create_contact(pg_conn, 'Joe')
    loc_orig = dql_binds.create_location(pg_conn, 'Addr 1')
    loc_dest = dql_binds.create_location(pg_conn, 'Addr 2')
    ckp = dql_binds.create_checkpoint(pg_conn, 'Gate 1')
    dql_binds.update_process(pg_conn,
                             created_proc_id,
                             ctc=ctc,
                             loc_orig=loc_orig,
                             loc_dest=loc_dest,
                             ckp=ckp)
    dql_binds.create_process_auth_event(pg_conn, created_proc_id, ctc,
                                        'sys/acc')
    result = dql_binds.retrieve_process_histories_by_ids(
        pg_conn, (created_proc_id, ))
    assert result
Exemple #28
0
def test_archive_finished_processes(pg_conn):
    dql_binds.create_auth_level(pg_conn, 'sys/acc', auth_grant=True)
    dql_binds.create_auth_flow_st(pg_conn, 0, 'sys/acc', st_term=True)
    dql_binds.create_auth_flow_tr(pg_conn, 0, 'sys/acc', 'sys/none', 'sys/acc')

    created_proc_id = dql_binds.create_process(pg_conn)
    ctc = dql_binds.create_contact(pg_conn, 'Joe')
    loc_orig = dql_binds.create_location(pg_conn, 'Addr 1')
    loc_dest = dql_binds.create_location(pg_conn, 'Addr 2')
    ckp = dql_binds.create_checkpoint(pg_conn, 'Gate 1')
    dql_binds.update_process(pg_conn,
                             created_proc_id,
                             ctc=ctc,
                             loc_orig=loc_orig,
                             loc_dest=loc_dest,
                             ckp=ckp)

    dql_binds.create_process_auth_event(pg_conn, created_proc_id, ctc,
                                        'sys/acc')
    time.sleep(0.1)
    dql_binds.terminate_process(pg_conn, created_proc_id)
    result = dql_binds.archive_finished_processes(pg_conn)
    assert result
def test_retrieve_processes_by_ids(pg_conn):
    pks = [create_process(pg_conn), create_process(pg_conn), create_process(pg_conn), create_process(pg_conn)]
    rs = retrieve_processes_by_ids(pg_conn, tuple(pks))
    assert len(rs) == 4
    assert [r['proc_id'] for r in rs] == pks
def test_create_process(pg_conn):
    pk = create_process(pg_conn)
    rs = retrieve_processes_by_ids(pg_conn, (pk,))
    assert len(rs) == 1
    assert rs[0]['proc_id'] == pk