From 88c06d41fb819b8a215d3c0d3e217b325640b115 Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Sun, 15 Mar 2015 00:33:39 -0400 Subject: [PATCH] 8435: Crash when trying to link existing place as an enclosing place using P0001 number; added tests, updated Travis testing --- .travis.yml | 2 +- gramps/gui/editors/editreference.py | 3 + gramps/gui/editors/test/test_editreference.py | 76 +++++++++++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 gramps/gui/editors/test/test_editreference.py diff --git a/.travis.yml b/.travis.yml index 1ab98d223..ac7eb7d03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,5 +21,5 @@ install: script: - mkdir -p /home/travis/.gramps/grampsdb/ - - DJANGO_SETTINGS_MODULE=gramps.webapp.settings nosetests3 --exclude=TestcaseGenerator --exclude=exportvcard_test --exclude=plugins --exclude=vcard --exclude=merge_ref_test --exclude=test_util_test --exclude=gramps.webapp --exclude=test2_exec_CLI --exclude=widgets --exclude=gui --exclude=test3_files_in_import_dir --exclude=test_manual_run gramps + - DJANGO_SETTINGS_MODULE=gramps.webapp.settings nosetests3 --exclude=TestcaseGenerator --exclude=exportvcard_test --exclude=plugins --exclude=vcard --exclude=merge_ref_test --exclude=test_util_test --exclude=gramps.webapp --exclude=test2_exec_CLI --exclude=widgets --exclude=test3_files_in_import_dir --exclude=test_manual_run gramps diff --git a/gramps/gui/editors/editreference.py b/gramps/gui/editors/editreference.py index cbee0a2e0..8276b46c0 100644 --- a/gramps/gui/editors/editreference.py +++ b/gramps/gui/editors/editreference.py @@ -271,6 +271,7 @@ class EditReference(ManagedWindow, DbGUIElement): if new_id: old_primary = self.db.get_from_name_and_gramps_id(type, new_id) if old_primary: + description = None if type == 'Event': msg1 = _("Cannot save event. ID already exists.") description = old_primary.get_description() @@ -280,6 +281,8 @@ class EditReference(ManagedWindow, DbGUIElement): elif type == 'Repository': msg1 = _("Cannot save repository. ID already exists.") description = old_primary.get_name() + else: + msg1 = _("Cannot save item. ID already exists.") if description: msg2 = _("You have attempted to use the existing Gramps " "ID with value %(id)s. This value is already " diff --git a/gramps/gui/editors/test/test_editreference.py b/gramps/gui/editors/test/test_editreference.py new file mode 100644 index 000000000..de78376e7 --- /dev/null +++ b/gramps/gui/editors/test/test_editreference.py @@ -0,0 +1,76 @@ +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2013 Doug Blank +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +""" Unittest for editreference.py """ + +import unittest +import sys +try: + if sys.version_info < (3,3): + from mock import Mock, patch + else: + from unittest.mock import Mock, patch + MOCKING = True +except: + MOCKING = False + +from gramps.gen.lib import (Person, Family, Event, Source, Place, Citation, + Repository, MediaObject, Note, Tag) +from gramps.gen.merge.diff import DictionaryDb +from gramps.cli.user import User +from gramps.gen.dbstate import DbState +from gramps.gen.merge.diff import * +from gramps.gui.editors.editreference import EditReference + +class MockWindow(): + def set_transient_for(self, *args, **kwargs): + pass + def show_all(self): + pass + +class MockEditReference(EditReference): + def __init__(self, dbstate, uistate, track, source, source_ref, update): + self.window = MockWindow() + super().__init__(dbstate, uistate, track, source, source_ref, update) + +example = os.path.abspath( + os.path.join(os.path.dirname(os.path.abspath(__file__)), + "../../../..", + "example/gramps/example.gramps")) + +class TestEditReference(unittest.TestCase): + def setUp(self): + self.db = DictionaryDb() + + @unittest.skipUnless(MOCKING, "Requires unittest.mock to run") + def test_editreference(self): + dbstate = DbState() + dbstate.db = self.db + source = Place() + source.gramps_id = "P0001" + self.db.place_map[source.handle] = source + editor = MockEditReference(dbstate, uistate=None, track=[], + source=source, source_ref=None, update=None) + with patch('gramps.gui.editors.editreference.ErrorDialog') as MockED: + editor.check_for_duplicate_id("Place") + self.assertTrue(MockED.called) + +if __name__ == "__main__": + unittest.main()