From a9fb2445bf17c1f976f6817899aa9877f574a3c5 Mon Sep 17 00:00:00 2001 From: Aly Badr Date: Tue, 15 Oct 2019 08:32:28 +0200 Subject: [PATCH] fixtures: reset sequence to correct value after loading records * Closes #563 Co-Authored-by: Aly Badr --- rero_ils/modules/cli.py | 18 ++++++++++++++++-- rero_ils/modules/providers.py | 8 -------- .../ui/organisations/test_organisations_api.py | 9 ++++++++- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/rero_ils/modules/cli.py b/rero_ils/modules/cli.py index 61264cd8e0..866059aedf 100644 --- a/rero_ils/modules/cli.py +++ b/rero_ils/modules/cli.py @@ -34,6 +34,7 @@ from flask.cli import with_appcontext from flask_security.confirmable import confirm_user from invenio_accounts.cli import commit, users +from invenio_db import db from invenio_pidstore.models import PersistentIdentifier from invenio_records.api import Record from invenio_records_rest.utils import obj_or_import_string @@ -47,11 +48,24 @@ from .items.cli import create_items, reindex_items from .loans.cli import create_loans from .patrons.cli import import_users -from .providers import append_pids_to_table _datastore = LocalProxy(lambda: current_app.extensions['security'].datastore) +def append_fixtures_new_identifiers(table, pids): + """Insert pids into the indentifier table and update its sequence.""" + for pid in pids: + data = table(recid=pid) + db.session.add(data) + value = pid = int(max(pids))+1 + db.session.execute( + "SELECT setval(pg_get_serial_sequence(" + "'{0}', 'recid'), :newval)".format( + table.__tablename__), dict(newval=value)) + + db.session.commit() + + @click.group() def fixtures(): """Fixtures management commands.""" @@ -240,7 +254,7 @@ def create(infile, pid_type, schema, verbose, dbcommit, reindex, append): if append: pids = record_class.get_all_pids() table = record_class.provider.identifier - append_pids_to_table(table, pids) + append_fixtures_new_identifiers(table, pids) fixtures.add_command(create) diff --git a/rero_ils/modules/providers.py b/rero_ils/modules/providers.py index f27a8e6c40..78733dea6a 100644 --- a/rero_ils/modules/providers.py +++ b/rero_ils/modules/providers.py @@ -25,14 +25,6 @@ from invenio_pidstore.providers.base import BaseProvider -def append_pids_to_table(table, pids): - """Insert pids into an indentifier table.""" - for pid in pids: - data = table(recid=pid) - db.session.add(data) - db.session.commit() - - class Provider(BaseProvider): """CircPolicy identifier provider. diff --git a/tests/ui/organisations/test_organisations_api.py b/tests/ui/organisations/test_organisations_api.py index 4f4aed02cf..0dbe2d70dd 100644 --- a/tests/ui/organisations/test_organisations_api.py +++ b/tests/ui/organisations/test_organisations_api.py @@ -29,7 +29,7 @@ def test_organisation_libararies(org_martigny, lib_martigny): assert list(org_martigny.get_libraries()) == [lib_martigny] -def test_organisation_create(app, db, org_martigny_data): +def test_organisation_create(app, db, org_martigny_data, org_sion_data): """Test organisation creation.""" org = Organisation.create(org_martigny_data, delete_pid=True) assert org == org_martigny_data @@ -44,3 +44,10 @@ def test_organisation_create(app, db, org_martigny_data): fetched_pid = fetcher(org.id, org) assert fetched_pid.pid_value == '1' assert fetched_pid.pid_type == 'org' + + org = Organisation.create( + org_sion_data, delete_pid=True, dbcommit=True, reindex=True) + assert org.get('pid') == '2' + + identifier = Organisation.provider.identifier + assert identifier.next() == identifier.max() == 3