def test_sequenceoffers(self):

        validator = Validator.EntityValidator(printError=True)

        # SequenceInformation has wrong type
        ott = Entities.SequenceOffers(sequenceInformation=1, offers=[])
        self.assertFalse(validator.validate(ott))

        # offers has wrong type
        ott = Entities.SequenceOffers(
            sequenceInformation=Entities.SequenceInformation(
                key="1", name="1", sequence="ACTACG"),
            offers=1)
        self.assertFalse(validator.validate(ott))

        # vendorOffers has element with wrong type
        ott = Entities.SequenceOffers(
            sequenceInformation=Entities.SequenceInformation(
                key="1", name="1", sequence="ACTACG"),
            offers=[1])
        self.assertFalse(validator.validate(ott))

        # success
        ott = Entities.SequenceOffers(
            sequenceInformation=Entities.SequenceInformation(
                key="1", name="1", sequence="ACTACG"),
            offers=[Entities.Offer()])
        self.assertTrue(validator.validate(ott))
Exemplo n.º 2
0
    def testDuplicatedSequences(self):
        # Define Sequences for searchOffers call
        sequences = [
            Entities.SequenceInformation("ACTG", "TestSequence", "ts1"),
            Entities.SequenceInformation("ACTG2", "TestSequence2", "ts1")
        ]

        # Define CompositePinger (Object to test)
        p = Pinger.CompositePinger()

        # Pinger with success response
        successPinger = DummyPinger()
        p.registerVendor(
            Entities.VendorInformation(name="DummySuccess",
                                       shortName="DummySucc",
                                       key=1), successPinger)

        # Expect error because auf duplicated keys of sequences
        with self.assertRaises(Entities.InvalidInputError):
            p.searchOffers(sequences)
email = cfg['twist']['email']
password = cfg['twist']['password']
apitoken = cfg['twist']['apitoken']
eutoken = cfg['twist']['eutoken']
username = cfg['twist']['username']
firstname = cfg['twist']['firstname']
lastname = cfg['twist']['lastname']

# Test file which can be successfully valideted by the API.
with open('./examples/twist_pingertest_sequences.json') as json_file:
    data = json.load(json_file)
example_list = []

# Create a list of 'SequenceInformation' objects where each object is a sequence form the test file.
for seq in data:
    seqInfo = Entities.SequenceInformation(seq["sequence"], seq["name"], seq["key"])
    example_list.append(seqInfo)

    

class TestTwistPinger(unittest.TestCase):
    name = "TwistPinger"
    # The configuration's parameters 
    host = "https://twist-api.twistbioscience-staging.com/"
    timeout = 60
    # Object of type TwistClient used in these tests to communicate with the API.
    twist = Twist.Twist(email, password, apitoken, eutoken, username, firstname, lastname, host = host, timeout = timeout)

        # Check the BasePinger Functions methods.
    def test_pingerFunctions(self):
        print ("Start test for the methods searchOffers, getOffers, getVendorMessage, order and clear of " + self.name + ".")
Exemplo n.º 4
0
    def test_getorders(self):
        print("--->>> Start test for: " + TestCompositePinger.name +
              " - getOrders")

        # Intitialize Pinger and DummyPinger
        pingerDummy1 = DummyPinger()
        pingerDummy2 = DummyPinger()
        p = Pinger.CompositePinger()

        # Without search it should return a empty list
        self.assertEqual(0, len(p.getOffers()))
        self.assertFalse(p.isRunning())

        # Start search with 1 Sequence and without vendors
        p.searchOffers(
            [Entities.SequenceInformation("ACTG", "TestSequence", "ts1")])
        self.assertEqual(1, len(p.getOffers()))
        self.assertEqual(0, len(p.getOffers()[0].vendorOffers))

        # search with 2 sequences and 1 vendor
        p.registerVendor(
            Entities.VendorInformation(name="Dummy", shortName="Dummy", key=1),
            pingerDummy1)
        p.searchOffers([
            Entities.SequenceInformation("ACTG", "TestSequence", "ts1"),
            Entities.SequenceInformation("ACTG", "TestSequence", "ts2")
        ])
        self.assertEqual(2, len(p.getOffers()))
        self.assertEqual(1, len(p.getOffers()[0].vendorOffers))
        self.assertEqual(1, len(p.getOffers()[0].vendorOffers[0].offers))

        # Create a correct order
        order = p.order(
            vendor=1,
            offerIds=[p.getOffers()[0].vendorOffers[0].offers[0].key])
        self.assertEqual(Entities.OrderType.NOT_SUPPORTED, order.getType())

        # search with 1 sequence and 2 vendors
        p.registerVendor(
            Entities.VendorInformation(name="Dummy", shortName="Dummy", key=2),
            pingerDummy2)
        p.searchOffers(
            [Entities.SequenceInformation("ACTG", "TestSequence", "ts1")])
        self.assertEqual(1, len(p.getOffers()))
        self.assertEqual(2, len(p.getOffers()[0].vendorOffers))
        self.assertEqual(1, len(p.getOffers()[0].vendorOffers[0].offers))
        self.assertEqual(1, len(p.getOffers()[0].vendorOffers[1].offers))

        # Filter Vendor 1
        p.searchOffers(
            [Entities.SequenceInformation("ACTG", "TestSequence", "ts1")],
            vendors=[1])
        self.assertEqual(1, len(p.getOffers()))
        self.assertEqual(1, len(p.getOffers()[0].vendorOffers))
        self.assertEqual(
            1,
            p.getOffers()[0].vendorOffers[0].vendorInformation.key)
        self.assertEqual(1, len(p.getOffers()[0].vendorOffers[0].offers))

        # Filter Vendor 2
        p.searchOffers(
            [Entities.SequenceInformation("ACTG", "TestSequence", "ts1")],
            vendors=[2])
        self.assertEqual(1, len(p.getOffers()))
        self.assertEqual(1, len(p.getOffers()[0].vendorOffers))
        self.assertEqual(
            2,
            p.getOffers()[0].vendorOffers[0].vendorInformation.key)
        self.assertEqual(1, len(p.getOffers()[0].vendorOffers[0].offers))

        # search with 2 sequences, 1 vendor with orders and 1 vendor without orders
        p.searchOffers([
            Entities.SequenceInformation("ACTG", "TestSequence", "ts1"),
            Entities.SequenceInformation("ACTG", "TestSequence", "ts2")
        ])
        pingerDummy2.offers = []
        self.assertEqual(2, len(p.getOffers()))
        self.assertEqual(2, len(p.getOffers()[0].vendorOffers))
        self.assertEqual(1, len(p.getOffers()[0].vendorOffers[0].offers))
        self.assertEqual(0, len(p.getOffers()[0].vendorOffers[1].offers))

        # Test that CompositePinger ignores output of a VendorPinger, if invalid
        pingerDummy1.offers = [1, 2, 3]
        self.assertEqual(2, len(p.getOffers()))
        self.assertEqual(1, len(p.getOffers()[0].vendorOffers))
Exemplo n.º 5
0
    def testVendorOffers(self):
        # Define Sequences for searchOffers call
        sequences = [
            Entities.SequenceInformation("ACTG", "TestSequence", "ts1")
        ]

        # Define CompositePinger (Object to test)
        p = Pinger.CompositePinger()

        # Pinger with success response
        successPinger = DummyPinger()
        p.registerVendor(
            Entities.VendorInformation(name="DummySuccess",
                                       shortName="DummySucc",
                                       key=1), successPinger)

        p.searchOffers(sequences)
        res = p.getOffers()
        # 1 Sequence ...
        self.assertEqual(1, len(res))
        #   with 1 vendor ...
        self.assertEqual(1, len(res[0].vendorOffers))
        #       with 1 offer
        self.assertEqual(1, len(res[0].vendorOffers[0].offers))
        #       and 0 messages
        self.assertEqual(0, len(res[0].vendorOffers[0].messages))

        # register Pinger who is unavailable
        unavailablePinger = NotAvailablePinger()
        p.registerVendor(
            Entities.VendorInformation(name="DummyNotAvailable",
                                       shortName="DummyNA",
                                       key=2), unavailablePinger)

        p.searchOffers(sequences)
        res = p.getOffers()
        # 1 Sequence ...
        self.assertEqual(1, len(res))
        #   with 2 vendor ...
        self.assertEqual(2, len(res[0].vendorOffers))

        # 1 vendor ...
        #       with 1 offer
        self.assertEqual(1, len(res[0].vendorOffers[0].offers))
        #       and 0 messages
        self.assertEqual(0, len(res[0].vendorOffers[0].messages))

        # 1 vendor ...
        #       with 0 offer
        self.assertEqual(1, len(res[0].vendorOffers[0].offers))
        #       and 1 messages
        self.assertEqual(1, len(res[0].vendorOffers[1].messages))
        self.assertEqual(Entities.MessageType.API_CURRENTLY_UNAVAILABLE,
                         res[0].vendorOffers[1].messages[0].messageType)

        # register Pinger who is always running
        runningPinger = AlwaysRunningPinger()
        p.registerVendor(
            Entities.VendorInformation(name="DummyRunning",
                                       shortName="DummyRunning",
                                       key=3), runningPinger)

        # Expect IsRunningError
        with self.assertRaises(Entities.IsRunningError):
            p.searchOffers(sequences)