def setUp(self) -> None: server_mock = Mock() attrs = { 'type_object': 'Server', 'external_handle_func': '', } server_mock.configure_mock(**attrs) self.atoms_logic = AtomsLogic(10, 10, server_mock)
def test_z_touch_surface_with_scan_mode(self): atom_logic = AtomsLogic(10, 10, self.__class__.server_mock) atom_logic.set_is_surface(True) assert atom_logic.is_scan_mode() assert atom_logic.is_surface() z = 70 with self.assertRaises(TouchingSurface) as e: atom_logic.set_val_to_dto(DTO_Z, (1, 3, z)) self.assertEqual("touching the surface", str(e.exception)) assert atom_logic.tool_is_coming_down() self.assertNotEqual(atom_logic.get_dto_val(DTO_Z), z)
def setUp(self) -> None: self.atom_logic = AtomsLogic(10, 10, self.__class__.server_mock) self.atom_logic.set_is_surface(False) self.atom_logic.server.send_data_to_all_clients = MagicMock() assert self.atom_logic.is_scan_mode() assert not self.atom_logic.is_surface() self.atom_logic.set_is_atom(True) atom_coord = (1, 3, 40) self.atom_logic.set_val_to_dto(DTO_X, atom_coord) self.atom_logic.set_val_to_dto(DTO_Y, atom_coord) self.atom_logic.set_val_to_dto(DTO_Z, atom_coord) self.atom_logic.update_tool_coordinate()
def test_update_surface_with_scan_mode(self): atom_logic = AtomsLogic(10, 10, self.__class__.server_mock) atom_logic.set_is_surface(False) atom_logic.surface_data[3, 1] = 71 z = 70 atom_logic.set_val_to_dto(DTO_Z, (1, 3, z)) assert atom_logic.tool_is_coming_down() self.assertEqual(z - CORRECTION_Z, atom_logic.surface_data[3, 1]) self.assertEqual(z, atom_logic.get_dto_val(DTO_Z))
def test_invalid_dto(self): atom_logic = AtomsLogic(10, 10, self.__class__.server_mock) with self.assertRaises(ValueError) as e: atom_logic.set_val_to_dto("iny_dto", (1, 3, 1)) self.assertEqual(INVALID_DTO, str(e.exception)) with self.assertRaises(ValueError) as e: atom_logic.get_dto_val("iny_dto") self.assertEqual(INVALID_DTO, str(e.exception))
def test_z_not_touch_surface_with_scan_mode(self, ): atom_logic = AtomsLogic(10, 10, self.__class__.server_mock) atom_logic.set_is_surface(False) z = 70 set_z_func = atom_logic.set_val_dto_curried(DTO_Z) set_z_func((1, 3, z)) assert atom_logic.tool_is_coming_down() self.assertNotEqual(z - CORRECTION_Z, atom_logic.surface_data[3, 1]) self.assertEqual(z, atom_logic.get_dto_val(DTO_Z)) self.assertEqual({ Dto.SENSOR: Dto.SERVO_Z, 'value': str(z) }, atom_logic.dto_z.to_dict())
class TestAtomCollection(TestCase): server_mock = None @classmethod def setUpClass(cls): cls.server_mock = Mock() attrs = { 'type_object': 'Server', 'external_handle_func': '', } cls.server_mock.configure_mock(**attrs) @classmethod def tearDownClass(cls): cls.server_mock = None def setUp(self) -> None: self.atom_logic = AtomsLogic(10, 10, self.__class__.server_mock) self.atom_logic.set_is_surface(False) self.atom_logic.server.send_data_to_all_clients = MagicMock() assert self.atom_logic.is_scan_mode() assert not self.atom_logic.is_surface() self.atom_logic.set_is_atom(True) atom_coord = (1, 3, 40) self.atom_logic.set_val_to_dto(DTO_X, atom_coord) self.atom_logic.set_val_to_dto(DTO_Y, atom_coord) self.atom_logic.set_val_to_dto(DTO_Z, atom_coord) self.atom_logic.update_tool_coordinate() def tearDown(self) -> None: self.atom_logic = None def test_append_unique_atom(self): self.assertEqual(0, len(self.atom_logic.atom_collection.atoms_list)) is_append = self.atom_logic.atom_collection.append_unique_atom() self.assertTrue(is_append) self.assertEqual(1, len(self.atom_logic.atom_collection.atoms_list)) is_append = self.atom_logic.atom_collection.append_unique_atom() self.assertFalse(is_append) self.assertEqual(1, len(self.atom_logic.atom_collection.atoms_list)) def test_set_atom_captured(self): self.assertEqual(0, len(self.atom_logic.atom_collection.atoms_list)) is_append = self.atom_logic.atom_collection.append_unique_atom() self.assertTrue(is_append) self.assertEqual(1, len(self.atom_logic.atom_collection.atoms_list)) x, y, z = self.atom_logic.get_tool_coordinate() self.atom_logic.set_is_atom_captured(True) self.assertTrue(self.atom_logic.atom_captured_event) atom = self.atom_logic.atom_collection.atoms_list[0] self.assertTrue(atom.is_captured) self.assertTrue(self.atom_logic.is_atom_captured()) self.assertEqual(atom.coordinates, (x, y, z)) self.atom_logic.set_is_atom_captured(False) self.assertTrue(self.atom_logic.atom_release_event) atom = self.atom_logic.atom_collection.atoms_list[0] self.assertFalse(atom.is_captured) self.assertFalse(self.atom_logic.is_atom_captured()) self.assertEqual(atom.coordinates, (x, y, z)) self.atom_logic.set_val_to_dto(DTO_Z, (x, y, z + 1)) self.atom_logic.update_tool_coordinate() self.atom_logic.set_is_atom_captured(True) self.assertTrue(self.atom_logic.atom_captured_event) atom = self.atom_logic.atom_collection.atoms_list[0] self.assertTrue(atom.is_captured) self.assertTrue(self.atom_logic.is_atom_captured()) self.assertEqual(atom.coordinates, (x, y, z)) self.atom_logic.set_is_atom_captured(False) self.assertTrue(self.atom_logic.atom_release_event) atom = self.atom_logic.atom_collection.atoms_list[0] self.assertFalse(atom.is_captured) self.assertFalse(self.atom_logic.is_atom_captured()) self.assertEqual(atom.coordinates, (x, y, z + 1)) self.assertEqual(len(self.atom_logic.atom_collection.atoms_list), 1)
class TestGraphWithRealAtomLogic(TestCase): def setUp(self) -> None: server_mock = Mock() attrs = { 'type_object': 'Server', 'external_handle_func': '', } server_mock.configure_mock(**attrs) self.atoms_logic = AtomsLogic(10, 10, server_mock) def tearDown(self) -> None: self.atoms_logic = None def test_update_graph_data_algorithm(self): self.atoms_logic.atom_release_event = True self.atoms_logic.atom_captured_event = True self.atoms_logic.set_is_atom(True) self.atoms_logic.set_is_surface(True) graph = self.__get_graph_obj() graph.update_graph_data_algorithm() calls = [ call(*(0, 0, 0), s=5, c=COLOR_ATOM, marker='8'), call(*self.atoms_logic.get_tool_coordinate(), s=5, c=COLOR_TIP, marker='8'), call(*self.atoms_logic.get_tool_coordinate(), s=5, c=COLOR_ATOM, marker='8'), call(*self.atoms_logic.get_tool_coordinate(), s=5, c=COLOR_TIP, marker='8'), call(*self.atoms_logic.get_tool_coordinate(), s=5, c=COLOR_ATOM, marker='8'), ] self.atoms_logic.server.send_data_to_all_clients.assert_called_once_with( '{"sensor": "servo_z", "value": "0"}') graph.ax.scatter.assert_has_calls(calls, any_order=False) self.assertFalse(self.atoms_logic.atom_release_event) self.assertFalse(self.atoms_logic.atom_captured_event) self.assertEqual(1, len(self.atoms_logic.atom_collection.atoms_list)) self.assertFalse(self.atoms_logic.is_atom()) self.assertFalse(self.atoms_logic.is_atom()) def test_update_graph_another_data_algorithm(self): self.atoms_logic.atom_release_event = True self.atoms_logic.atom_captured_event = True self.atoms_logic.set_is_surface(True) self.atoms_logic.set_is_atom(False) graph = self.__get_graph_obj() graph.update_graph_data_algorithm() calls = [ call(*(0, 0, 0), s=5, c=COLOR_ATOM, marker='8'), call(*self.atoms_logic.get_tool_coordinate(), s=5, c=COLOR_TIP, marker='8'), call(*self.atoms_logic.get_tool_coordinate(), s=5, c=COLOR_TIP, marker='8'), ] graph.ax.scatter.assert_has_calls(calls, any_order=False) self.atoms_logic.server.send_data_to_all_clients.assert_called_once_with( '{"sensor": "servo_z", "value": "0"}') self.assertEqual(0, len(self.atoms_logic.atom_collection.atoms_list)) self.assertFalse(self.atoms_logic.atom_release_event) self.assertFalse(self.atoms_logic.atom_captured_event) self.assertFalse(self.atoms_logic.is_atom()) self.assertFalse(self.atoms_logic.is_atom()) def __get_graph_obj(self): ax = Mock() ax.scatter = MagicMock() graph = FakeGraphFrame(self.atoms_logic, ax) ax.plot_surface = MagicMock(return_value=graph.surface) return graph
def test_x_touch_side_surface_with_scan_mode(self): atom_logic = AtomsLogic(10, 10, self.__class__.server_mock) atom_logic.set_is_surface(False) atom_logic.server.send_data_to_all_clients = MagicMock() assert atom_logic.is_scan_mode() assert not atom_logic.is_surface() x = 1 y = 3 z = 40 atom_logic.surface_data[y, x] = 50 atom_logic.set_val_to_dto(DTO_Z, (0, 0, z)) atom_logic.update_tool_coordinate() tool_x, tool_y, tool_z = atom_logic.get_tool_coordinate() self.assertNotEqual(x, tool_x) self.assertEqual(z, tool_z) self.assertNotEqual(y, tool_y) atom_logic.server. \ send_data_to_all_clients. \ assert_called_once_with(f'{{"sensor": "servo_z", "value": "{str(MAX - z)}"}}') atom_logic.set_val_to_dto(DTO_Y, (0, y, z)) assert not atom_logic.tool_is_coming_down() with self.assertRaises(TouchingSurface) as e: atom_logic.set_val_to_dto(DTO_X, (x, y, z)) self.assertEqual("touching the surface", str(e.exception)) assert not atom_logic.tool_is_coming_down() self.assertNotEqual(atom_logic.get_dto_val(DTO_X), x) atom_logic.update_tool_coordinate() tool_x, tool_y, tool_z = atom_logic.get_tool_coordinate() self.assertNotEqual(x, tool_x) self.assertEqual(z, tool_z) self.assertEqual(y, tool_y) atom_logic.server. \ send_data_to_all_clients. \ assert_called_with(json.dumps(atom_logic.dto_y.to_dict()))
def test_handle_surface_data(self): for data, validated in self.surface_data: atom_logic = AtomsLogic(10, 10, self.__class__.server_mock) z = 70 self.__set_tool_is_coming_down(atom_logic, z) atom_logic.set_is_surface(False) if validated == 'valid': atom_logic.handle_server_data(data) self.assertTrue(atom_logic.is_surface()) self.assertEqual(z - CORRECTION_Z, atom_logic.surface_data[0, 0]) else: atom_logic.handle_server_data(data) self.assertFalse(atom_logic.is_surface()) self.assertNotEqual(z - CORRECTION_Z, atom_logic.surface_data[0, 0]) self.assertFalse(atom_logic.is_atom())