Exemple #1
0
 def setUp(self):
     self.client = ENASequenceSearchClient()
Exemple #2
0
 def setUp(self):
     self.client = ENASequenceSearchClient()
Exemple #3
0
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
Exemple #4
0
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