def test_update_alias_single_change_all(self):
        alias = Alias(name=u'test', sort_name=u'test_sort',
                       language_id=1, primary=True)
        self.session.add(alias)
        self.session.commit()

        data = copy.deepcopy(self.GOOD_DATA_SINGLE_UPDATE)
        data['aliases'][0][0] = alias.alias_id
        aliases, default_alias = update_aliases([alias], alias.alias_id, data)
        self.assertEqual(len(aliases), 1)
        self.assertIsNot(aliases[0], alias)
        self.assertEqual(aliases[0].name, u'tested')
        self.assertEqual(aliases[0].sort_name, u'tested_sort')
        self.assertEqual(aliases[0].language_id, 2)
        self.assertFalse(aliases[0].primary)
        self.assertIs(default_alias, aliases[0])
    def test_update_alias_single_nop(self):
        alias = Alias(name=u'test', sort_name=u'test_sort',
                       language_id=1, primary=True)
        self.session.add(alias)
        self.session.commit()

        data = copy.deepcopy(self.GOOD_DATA_SINGLE_UPDATE)
        data['aliases'][0][0] = alias.alias_id
        data['aliases'][0][1]['name'] = u'test'
        data['aliases'][0][1]['sort_name'] = u'test_sort'
        data['aliases'][0][1]['language_id'] = 1
        data['aliases'][0][1]['primary'] = True
        aliases, default_alias = update_aliases([alias], alias.alias_id, data)
        self.assertEqual(len(aliases), 1)
        self.assertIs(aliases[0], alias)
        self.assertIs(default_alias, alias)
    def test_update_alias_primary_numeric(self):
        alias = Alias(name=u'test', sort_name=u'test_sort',
                       language_id=1, primary=True)
        self.session.add(alias)
        self.session.commit()

        data = copy.deepcopy(self.GOOD_DATA_SINGLE_UPDATE)
        data['aliases'][0][0] = alias.alias_id
        data['aliases'][0][1]['primary'] = 2
        aliases, default_alias = update_aliases([alias], alias.alias_id, data)
        self.assertEqual(len(aliases), 1)
        self.assertIs(aliases[0], alias)
        self.assertEqual(aliases[0].name, u'test')
        self.assertEqual(aliases[0].sort_name, u'test_sort')
        self.assertEqual(aliases[0].language_id, 1)
        self.assertTrue(aliases[0].primary)
        self.assertIs(default_alias, aliases[0])
    def test_update_alias_single_change_all(self):
        alias = Alias(name=u'test',
                      sort_name=u'test_sort',
                      language_id=1,
                      primary=True)
        self.session.add(alias)
        self.session.commit()

        data = copy.deepcopy(self.GOOD_DATA_SINGLE_UPDATE)
        data['aliases'][0][0] = alias.alias_id
        aliases, default_alias = update_aliases([alias], alias.alias_id, data)
        self.assertEqual(len(aliases), 1)
        self.assertIsNot(aliases[0], alias)
        self.assertEqual(aliases[0].name, u'tested')
        self.assertEqual(aliases[0].sort_name, u'tested_sort')
        self.assertEqual(aliases[0].language_id, 2)
        self.assertFalse(aliases[0].primary)
        self.assertIs(default_alias, aliases[0])
    def test_update_alias_single_nop(self):
        alias = Alias(name=u'test',
                      sort_name=u'test_sort',
                      language_id=1,
                      primary=True)
        self.session.add(alias)
        self.session.commit()

        data = copy.deepcopy(self.GOOD_DATA_SINGLE_UPDATE)
        data['aliases'][0][0] = alias.alias_id
        data['aliases'][0][1]['name'] = u'test'
        data['aliases'][0][1]['sort_name'] = u'test_sort'
        data['aliases'][0][1]['language_id'] = 1
        data['aliases'][0][1]['primary'] = True
        aliases, default_alias = update_aliases([alias], alias.alias_id, data)
        self.assertEqual(len(aliases), 1)
        self.assertIs(aliases[0], alias)
        self.assertIs(default_alias, alias)
    def test_update_alias_primary_numeric(self):
        alias = Alias(name=u'test',
                      sort_name=u'test_sort',
                      language_id=1,
                      primary=True)
        self.session.add(alias)
        self.session.commit()

        data = copy.deepcopy(self.GOOD_DATA_SINGLE_UPDATE)
        data['aliases'][0][0] = alias.alias_id
        data['aliases'][0][1]['primary'] = 2
        aliases, default_alias = update_aliases([alias], alias.alias_id, data)
        self.assertEqual(len(aliases), 1)
        self.assertIs(aliases[0], alias)
        self.assertEqual(aliases[0].name, u'test')
        self.assertEqual(aliases[0].sort_name, u'test_sort')
        self.assertEqual(aliases[0].language_id, 1)
        self.assertTrue(aliases[0].primary)
        self.assertIs(default_alias, aliases[0])
    def update(self, data, session):
        # Create a new EntityData, copying the current data.
        new_data = self.copy()

        if self.annotation is not None:
            new_data.annotation = self.annotation.update(data)
        else:
            new_data.annotation = Annotation.create(data)

        if self.disambiguation is not None:
            new_data.disambiguation = self.disambiguation.update(data)
        else:
            new_data.disambiguation = Disambiguation.create(data)

        new_data.identifiers =\
            update_identifiers(self.identifiers, data)

        new_data.aliases, default_alias =\
            update_aliases(self.aliases, self.default_alias_id, data)

        if default_alias is not None:
            new_data.default_alias = default_alias

        return new_data