import pytest from tjnetwork import * class TestApi: def enter(self, p): if is_project_open(p): close_project(p) if have_project(p): delete_project(p) create_project(p) open_project(p) def leave(self, p): close_project(p) delete_project(p) def test_title(self): p = "test_title" self.enter(p) assert get_title(p) == "" set_title(p, "title") assert get_title(p) == "title" set_title(p, "test") assert get_title(p) == "test" self.leave(p) def test_junction(self): p = "test_junction" self.enter(p) change_set = add_junction(p, "j0", 0.0, 10.0, 20.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'add' assert change_set.operations[0]['type'] == JUNCTION assert change_set.operations[0]['id'] == "j0" coord = get_junction_coord(p, 'j0') assert coord['x'] == 0.0 assert coord['y'] == 10.0 z = get_junction_elevation(p, 'j0') assert z == 20.0 assert get_junction_demand(p, 'j') == None assert get_junction_demand(p, 'j0') == "NULL" change_set = set_junction_demand(p, 'j0', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == JUNCTION assert change_set.operations[0]['id'] == 'j0' assert change_set.operations[0]['property'] == 'demand' assert get_junction_demand(p, 'j0') == 100.0 # TODO: pattern change_set = add_junction(p, "j1", 0.0, 10.0, 20.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'add' assert change_set.operations[0]['type'] == JUNCTION assert change_set.operations[0]['id'] == "j1" change_set = add_junction(p, "j1", 0.0, 10.0, 20.0) assert len(change_set.operations) == 0 nodes = get_nodes(p) assert len(nodes) == 2 assert nodes[0] == "j0" assert nodes[1] == "j1" change_set = delete_junction(p, 'j1') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'delete' assert change_set.operations[0]['type'] == JUNCTION assert change_set.operations[0]['id'] == "j1" change_set = delete_junction(p, 'j1') assert len(change_set.operations) == 0 nodes = get_nodes(p) assert len(nodes) == 1 assert nodes[0] == "j0" change_set = delete_junction(p, 'j0') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'delete' assert change_set.operations[0]['type'] == JUNCTION assert change_set.operations[0]['id'] == "j0" nodes = get_nodes(p) assert len(nodes) == 0 self.leave(p) def test_reservoir(self): p = "test_reservoir" self.enter(p) change_set = add_reservoir(p, "r0", 0.0, 10.0, 20.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'add' assert change_set.operations[0]['type'] == RESERVOIR assert change_set.operations[0]['id'] == "r0" change_set = add_reservoir(p, "r0", 0.0, 10.0, 20.0) assert len(change_set.operations) == 0 assert get_reservoir_head(p, 'r0') == 20.0 change_set = set_reservoir_head(p, 'r0', 100.0) assert change_set.operations[0]['type'] == RESERVOIR assert change_set.operations[0]['id'] == 'r0' assert change_set.operations[0]['property'] == 'head' assert get_reservoir_head(p, 'r0') == 100.0 assert get_reservoir_coord(p, 'r0') == { 'x': 0.0, 'y': 10.0 } change_set = set_reservoir_coord(p, 'r0', 100.0, 200.0) assert change_set.operations[0]['type'] == RESERVOIR assert change_set.operations[0]['id'] == 'r0' assert change_set.operations[0]['property'] == 'coord' assert get_reservoir_coord(p, 'r0') == { 'x': 100.0, 'y': 200.0 } # TODO: pattern change_set = delete_reservoir(p, 'r0') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'delete' assert change_set.operations[0]['type'] == RESERVOIR assert change_set.operations[0]['id'] == "r0" change_set = delete_reservoir(p, 'r0') assert len(change_set.operations) == 0 self.leave(p) def test_tank(self): p = "test_tank" self.enter(p) change_set = add_tank(p, "t0", 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'add' assert change_set.operations[0]['type'] == TANK assert change_set.operations[0]['id'] == "t0" change_set = add_tank(p, "t1", 0.0, 10.0, 20.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'add' assert change_set.operations[0]['type'] == TANK assert change_set.operations[0]['id'] == "t1" change_set = add_tank(p, "t1", 0.0, 10.0, 20.0) assert len(change_set.operations) == 0 tanks = get_nodes(p) assert len(tanks) == 2 assert tanks[0] == 't0' assert tanks[1] == 't1' assert get_tank_elevation(p, 't0') == 10.0 change_set = set_tank_elevation(p, 't0', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == TANK assert change_set.operations[0]['id'] == "t0" assert change_set.operations[0]['property'] == 'elevation' assert get_tank_elevation(p, 't0') == 100.0 assert get_tank_init_level(p, 't0') == 10.0 change_set = set_tank_init_level(p, 't0', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == TANK assert change_set.operations[0]['id'] == "t0" assert change_set.operations[0]['property'] == 'init_level' assert get_tank_init_level(p, 't0') == 100.0 assert get_tank_min_level(p, 't0') == 10.0 change_set = set_tank_min_level(p, 't0', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == TANK assert change_set.operations[0]['id'] == "t0" assert change_set.operations[0]['property'] == 'min_level' assert get_tank_min_level(p, 't0') == 100.0 assert get_tank_max_level(p, 't0') == 10.0 change_set = set_tank_max_level(p, 't0', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == TANK assert change_set.operations[0]['id'] == "t0" assert change_set.operations[0]['property'] == 'max_level' assert get_tank_max_level(p, 't0') == 100.0 assert get_tank_diameter(p, 't0') == 10.0 change_set = set_tank_diameter(p, 't0', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == TANK assert change_set.operations[0]['id'] == "t0" assert change_set.operations[0]['property'] == 'diameter' assert get_tank_diameter(p, 't0') == 100.0 assert get_tank_min_vol(p, 't0') == 10.0 change_set = set_tank_min_vol(p, 't0', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == TANK assert change_set.operations[0]['id'] == "t0" assert change_set.operations[0]['property'] == 'min_vol' assert get_tank_min_vol(p, 't0') == 100.0 # TODO: vol_curve assert get_tank_overflow(p, 't') == None assert get_tank_overflow(p, 't0') == 'NULL' change_set = set_tank_overflow(p, 't0', "XXX") assert len(change_set.operations) == 0 change_set = set_tank_overflow(p, 't0', OVERFLOW_YES) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == TANK assert change_set.operations[0]['id'] == "t0" assert change_set.operations[0]['property'] == 'overflow' assert get_tank_overflow(p, 't0') == OVERFLOW_YES change_set = delete_tank(p, "t0") assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'delete' assert change_set.operations[0]['type'] == TANK assert change_set.operations[0]['id'] == "t0" tanks = get_nodes(p) assert len(tanks) == 1 change_set = delete_tank(p, "t1") assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'delete' assert change_set.operations[0]['type'] == TANK assert change_set.operations[0]['id'] == "t1" change_set = delete_tank(p, "t1") assert len(change_set.operations) == 0 tanks = get_nodes(p) assert len(tanks) == 0 self.leave(p) def test_pipe(self): p = "test_pipe" self.enter(p) change_set = add_pipe(p, 'p1', 'j1', 'j2', 10.0, 10.0, 10.0, 10.0, PIPE_STATUS_CLOSED) assert len(change_set.operations) == 0 add_junction(p, 'j1', 0.0, 0.0, 0.0) add_junction(p, 'j2', 10.0, 10.0, 0.0) add_junction(p, 'j3', 0.0, 0.0, 0.0) add_junction(p, 'j4', 10.0, 10.0, 0.0) assert is_junction(p, 'j1') assert is_junction(p, 'j2') assert is_junction(p, 'j3') assert is_junction(p, 'j4') assert not is_link(p, 'p1') change_set = add_pipe(p, 'p1', 'j1', 'j2', 10.0, 10.0, 10.0, 10.0, "XXX") assert len(change_set.operations) == 0 change_set = add_pipe(p, 'p1', 'j1', 'j1', 10.0, 10.0, 10.0, 10.0, PIPE_STATUS_CLOSED) assert len(change_set.operations) == 0 change_set = add_pipe(p, 'p1', 'j1', 'j2', 10.0, 10.0, 10.0, 10.0, PIPE_STATUS_CLOSED) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'add' assert change_set.operations[0]['type'] == PIPE assert change_set.operations[0]['id'] == "p1" change_set = add_pipe(p, 'p1', 'j1', 'j2', 10.0, 10.0, 10.0, 10.0, PIPE_STATUS_CLOSED) assert len(change_set.operations) == 0 pipes = get_links(p) assert len(pipes) == 1 assert get_pipe_node1(p, 'p1') == 'j1' assert get_pipe_node2(p, 'p1') == 'j2' assert get_pipe_length(p, 'p1') == 10.0 assert get_pipe_diameter(p, 'p1') == 10.0 assert get_pipe_roughness(p, 'p1') == 10.0 assert get_pipe_minor_loss(p, 'p1') == 10.0 assert get_pipe_status(p, 'p1') == PIPE_STATUS_CLOSED change_set = set_pipe_node1(p, 'p1', 'j2') assert len(change_set.operations) == 0 change_set = set_pipe_node2(p, 'p1', 'j1') assert len(change_set.operations) == 0 change_set = set_pipe_status(p, 'p1', "XXX") assert len(change_set.operations) == 0 change_set = set_pipe_node1(p, 'p1', 'j3') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == PIPE assert change_set.operations[0]['id'] == 'p1' assert change_set.operations[0]['property'] == 'node1' change_set = set_pipe_node2(p, 'p1', 'j4') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == PIPE assert change_set.operations[0]['id'] == 'p1' assert change_set.operations[0]['property'] == 'node2' change_set = set_pipe_length(p, 'p1', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == PIPE assert change_set.operations[0]['id'] == 'p1' assert change_set.operations[0]['property'] == 'length' change_set = set_pipe_diameter(p, 'p1', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == PIPE assert change_set.operations[0]['id'] == 'p1' assert change_set.operations[0]['property'] == 'diameter' change_set = set_pipe_roughness(p, 'p1', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == PIPE assert change_set.operations[0]['id'] == 'p1' assert change_set.operations[0]['property'] == 'roughness' change_set = set_pipe_minor_loss(p, 'p1', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == PIPE assert change_set.operations[0]['id'] == 'p1' assert change_set.operations[0]['property'] == 'minor_loss' change_set = set_pipe_status(p, 'p1', PIPE_STATUS_OPEN) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == PIPE assert change_set.operations[0]['id'] == 'p1' assert change_set.operations[0]['property'] == 'status' assert get_pipe_node1(p, 'p1') == 'j3' assert get_pipe_node2(p, 'p1') == 'j4' assert get_pipe_length(p, 'p1') == 100.0 assert get_pipe_diameter(p, 'p1') == 100.0 assert get_pipe_roughness(p, 'p1') == 100.0 assert get_pipe_minor_loss(p, 'p1') == 100.0 assert get_pipe_status(p, 'p1') == PIPE_STATUS_OPEN change_set = add_pipe(p, 'p2', 'j1', 'j2', 10.0, 10.0, 10.0, 10.0, PIPE_STATUS_CLOSED) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'add' assert change_set.operations[0]['type'] == PIPE assert change_set.operations[0]['id'] == "p2" pipes = get_links(p) assert len(pipes) == 2 change_set = delete_pipe(p, 'p') assert len(change_set.operations) == 0 assert is_pipe(p, 'p1') change_set = delete_pipe(p, 'p1') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'delete' assert change_set.operations[0]['type'] == PIPE assert change_set.operations[0]['id'] == "p1" pipes = get_links(p) assert len(pipes) == 1 change_set = delete_pipe(p, 'p2') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'delete' assert change_set.operations[0]['type'] == PIPE assert change_set.operations[0]['id'] == "p2" self.leave(p) def test_pump(self): p = "test_pump" self.enter(p) change_set = add_pump(p, 'p1', 'j1', 'j2') assert len(change_set.operations) == 0 add_junction(p, 'j1', 0.0, 0.0, 0.0) add_junction(p, 'j2', 10.0, 10.0, 0.0) add_junction(p, 'j3', 0.0, 0.0, 0.0) add_junction(p, 'j4', 10.0, 10.0, 0.0) assert is_junction(p, 'j1') assert is_junction(p, 'j2') assert is_junction(p, 'j3') assert is_junction(p, 'j4') assert not is_link(p, 'p1') change_set = add_pump(p, 'p1', 'j1', 'j1') assert len(change_set.operations) == 0 change_set = add_pump(p, 'p1', 'j1', 'j2') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'add' assert change_set.operations[0]['type'] == PUMP assert change_set.operations[0]['id'] == "p1" change_set = add_pump(p, 'p1', 'j1', 'j2') assert len(change_set.operations) == 0 pumps = get_links(p) assert len(pumps) == 1 assert get_pump_node1(p, 'p1') == 'j1' assert get_pump_node2(p, 'p1') == 'j2' change_set = set_pump_node1(p, 'p1', 'j2') assert len(change_set.operations) == 0 change_set = set_pump_node2(p, 'p1', 'j1') assert len(change_set.operations) == 0 change_set = set_pump_node1(p, 'p1', 'j3') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == PUMP assert change_set.operations[0]['id'] == 'p1' assert change_set.operations[0]['property'] == 'node1' change_set = set_pump_node2(p, 'p1', 'j4') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == PUMP assert change_set.operations[0]['id'] == 'p1' assert change_set.operations[0]['property'] == 'node2' assert get_pump_node1(p, 'p1') == 'j3' assert get_pump_node2(p, 'p1') == 'j4' change_set = add_pump(p, 'p2', 'j1', 'j2') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'add' assert change_set.operations[0]['type'] == PUMP assert change_set.operations[0]['id'] == "p2" pumps = get_links(p) assert len(pumps) == 2 change_set = delete_pump(p, 'p') assert len(change_set.operations) == 0 assert is_pump(p, 'p1') change_set = delete_pump(p, 'p1') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'delete' assert change_set.operations[0]['type'] == PUMP assert change_set.operations[0]['id'] == "p1" pumps = get_links(p) assert len(pumps) == 1 change_set = delete_pump(p, 'p2') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'delete' assert change_set.operations[0]['type'] == PUMP assert change_set.operations[0]['id'] == "p2" self.leave(p) def test_valve(self): p = "test_valve" self.enter(p) change_set = add_valve(p, 'v1', 'j1', 'j2', 10.0, VALVES_TYPE_FCV, 10.0, 10.0) assert len(change_set.operations) == 0 add_junction(p, 'j1', 0.0, 0.0, 0.0) add_junction(p, 'j2', 10.0, 10.0, 0.0) add_junction(p, 'j3', 0.0, 0.0, 0.0) add_junction(p, 'j4', 10.0, 10.0, 0.0) assert is_junction(p, 'j1') assert is_junction(p, 'j2') assert is_junction(p, 'j3') assert is_junction(p, 'j4') assert not is_link(p, 'v1') change_set = add_valve(p, 'v1', 'j1', 'j2', 10.0, "xxx", 10.0, 10.0) assert len(change_set.operations) == 0 change_set = add_valve(p, 'v1', 'j1', 'j1', 10.0, VALVES_TYPE_FCV, 10.0, 10.0) assert len(change_set.operations) == 0 change_set = add_valve(p, 'v1', 'j1', 'j2', 10.0, VALVES_TYPE_FCV, 10.0, 10.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'add' assert change_set.operations[0]['type'] == VALVE assert change_set.operations[0]['id'] == "v1" change_set = add_valve(p, 'v1', 'j1', 'j2', 10.0, VALVES_TYPE_FCV, 10.0, 10.0) assert len(change_set.operations) == 0 valves = get_links(p) assert len(valves) == 1 assert get_valve_node1(p, 'v1') == 'j1' assert get_valve_node2(p, 'v1') == 'j2' assert get_valve_diameter(p, 'v1') == 10.0 assert get_valve_type(p, 'v1') == VALVES_TYPE_FCV assert get_valve_setting(p, 'v1') == 10.0 assert get_valve_minor_loss(p, 'v1') == 10.0 change_set = set_valve_node1(p, 'v1', 'j2') assert len(change_set.operations) == 0 change_set = set_valve_node2(p, 'v1', 'j1') assert len(change_set.operations) == 0 change_set = set_valve_type(p, 'v1', "XXX") assert len(change_set.operations) == 0 change_set = set_valve_node1(p, 'v1', 'j3') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == VALVE assert change_set.operations[0]['id'] == 'v1' assert change_set.operations[0]['property'] == 'node1' change_set = set_valve_node2(p, 'v1', 'j4') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == VALVE assert change_set.operations[0]['id'] == 'v1' assert change_set.operations[0]['property'] == 'node2' change_set = set_valve_diameter(p, 'v1', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == VALVE assert change_set.operations[0]['id'] == 'v1' assert change_set.operations[0]['property'] == 'diameter' change_set = set_valve_type(p, 'v1', VALVES_TYPE_GPV) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == VALVE assert change_set.operations[0]['id'] == 'v1' assert change_set.operations[0]['property'] == 'type' change_set = set_valve_setting(p, 'v1', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == VALVE assert change_set.operations[0]['id'] == 'v1' assert change_set.operations[0]['property'] == 'setting' change_set = set_valve_minor_loss(p, 'v1', 100.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'update' assert change_set.operations[0]['type'] == VALVE assert change_set.operations[0]['id'] == 'v1' assert change_set.operations[0]['property'] == 'minor_loss' assert get_valve_node1(p, 'v1') == 'j3' assert get_valve_node2(p, 'v1') == 'j4' assert get_valve_diameter(p, 'v1') == 100.0 assert get_valve_type(p, 'v1') == VALVES_TYPE_GPV assert get_valve_setting(p, 'v1') == 100.0 assert get_valve_minor_loss(p, 'v1') == 100.0 change_set = add_valve(p, 'v2', 'j1', 'j2', 10.0, VALVES_TYPE_FCV, 10.0, 10.0) assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'add' assert change_set.operations[0]['type'] == VALVE assert change_set.operations[0]['id'] == "v2" valves = get_links(p) assert len(valves) == 2 change_set = delete_valve(p, 'v') assert len(change_set.operations) == 0 assert is_valve(p, 'v1') change_set = delete_valve(p, 'v1') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'delete' assert change_set.operations[0]['type'] == VALVE assert change_set.operations[0]['id'] == "v1" valves = get_links(p) assert len(valves) == 1 change_set = delete_valve(p, 'v2') assert len(change_set.operations) == 1 assert change_set.operations[0]['operation'] == 'delete' assert change_set.operations[0]['type'] == VALVE assert change_set.operations[0]['id'] == "v2" self.leave(p) if __name__ == '__main__': pytest.main()