Exemplo n.º 1
0
        public void TestInitialise()
        {
            _primitiveService = new Mock <IOpenApiPrimitiveToTypeService>();
            _referenceService = new Mock <IOpenApiReferenceToTypeService>();
            _objectService    = new Mock <IOpenApiObjectToTypeService>();
            _keyStore         = new Mock <IObjectsProcessingKeyStore>();

            _service = new OpenApiUmbrellaTypeResolver(_primitiveService.Object,
                                                       _referenceService.Object);

            _definitions   = new Dictionary <string, IOpenApiType>();
            _suggestedName = Guid.NewGuid().ToString();
            _primitive     = new OpenApiPrimitiveType();
            _referenced    = new OpenApiReferencedType();
            _object        = new OpenApiObjectType();
            _array         = new OpenApiArrayType();

            _primitiveService.Setup(s => s.GetType(_primitive, It.IsAny <string>()))
            .Returns(typeof(int));
            _referenceService.Setup(s => s.GetType(_objectService.Object,
                                                   _service,
                                                   _keyStore.Object,
                                                   _referenced,
                                                   _definitions))
            .Returns(typeof(object));
            _objectService.Setup(s => s.GetType(_object,
                                                _definitions,
                                                It.IsAny <string>(),
                                                _keyStore.Object))
            .Returns(typeof(object));
        }
Exemplo n.º 2
0
        public void TestInitialise()
        {
            _lastTokenService = new Mock <ILastTokenInPathService>();
            _objectKeyStore   = new Mock <IObjectsProcessingKeyStore>();
            _objectService    = new Mock <IOpenApiObjectToTypeService>();
            _typeResolver     = new Mock <IOpenApiUmbrellaTypeResolver>();

            _service = new OpenApiReferenceToTypeService(_lastTokenService.Object);

            _inputType                              = new OpenApiReferencedType();
            _definedNotCreated                      = new OpenApiObjectType();
            _inputDefinitions                       = new Dictionary <string, IOpenApiType>();
            _inputDefinitions["NewType"]            = _definedNotCreated;
            _originalName                           = "path/ExistingType";
            _processedName                          = "ExistingType";
            CurrentTypeHolder.Types["ExistingType"] = typeof(ExistingType);

            _lastTokenService.Setup(s => s.GetLastToken(It.IsAny <string>()))
            .Returns(() => _processedName).Verifiable();
            _typeResolver.Setup(s => s.GetType(_objectService.Object,
                                               _objectKeyStore.Object,
                                               _definedNotCreated,
                                               _inputDefinitions,
                                               "NewType")).Returns(typeof(NewType));
        }
        public Type GetType(IOpenApiObjectToTypeService objectService,
                            IOpenApiUmbrellaTypeResolver typeResolver,
                            IObjectsProcessingKeyStore objectKeyStore,
                            OpenApiReferencedType referencedType,
                            IDictionary <string, IOpenApiType> definitions)
        {
            var typeName = _lastTokenService.GetLastToken(referencedType.Type);

            if (!CurrentTypeHolder.Types.TryGetValue(typeName, out var existingType))
            {
                if (!definitions.TryGetValue(typeName, out var definedNotCreated))
                {
                    throw new NotSupportedException($"Referenced type {typeName} is not defined in OpenApi document");
                }

                //handle circular reference
                objectKeyStore.ThrowIfPresent(typeName);

                var createdType = typeResolver.GetType(objectService,
                                                       objectKeyStore,
                                                       definedNotCreated,
                                                       definitions,
                                                       typeName);

                CurrentTypeHolder.Types[typeName] = createdType;

                return(createdType);
            }

            return(existingType);
        }