Skip to content
Snippets Groups Projects
Select Git revision
  • 249c136cddde084006857db5d3df9d17772e7242
  • main default protected
  • dev protected
  • f-linkahead-rename
  • f-real-id
  • f-filesystem-import
  • f-filesystem-link
  • f-filesystem-directory
  • f-filesystem-core
  • f-filesystem-cleanup
  • f-filesystem-main
  • f-name
  • keep_changes
  • f-permission-checks-2
  • f-mysql8-tests
  • f-retrieve-history
  • t-distinct-parents
  • v8.1.0
  • v8.0.0
  • v7.0.2
  • v7.0.1
  • v7.0.0
  • v6.0.1
  • v6.0.0
  • v5.0.0
  • v4.1.0
  • v4.0.0
  • v3.0
  • v2.0.30
29 results

sanity_check.sql

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    test_issues_server.py 4.51 KiB
    # -*- coding: utf-8 -*-
    #
    # ** header v3.0
    # This file is a part of the CaosDB Project.
    #
    # Copyright (c) 2020 IndiScale GmbH <info@indiscale.com>
    # Copyright (c) 2020 Daniel Hornung <d.hornung@indiscale.com>
    # Copyright (c) 2020 Florian Spreckelsen <f.spreckelsen@indiscale.com>
    #
    # This program is free software: you can redistribute it and/or modify
    # it under the terms of the GNU Affero General Public License as
    # published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
    #
    # You should have received a copy of the GNU Affero General Public License
    # along with this program. If not, see <https://www.gnu.org/licenses/>.
    #
    # ** end header
    
    """Tests for issues on gitlab.com, project caosdb-server."""
    
    import caosdb as db
    from caosdb.exceptions import EntityError, TransactionError
    import pytest
    
    
    def setup_module():
        try:
            db.execute_query("FIND ENTITY WITH ID > 99").delete()
        except Exception as delete_exc:
            print(delete_exc)
    
    
    def setup():
        """No setup required."""
        setup_module()
    
    
    def teardown():
        """Deleting entities again."""
        setup_module()
    
    
    # ########################### Issue tests start here #####################
    
    
    def test_issue_39():
        """Query Language Bug - quotes around year
    
        Test for https://gitlab.com/caosdb/caosdb-server/-/issues/39
        """
        date_str = "2020-01-01"
        prop_name = "Test_Date"
        db.Property(name=prop_name, datatype=db.DATETIME).insert()
        db.RecordType(name="Test_Type").add_property(name=prop_name).insert()
        db.Record(name="Test_Record").add_parent(name="Test_Type").add_property(
            name=prop_name, value=date_str).insert()
        # Quotes around years should work in the query
        ent = db.execute_query("FIND entity WITH A Test_Date IN \"2020\"",
                               unique=True)
        assert ent.get_property(prop_name).value == date_str
        # This should raise a transaction error
        with pytest.raises(TransactionError):
            db.execute_query("FIND entity WITH A Test_Date IN \"abcd\"")
    
    
    @pytest.mark.xfail(reason="to be fixed in server repo")
    def test_issue_62():
        """datatype is not changed when recordtype name changes
    
        Tests for https://gitlab.com/caosdb/caosdb-server/-/issues/62
        """
        db.RecordType(name="Test_RTA").insert()
        db.Property(name="Test_Prop", datatype="Test_RTA").insert()
        db.Record(name="Test_Record").add_parent(
            name="Test_RTA").add_property(name="Test_Prop").insert()
        # rename Test_RTA to Test_RTB
        rtb = db.execute_query("FIND RecordType Test_RTA", unique=True)
        rtb.name = "Test_RTB"
        rtb.update()
        # renaming has to be reflected in Test_Record and Test_Prop
        rec = db.execute_query("FIND Record Test_Record", unique=True)
        assert rec.parents[0].name == rtb.name
        prop = db.execute_query("FIND Property Test_Prop", unique=True)
        assert prop.datatype == rtb.name  # fails; datatype not updated
        # Can't use Test_RTA as datatype anymore
        prop2 = db.Property(name="Test_Prop2", datatype="Test_RTA")
        with pytest.raises(EntityError):
            prop2.insert()
    
    
    def test_issue_85_a():
        """SQLIntegrityConstraintViolationException for special inheritance patterns.
    
        Tests for https://gitlab.com/caosdb/caosdb-server/-/issues/85
        """
        A = db.RecordType(name="A")
        B = db.RecordType(name="B")
        C = db.RecordType(name="C")
    
        B.add_parent(A)
    
        # This order is important for the test to fail.
        C.add_parent(B)
        C.add_parent(C)
        C.add_parent(A)
    
        c = db.Container()
        # c.extend([C, B, A])  # worked before #86 was fixed
        # c.extend([C, A, B])  # worked before #86 was fixed
        c.extend([B, C, A])    # insert() failed before #86 was fixed
        c.insert()  # Raised java.sql.SQLIntegrityConstraintViolationException:
        #           # Duplicate entry '12345-12346-12345' for key 'PRIMARY'
    
    
    def test_issue_85_b():
        """SQLIntegrityConstraintViolationException for special inheritance patterns.
    
        Tests for https://gitlab.com/caosdb/caosdb-server/-/issues/85
        """
        A = db.RecordType(name="A")
        B = db.RecordType(name="B")
        C = db.RecordType(name="C")
        A.insert()
        B.insert()
        C.insert()
        B.add_parent(A)
        B.update()
        C.add_parent(B)
        C.update()
        C.add_parent(C)
        C.update()
        C.add_parent(A)
        C.update()  # Failed at this step