def test_orthology(self): """Tests - __init__.""" # register multispecies organism so_db = Db.objects.create(name="SO") so_cv = Cv.objects.create(name="sequence") # creating test RO term ro_db = Db.objects.create(name="RO") ro_cv = Cv.objects.create(name="relationship") fo_db = Db.objects.create(name="ORTHOMCL_SOURCE") fo_cv = Cv.objects.create(name="feature_property") # test_dbxref = Dbxref.objects.create(accession='123456', db=test_db) so_dbxref = Dbxref.objects.create(accession="357", db=so_db) so_dbxref2 = Dbxref.objects.create(accession="358", db=so_db) ro_dbxref = Dbxref.objects.create(accession="658", db=ro_db) # creating test SO term Cvterm.objects.create( name="contained in", cv=ro_cv, dbxref=ro_dbxref, is_obsolete=0, is_relationshiptype=1, ) ortho_dbxref = Dbxref.objects.create(accession="ORTHOMCL_SOURCE", db=fo_db) term = Cvterm.objects.create( name="orthologous group", cv=fo_cv, dbxref=ortho_dbxref, is_obsolete=0, is_relationshiptype=0, ) poly_cvterm = Cvterm.objects.create( name="polypeptide", cv=so_cv, dbxref=so_dbxref, is_obsolete=0, is_relationshiptype=0, ) Cvterm.objects.create( name="protein_match", cv=so_cv, dbxref=so_dbxref2, is_obsolete=0, is_relationshiptype=0, ) db_null = Db.objects.create(name="null") null_dbxref = Dbxref.objects.create(db=db_null, accession="null") null_cv = Cv.objects.create(name="null") Cvterm.objects.create( cv=null_cv, name="null", definition="", dbxref=null_dbxref, is_obsolete=0, is_relationshiptype=0, ) # need to insert organisms first organism1 = Organism.objects.create(species="coerulea", genus="Aquilegia", abbreviation="Aco") organism2 = Organism.objects.create(species="distachyon", genus="Brachypodium", abbreviation="Brd") organism3 = Organism.objects.create(species="clementina", genus="Citrus", abbreviation="Ccl") organism4 = Organism.objects.create(species="carota", genus="Dacus", abbreviation="Dca") organism5 = Organism.objects.create(species="grandis", genus="Eucalyptus", abbreviation="Egr") organism6 = Organism.objects.create(species="vesca", genus="Fragaria", abbreviation="Fve") organism7 = Organism.objects.create(species="max", genus="Glycine", abbreviation="Gma") organism8 = Organism.objects.create(species="fedtschenkoi", genus="Kalanchoe", abbreviation="Kld") self.assertTrue(Organism.objects.filter(abbreviation="Aco").exists()) self.assertTrue(Organism.objects.filter(abbreviation="Brd").exists()) self.assertTrue(Organism.objects.filter(abbreviation="Ccl").exists()) self.assertTrue(Organism.objects.filter(abbreviation="Dca").exists()) self.assertTrue(Organism.objects.filter(abbreviation="Egr").exists()) self.assertTrue(Organism.objects.filter(abbreviation="Fve").exists()) self.assertTrue(Organism.objects.filter(abbreviation="Gma").exists()) self.assertTrue(Organism.objects.filter(abbreviation="Kld").exists()) # also need to insert Features from fasta file first. # inserting: Aqcoe0131s0001.1.v3.1 db = Db.objects.create(name="FASTA_SOURCE") acc1 = "Aqcoe0131s0001.1.v3.1" dbxref1 = Dbxref.objects.create(db=db, accession=acc1) feature1 = Feature.objects.create( dbxref=dbxref1, organism=organism1, uniquename="Aqcoe0131s0001.1.v3.1", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc1, dbxref__db__name="FASTA_SOURCE", ).exists()) # inserting: Bradi0180s00100.1.v3.1; Bradi2g20400.1.v3.1 acc2 = "Bradi0180s00100.1.v3.1" dbxref2 = Dbxref.objects.create(db=db, accession=acc2) Feature.objects.create( dbxref=dbxref2, organism=organism2, uniquename="Bradi0180s00100.1.v3.1", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc2, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) acc3 = "Bradi2g20400.1.v3.1" dbxref3 = Dbxref.objects.create(db=db, accession=acc3) Feature.objects.create( dbxref=dbxref3, organism=organism2, uniquename="Bradi2g20400.1.v3.1", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc3, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) # inserting: Ciclev10013963m.v1.0; Ciclev10013962m.v1.0; # Ciclev10013970m.v1.0 acc4 = "Ciclev10013963m.v1.0" dbxref4 = Dbxref.objects.create(db=db, accession=acc4) feature4 = Feature.objects.create( dbxref=dbxref4, organism=organism3, uniquename="Ciclev10013963m.v1.0", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc4, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) acc5 = "Ciclev10013962m.v1.0" dbxref5 = Dbxref.objects.create(db=db, accession=acc5) Feature.objects.create( dbxref=dbxref5, organism=organism3, uniquename="Ciclev10013962m.v1.0", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc5, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) acc6 = "Ciclev10013970m.v1.0" dbxref6 = Dbxref.objects.create(db=db, accession=acc6) Feature.objects.create( dbxref=dbxref6, organism=organism3, uniquename="Ciclev10013970m.v1.0", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc6, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) # inserting: DCAR_032182.v1.0.388; DCAR_031986.v1.0.388; # DCAR_032223.v1.0.388; DCAR_000323.v1.0.388 acc7 = "DCAR_032182.v1.0.388" dbxref7 = Dbxref.objects.create(db=db, accession=acc7) Feature.objects.create( dbxref=dbxref7, organism=organism4, uniquename="DCAR_032182.v1.0.388", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc7, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) acc8 = "DCAR_031986.v1.0.388" dbxref8 = Dbxref.objects.create(db=db, accession=acc8) Feature.objects.create( dbxref=dbxref8, organism=organism4, uniquename="DCAR_031986.v1.0.388", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc8, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) acc9 = "DCAR_032223.v1.0.388" dbxref9 = Dbxref.objects.create(db=db, accession=acc9) feature9 = Feature.objects.create( dbxref=dbxref9, organism=organism4, uniquename="DCAR_032223.v1.0.388", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc9, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) acc10 = "DCAR_000323.v1.0.388" dbxref10 = Dbxref.objects.create(db=db, accession=acc10) feature10 = Feature.objects.create( dbxref=dbxref10, organism=organism4, uniquename="DCAR_000323.v1.0.388", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc10, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) # inserting: Eucgr.L02820.1.v2.0 acc11 = "Eucgr.L02820.1.v2.0" dbxref11 = Dbxref.objects.create(db=db, accession=acc11) Feature.objects.create( dbxref=dbxref11, organism=organism5, uniquename="Eucgr.L02820.1.v2.0", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc11, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) # inserting: mrna13067.1-v1.0-hybrid.v1.1 acc12 = "mrna13067.1-v1.0-hybrid.v1.1" dbxref12 = Dbxref.objects.create(db=db, accession=acc12) Feature.objects.create( dbxref=dbxref12, organism=organism6, uniquename="mrna13067.1-v1.0-hybrid.v1.1", type=poly_cvterm, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc12, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) # inserting: Glyma.10G030500.1.Wm82.a2.v1; Glyma.10G053100.1.Wm82.a2.v1 acc13 = "Glyma.10G030500.1.Wm82.a2.v1" dbxref13 = Dbxref.objects.create(db=db, accession=acc13) Feature.objects.create( dbxref=dbxref13, organism=organism7, uniquename="Glyma.10G030500.1.Wm82.a2.v1", type_id=poly_cvterm.cvterm_id, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc13, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) acc14 = "Glyma.10G053100.1.Wm82.a2.v1" dbxref14 = Dbxref.objects.create(db=db, accession=acc14) feature14 = Feature.objects.create( dbxref=dbxref14, organism=organism7, uniquename="Glyma.10G053100.1.Wm82.a2.v1", type_id=poly_cvterm.cvterm_id, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc14, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) acc15 = "Glyma.10G008400.1.Wm82.a2.v1" dbxref15 = Dbxref.objects.create(db=db, accession=acc15) Feature.objects.create( dbxref=dbxref15, organism=organism7, uniquename="Glyma.10G008400.1.Wm82.a2.v1", type_id=poly_cvterm.cvterm_id, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc15, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) # inserting: Kaladp0598s0001.1.v1.1 acc16 = "Kaladp0598s0001.1.v1.1" dbxref16 = Dbxref.objects.create(db=db, accession=acc16) feature16 = Feature.objects.create( dbxref=dbxref16, organism=organism8, uniquename="Kaladp0598s0001.1.v1.1", type_id=poly_cvterm.cvterm_id, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc16, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) acc17 = "Kaladp0598s0002.1.v1.1" dbxref17 = Dbxref.objects.create(db=db, accession=acc17) feature17 = Feature.objects.create( dbxref=dbxref17, organism=organism8, uniquename="Kaladp0598s0002.1.v1.1", type_id=poly_cvterm.cvterm_id, is_analysis=False, is_obsolete=False, timeaccessioned=datetime.now(timezone.utc), timelastmodified=datetime.now(timezone.utc), ) self.assertTrue( Feature.objects.filter( type__cv__name="sequence", type__name="polypeptide", dbxref__accession=acc17, dbxref__db__name__in=["GFF_SOURCE", "FASTA_SOURCE"], ).exists()) # ######################## # store feature groups: filename = "groups.txt" organism, created = Organism.objects.get_or_create( abbreviation="multispecies", genus="multispecies", species="multispecies", common_name="multispecies", ) source = "null" soterm = "polypeptide" test_orthology_loader = FeatureLoader(source=source, filename=filename) # #################### # test store groups group1_name = "machado0001" members1 = [ "Aqcoe0131s0001.1.v3.1", "Bradi0180s00100.1.v3.1", "Bradi2g20400.1.v3.1", "Ciclev10013963m.v1.0", "DCAR_032223.v1.0.388", "UnknownProtein.v1.1", ] test_orthology_loader.store_feature_groups(group=members1, soterm=soterm, term=term, value=group1_name) group2_name = "machado0002" members2 = [ "Eucgr.L02820.1.v2.0", "mrna13067.1-v1.0-hybrid.v1.1", "Ciclev10013970m.v1.0", "DCAR_031986.v1.0.388", ] test_orthology_loader.store_feature_groups(group=members2, soterm=soterm, term=term, value=group2_name) group3_name = "machado0003" members3 = [ "Glyma.10G030500.1.Wm82.a2.v1", "Glyma.10G053100.1.Wm82.a2.v1", "DCAR_032182.v1.0.388", ] test_orthology_loader.store_feature_groups(group=members3, soterm=soterm, term=term, value=group3_name) group4_name = "machado0004" members4 = ["Glyma.10G008400.1.Wm82.a2.v1", "", "UnknownProtein.v1.2"] test_orthology_loader.store_feature_groups(group=members4, soterm=soterm, term=term, value=group4_name) group5_name = "machado0005" members5 = ["DCAR_000323.v1.0.388", "Kaladp0598s0002.1.v1.1"] test_orthology_loader.store_feature_groups(group=members5, soterm=soterm, term=term, value=group5_name) group6_name = "machado0006" members6 = ["Kaladp0598s0001.1.v1.1", "UnknownProtein.v1.3"] test_orthology_loader.store_feature_groups(group=members6, soterm=soterm, term=term, value=group6_name) group7_name = "machado0007" members7 = ["UnknownProtein.v1.4"] test_orthology_loader.store_feature_groups(group=members7, soterm=soterm, term=term, value=group7_name) # ###check if relationships exist### # in a group (machado0001 and machado0005) self.assertTrue( Featureprop.objects.filter(feature_id=feature1.feature_id, type_id=term, value=group1_name).exists()) self.assertTrue( Featureprop.objects.filter(feature_id=feature9.feature_id, type_id=term, value=group1_name).exists()) self.assertTrue( Featureprop.objects.filter(feature_id=feature4.feature_id, type_id=term, value=group1_name).exists()) # another example group5 self.assertTrue( Featureprop.objects.filter(feature_id=feature10.feature_id, type_id=term, value=group5_name).exists()) self.assertTrue( Featureprop.objects.filter(feature_id=feature17.feature_id, type_id=term, value=group5_name).exists()) # another example: # ###check if a relationship does not exist### # between features from different groups (machado0004 and machado0003) self.assertFalse( Featureprop.objects.filter(feature_id=feature16.feature_id, type_id=term, value=group6_name).exists()) self.assertFalse( Featureprop.objects.filter(feature_id=feature4.feature_id, type_id=term, value=group2_name).exists()) self.assertFalse( Featureprop.objects.filter(feature_id=feature14.feature_id, type_id=term, value=group1_name).exists())
def test_load_coexpression_clusters(self): """Run tests of load_coexpression_pairs.""" """Load 'mcl.clusters.txt' output result file from LSTrAP. The 'mcl.clusters.txt' is a tab separated, headless file and have the format as follows (each line is a cluster): ath_coexpr_mcl_1: AT3G18715.1.TAIR10 AT3G08790.1.TAIR10 AT5G42230.1.TAIR10 ath_coexpr_mcl_1: AT1G27040.1.TAIR10 AT1G71692.1.TAIR10 ath_coexpr_mcl_1: AT5G24750.1.TAIR10 ... and so on. The features need to be loaded previously or won't be registered.""" # register multispecies organism test_organism = Organism.objects.create( abbreviation="multispecies", genus="multispecies", species="multispecies", common_name="multispecies", ) # creating test SO term test_db = Db.objects.create(name="SO") test_cv = Cv.objects.create(name="sequence") # creating test RO term test_db2 = Db.objects.create(name="RO") test_cv2 = Cv.objects.create(name="relationship") test_cv3 = Cv.objects.create(name="feature_property") # test_dbxref = Dbxref.objects.create(accession='123456', db=test_db) test_dbxref2 = Dbxref.objects.create(accession="028", db=test_db) test_dbxref3 = Dbxref.objects.create(accession="135", db=test_db) test_dbxref4 = Dbxref.objects.create(accession="246", db=test_db2) test_dbxref5 = Dbxref.objects.create(accession="579", db=test_db2) test_dbxref6 = Dbxref.objects.create(accession="357", db=test_db) test_dbxref7 = Dbxref.objects.create(accession="468", db=test_db) Cvterm.objects.create( name="mRNA", cv=test_cv, dbxref=test_dbxref3, is_obsolete=0, is_relationshiptype=0, ) # Cvterm.objects.create( # name='polypeptide', cv=test_cv, dbxref=test_dbxref, # is_obsolete=0, is_relationshiptype=0) # register features. Cvterm.objects.create( name="contained in", cv=test_cv2, dbxref=test_dbxref2, is_obsolete=0, is_relationshiptype=1, ) Cvterm.objects.create( name="correlated with", cv=test_cv2, dbxref=test_dbxref4, is_obsolete=0, is_relationshiptype=1, ) term = Cvterm.objects.create( name="coexpression group", cv=test_cv3, dbxref=test_dbxref5, is_obsolete=0, is_relationshiptype=0, ) test_term = Cvterm.objects.create( name="polypeptide", cv=test_cv, dbxref=test_dbxref6, is_obsolete=0, is_relationshiptype=0, ) Cvterm.objects.create( name="protein_match", cv=test_cv, dbxref=test_dbxref7, is_obsolete=0, is_relationshiptype=0, ) db = Db.objects.create(name="FASTA_SOURCE") test_featurename1 = "AT3G18715.1.TAIR10" dbxref1 = Dbxref.objects.create(db=db, accession=test_featurename1) test_feature1 = Feature.objects.create( dbxref=dbxref1, organism=test_organism, uniquename=test_featurename1, is_analysis=False, type_id=test_term.cvterm_id, is_obsolete=False, timeaccessioned=datetime.now(), timelastmodified=datetime.now(), ) test_featurename2 = "AT3G08790.1.TAIR10" dbxref2 = Dbxref.objects.create(db=db, accession=test_featurename2) test_feature2 = Feature.objects.create( dbxref=dbxref2, organism=test_organism, uniquename=test_featurename2, is_analysis=False, type_id=test_term.cvterm_id, is_obsolete=False, timeaccessioned=datetime.now(), timelastmodified=datetime.now(), ) test_featurename3 = "AT5G42230.1.TAIR10" dbxref3 = Dbxref.objects.create(db=db, accession=test_featurename3) test_feature3 = Feature.objects.create( dbxref=dbxref3, organism=test_organism, uniquename=test_featurename3, is_analysis=False, type_id=test_term.cvterm_id, is_obsolete=False, timeaccessioned=datetime.now(), timelastmodified=datetime.now(), ) test_featurename4 = "AT1G27040.1.TAIR10" dbxref4 = Dbxref.objects.create(db=db, accession=test_featurename4) test_feature4 = Feature.objects.create( dbxref=dbxref4, organism=test_organism, uniquename=test_featurename4, is_analysis=False, type_id=test_term.cvterm_id, is_obsolete=False, timeaccessioned=datetime.now(), timelastmodified=datetime.now(), ) test_featurename5 = "AT1G71692.1.TAIR10" dbxref5 = Dbxref.objects.create(db=db, accession=test_featurename5) test_feature5 = Feature.objects.create( dbxref=dbxref5, organism=test_organism, uniquename=test_featurename5, is_analysis=False, type_id=test_term.cvterm_id, is_obsolete=False, timeaccessioned=datetime.now(), timelastmodified=datetime.now(), ) test_featurename6 = "AT5G24750.1.TAIR10" dbxref6 = Dbxref.objects.create(db=db, accession=test_featurename6) test_feature6 = Feature.objects.create( dbxref=dbxref6, organism=test_organism, uniquename=test_featurename6, is_analysis=False, type_id=test_term.cvterm_id, is_obsolete=False, timeaccessioned=datetime.now(), timelastmodified=datetime.now(), ) # clusters setup test_cluster1_name = "ath_coexpr_mcl_1" test_cluster1 = [ test_featurename1, test_featurename2, test_featurename3 ] test_cluster2_name = "ath_coexpr_mcl_2" test_cluster2 = [test_featurename4, test_featurename5] test_cluster3_name = "ath_coexpr_mcl_3" test_cluster3 = [test_featurename6] test_filename = "mcl.clusters.dummy.txt" source = "null" test_coexpression_loader = FeatureLoader(source=source, filename=test_filename) soterm = "polypeptide" test_coexpression_loader.store_feature_groups(group=test_cluster1, soterm=soterm, term=term, value=test_cluster1_name) test_coexpression_loader.store_feature_groups(group=test_cluster2, soterm=soterm, term=term, value=test_cluster2_name) test_coexpression_loader.store_feature_groups(group=test_cluster3, soterm=soterm, term=term, value=test_cluster3_name) # check entire cluster1 relationships (not in reverse) self.assertTrue( Featureprop.objects.filter(feature_id=test_feature1.feature_id, type=term, value=test_cluster1_name).exists()) self.assertTrue( Featureprop.objects.filter(feature_id=test_feature3.feature_id, type=term, value=test_cluster1_name).exists()) self.assertTrue( Featureprop.objects.filter(feature_id=test_feature2.feature_id, type=term, value=test_cluster1_name).exists()) # check cluster2 relationships self.assertTrue( Featureprop.objects.filter(feature_id=test_feature5.feature_id, type=term, value=test_cluster2_name).exists()) self.assertTrue( Featureprop.objects.filter(feature_id=test_feature4.feature_id, type=term, value=test_cluster2_name).exists()) self.assertFalse( Featureprop.objects.filter(feature_id=test_feature6.feature_id, type=term, value=test_cluster3_name).exists())