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]}
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]
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")
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")
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)
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()
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'
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]
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()
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)
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)
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")
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
def invalid_write_access_fn(g): with pytest.raises(ProgrammingError): with g.session_scope() as s: s.add(models.Case('1'))
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)
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)
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)