Пример #1
0
    def test_list_validate_direct_instantiation_cast_item(self):
        # validation is skipped if items are of the correct type
        expected_call_by_index = {
            0: [
                ArrayWithValidationsInItems, ((Decimal('7'), ), ),
                InstantiationMetadata(path_to_item=('args[0]', ))
            ],
        }
        call_index = 0
        result_by_call_index = {
            0:
            defaultdict(
                set,
                [(('args[0]', ), set([ArrayWithValidationsInItems, tuple]))]),
        }

        @classmethod
        def new_validate(cls,
                         *args,
                         _instantiation_metadata: typing.
                         Optional[InstantiationMetadata] = None):
            nonlocal call_index
            assert [cls, args, _instantiation_metadata
                    ] == expected_call_by_index[call_index]
            result = result_by_call_index.get(call_index)
            call_index += 1
            if result is None:
                raise petstore_api.ApiValueError('boom')
            return result

        item = ArrayWithValidationsInItems._items(7)
        with patch.object(Schema, '_validate', new=new_validate):
            ArrayWithValidationsInItems([item])
Пример #2
0
    def test_list_validate_from_openai_data_instantiation(self):
        expected_call_by_index = {
            0: [
                ArrayWithValidationsInItems,
                ((Decimal("7"), ), ),
                ValidationMetadata(path_to_item=("args[0]", ),
                                   from_server=True),
            ],
            1: [
                ArrayWithValidationsInItems._items,
                (Decimal("7"), ),
                ValidationMetadata(path_to_item=("args[0]", 0),
                                   from_server=True),
            ],
        }
        call_index = 0
        result_by_call_index = {
            0:
            defaultdict(
                set,
                [(("args[0]", ), set([ArrayWithValidationsInItems, tuple]))]),
            1:
            defaultdict(
                set,
                [(("args[0]", 0),
                  set([ArrayWithValidationsInItems._items, Decimal]))],
            ),
        }

        @classmethod
        def new_validate(
            cls,
            *args,
            validation_metadata: typing.Optional[ValidationMetadata] = None,
        ):
            nonlocal call_index
            assert [cls, args,
                    validation_metadata] == expected_call_by_index[call_index]
            result = result_by_call_index.get(call_index)
            call_index += 1
            if result is None:
                raise petstore_api.ApiValueError("boom")
            return result

        with patch.object(Schema, "_validate", new=new_validate):
            ArrayWithValidationsInItems._from_openapi_data([7])
    def testArrayWithValidationsInItems(self):
        """Test ArrayWithValidationsInItems"""

        valid_values = [-1, 5, 7]
        for valid_value in valid_values:
            inst = ArrayWithValidationsInItems([valid_value])
            assert isinstance(inst, ArrayWithValidationsInItems)
            assert inst == (valid_value, )

        with self.assertRaisesRegex(
                petstore_api.exceptions.ApiValueError,
                r"Invalid value `8`, must be a value less than or equal to `7` at \('args\[0\]', 0\)"
        ):
            ArrayWithValidationsInItems([8])

        with self.assertRaisesRegex(
                petstore_api.exceptions.ApiValueError,
                r"Invalid value `\(Decimal\('1'\), Decimal\('2'\), Decimal\('3'\)\)`, number of items must be less than or equal to `2` at \('args\[0\]',\)"
        ):
            ArrayWithValidationsInItems([1, 2, 3])