예제 #1
0
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*"
예제 #2
0
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")}
예제 #3
0
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()