def test_set_tags(image_factory): model = Model() view = mock.MagicMock() controller = Controller(model=model) assert controller.tags == [] image = image_factory('foo.jpg') model.images.add(image) controller._view = view controller.set_tags({Tag(name="a"), Tag(name="b")}) assert controller.tags == [Tag(name="a"), Tag(name="b")] assert model.tags == {Tag(name="a"), Tag(name="b")} view.update_tags.assert_called_once() view.reset_mock() controller.set_tags({Tag(name="a"), Tag(name="b"), Tag(name="c")}) assert controller.tags == [Tag(name="a"), Tag(name="b"), Tag(name="c")] assert model.tags == {Tag(name="a"), Tag(name="b"), Tag(name="c")} view.update_tags.assert_called_once() view.reset_mock() image.tags = {Tag(name="a"), Tag(name="b"), Tag(name="c")} controller.set_tags({Tag(name="a")}) assert controller.tags == [Tag(name="a")] assert model.tags == {Tag(name="a")} view.update_tags.assert_called_once() view.reset_mock() assert image.tags == {Tag(name="a")}
def test_add_image(image_factory): view = mock.MagicMock() controller = Controller(model=Model()) controller._view = view assert not hasattr(controller, '_current_image') # adding the first image should automatically set it as current controller.add_image(image_factory('foo.jpg')) assert controller._current_image.path.name == 'foo.jpg' assert [image.path.name for image in controller.images] == ['foo.jpg'] view.update_images.assert_called_once_with() view.reset_mock() controller.add_image(image_factory('bar.jpg')) assert controller._current_image.path.name == 'foo.jpg' assert [image.path.name for image in controller.images] == ['bar.jpg', 'foo.jpg'] view.update_images.assert_called_once_with() view.reset_mock() # adding the same image twice should fail with pytest.raises(Controller.ImageAlreadyPresent, match="foo.jpg is already present"): controller.add_image(image_factory('foo.jpg')) assert [image.path.name for image in controller.images] == ['bar.jpg', 'foo.jpg'] view.update_images.assert_not_called() view.reset_mock()
def test_update_tag(model_factory): controller = Controller(model_factory((), ("foo", ))) assert controller.tags == [Tag(name="foo")] view = mock.MagicMock() controller._view = view controller.update_tag(old=Tag(name="foo"), new=Tag(name="bar")) assert controller._model.tags == {Tag(name="bar")} view.update_tags.assert_called_once_with() # no loaded image, hence should not update it view.update_current_image_tags.assert_not_called() view.reset_mock() controller = Controller(model_factory(('pic.jpg', ), ("foo", "bar"))) assert controller.current_image is not None controller.current_image.tags = {Tag(name="foo"), Tag(name="bar")} controller._view = view controller.update_tag(Tag(name="bar"), Tag(name="qux")) assert controller.tags == [Tag(name="foo"), Tag(name="qux")] assert controller._model.tags == {Tag(name="foo"), Tag(name="qux")} assert controller.current_image.tags == {Tag(name="foo"), Tag(name="qux")} view.update_tags.assert_called_once_with() view.update_current_image_tags.assert_not_called() view.reset_mock() with pytest.raises(Controller.TagAlreadyPresent, match="\"qux\" tag is already present"): controller.update_tag(Tag(name="foo"), Tag(name="qux")) assert controller.tags == [Tag(name="foo"), Tag(name="qux")] assert controller._model.tags == {Tag(name="foo"), Tag(name="qux")} assert controller.current_image.tags == {Tag(name="foo"), Tag(name="qux")} view.update_tags.assert_not_called() view.update_current_image_tags.assert_not_called() view.reset_mock()
def test_delete_tag(model_factory): controller = Controller(model_factory((), ("foo", ))) assert controller.tags == [Tag(name="foo")] view = mock.MagicMock() controller._view = view controller.delete_tag(Tag(name="foo")) assert controller._model.tags == set() view.update_tags.assert_called_once_with() # no loaded image, hence should not update it view.update_current_image_tags.assert_not_called() view.reset_mock() controller = Controller(model_factory(('pic.jpg', ), ("foo", "bar"))) assert controller.current_image is not None assert controller.tags == [Tag(name="bar"), Tag(name="foo")] controller.current_image.tags = {Tag(name="foo"), Tag(name="bar")} controller._view = view controller.delete_tag(Tag(name="foo")) assert controller.tags == [Tag(name="bar")] assert controller._model.tags == {Tag(name="bar")} assert controller.current_image.tags == {Tag(name="bar")} view.update_tags.assert_called_once_with() view.update_current_image_tags.assert_called_once_with() view.reset_mock() controller.delete_tag(Tag(name="bar")) assert controller.tags == [] assert controller._model.tags == set() assert controller.current_image.tags == set() view.update_tags.assert_called_once_with() view.update_current_image_tags.assert_called_once_with() view.reset_mock()
def test_add_tag(): view = mock.MagicMock() controller = Controller(model=Model()) controller._view = view assert controller.tags == [] controller.add_tag(Tag(name="foo")) view.update_tags.assert_called_once_with() view.reset_mock() controller.add_tag(Tag(name="bar")) view.update_tags.assert_called_once_with() view.reset_mock() assert controller.tags == [Tag(name="bar"), Tag(name="foo")]