Beispiel #1
0
    def testFruitNullValue(self):
        # Since 'apple' is nullable, validate we can create an apple with the 'null' value.
        apple = petstore_api.Apple(None)
        self.assertIsNone(apple)

        # 'banana' is not nullable.
        with self.assertRaises(petstore_api.ApiTypeError):
            banana = petstore_api.Banana(None)

        # Since 'fruit' has oneOf 'apple', 'banana' and 'apple' is nullable,
        # validate we can create a fruit with the 'null' value.
        fruit = petstore_api.Fruit(None)
        self.assertIsNone(fruit)
 
        # Redo the same thing, this time passing a null Apple to the Fruit constructor.
        fruit = petstore_api.Fruit(petstore_api.Apple(None))
        self.assertIsNone(fruit)
Beispiel #2
0
    def testFruit(self):
        """Test Fruit"""

        # make an instance of Fruit, a composed schema oneOf model
        # banana test
        length_cm = 20.3
        color = 'yellow'
        fruit = petstore_api.Fruit(length_cm=length_cm, color=color)
        # check its properties
        self.assertEqual(fruit.length_cm, length_cm)
        self.assertEqual(fruit['length_cm'], length_cm)
        self.assertEqual(getattr(fruit, 'length_cm'), length_cm)
        self.assertEqual(fruit.color, color)
        self.assertEqual(fruit['color'], color)
        self.assertEqual(getattr(fruit, 'color'), color)
        # check the dict representation
        self.assertEqual(fruit.to_dict(), {
            'length_cm': length_cm,
            'color': color
        })
        # setting a value that doesn't exist raises an exception
        # with a key
        with self.assertRaises(AttributeError):
            fruit['invalid_variable'] = 'some value'

        # Assert that we can call the builtin hasattr() function.
        # hasattr should return False for non-existent attribute.
        # Internally hasattr catches the AttributeError exception.
        self.assertFalse(hasattr(fruit, 'invalid_variable'))

        # Assert that we can call the builtin hasattr() function.
        # hasattr should return True for existent attribute.
        self.assertTrue(hasattr(fruit, 'color'))

        # with setattr
        with self.assertRaises(AttributeError):
            setattr(fruit, 'invalid_variable', 'some value')

        # getting a value that doesn't exist raises an exception
        # with a key
        with self.assertRaises(AttributeError):
            invalid_variable = fruit['cultivar']
        # with getattr
        # Per Python doc, if the named attribute does not exist,
        # default is returned if provided.
        self.assertEqual(getattr(fruit, 'cultivar', 'some value'),
                         'some value')

        # Per Python doc, if the named attribute does not exist,
        # default is returned if provided, otherwise AttributeError is raised.
        with self.assertRaises(AttributeError):
            getattr(fruit, 'cultivar')

        # make sure that the ModelComposed class properties are correct
        # model._composed_schemas stores the anyOf/allOf/oneOf info
        self.assertEqual(
            fruit._composed_schemas, {
                'anyOf': [],
                'allOf': [],
                'oneOf': [
                    petstore_api.Apple,
                    petstore_api.Banana,
                ],
            })
        # model._composed_instances is a list of the instances that were
        # made from the anyOf/allOf/OneOf classes in model._composed_schemas
        for composed_instance in fruit._composed_instances:
            if composed_instance.__class__ == petstore_api.Banana:
                banana_instance = composed_instance
        self.assertEqual(fruit._composed_instances, [banana_instance])
        # model._var_name_to_model_instances maps the variable name to the
        # model instances which store that variable
        self.assertEqual(
            fruit._var_name_to_model_instances, {
                'color': [fruit],
                'length_cm': [fruit, banana_instance],
                'cultivar': [fruit],
                'origin': [fruit],
            })
        # model._additional_properties_model_instances stores a list of
        # models which have the property additional_properties_type != None
        self.assertEqual(fruit._additional_properties_model_instances, [])

        # if we modify one of the properties owned by multiple
        # model_instances we get an exception when we try to access that
        # property because the retrieved values are not all the same
        banana_instance.length_cm = 4.56
        with self.assertRaises(petstore_api.ApiValueError):
            some_length_cm = fruit.length_cm

        # including extra parameters raises an exception
        with self.assertRaises(petstore_api.ApiValueError):
            fruit = petstore_api.Fruit(color=color,
                                       length_cm=length_cm,
                                       unknown_property='some value')

        # including input parameters for two oneOf instances raise an exception
        with self.assertRaises(petstore_api.ApiValueError):
            fruit = petstore_api.Fruit(length_cm=length_cm,
                                       cultivar='granny smith')

        # make an instance of Fruit, a composed schema oneOf model
        # apple test
        color = 'red'
        cultivar = 'golden delicious'
        fruit = petstore_api.Fruit(color=color, cultivar=cultivar)
        # check its properties
        self.assertEqual(fruit.color, color)
        self.assertEqual(fruit['color'], color)
        self.assertEqual(getattr(fruit, 'color'), color)
        self.assertEqual(fruit.cultivar, cultivar)
        self.assertEqual(fruit['cultivar'], cultivar)
        self.assertEqual(getattr(fruit, 'cultivar'), cultivar)
        # check the dict representation
        self.assertEqual(fruit.to_dict(), {
            'color': color,
            'cultivar': cultivar
        })

        # model._composed_instances is a list of the instances that were
        # made from the anyOf/allOf/OneOf classes in model._composed_schemas
        for composed_instance in fruit._composed_instances:
            if composed_instance.__class__ == petstore_api.Apple:
                apple_instance = composed_instance
        self.assertEqual(fruit._composed_instances, [apple_instance])
        # model._var_name_to_model_instances maps the variable name to the
        # model instances which store that variable
        self.assertEqual(
            fruit._var_name_to_model_instances, {
                'color': [fruit],
                'length_cm': [fruit],
                'cultivar': [fruit, apple_instance],
                'origin': [fruit, apple_instance],
            })
        # model._additional_properties_model_instances stores a list of
        # models which have the property additional_properties_type != None
        self.assertEqual(fruit._additional_properties_model_instances, [])