예제 #1
0
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")}
예제 #2
0
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()
예제 #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()
예제 #4
0
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()
예제 #5
0
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")]