def setUp(self): self.client = ENASequenceSearchClient()
class ENASequenceSearchTest(unittest.TestCase): """ Tests for the Python ENA REST API client. """ def setUp(self): self.client = ENASequenceSearchClient() def __verify_results(self, test_case): """ Verify that a predefined accession is present in the response text. """ # check whether the ENA accession is returned data = self.client.search(test_case['sequence'], map_ids=False) self.assertTrue(test_case['accession'] in json.dumps(data)) # check whether the RNAcentral ids are mapped correctly data = self.client.search(test_case['sequence'], map_ids=True) self.assertTrue(test_case['upi'] in json.dumps(data)) def test_find_itself_refseq_sequence(self): """ To test that RefSeq product is searched correctly. """ test_case = { 'sequence': 'UUUAAAUCAUACCAAUUGAACCGAGCCUUGUAGAAACACUAUCACCUACGCAUACCUCUGCUUCUUUUCAUUAACCUGCUAUCCUCUUUACAAAUGGGAUUCUUCACCCACUCCCUUCUUCUAGAUUAGCAAUGCCCUGUUAAGUAAACGAACACGAAAUUCAAAGGGAAACAGGAGCAAUCAUCAUUACCAGCUGCCGUGUUAAGCAUUGCGAAAACGCUCACGAUUCACAGAAAAAUCCAUGCUGUUCUUUGAAGGCAUUCAAGCCUUAAUAGCUAGCUGGAUGAAUGUUUAACUUCUAGGCCAGGCACUACUCUGUCCCAACAAUAAGCCCUGUACAUUGGGAAAGGUGCCGAGACAUGAACUUUGGUCUUCUCUGCAAUCCAUCUGGAGCAUUCACUGACAACAUCGACUUUGAAGUUGCACUGACCUGGCCAGCCCUGCCACUUACCAGGUUGGCUCUGUAUGGCUAAGCGUUUUCUCCUAAAAUCCCUUGAAAACUGUGAGAAGACCAUAAGAAGAUCAUAUCUUUAAUUCUAUUUCACAAGUCACACAAUAUUCCAAUCAAAUACAGAUGGUUGAGAAAAGUCAUCCAUCUUCCCUCCCCACCCUCCCACAGCCCCUCAACCACUGCCCUGAAACUUAUAUGCUGUUAUCCGCAGCUCCAUCUGGAGCAUCACAGCUACUGUCAACCCUGACGCUCUUUCUGAAAAAACACCGGAUGGACAUCAGAACUAUUUCUUUAAGGAUGUUACUGAGCCACACAGGAAAACUUGCCUUAUGAUUUUGAAUGCACGGAUCUGAUUUGACUAAACAUGAUAACUAGAGAAUCACCCAAUCUACUCCCAUUUUCAACUCUAAAUCAUCAGAGUGUCUCAAAUCCAAAGCACACACAGACCAGCCUGGCCAACACGGUGAAACUCCACCCCUACUAAAAGUAUAAAAAUUAUCCAGGUGUGGUGGCGGGCGCCUGUAAUCCAAGCUACUUGGGAGUCUGGAGGCAGGAGAAUCCCUUGAACCUGGGAGAUGGAGGUUGCAGUGAGCAGAGAUCACACCACCGCACUCUAGCCUGGGCCACAAAUCAACAACAACAACAACAACAAAAAACAAAGCGCACACAGAGACUGAGGUCCUCUUUGGCAUUGAGAAGAUGGCUAUGCAAGUCCCAACUAGCAAGUGCAAACUUCCCAGCUUCACUUCUGCCAGUGUCCCUUCACCCCUUCUCAACCCCACUGGGAGGCAGGAGGGUGCUUGACAAUAACAGCCUUGGCAUCACUCUGCCAGGGUGUAAUAGGAACUGUUACAAUUCUGAGAUUCUGUGUAAGCACUGGCCUUUCUGCCUAGAAUGCCUUCUCCUCUCUUUUUUAACUGCAUGCUCCUAUUUAUCUUUCAAAGCCCGGAAAAAAUAACACUGCACACGGGAAAUGCUCCCUUCCUACUGCAGUCAUUUAGAUGACUCUAUGCCAUUCCAUUCAUUUCUCUUUCCUACCACAGAAGUGCUUUGAGAUUUUGGAGUCAGACUGCUUGAACUUGAAUCCUGGCCCUCUCAUCAGAGACUUGACUUAUUUUAGGCAAGUUAUAUAACCAAUUUUACCUCAGUUCCUUACCCAUAAAAUGGGUCUAAUGAGAGUACCUACCACACAGAAUUUUGAUGAAAACUGAAUGAGAUGAAGGCCUUUAAGGCAGUGGUCCCCAACCCUGGGGACACAGACAGGUACCAUUUUGUGGCCUGUUAGGAACUGGGCCACACAGCAGGAGGUGAGCAGUGGGUGAGUGAGAUCAGCGUUAUUUACAGCUGCUCCCCAUUGCUCACCUUACUGCCUGAGCUCCACCUCCUGUCAGAUCAGCAGUGGCAUUAAAUUCUCAUAGCAGCACAAACCCUGUCAUGAACUGCACAUGCGAGGGAUCUAGGUUGUGCGCUCCUUAUGAGAAUCUAAUGCCUAAUGACCUGUCACCGUCUCCCAUCACCCCUAGAUGGGAGUGUCUAGUUGCAGGAAACAAGCUCAGGGCUUCCACUGAUUCUACAUUAUGGUGAGUUGUAUAAUUAUUUCAUUAUAUAAUACAAUGUAAUAAUAAUAGAAACACAGUGCACAACAAAUGUAAUGUGCUUGAAUCAUCCCCAAACCAUCCCAGUCCACGGUCUUCCACAUUUUGUCUUUUCACAAAAUUGUCUUCCACAAAACUGGUCCCUGGUGCCAAAAAGGCUUGGGACCACUGCUUUAAAGCCUUUGCAUAGUGCUUAGAAUUGAGGGGGAAAAAAAAAACAAAAACAAUGUAGCUAGUUGCUACAAUCACUAUAUUGGUGAGUUUCAAAAGGAAAAGAAUUCUGUCCCAUUUAUGCUUGAGCCUUGAGUUGCUAACCAAGCCUGACACAAAAUUACUGUUGAAGGGAUGUGUGAGUCCUAAUUGAAAUGAGGCCUCUUAAGGGAAUUGUGGACCAAACCCCAAGCAGGCAGAAAGCCGUAUCUUAAUUAUUGCAAGUAUUUCAGGCAAGGUGUGGAUGGCCAUUUGAAUUCAAGCAGACUAGGACCUGGGAUGAGAAAGAAGGUGUGUACGUGACUUGAUCUUUGAACUUUAGCUCACCAUCUGGAAGAAGGCUGAGUAUUCUCUGCACUCACAUAGUAGCUAAUGCCUACUCCCCAGCCACCCACAAUUCUUUCUGUAGGAAGGCUCGCUAGAAUACUUUGUGAUAUUGGAUAUUAGUUCCAUAUUCUACUGUGUAUCUUAGUUCAACCAAAUUGUAAUCAUCUGAUAUUUAUUUCUUUUAAUAUAAAUAUAAGUAUAUUAAGUCUUGG', # pylint: disable=line-too-long 'accession': 'NR_108049.1:1..2795:ncRNA', 'upi': 'URS000075ADFF', } self.__verify_results(test_case) def test_find_itself_rdp_sequence(self): """ To test that RDP product is searched correctly. """ test_case = { 'sequence': 'UAAUUUGAGAGUUUGAUCCUGGCUCAGGACGAACGCUGGCGGCGUGCCUAAUACAUGCAAGUCGAACGAACUCUGGUAUUGAUUGGUGCUUGCAUCAUGAUUUACAUUUGAGUGAGUGGCGAACUGGUGAGUAACACGUGGGAAACCUGCCCAGAAGCGGGGGAUAACACCUGGAAACAGAUGCUAAUACCGCAUAACAACUUGGACCGCAUGGUCCGAGUUUGAAAGAUGGCUUCGGCUAUCACUUUUGGAUGGUCCCGCGGCGUAUUAGCUAGAUGGUGAGGUAACGGCUCACCAUGGCAAUGAUACGUAGCCGACCUGAGAGGGUAAUCGGCCACAUUGGGACUGAGACACGGCCCAAACUCCUACGGGAGGCAGCAGUAGGGAAUCUUCCACAAUGGACGAAAGUCUGAUGGAGCAACGCCGCGUGAGUGAAGAAGGGUUUCGGCUCGUAAAACUCUGUUGUUAAAGAAGAACAUAUCUGAGAGUAACUGUUCAGGUAUUGACGGUAUUUAACCAGAAAGCCACGGCUAACUACGUGCCAGCAGCCGCGGUAAUACGUAGGUGGCAAGCGUUGUCCGGAUUUAUUGGGCGUAAAGCGAGCGCAGGCGGUUUUUUAAGUCUGAUGUGAAAGCCUUCGGCUCAACCGAAGAAGUGCAUCGGAAACUGGGAAACUUGAGUGCAGAAGAGGACAGUGGAACUCCAUGUGUAGCGGUGAAAUGCGUAGAUAUAUGGAAGAACACCAGUGGCGAAGGCGGCUGUCUGGUCUGUAACUGACGCUGAGGCUCGAAAGUAUGGGUAGCAAACAGGAUUAGAUACCCUGGUAGUCCAUACCGUAAACGAUGAAUGCUAAGUGUUGGAGGGUUUCCGCCCUUCAGUGCUGCAGCUAACGCAUUAAGCAUUCCGCCUGGGGAGUACGGCCGCAAGGCUGAAACUCAAAGGAAUUGACGGGGGCCCGCACAAGCGGUGGAGCAUGUGGUUUAAUUCGAAGCUACGCGAAGAACCUUACCAGGUCUUGACAUACUAUGCAAAUCUAAGAGAUUAGACGUUCCCUUCGGGGACAUGGAUACAGGUGGUGCAUGGUUGUCGUCAGCUCGUGUCGUGAGAUGUUGGGUUAAGUCCCGCAACGAGCGCAACCCUUAUUAUCAGUUGCCAGCAUUAAGUUGGGCACUCUGGUGAGACUGCCGGUGACAAACCGGAGGAAGGUGGGGAUGACGUCAAAUCAUCAUGCCCCUUAUGACCUGGGCUACACACGUGCUACAAUGGAUGGUACAACGAGUUGCGAACUCGCGAGAGUAAGCUAAUCUCUUAAAGCCAUUCUCAGUUCGGAUUGUAGGCUGCAACUCGCCUACAUGAAGUCGGAAUCGCUAGUAAUCGCGGAUCAGCAUGCCGCGGUGAAUACGUUCCCGGGCCUUGUACACACCGCCCGUCACACCAUGAGAGUUUGUAACACCCAAAGUCGGUGGGGUAACCUUUUAGGAACCAGCCGCCUAAGGUGGGACAGAUGAUUAGGGUGAAGUCGUAACAAGGUAGCCGUAGGAGAACCUGCGGCUGGAUCACCUCCUUU', # pylint: disable=line-too-long 'accession': 'CP006033.1:2356030..2357596:RDP', 'upi': 'URS000078956F', } self.__verify_results(test_case) def test_find_itself_rfam_sequence(self): """ To test that RFAM product is searched correctly. """ test_case = { 'sequence': 'AACTACATTATCGATGTATAGATTCACCCGCGAGATGATGTGGCTGTTTCACCTAGGACGAGGACATGGCATCCTATTACCAGCCATCGCACGAAATTAATATGATGCCACGTCCTCATACTAGATGAAACAACCACGTCGTCATATCACAAGTGAATCCATTCATCGATAGTGTGGTT', # pylint: disable=line-too-long 'accession': 'AAAA02000007.1:34766..34944:rfam', 'upi': 'URS000063CC7F', } self.__verify_results(test_case) def test_find_itself_minimum_length(self): """ 20 nucleotides, minimum length """ test_case = { 'sequence': 'ACCAGUGUUCAGACGGUGGA', 'accession': 'DQ930848.1:1..20:misc_RNA', 'upi': 'URS00003989D1', } self.__verify_results(test_case) def test_find_itself_interface_example_1(self): """ This sequence is used as an example in the user interface. """ test_case = { 'sequence': 'UGAGGUAGUAGAUUGUAUAGUU', 'accession': 'HAAO01000006.1:1..22:ncRNA', 'upi': 'URS00003B7674', } self.__verify_results(test_case) def test_find_itself_interface_example_2(self): """ This sequence is used as an example in the user interface. """ test_case = { 'sequence': 'UGCCUGGCGGCCGUAGCGCGGUGGUCCCACCUGACCCCAUGCCGAACUCAGAAGUGAAACGCCGUAGCGCCGAUGGUAGUGUGGGGUCUCCCCAUGCGAGAGUAGGGAACUGCCAGGCAU', 'accession': 'CU928163.2:4660940..4661059:rRNA', 'upi': 'URS0000049E57', } self.__verify_results(test_case) def test_find_itself_long_sequence(self): """ 4000 nucleotides long. """ test_case = { 'sequence': 'GGGGUCUCGGGUCACGUGACAGGCGGCCCAAUCGCACUCGCGCGACGGAAAGCGCCACGGACGUCGGAGGCCCAGGGGGCGGGGCUCCCGAGCUCCGCUCUUUCGUGGUCGGGCGGCGGACCGCACUGUAUUUUUUCCUUCCGGGGGCGGCGGAGCCCAGGGCUAUCCCGGCCUCCGCUCAUACCCGGAGGGCCGGCAGGCGUUCAGUCCUCCAGCCGGUGAGGCUCGGGCCGGGGUGUCGGGACCGCCUGAACACGCGGGCUCUGGGAGCUUCAGGGACCAGGGAGCCACCUCGGCCGAGUUGCGUCGCAGACUACAGCUCCCAGCAUGCGCCGCCGCUCCCAGCAUGCACCUUCCUCCCGAAACGCGUCUCUGCUUCCGGCGCUCUGCUGCGGAGGCCGUGGCCGCGGGUAGUUGGGAGGAACCGAGAUUUACGCUUGGUAAGGCAAGUUGCGAGCUGUCCGGCGCCGGUCGAGUUCCUGCCGCCGUCGUCGUCAGGCAGGGGAGAAGGGGGCCUCAACCCCUCUAGUGACAGCUGUUUGCUACCUAAUAGGGCUUUUCAUCCCACCGGGCCCCAGGGCCUUCGUUAGGAGCCCAGCAGGCUCAACUUCUUGCUGUGGUUCUGGAAAAGGGAGUGACCACCUGGCUCAACACCUCUCUCUGUGAUGUGUUUGGGAGUUUUGGGAAAUGAGACGGCUCCGAGGGAAGAGCUUGAGGGAGCGGCGUCGCACUCGUUCGACCUUCCCGGGCCUGGGCUUUGUUUCUAGGCAUUUUAGGUUGAACGCUCUACAUCUUAACUGGGGGCAGGGGAGGUGGCCAGAGCAUCCCGCUGAGCGUUUUCCGAUUCCCCAGAUGGCCAGGCACCUGGUCCUGGUGGCUGGACAGUGACCCCGUGGACGCACAUUUACAGCUAUAGCCAUUCAGUGCCGCGGGGAGGUGAGGAUAGUGAUCCUGGGACCUGCUCGAGGAUUCACCCUUGCCCCAAGAACCUGUUCCAUUCCCAGGAAUGAAGGCGGUCAGGCAGGGGAGGAGAAGGGGGCCUCAACUCUUCUAGUGACAGCAGUUUGCCACCUAAUAGAGCUUUUCAGAUUUUGCCUCCUCAGGCCAUUUUACUCAGCCUCGGACUAUCAAGGAUGGUCACAUUGAAGCUGUUUUUCUGCAGUCAGGAGCGAAAAGUCCCGGCUGUUGAAGGAGAAACUGAAUCUGGUUCAGGAGUCCCAGGUUCCUCCCUCUGAGAGGCCAGGUGGGGCCUGCGUGAGUAGCAGUUGUUCAGGUGGCAGGACACUGCUGUUUUCAUCCCACCUGGCCCCAGGCCCCUGAUUAGGGGCCCAGAGUGCUUAUGUACUUGCCUCGGUCUGAGAAAGGGAGUGACUGCAUAGCCCAACACCUGUGGGAUGCCUCACUGCCCAGAUGUUUCAUCUCCGGGAUGCUUCAUUGCCCAUUCAGCACCCUCUAUGGUGCUGACUCUUCCGGAAGAUGUUUCUGAUUCCUUGCUAGGCUGGUGGUUGCACCAUAGCUGAGAGGACUCAAGAAGAGCCUGGUCUCAGCUUCACCUAGGAGUCCCGGAGGAGUAAGAAACACGUAUCUUUCCUGUUCUGGGCACAUAUGGGUGGGUAGCAGAGCUGAGGCUAGCUGAGGAUCCCGACUCUCCUUUGGGAGCCUUUGUUGUGCCGCUCUCCCAGGCUGAUCAGAUCUGGAGAGCUAACAGCUUCCUGUGGCCACAUCUGUGUCCAAGGCUGGGCCCAUGCCUGUAGCCAGAUUGCCAGGAUCUGGAAGGGGCCAAGAGACAGCUGGUGCUGGGUAGGCAGCAGCCCUGUGUCAACCUGCCCCCACUAUUACCCCAUGCUGUGAUUUGCAUGUGGUCUGCCCCUGCCCAAAAUGGUAUUGAAAUUUGAGCCUCAAUGAGGCAGUGUUAGGAGGUGGUGCCUAGUAGGAGGAGUUUGGGUAAUAGGGGUGGAUCCCUCAUGGAUAGGUUAGUGUCCUUUGUGGAGGGGUGAGUUCCCAUGAGAGCUGGUUAGAGAGUCAGCCUUCCUGCGGUUGUCUCUUGCUUCCUCUCUCGCCAUAUGGCCACGUAAUCUCUUUGUGCAUGCCUCUCCCCUUCUACUUGCUGCCUUGAGUUGAAGUAGCAUGAGGCCCUCACCAGGUGCAGCUGCCCAAUCUUGAAAUUUCCACCAGAAUUUUGAGCCAAAUAAACCUGUUUUGCUUUUUUAAAAAAAUAAAUUCCCCCACCUUGGCUGGGCGCAGUGGCUCACGCCUGUAAUCCCAGCACUUUGGGAGGCCGAGGCGGGCGGAUCACGAGGUCAGAUCGAGACCAUCUUGGCUAACACGGUGAAACCCCAUCUCUACUGAAAAAAAAAAAGAAACAAAAAAAUUAGCCAGGUGUGGUGGCGGGCACCUGUAGUCCCAGCCCCUCACUCGGGAGGCUGAUUGAGGCAGGAGAAUGGUGUGAACCCGGGAGGCGGAGCUUGCAGUGAGCCCAGAUCGCACCACUGCACUCCAGCCUGGGCGACAGAGCGAGACUCCGUCUCUAAAUAAAUAAAUAAAUAAAUAAAACAAACCCAACCUCAGGUAUAGCAGUGUGAAACAGACUAAGACAUUCCACAUGCCCUGUGGUCCCAUCUGCUACCCCAGGGUGCAAAGAUGUUCCCUCAGCCCUGAAGAAUGACAUUCCCCCCGGCUCCUGGGAUAUCUGGAGGGGUUGUAAGCAGCUUGGGUUGGUGAGAUAAGGAGUUUGGGGGGCAGCUGAUUCAUGACCCUGGCCUCCUCAACUGCAGGCUCUUGGUCUGAAGUACUGUAAUUAAAGUAUGAGAGCCUCGGGGCCCUCACUUCAAGGAGGGAAGAGCAUCCCCAUGCCUCAGCGUUUGGGGAUUGUAGGGAGAUGAGAGUCCUUCAGGUGGGACUAGUUCCCGCCAUGACCCCACUGCUGGCCAGUGGCCUGAAACGCAUCUGACCACUUCUCAGGUUCAUGGGUGUUGAGGAGGAGCCCUGUGGAAUCAACCCUGUCUGCCUCCUCUUAUCCUGCCACUCCUCUUGCUCUGUCUGGAUGACUGCCCUUGUUUUUCAAGGGAAUGUUCCCUGUCUUCCUCAGCCAGGAUUUUUUCUGAACUUGACAUCUCCGUUUGUUCAGGGGGCAAUCAUUGGGCACUUCACUGUGCUGGUCCUUGCAUUCUCAUGGAGAUGCAGAGAUUAAAAAUUAGUAUCUUGUCCACAUACUGCCCAGAGUUAGCAAGGAUUGCUUUUCUGUGGAUUUGUCUCAGGUCGGGCACAGUGGGGGUAGGGUCCUUCUCGAACCUUUUCCUAGCCUAAAGGUUCCAGCUGAAUCUUCCCAGGCAGGGCUGAAACAGGAACCAUUUUAGGCUUUGCUGCAACCCAUGGUCAGUUCUCCAAGAAAAGUGAAGAGGGUUCCACCUGGGGCAGCCCUCAAGGGCUCAGAGGGCCAAAACACACGUACAACAUGUUGAGACACUGAGUUUGUGCGAUCCCCACACAUCUCAGCAGUGAGUAUUUCUGCCUCAUUUUACCGAUGAGGAACCUGAGCUUCAAAGGGAAGAGGUGACAGCUCAGGACCACACAGCUGUAGGUAGGAGGCAGGAAAAUAGGGUCUGAGUGCAGGGAACAUAGGCUGAUUCACACUUCAGUUAUGAUAGGAAAUACCUUCUCCAUAGGACAUAGGCCAAGCAAAUGACUUUGUAACUUCAUCCUCUCCAUCUGCAUAACGUGUGCCCCAAGUAACCAAUGGAAUCACCUAGAGGGUGUUUAAACUCUCAGAAGUUCUGUAACAGGCUCUCCAUCUACAUAACGUGUGCCCCAAGUAACCAAUGGAAUCACCUAGAGGGUAUUUAAACUCUCUGAAGUUCUGUAACAGGGCUUUUGUGCUCCUAUGCUCAGGCUCACCCCCACACUGUGGAGUGUACUUUCAUUUUCAAUAAAUCCCUUCAUUCCUUCUUUGCUCUCUGUGUGUGUUUUGUCCAAUUCUUUAUUUAAGACGCCAAGAACCUGG', # pylint: disable=line-too-long 'accession': 'HG495355.1:1..4000:ncRNA', 'upi': 'URS000016DD3F', } self.__verify_results(test_case) def test_too_short(self): """ Should raise an error. """ sequence = 'A' * 4 with self.assertRaises(InvalidSequenceError) as context_manager: self.client.submit_query(sequence) exc = context_manager.exception self.assertEqual(exc.message, 'Invalid sequence') def test_get_non_existing_session_id(self): """ Should raise an error. """ job_id = '1234' * 6 jsession_id = 'ABCD' * 6 with self.assertRaises(StatusNotFoundError) as context_manager: self.client.get_status(job_id, jsession_id) exc = context_manager.exception
class ENASequenceSearchTest(unittest.TestCase): """ Tests for the Python ENA REST API client. """ def setUp(self): self.client = ENASequenceSearchClient() def __verify_results(self, test_case): """ Verify that a predefined accession is present in the response text. """ # check whether the ENA accession is returned data = self.client.search(test_case['sequence'], map_ids=False) self.assertTrue(test_case['accession'] in json.dumps(data)) # check whether the RNAcentral ids are mapped correctly data = self.client.search(test_case['sequence'], map_ids=True) self.assertTrue(test_case['upi'] in json.dumps(data)) def test_find_itself_refseq_sequence(self): """ To test that RefSeq product is searched correctly. """ test_case = { 'sequence': 'UUUAAAUCAUACCAAUUGAACCGAGCCUUGUAGAAACACUAUCACCUACGCAUACCUCUGCUUCUUUUCAUUAACCUGCUAUCCUCUUUACAAAUGGGAUUCUUCACCCACUCCCUUCUUCUAGAUUAGCAAUGCCCUGUUAAGUAAACGAACACGAAAUUCAAAGGGAAACAGGAGCAAUCAUCAUUACCAGCUGCCGUGUUAAGCAUUGCGAAAACGCUCACGAUUCACAGAAAAAUCCAUGCUGUUCUUUGAAGGCAUUCAAGCCUUAAUAGCUAGCUGGAUGAAUGUUUAACUUCUAGGCCAGGCACUACUCUGUCCCAACAAUAAGCCCUGUACAUUGGGAAAGGUGCCGAGACAUGAACUUUGGUCUUCUCUGCAAUCCAUCUGGAGCAUUCACUGACAACAUCGACUUUGAAGUUGCACUGACCUGGCCAGCCCUGCCACUUACCAGGUUGGCUCUGUAUGGCUAAGCGUUUUCUCCUAAAAUCCCUUGAAAACUGUGAGAAGACCAUAAGAAGAUCAUAUCUUUAAUUCUAUUUCACAAGUCACACAAUAUUCCAAUCAAAUACAGAUGGUUGAGAAAAGUCAUCCAUCUUCCCUCCCCACCCUCCCACAGCCCCUCAACCACUGCCCUGAAACUUAUAUGCUGUUAUCCGCAGCUCCAUCUGGAGCAUCACAGCUACUGUCAACCCUGACGCUCUUUCUGAAAAAACACCGGAUGGACAUCAGAACUAUUUCUUUAAGGAUGUUACUGAGCCACACAGGAAAACUUGCCUUAUGAUUUUGAAUGCACGGAUCUGAUUUGACUAAACAUGAUAACUAGAGAAUCACCCAAUCUACUCCCAUUUUCAACUCUAAAUCAUCAGAGUGUCUCAAAUCCAAAGCACACACAGACCAGCCUGGCCAACACGGUGAAACUCCACCCCUACUAAAAGUAUAAAAAUUAUCCAGGUGUGGUGGCGGGCGCCUGUAAUCCAAGCUACUUGGGAGUCUGGAGGCAGGAGAAUCCCUUGAACCUGGGAGAUGGAGGUUGCAGUGAGCAGAGAUCACACCACCGCACUCUAGCCUGGGCCACAAAUCAACAACAACAACAACAACAAAAAACAAAGCGCACACAGAGACUGAGGUCCUCUUUGGCAUUGAGAAGAUGGCUAUGCAAGUCCCAACUAGCAAGUGCAAACUUCCCAGCUUCACUUCUGCCAGUGUCCCUUCACCCCUUCUCAACCCCACUGGGAGGCAGGAGGGUGCUUGACAAUAACAGCCUUGGCAUCACUCUGCCAGGGUGUAAUAGGAACUGUUACAAUUCUGAGAUUCUGUGUAAGCACUGGCCUUUCUGCCUAGAAUGCCUUCUCCUCUCUUUUUUAACUGCAUGCUCCUAUUUAUCUUUCAAAGCCCGGAAAAAAUAACACUGCACACGGGAAAUGCUCCCUUCCUACUGCAGUCAUUUAGAUGACUCUAUGCCAUUCCAUUCAUUUCUCUUUCCUACCACAGAAGUGCUUUGAGAUUUUGGAGUCAGACUGCUUGAACUUGAAUCCUGGCCCUCUCAUCAGAGACUUGACUUAUUUUAGGCAAGUUAUAUAACCAAUUUUACCUCAGUUCCUUACCCAUAAAAUGGGUCUAAUGAGAGUACCUACCACACAGAAUUUUGAUGAAAACUGAAUGAGAUGAAGGCCUUUAAGGCAGUGGUCCCCAACCCUGGGGACACAGACAGGUACCAUUUUGUGGCCUGUUAGGAACUGGGCCACACAGCAGGAGGUGAGCAGUGGGUGAGUGAGAUCAGCGUUAUUUACAGCUGCUCCCCAUUGCUCACCUUACUGCCUGAGCUCCACCUCCUGUCAGAUCAGCAGUGGCAUUAAAUUCUCAUAGCAGCACAAACCCUGUCAUGAACUGCACAUGCGAGGGAUCUAGGUUGUGCGCUCCUUAUGAGAAUCUAAUGCCUAAUGACCUGUCACCGUCUCCCAUCACCCCUAGAUGGGAGUGUCUAGUUGCAGGAAACAAGCUCAGGGCUUCCACUGAUUCUACAUUAUGGUGAGUUGUAUAAUUAUUUCAUUAUAUAAUACAAUGUAAUAAUAAUAGAAACACAGUGCACAACAAAUGUAAUGUGCUUGAAUCAUCCCCAAACCAUCCCAGUCCACGGUCUUCCACAUUUUGUCUUUUCACAAAAUUGUCUUCCACAAAACUGGUCCCUGGUGCCAAAAAGGCUUGGGACCACUGCUUUAAAGCCUUUGCAUAGUGCUUAGAAUUGAGGGGGAAAAAAAAAACAAAAACAAUGUAGCUAGUUGCUACAAUCACUAUAUUGGUGAGUUUCAAAAGGAAAAGAAUUCUGUCCCAUUUAUGCUUGAGCCUUGAGUUGCUAACCAAGCCUGACACAAAAUUACUGUUGAAGGGAUGUGUGAGUCCUAAUUGAAAUGAGGCCUCUUAAGGGAAUUGUGGACCAAACCCCAAGCAGGCAGAAAGCCGUAUCUUAAUUAUUGCAAGUAUUUCAGGCAAGGUGUGGAUGGCCAUUUGAAUUCAAGCAGACUAGGACCUGGGAUGAGAAAGAAGGUGUGUACGUGACUUGAUCUUUGAACUUUAGCUCACCAUCUGGAAGAAGGCUGAGUAUUCUCUGCACUCACAUAGUAGCUAAUGCCUACUCCCCAGCCACCCACAAUUCUUUCUGUAGGAAGGCUCGCUAGAAUACUUUGUGAUAUUGGAUAUUAGUUCCAUAUUCUACUGUGUAUCUUAGUUCAACCAAAUUGUAAUCAUCUGAUAUUUAUUUCUUUUAAUAUAAAUAUAAGUAUAUUAAGUCUUGG', # pylint: disable=line-too-long 'accession': 'NR_108049.1:1..2795:ncRNA', 'upi': 'URS000075ADFF', } self.__verify_results(test_case) def test_find_itself_rdp_sequence(self): """ To test that RDP product is searched correctly. """ test_case = { 'sequence': 'UAAUUUGAGAGUUUGAUCCUGGCUCAGGACGAACGCUGGCGGCGUGCCUAAUACAUGCAAGUCGAACGAACUCUGGUAUUGAUUGGUGCUUGCAUCAUGAUUUACAUUUGAGUGAGUGGCGAACUGGUGAGUAACACGUGGGAAACCUGCCCAGAAGCGGGGGAUAACACCUGGAAACAGAUGCUAAUACCGCAUAACAACUUGGACCGCAUGGUCCGAGUUUGAAAGAUGGCUUCGGCUAUCACUUUUGGAUGGUCCCGCGGCGUAUUAGCUAGAUGGUGAGGUAACGGCUCACCAUGGCAAUGAUACGUAGCCGACCUGAGAGGGUAAUCGGCCACAUUGGGACUGAGACACGGCCCAAACUCCUACGGGAGGCAGCAGUAGGGAAUCUUCCACAAUGGACGAAAGUCUGAUGGAGCAACGCCGCGUGAGUGAAGAAGGGUUUCGGCUCGUAAAACUCUGUUGUUAAAGAAGAACAUAUCUGAGAGUAACUGUUCAGGUAUUGACGGUAUUUAACCAGAAAGCCACGGCUAACUACGUGCCAGCAGCCGCGGUAAUACGUAGGUGGCAAGCGUUGUCCGGAUUUAUUGGGCGUAAAGCGAGCGCAGGCGGUUUUUUAAGUCUGAUGUGAAAGCCUUCGGCUCAACCGAAGAAGUGCAUCGGAAACUGGGAAACUUGAGUGCAGAAGAGGACAGUGGAACUCCAUGUGUAGCGGUGAAAUGCGUAGAUAUAUGGAAGAACACCAGUGGCGAAGGCGGCUGUCUGGUCUGUAACUGACGCUGAGGCUCGAAAGUAUGGGUAGCAAACAGGAUUAGAUACCCUGGUAGUCCAUACCGUAAACGAUGAAUGCUAAGUGUUGGAGGGUUUCCGCCCUUCAGUGCUGCAGCUAACGCAUUAAGCAUUCCGCCUGGGGAGUACGGCCGCAAGGCUGAAACUCAAAGGAAUUGACGGGGGCCCGCACAAGCGGUGGAGCAUGUGGUUUAAUUCGAAGCUACGCGAAGAACCUUACCAGGUCUUGACAUACUAUGCAAAUCUAAGAGAUUAGACGUUCCCUUCGGGGACAUGGAUACAGGUGGUGCAUGGUUGUCGUCAGCUCGUGUCGUGAGAUGUUGGGUUAAGUCCCGCAACGAGCGCAACCCUUAUUAUCAGUUGCCAGCAUUAAGUUGGGCACUCUGGUGAGACUGCCGGUGACAAACCGGAGGAAGGUGGGGAUGACGUCAAAUCAUCAUGCCCCUUAUGACCUGGGCUACACACGUGCUACAAUGGAUGGUACAACGAGUUGCGAACUCGCGAGAGUAAGCUAAUCUCUUAAAGCCAUUCUCAGUUCGGAUUGUAGGCUGCAACUCGCCUACAUGAAGUCGGAAUCGCUAGUAAUCGCGGAUCAGCAUGCCGCGGUGAAUACGUUCCCGGGCCUUGUACACACCGCCCGUCACACCAUGAGAGUUUGUAACACCCAAAGUCGGUGGGGUAACCUUUUAGGAACCAGCCGCCUAAGGUGGGACAGAUGAUUAGGGUGAAGUCGUAACAAGGUAGCCGUAGGAGAACCUGCGGCUGGAUCACCUCCUUU', # pylint: disable=line-too-long 'accession': 'CP006033.1:2356030..2357596:RDP', 'upi': 'URS000078956F', } self.__verify_results(test_case) def test_find_itself_rfam_sequence(self): """ To test that RFAM product is searched correctly. """ test_case = { 'sequence': 'AACTACATTATCGATGTATAGATTCACCCGCGAGATGATGTGGCTGTTTCACCTAGGACGAGGACATGGCATCCTATTACCAGCCATCGCACGAAATTAATATGATGCCACGTCCTCATACTAGATGAAACAACCACGTCGTCATATCACAAGTGAATCCATTCATCGATAGTGTGGTT', # pylint: disable=line-too-long 'accession': 'AAAA02000007.1:34766..34944:rfam', 'upi': 'URS000063CC7F', } self.__verify_results(test_case) def test_find_itself_minimum_length(self): """ 20 nucleotides, minimum length """ test_case = { 'sequence': 'ACCAGUGUUCAGACGGUGGA', 'accession': 'DQ930848.1:1..20:misc_RNA', 'upi': 'URS00003989D1', } self.__verify_results(test_case) def test_find_itself_interface_example_1(self): """ This sequence is used as an example in the user interface. """ test_case = { 'sequence': 'UGAGGUAGUAGAUUGUAUAGUU', 'accession': 'HAAO01000006.1:1..22:ncRNA', 'upi': 'URS00003B7674', } self.__verify_results(test_case) def test_find_itself_interface_example_2(self): """ This sequence is used as an example in the user interface. """ test_case = { 'sequence': 'UGCCUGGCGGCCGUAGCGCGGUGGUCCCACCUGACCCCAUGCCGAACUCAGAAGUGAAACGCCGUAGCGCCGAUGGUAGUGUGGGGUCUCCCCAUGCGAGAGUAGGGAACUGCCAGGCAU', 'accession': 'CU928163.2:4660940..4661059:rRNA', 'upi': 'URS0000049E57', } self.__verify_results(test_case) def test_find_itself_long_sequence(self): """ 4000 nucleotides long. """ test_case = { 'sequence': 'GGGGUCUCGGGUCACGUGACAGGCGGCCCAAUCGCACUCGCGCGACGGAAAGCGCCACGGACGUCGGAGGCCCAGGGGGCGGGGCUCCCGAGCUCCGCUCUUUCGUGGUCGGGCGGCGGACCGCACUGUAUUUUUUCCUUCCGGGGGCGGCGGAGCCCAGGGCUAUCCCGGCCUCCGCUCAUACCCGGAGGGCCGGCAGGCGUUCAGUCCUCCAGCCGGUGAGGCUCGGGCCGGGGUGUCGGGACCGCCUGAACACGCGGGCUCUGGGAGCUUCAGGGACCAGGGAGCCACCUCGGCCGAGUUGCGUCGCAGACUACAGCUCCCAGCAUGCGCCGCCGCUCCCAGCAUGCACCUUCCUCCCGAAACGCGUCUCUGCUUCCGGCGCUCUGCUGCGGAGGCCGUGGCCGCGGGUAGUUGGGAGGAACCGAGAUUUACGCUUGGUAAGGCAAGUUGCGAGCUGUCCGGCGCCGGUCGAGUUCCUGCCGCCGUCGUCGUCAGGCAGGGGAGAAGGGGGCCUCAACCCCUCUAGUGACAGCUGUUUGCUACCUAAUAGGGCUUUUCAUCCCACCGGGCCCCAGGGCCUUCGUUAGGAGCCCAGCAGGCUCAACUUCUUGCUGUGGUUCUGGAAAAGGGAGUGACCACCUGGCUCAACACCUCUCUCUGUGAUGUGUUUGGGAGUUUUGGGAAAUGAGACGGCUCCGAGGGAAGAGCUUGAGGGAGCGGCGUCGCACUCGUUCGACCUUCCCGGGCCUGGGCUUUGUUUCUAGGCAUUUUAGGUUGAACGCUCUACAUCUUAACUGGGGGCAGGGGAGGUGGCCAGAGCAUCCCGCUGAGCGUUUUCCGAUUCCCCAGAUGGCCAGGCACCUGGUCCUGGUGGCUGGACAGUGACCCCGUGGACGCACAUUUACAGCUAUAGCCAUUCAGUGCCGCGGGGAGGUGAGGAUAGUGAUCCUGGGACCUGCUCGAGGAUUCACCCUUGCCCCAAGAACCUGUUCCAUUCCCAGGAAUGAAGGCGGUCAGGCAGGGGAGGAGAAGGGGGCCUCAACUCUUCUAGUGACAGCAGUUUGCCACCUAAUAGAGCUUUUCAGAUUUUGCCUCCUCAGGCCAUUUUACUCAGCCUCGGACUAUCAAGGAUGGUCACAUUGAAGCUGUUUUUCUGCAGUCAGGAGCGAAAAGUCCCGGCUGUUGAAGGAGAAACUGAAUCUGGUUCAGGAGUCCCAGGUUCCUCCCUCUGAGAGGCCAGGUGGGGCCUGCGUGAGUAGCAGUUGUUCAGGUGGCAGGACACUGCUGUUUUCAUCCCACCUGGCCCCAGGCCCCUGAUUAGGGGCCCAGAGUGCUUAUGUACUUGCCUCGGUCUGAGAAAGGGAGUGACUGCAUAGCCCAACACCUGUGGGAUGCCUCACUGCCCAGAUGUUUCAUCUCCGGGAUGCUUCAUUGCCCAUUCAGCACCCUCUAUGGUGCUGACUCUUCCGGAAGAUGUUUCUGAUUCCUUGCUAGGCUGGUGGUUGCACCAUAGCUGAGAGGACUCAAGAAGAGCCUGGUCUCAGCUUCACCUAGGAGUCCCGGAGGAGUAAGAAACACGUAUCUUUCCUGUUCUGGGCACAUAUGGGUGGGUAGCAGAGCUGAGGCUAGCUGAGGAUCCCGACUCUCCUUUGGGAGCCUUUGUUGUGCCGCUCUCCCAGGCUGAUCAGAUCUGGAGAGCUAACAGCUUCCUGUGGCCACAUCUGUGUCCAAGGCUGGGCCCAUGCCUGUAGCCAGAUUGCCAGGAUCUGGAAGGGGCCAAGAGACAGCUGGUGCUGGGUAGGCAGCAGCCCUGUGUCAACCUGCCCCCACUAUUACCCCAUGCUGUGAUUUGCAUGUGGUCUGCCCCUGCCCAAAAUGGUAUUGAAAUUUGAGCCUCAAUGAGGCAGUGUUAGGAGGUGGUGCCUAGUAGGAGGAGUUUGGGUAAUAGGGGUGGAUCCCUCAUGGAUAGGUUAGUGUCCUUUGUGGAGGGGUGAGUUCCCAUGAGAGCUGGUUAGAGAGUCAGCCUUCCUGCGGUUGUCUCUUGCUUCCUCUCUCGCCAUAUGGCCACGUAAUCUCUUUGUGCAUGCCUCUCCCCUUCUACUUGCUGCCUUGAGUUGAAGUAGCAUGAGGCCCUCACCAGGUGCAGCUGCCCAAUCUUGAAAUUUCCACCAGAAUUUUGAGCCAAAUAAACCUGUUUUGCUUUUUUAAAAAAAUAAAUUCCCCCACCUUGGCUGGGCGCAGUGGCUCACGCCUGUAAUCCCAGCACUUUGGGAGGCCGAGGCGGGCGGAUCACGAGGUCAGAUCGAGACCAUCUUGGCUAACACGGUGAAACCCCAUCUCUACUGAAAAAAAAAAAGAAACAAAAAAAUUAGCCAGGUGUGGUGGCGGGCACCUGUAGUCCCAGCCCCUCACUCGGGAGGCUGAUUGAGGCAGGAGAAUGGUGUGAACCCGGGAGGCGGAGCUUGCAGUGAGCCCAGAUCGCACCACUGCACUCCAGCCUGGGCGACAGAGCGAGACUCCGUCUCUAAAUAAAUAAAUAAAUAAAUAAAACAAACCCAACCUCAGGUAUAGCAGUGUGAAACAGACUAAGACAUUCCACAUGCCCUGUGGUCCCAUCUGCUACCCCAGGGUGCAAAGAUGUUCCCUCAGCCCUGAAGAAUGACAUUCCCCCCGGCUCCUGGGAUAUCUGGAGGGGUUGUAAGCAGCUUGGGUUGGUGAGAUAAGGAGUUUGGGGGGCAGCUGAUUCAUGACCCUGGCCUCCUCAACUGCAGGCUCUUGGUCUGAAGUACUGUAAUUAAAGUAUGAGAGCCUCGGGGCCCUCACUUCAAGGAGGGAAGAGCAUCCCCAUGCCUCAGCGUUUGGGGAUUGUAGGGAGAUGAGAGUCCUUCAGGUGGGACUAGUUCCCGCCAUGACCCCACUGCUGGCCAGUGGCCUGAAACGCAUCUGACCACUUCUCAGGUUCAUGGGUGUUGAGGAGGAGCCCUGUGGAAUCAACCCUGUCUGCCUCCUCUUAUCCUGCCACUCCUCUUGCUCUGUCUGGAUGACUGCCCUUGUUUUUCAAGGGAAUGUUCCCUGUCUUCCUCAGCCAGGAUUUUUUCUGAACUUGACAUCUCCGUUUGUUCAGGGGGCAAUCAUUGGGCACUUCACUGUGCUGGUCCUUGCAUUCUCAUGGAGAUGCAGAGAUUAAAAAUUAGUAUCUUGUCCACAUACUGCCCAGAGUUAGCAAGGAUUGCUUUUCUGUGGAUUUGUCUCAGGUCGGGCACAGUGGGGGUAGGGUCCUUCUCGAACCUUUUCCUAGCCUAAAGGUUCCAGCUGAAUCUUCCCAGGCAGGGCUGAAACAGGAACCAUUUUAGGCUUUGCUGCAACCCAUGGUCAGUUCUCCAAGAAAAGUGAAGAGGGUUCCACCUGGGGCAGCCCUCAAGGGCUCAGAGGGCCAAAACACACGUACAACAUGUUGAGACACUGAGUUUGUGCGAUCCCCACACAUCUCAGCAGUGAGUAUUUCUGCCUCAUUUUACCGAUGAGGAACCUGAGCUUCAAAGGGAAGAGGUGACAGCUCAGGACCACACAGCUGUAGGUAGGAGGCAGGAAAAUAGGGUCUGAGUGCAGGGAACAUAGGCUGAUUCACACUUCAGUUAUGAUAGGAAAUACCUUCUCCAUAGGACAUAGGCCAAGCAAAUGACUUUGUAACUUCAUCCUCUCCAUCUGCAUAACGUGUGCCCCAAGUAACCAAUGGAAUCACCUAGAGGGUGUUUAAACUCUCAGAAGUUCUGUAACAGGCUCUCCAUCUACAUAACGUGUGCCCCAAGUAACCAAUGGAAUCACCUAGAGGGUAUUUAAACUCUCUGAAGUUCUGUAACAGGGCUUUUGUGCUCCUAUGCUCAGGCUCACCCCCACACUGUGGAGUGUACUUUCAUUUUCAAUAAAUCCCUUCAUUCCUUCUUUGCUCUCUGUGUGUGUUUUGUCCAAUUCUUUAUUUAAGACGCCAAGAACCUGG', # pylint: disable=line-too-long 'accession': 'HG495355.1:1..4000:ncRNA', 'upi': 'URS000016DD3F', } self.__verify_results(test_case) def test_too_short(self): """ Should raise an error. """ sequence = 'A'*4 with self.assertRaises(InvalidSequenceError) as context_manager: self.client.submit_query(sequence) exc = context_manager.exception self.assertEqual(exc.message, 'Invalid sequence') def test_get_non_existing_session_id(self): """ Should raise an error. """ job_id = '1234'*6 jsession_id = 'ABCD'*6 with self.assertRaises(StatusNotFoundError) as context_manager: self.client.get_status(job_id, jsession_id) exc = context_manager.exception