def test_empty_add_some_tags(basedir): controller = Controller(model=Model()) assert controller._view._window.title() == "PicPick *" assert controller.images == [] assert controller.tags == [] assert controller.current_image is None # just want to add some tags for name in ("alpha", "beta", "gamma"): controller.add_tag(Tag(name=name)) assert controller.tags == [ Tag(name="alpha"), Tag(name="beta"), Tag(name="gamma") ] controller.save(basedir / 'save.picpick') assert controller._view._window.title() == "PicPick - save.picpick" # eventually wants to remove beta controller.delete_tag(Tag(name="beta")) assert controller.tags == [Tag(name="alpha"), Tag(name="gamma")] assert controller._view._window.title() == "PicPick - save.picpick*" controller.save(basedir / 'save.picpick') assert controller._view._window.title() == "PicPick - save.picpick" # renames alpha to delta controller.update_tag(old=Tag(name="alpha"), new=Tag(name="delta")) assert controller.tags == [Tag(name="delta"), Tag(name="gamma")] assert controller._view._window.title() == "PicPick - save.picpick*"
def test_empty_add_one_image_and_tag_it(basedir, image_factory): controller = Controller(model=Model()) assert controller._view._window.title() == "PicPick *" assert controller.images == [] assert controller.tags == [] assert controller.current_image is None controller.save(basedir / 'save.picpick') assert controller._view._window.title() == "PicPick - save.picpick" controller.add_image(image_factory('foo.jpg')) assert [image.path.name for image in controller.images] == ['foo.jpg'] assert controller.current_image is not None controller.add_tag(Tag(name='alpha')) controller.add_tag(Tag(name='beta')) assert controller.tags == [Tag(name='alpha'), Tag(name='beta')] assert controller._view._window.title() == "PicPick - save.picpick*" controller.save(basedir / 'save.picpick') assert controller._view._window.title() == "PicPick - save.picpick" assert controller.current_image.path.name == 'foo.jpg' assert controller.current_image.tags == set() controller.tag_current_image(Tag(name='alpha')) controller.tag_current_image(Tag(name='beta')) assert controller.current_image.tags == { Tag(name='alpha'), Tag(name='beta') } assert controller._view._window.title() == "PicPick - save.picpick*" controller.save(basedir / 'save.picpick') assert controller._view._window.title() == "PicPick - save.picpick" # eventually wants to rename the first tag and delete the second controller.update_tag(old=Tag(name="alpha"), new=Tag(name="gamma")) controller.delete_tag(Tag(name="beta")) assert controller.tags == [Tag(name="gamma")] # image tags must have also been updated assert controller.current_image.tags == {Tag(name="gamma")}
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()