예제 #1
0
    def test_insert_double_edge_out(self):
        with self.g.session_scope() as s:
            case1 = md.Case('case_id_1')
            case2 = md.Case('case_id_2')
            sample = md.Sample('sample_id_1')
            sample.cases = [case1, case2]
            s.merge(sample)

        with self.g.session_scope() as s:
            sample = self.g.nodes(md.Sample).subq_path('cases').one()
            assert {c.node_id for c in sample._related_cases} == \
                   {c.node_id for c in [case1, case2]}
예제 #2
0
    def test_delete_one_parent(self):
        with self.g.session_scope() as s:
            case1 = md.Case('case_id_1')
            case2 = md.Case('case_id_2')
            sample = md.Sample('sample_id_1')
            sample.cases = [case1, case2]
            s.merge(sample)

        with self.g.session_scope() as s:
            case1 = self.g.nodes(md.Case).ids('case_id_1').one()
            s.delete(case1)

        with self.g.session_scope() as s:
            sample = self.g.nodes(md.Sample).one()
            assert sample._related_cases == [case2]
예제 #3
0
def valid_write_access_fn(g):
    with g.session_scope() as s:
        s.merge(models.Case('1'))
    yield
    with g.session_scope() as s:
        n = g.nodes().get("1")
        s.delete(n)
    def test_priv_grant_read(self):
        """Test ability to grant read but not write privs"""

        self.create_all_tables()

        try:
            self.engine.execute("CREATE USER pytest WITH PASSWORD 'pyt3st'")

            g = PsqlGraphDriver(self.host, 'pytest', 'pyt3st', self.database)

            #: If this failes, this test (not the code) is wrong!
            with self.assertRaises(ProgrammingError):
                with g.session_scope():
                    g.nodes().count()

            pgadmin.main(pgadmin.get_parser().parse_args([
                'graph-grant',
                '--read=pytest',
            ] + self.base_args))

            with g.session_scope():
                g.nodes().count()

            with self.assertRaises(ProgrammingError):
                with g.session_scope() as s:
                    s.merge(models.Case('1'))

        finally:
            self.engine.execute("DROP OWNED BY pytest; DROP USER pytest")
예제 #5
0
 def test_insert_double_edge_in(self):
     with self.g.session_scope() as s:
         case = md.Case('case_id_1')
         sample1 = md.Sample('sample_id_1')
         sample2 = md.Sample('sample_id_2')
         case.samples = [sample1, sample2]
         s.merge(case)
    def test_priv_revoke_write(self):
        """Test ability to revoke read/write privs"""

        self.create_all_tables()

        try:
            self.engine.execute("CREATE USER pytest WITH PASSWORD 'pyt3st'")

            g = PsqlGraphDriver(self.host, 'pytest', 'pyt3st', self.database)

            pgadmin.main(pgadmin.get_parser().parse_args([
                'graph-grant',
                '--write=pytest',
            ] + self.base_args))

            pgadmin.main(pgadmin.get_parser().parse_args([
                'graph-revoke',
                '--write=pytest',
            ] + self.base_args))

            with g.session_scope() as s:
                g.nodes().count()

            with self.assertRaises(ProgrammingError):
                with g.session_scope() as s:
                    s.merge(models.Case('1'))

        finally:
            self.engine.execute("DROP OWNED BY pytest; DROP USER pytest")
예제 #7
0
 def test_delete_dst_association_proxy(self):
     with self.g.session_scope() as s:
         case = md.Case('case_id_1')
         aliquot = md.Aliquot('aliquot_id_1')
         sample = md.Sample('sample_id_1')
         aliquot.samples = [sample]
         sample.cases = [case]
         s.merge(case)
예제 #8
0
def test_export_all_node_types_json(client, pg_driver, cgci_blgsp, submitter):
    post_example_entities_together(client, submitter)
    with pg_driver.session_scope() as s:
        case = pg_driver.nodes(md.Case).first()
        new_case = md.Case(str(uuid.uuid4()))
        new_case.props = case.props
        new_case.submitter_id = 'case-2'
        s.add(new_case)
        case_count = pg_driver.nodes(md.Case).count()
예제 #9
0
    def test_updated_datetime_hook(self):
        """Test setting updated datetime when a node is updated."""
        with self.g.session_scope() as s:
            s.merge(md.Case('case1'))

        with self.g.session_scope():
            case = self.g.nodes(md.Case).one()
            old_created_datetime = case.created_datetime
            old_updated_datetime = case.updated_datetime

            case.primary_site = 'Kidney'
예제 #10
0
    def test_insert_update_children(self):
        with self.g.session_scope() as s:
            aliquot = s.merge(md.Aliquot('aliquot_id_1'))
            sample = s.merge(md.Sample('sample_id_1'))
            aliquot.samples = [sample]
            s.merge(md.Case('case_id_1'))

        with self.g.session_scope() as s:
            case = self.g.nodes(md.Case).one()
            sample = self.g.nodes(md.Sample).one()
            sample.cases = [case]
예제 #11
0
def test_export_all_node_types(client, pg_driver, submitter, dictionary_setup):
    dictionary_setup('s3://test.com')
    put_cgci_blgsp(client, submitter)
    post_example_entities_together(client, pg_driver, submitter)
    with pg_driver.session_scope() as s:
        case = pg_driver.nodes(md.Case).first()
        new_case = md.Case(str(uuid.uuid4()))
        new_case.props = case.props
        new_case.submitter_id = 'case-2'
        s.add(new_case)
        case_count = pg_driver.nodes(md.Case).count()
예제 #12
0
    def test_no_datetime_update_for_new_edge(self):
        """Verify new inbound edges do not affect a node's updated datetime."""
        with self.g.session_scope() as s:
            s.merge(md.Case('case1'))

        with self.g.session_scope() as s:
            case = self.g.nodes(md.Case).one()
            old_created_datetime = case.created_datetime
            old_updated_datetime = case.updated_datetime

            sample = s.merge(md.Sample('sample1'))
            case.samples.append(sample)
예제 #13
0
    def test_insert_multiple_edges(self):
        with self.g.session_scope() as s:
            case = md.Case('case_id_1')
            sample = md.Sample('sample_id_1')
            portion = md.Portion('portion_id_1')
            analyte = md.Analyte('analyte_id_1')
            aliquot = md.Aliquot('aliquot_id_1')
            general_file = md.File('file_id_1')

            sample.cases = [case]
            portion.samples = [sample]
            analyte.portions = [portion]
            aliquot.analytes = [analyte]
            general_file.aliquots = [aliquot]
            s.merge(case)
예제 #14
0
    def test_created_datetime_hook(self):
        """Test setting created/updated datetime when a node is created."""
        time_before = datetime.now().isoformat()

        with self.g.session_scope() as s:
            s.add(md.Case('case1'))

        time_after = datetime.now().isoformat()

        with self.g.session_scope():
            case = self.g.nodes(md.Case).one()

            # Compare against the time both before and after the write to
            # ensure the comparison is fair.
            assert time_before < case.created_datetime < time_after
            assert time_before < case.updated_datetime < time_after
    def test_priv_grant_write(self):
        """Test ability to grant read/write privs"""

        self.create_all_tables()

        try:
            self.engine.execute("CREATE USER pytest WITH PASSWORD 'pyt3st'")
            self.engine.execute("GRANT USAGE ON SCHEMA public TO pytest")

            g = PsqlGraphDriver(self.host, 'pytest', 'pyt3st', self.database)
            pgadmin.main(pgadmin.get_parser().parse_args([
                'graph-grant',
                '--write=pytest',
            ] + self.base_args))

            with g.session_scope() as s:
                g.nodes().count()
                s.merge(models.Case('1'))

        finally:
            self.engine.execute("DROP OWNED BY pytest; DROP USER pytest")
예제 #16
0
    def test_preserve_timestamps(self):
        """Confirm cache changes do not affect the case's timestamps."""
        with self.g.session_scope() as s:
            s.merge(md.Case('case_id_1'))

        with self.g.session_scope():
            case = self.g.nodes(md.Case).one()
            old_created_datetime = case.created_datetime
            old_updated_datetime = case.updated_datetime

            # Test addition of cache edges.
            sample = md.Sample('sample_id_1')
            portion = md.Portion('portion_id_1')
            analyte = md.Analyte('analyte_id_1')
            aliquot = md.Aliquot('aliquot_id_1')
            sample.cases = [case]
            portion.samples = [sample]
            analyte.portions = [portion]
            aliquot.analytes = [analyte]

            sample2 = md.Sample('sample_id_2')
            sample2.cases = [case]
 def blocker():
     with self.g.session_scope() as s:
         s.merge(models.Case('1'))
         q.put(0)  # Tell main thread we're ready
         q.get()  # This get should block until this prcoess is killed
         assert False, 'Should not be reachable!'
 def blocker():
     with self.g.session_scope() as s:
         s.merge(models.Case('1'))
         q.put(0)  # Tell main thread we're ready
         q.get()  # Wait for main thread to tell us to exit
예제 #19
0
def invalid_write_access_fn(g):
    with pytest.raises(ProgrammingError):
        with g.session_scope() as s:
            s.add(models.Case('1'))
예제 #20
0
 def test_delete_parent(self):
     with self.g.session_scope() as s:
         case = md.Case('case_id_1')
         sample = md.Sample('sample_id_1')
         sample.cases = [case]
         s.merge(case)
예제 #21
0
 def test_insert_single_association_proxy(self):
     with self.g.session_scope() as s:
         case = md.Case('case_id_1')
         sample = md.Sample('sample_id_1')
         sample.cases = [case]
         s.merge(sample)
예제 #22
0
 def test_insert_single_edge(self):
     with self.g.session_scope() as s:
         case = s.merge(md.Case('case_id_1'))
         sample = s.merge(md.Sample('sample_id_1'))
         edge = md.SampleDerivedFromCase(sample.node_id, case.node_id)
         s.merge(edge)