public void Test_Mapping_StringField( )
        {
            ApiResourceMapping mapping = new ApiResourceMapping( );

            mapping.ResourceMappingIdentityField = Entity.Get <Field>("core:description");
            mapping.Save( );

            ConnectorRequest request = new ConnectorRequest
            {
                ControllerRootPath = "https://whatever/spapi/api/",
                TenantName         = "Tenant1",
                ApiPath            = new string [] { "testapi", "testendpoint" }
            };

            Resource resource = new Resource( );

            resource.Description = "Test1";
            resource.Save( );

            string expected = "https://whatever/spapi/api/Tenant1/testapi/testendpoint/Test1";

            IResourceUriGenerator generator = GetGenerator( );
            string actual = generator.CreateResourceUri(resource, request, mapping);

            Assert.That(actual, Is.EqualTo(expected));
        }
Esempio n. 2
0
        /// <summary>
        /// Update
        /// </summary>
        private ConnectorResponse HandlePut(ConnectorRequest request, ApiResourceMapping mapping)
        {
            IReaderToEntityAdapter adapter = GetReaderAdapter(mapping);
            IObjectReader          reader  = request.Payload;
            IEntity instance;

            // Check payload
            CheckPayload(reader);

            // Get instance
            ConnectorResponse errorResponse;

            instance = LocateResource(request, mapping, out errorResponse);
            if (errorResponse != null)
            {
                return(errorResponse);
            }

            // Modify instance
            instance = instance.AsWritable( );
            adapter.FillEntity(reader, instance, ConnectorRequestExceptionReporter.Instance);
            SaveInstance(instance);

            return(new ConnectorResponse(HttpStatusCode.OK, "Updated"));
        }
Esempio n. 3
0
        /// <summary>
        /// Create the member processor callbacks.
        /// </summary>
        private List <MemberProcessor> CreateMemberProcessors(ApiResourceMapping mapping, ReaderToEntityAdapterSettings settings)
        {
            var memberProcessors = new List <MemberProcessor>( );

            // Process mapped members
            // Note: we intentionally ignore unrecognised members.
            foreach (ApiMemberMapping memberMappings in mapping.ResourceMemberMappings)
            {
                MemberProcessor memberProcessor;

                // Fill field
                ApiFieldMapping fieldMapping = memberMappings.As <ApiFieldMapping>( );
                if (fieldMapping != null)
                {
                    memberProcessor = CreateFieldProcessor(fieldMapping, settings);
                    memberProcessors.Add(memberProcessor);
                    continue;
                }

                // Fill relationship
                ApiRelationshipMapping relMapping = memberMappings.As <ApiRelationshipMapping>( );
                if (relMapping != null)
                {
                    memberProcessor = CreateRelationshipProcessor(relMapping, settings);
                    memberProcessors.Add(memberProcessor);
                    continue;
                }

                // Assert false
                throw new InvalidOperationException("Unknown member mapping");
            }

            return(memberProcessors);
        }
Esempio n. 4
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="readerToEntityAdapter">Adapter for reading content and storing in entities.</param>
        /// <param name="entitySaver">Service for saving entities in bulk.</param>
        /// <param name="importReporter">Service for receiving import progress.</param>
        /// <param name="resourceMapping">The resource mapping, to provde settings such as merging and workflow suppression.</param>
        /// <param name="testRun">Indicates that the importer is performing test runs.</param>
        public RecordImporter(IReaderToEntityAdapter readerToEntityAdapter, IEntitySaver entitySaver, IImportReporter importReporter, ApiResourceMapping resourceMapping, bool testRun)
        {
            if (readerToEntityAdapter == null)
            {
                throw new ArgumentNullException(nameof(readerToEntityAdapter));
            }
            if (entitySaver == null)
            {
                throw new ArgumentNullException(nameof(entitySaver));
            }
            if (importReporter == null)
            {
                throw new ArgumentNullException(nameof(importReporter));
            }
            if (resourceMapping == null)
            {
                throw new ArgumentNullException(nameof(resourceMapping));
            }

            _entitySaver          = entitySaver;
            ReaderToEntityAdapter = readerToEntityAdapter;
            Reporter           = importReporter;
            _resourceMapping   = resourceMapping;
            _mergeRecords      = resourceMapping.ImportMergeExisting == true;
            _suppressWorkflows = resourceMapping.MappingSuppressWorkflows == true;
            _testRun           = testRun;
        }
        public void Test_NullSettings( )
        {
            var provider = GetProvider( );
            var mapping  = new ApiResourceMapping( );

            Assert.Throws <ArgumentNullException>(() => provider.GetAdapter(mapping.Id, null));
        }
Esempio n. 6
0
        private IEntity LocateResource(ConnectorRequest request, ApiResourceMapping mapping, out ConnectorResponse errorResponse)
        {
            // Check path
            if (request.ApiPath == null || request.ApiPath.Length < 3)
            {
                errorResponse = new ConnectorResponse(HttpStatusCode.MethodNotAllowed);
                return(null);
            }

            if (request.ApiPath.Length > 3)
            {
                errorResponse = new ConnectorResponse(HttpStatusCode.NotFound);
                return(null);
            }

            // Get resource ID field value (i.e. the string being used to locate the resource, e.g. name)
            string resourceIdFieldValue = request.ApiPath [2];

            if (string.IsNullOrEmpty(resourceIdFieldValue))
            {
                throw new Exception("Empty resource identity was received.");   // assert false .. this should be blocked earlier.
            }
            // Resolve resource from string
            IResourceResolver     resolver      = _resourceResolverProvider.GetResolverForResourceMapping(mapping);
            ResourceResolverEntry resolveResult = resolver.ResolveResource(resourceIdFieldValue);

            if (resolveResult.Entity == null)
            {
                throw new WebArgumentNotFoundException( );   // Resource could not be located, so ensure a 404 is thrown
            }
            errorResponse = null;
            return(resolveResult.Entity);
        }
Esempio n. 7
0
        public IEntity RunTest(string json, ApiResourceMapping mapping, ReaderToEntityAdapterSettings settings = null)
        {
            if (json != null)
            {
                json = json.Replace("'", @"""");
            }

            // Get dynamic object from JSON
            object raw = JilHelpers.Deserialize <object>(json);

            Assert.That(raw, Is.InstanceOf <IDynamicMetaObjectProvider>( ), "Dynamic object should be IDynamicMetaObjectProvider");
            IDynamicMetaObjectProvider dynamicProvider = ( IDynamicMetaObjectProvider )raw;

            // Get object reader
            IDynamicObjectReaderService objectReaderService = Factory.Current.Resolve <IDynamicObjectReaderService>( );
            IObjectReader reader = objectReaderService.GetObjectReader(dynamicProvider);

            // Settings
            ReaderToEntityAdapterSettings settingsToUse = settings ?? new ReaderToEntityAdapterSettings();

            // Run adapter provider
            IReaderToEntityAdapterProvider adapterProvider = Factory.Current.Resolve <IReaderToEntityAdapterProvider>( );
            IReaderToEntityAdapter         adapter         = adapterProvider.GetAdapter(mapping.Id, settingsToUse);

            IEntity entity = adapter.CreateEntity(reader, ConnectorRequestExceptionReporter.Instance);

            return(entity);
        }
Esempio n. 8
0
        /// <summary>
        /// Creates an adapter that knows how to write objects into entities for a particular type of mapping.
        /// </summary>
        /// <param name="apiResourceMappingId">ID of the API mapping entity model that describes how to map object data to entities.</param>
        /// <param name="settings">Adapter settings.</param>
        public IReaderToEntityAdapter GetAdapter(long apiResourceMappingId, ReaderToEntityAdapterSettings settings)
        {
            // Note: we rely on the Api Key being bound to the endpoint.
            // No need to check specific access to the mapping and schema objects.
            // Access control will be applied when the adapter is being run (but not now while it is created).

            // Validate input
            if (apiResourceMappingId <= 0)
            {
                throw new ArgumentOutOfRangeException("apiResourceMappingId");
            }
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            // Get mapping descriptor
            ApiResourceMapping mapping = _entityRepository.Get <ApiResourceMapping>(apiResourceMappingId);

            if (mapping == null)
            {
                throw new ArgumentException("apiResourceMappingId");
            }

            // Create member processors
            List <MemberProcessor> memberProcessors = CreateMemberProcessors(mapping, settings);

            // Factory function
            Func <IEntity> instanceFactory = CreateInstanceFactory(mapping, settings);

            // Set all defaults
            MemberProcessor defaultsProcessor = CreateDefaultValuesProcessor(mapping.MappedType.Id);

            return(new ReaderToEntityAdapter(memberProcessors, instanceFactory, defaultsProcessor));
        }
        /// <summary>
        /// Look up an entity according to its identifier and any rules specified in the mapping resource.
        /// </summary>
        /// <param name="mapping">The mapping rules.</param>
        /// <returns>
        /// The entity
        /// </returns>
        /// <exception cref="System.ArgumentNullException">mapping</exception>
        /// <exception cref="ConnectorConfigException"></exception>
        public IResourceResolver GetResolverForResourceMapping(ApiResourceMapping mapping)
        {
            if (mapping == null)
            {
                throw new ArgumentNullException(nameof(mapping));
            }

            // Get type of entity being mapped, and mapping field
            long typeId;
            long?fieldId;

            using (new SecurityBypassContext( ))
            {
                EntityType mappedType = mapping.MappedType;
                if (mappedType == null)
                {
                    throw new ConnectorConfigException(Messages.ResourceMappingHasNoType);
                }
                typeId = mappedType.Id;

                Field field = mapping.ResourceMappingIdentityField;
                fieldId = field?.Id;
            }

            return(GetResolverImpl(typeId, fieldId));
        }
        public void Test_Mapping_EntityGuid( )
        {
            ApiResourceMapping mapping = new ApiResourceMapping( );

            mapping.Save();

            ConnectorRequest request = new ConnectorRequest
            {
                ControllerRootPath = "https://whatever/spapi/api/",
                TenantName         = "Tenant1",
                ApiPath            = new string [] { "testapi", "testendpoint" }
            };

            Resource resource = new Resource( );

            resource.Save( );
            Assert.That(resource.UpgradeId, Is.Not.EqualTo(Guid.Empty));

            string expected = "https://whatever/spapi/api/Tenant1/testapi/testendpoint/" + resource.UpgradeId.ToString( );

            IResourceUriGenerator generator = GetGenerator( );
            string actual = generator.CreateResourceUri(resource, request, mapping);

            Assert.That(actual, Is.EqualTo(expected));
        }
Esempio n. 11
0
        public void Test_Run( )
        {
            using (var mock = GetMock( ))
            {
                ImportRunWorker worker    = mock.Create <ImportRunWorker>( );
                var             importRun = GetImportRun(mock);

                Field field = new StringField( ).AsWritable <Field>( );
                field.Name = "Field1";

                EntityType type = new EntityType( );
                type.Fields.Add(field);

                ApiFieldMapping fieldMapping = new ApiFieldMapping( );
                fieldMapping.MappedField = field;
                fieldMapping.Name        = "NotAValidExcelColumnReference";

                ApiResourceMapping mapping = importRun.ImportConfigUsed.ImportConfigMapping;
                mapping.ResourceMemberMappings.Add(fieldMapping.As <ApiMemberMapping>( ));
                mapping.MappedType = type;
                importRun.Save( );

                worker.StartImport(MockRunId);

                Assert.That(importRun.ImportRunStatus_Enum, Is.EqualTo(WorkflowRunState_Enumeration.WorkflowRunCompleted));
                Assert.That(importRun.ImportRecordsSucceeded, Is.EqualTo(4));
                Assert.That(importRun.ImportRecordsTotal, Is.EqualTo(4));
                Assert.That(importRun.ImportRecordsFailed, Is.EqualTo(0));
                Assert.That(importRun.ImportRunFinished, Is.Not.Null);
            }
        }
        public string CreateResourceUri(IEntity instance, ConnectorRequest request, ApiResourceMapping mapping)
        {
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            if (mapping == null)
            {
                throw new ArgumentNullException("mapping");
            }

            if (request.ApiPath.Length < 2)
            {
                throw new InvalidOperationException("Cannot create a path to a resource that was not accessed using the api/endpoint pattern");
            }

            string resourceId = GetResourceIdentifier(instance, mapping);

            string uri = string.Concat(
                request.ControllerRootPath,
                request.TenantName,
                "/", request.ApiPath [0],
                "/", request.ApiPath [1],
                "/", resourceId);

            return(uri);
        }
Esempio n. 13
0
        public static ApiResourceMapping CreateApiResourceMapping(EntityRef entityType)
        {
            EntityType         entityTypeResource = Entity.Get <EntityType>(entityType);
            ApiResourceMapping mapping            = new ApiResourceMapping( );

            mapping.MappedType = entityTypeResource;

            return(mapping);
        }
Esempio n. 14
0
        public void Test_DefaultToRelationship(bool mapped, string json, string expect)
        {
            string jsonMember = "member";

            // Create a type mapping
            EntityType         entityTypeResource  = new EntityType( );
            EntityType         entityTypeResource2 = Entity.Get <EntityType>("test:allFields");
            Resource           referencedValue     = Factory.ScriptNameResolver.GetInstance("Test 10", entityTypeResource2.Id).As <Resource>( );
            Resource           defaultValue        = Factory.ScriptNameResolver.GetInstance("Test 11", entityTypeResource2.Id).As <Resource>( );
            ApiResourceMapping typeMapping         = new ApiResourceMapping( );

            typeMapping.MappedType = entityTypeResource;

            // Create a member mapping
            Relationship rel = new Relationship( );

            rel.FromType           = entityTypeResource;
            rel.ToType             = entityTypeResource2;
            rel.Cardinality_Enum   = CardinalityEnum_Enumeration.OneToOne;
            rel.ToTypeDefaultValue = defaultValue;
            ApiRelationshipMapping relMapping = new ApiRelationshipMapping( );

            relMapping.MappedRelationship = rel;
            relMapping.Name = jsonMember;

            entityTypeResource.Save( );
            rel.Save( );

            if (mapped)
            {
                typeMapping.ResourceMemberMappings.Add(relMapping.As <ApiMemberMapping>( ));
            }

            // Fill entity
            IEntity entity = RunTest(json, typeMapping);
            IEntity target = entity.GetRelationships(rel.Id, Direction.Forward).SingleOrDefault( );

            if (expect == "null")
            {
                Assert.That(target, Is.Null);
            }
            else
            {
                Assert.That(target, Is.Not.Null);
                if (expect == "default")
                {
                    Assert.That(target.Id, Is.EqualTo(defaultValue.Id));
                }
                else
                {
                    Assert.That(target.Id, Is.EqualTo(referencedValue.Id));
                }
            }
        }
Esempio n. 15
0
        public static ApiFieldMapping CreateApiFieldMapping(ApiResourceMapping resourceMapping, EntityRef field, string memberName)
        {
            Field           fieldResource = Entity.Get <Field>(field);
            ApiFieldMapping mapping       = new ApiFieldMapping( );

            mapping.MappedField = fieldResource;
            mapping.Name        = memberName;
            resourceMapping.ResourceMemberMappings.Add(mapping.As <ApiMemberMapping>( ));

            return(mapping);
        }
Esempio n. 16
0
        private IReaderToEntityAdapter GetReaderAdapter(ApiResourceMapping mapping)
        {
            using (new SecurityBypassContext( ))
            {
                var settings = new ReaderToEntityAdapterSettings( );

                // Get adapter
                IReaderToEntityAdapter adapter = _readerToEntityAdapterProvider.GetAdapter(mapping.Id, settings);

                return(adapter);
            }
        }
Esempio n. 17
0
        public static ApiRelationshipMapping CreateApiRelationshipMapping(ApiResourceMapping resourceMapping, EntityRef relationship, string memberName, bool isReverse)
        {
            Relationship           relResource = Entity.Get <Relationship>(relationship);
            ApiRelationshipMapping mapping     = new ApiRelationshipMapping( );

            mapping.MappedRelationship       = relResource;
            mapping.MapRelationshipInReverse = isReverse;
            mapping.Name = memberName;
            resourceMapping.ResourceMemberMappings.Add(mapping.As <ApiMemberMapping>( ));

            return(mapping);
        }
        public void Test_SuppressWorkflow(bool endpointSuppressWorkflows)
        {
            Mock <IReaderToEntityAdapterProvider> m1 = new Mock <IReaderToEntityAdapterProvider>(MockBehavior.Strict);
            Mock <IResourceResolverProvider>      m2 = new Mock <IResourceResolverProvider>(MockBehavior.Loose);
            Mock <IResourceUriGenerator>          m3 = new Mock <IResourceUriGenerator>(MockBehavior.Loose);

            ApiResourceMapping mapping = new ApiResourceMapping();

            long typeId = Factory.ScriptNameResolver.GetTypeByName("AA_Drink");

            if (typeId == 0)
            {
                mapping.MappedType = null;
            }
            else
            {
                mapping.MappedType = Entity.Get(typeId).As <EntityType>( );
            }

            mapping.MappingSuppressWorkflows = endpointSuppressWorkflows;
            mapping.Save();

            ApiResourceEndpoint apiResourceEndpoint = new ApiResourceEndpoint();

            apiResourceEndpoint.EndpointResourceMapping = mapping;
            apiResourceEndpoint.EndpointCanCreate       = true;
            apiResourceEndpoint.ApiEndpointEnabled      = true;
            apiResourceEndpoint.Save();

            ResourceEndpoint re = new ResourceEndpoint(m1.Object, m2.Object, m3.Object);

            ConnectorRequest request = new ConnectorRequest();

            request.Verb = ConnectorVerb.Post;

            m1.Setup <IReaderToEntityAdapter>(m => m.GetAdapter(It.IsAny <long>(), It.IsAny <ReaderToEntityAdapterSettings>())).Returns(
                () =>
            {
                Assert.That(WorkflowRunContext.Current.DisableTriggers, Is.EqualTo(endpointSuppressWorkflows));
                return(null);
            }
                );

            // We don't care what happens .. as long as the callback was called with the correct context setting
            try
            {
                re.HandleRequest(request, apiResourceEndpoint);
            }
            catch { }

            m1.VerifyAll();
        }
Esempio n. 19
0
        /// <summary>
        /// Get an adapter for writing entities.
        /// </summary>
        private IReaderToEntityAdapter GetEntityAdapter(ImportConfig importConfig)
        {
            ApiResourceMapping mapping = importConfig.ImportConfigMapping;

            ReaderToEntityAdapterSettings settings = new ReaderToEntityAdapterSettings( );

            settings.UseTargetMemberNameForReporting = true;

            //settings.TimeZoneName
            IReaderToEntityAdapter entityAdapter = _readerToEntityAdapterProvider.GetAdapter(mapping.Id, settings);

            return(entityAdapter);
        }
Esempio n. 20
0
        private static ImportConfig CreateImportConfig(EntityType entityType, ImportFormat importFormat, string sheetId)
        {
            ApiResourceMapping resourceMapping = new ApiResourceMapping( );

            resourceMapping.MappedType             = entityType;
            resourceMapping.MappingSourceReference = sheetId;
            resourceMapping.ImportHeadingRow       = 1;
            resourceMapping.ImportDataRow          = 2;
            ImportConfig importConfig = new ImportConfig( );

            importConfig.ImportConfigMapping = resourceMapping;
            importConfig.ImportFileType_Enum = importFormat == ImportFormat.CSV ? ImportFileTypeEnum_Enumeration.ImportFileTypeCsv : ImportFileTypeEnum_Enumeration.ImportFileTypeExcel;
            return(importConfig);
        }
Esempio n. 21
0
        public void Test_Resolve_WithMapping_NotFound(string identity, string type, ResourceResolverError expectedError)
        {
            IResourceResolverProvider provider = GetResolverProvider( );
            ApiResourceMapping        mapping  = new ApiResourceMapping( );

            mapping.MappedType = Entity.Get <EntityType>("test:allFields");
            mapping.Save( );
            IResourceResolver resolver = provider.GetResolverForResourceMapping(mapping);

            ResourceResolverEntry entry = resolver.ResolveResource(identity);

            Assert.That(entry.Entity, Is.Null);
            Assert.That(entry.Error, Is.EqualTo(expectedError));
        }
Esempio n. 22
0
        public void Test_MandatoryRelationship(string mandatoryDefinedOn, bool provided, bool isNull)
        {
            // Create JSON
            string jsonMember = "member";
            string jsonData   = isNull ? "null" : "\"Test 10\"";
            string json       = "{\"" + jsonMember + "\":" + jsonData + "}";

            if (!provided)
            {
                json = json.Replace(jsonMember, "somethingelse");
            }

            // Create a type mapping
            EntityType         entityTypeResource  = new EntityType();
            EntityType         entityTypeResource2 = Entity.Get <EntityType>("test:allFields");
            ApiResourceMapping typeMapping         = new ApiResourceMapping();

            typeMapping.MappedType = entityTypeResource;

            // Create a member mapping
            Relationship rel = new Relationship();

            rel.FromType         = entityTypeResource;
            rel.ToType           = entityTypeResource2;
            rel.Cardinality_Enum = CardinalityEnum_Enumeration.OneToOne;
            ApiRelationshipMapping relMapping = new ApiRelationshipMapping();

            relMapping.MappedRelationship = rel;
            relMapping.Name = jsonMember;
            typeMapping.ResourceMemberMappings.Add(relMapping.As <ApiMemberMapping>());
            if (mandatoryDefinedOn == "Mapping")
            {
                relMapping.ApiMemberIsRequired = true;
            }
            if (mandatoryDefinedOn == "Schema")
            {
                rel.RelationshipIsMandatory = true;
            }
            entityTypeResource.Save( );

            // Fill entity
            if (provided && !isNull)
            {
                IEntity entity = RunTest(json, typeMapping);
            }
            else
            {
                Assert.Throws <ConnectorRequestException>(() => RunTest(json, typeMapping), "E1010 '" + jsonMember + "' value is required.");
            }
        }
Esempio n. 23
0
        public void Test_ResolveResource_WithMapping_NoIdentityField_ByName(string identity, string type)
        {
            IResourceResolverProvider provider = GetResolverProvider( );
            ApiResourceMapping        mapping  = new ApiResourceMapping( );

            mapping.MappedType = Entity.Get <EntityType>(type);
            mapping.Save( );
            IResourceResolver resolver = provider.GetResolverForResourceMapping(mapping);

            ResourceResolverEntry entry = resolver.ResolveResource(identity);
            IEntity entity = entry.Entity;

            Assert.That(entity, Is.Not.Null);
            Assert.That(entity.As <Resource>( ).Name, Is.EqualTo(identity));
        }
Esempio n. 24
0
        /// <summary>
        /// Create a factory that can create instances of the mapped type.
        /// </summary>
        /// <remarks>
        /// Note: at some point this will probably need to be extended to support derived types by inspecting field data.
        /// </remarks>
        private Func <IEntity> CreateInstanceFactory(ApiResourceMapping mapping, ReaderToEntityAdapterSettings settings)
        {
            // Get type
            EntityType type = mapping.MappedType;

            if (type == null)
            {
                throw new ConnectorConfigException(Messages.ResourceMappingHasNoType);
            }

            // Create callback
            long typeId = type.Id;

            return(() => _entityRepository.Create(typeId));
        }
Esempio n. 25
0
        /// <summary>
        /// Get reader settings from the config entity.
        /// </summary>
        /// <param name="importConfig">The import config entity.</param>
        /// <returns>Reader settings</returns>
        private static DataFileReaderSettings CreateReaderSettings(ImportConfig importConfig)
        {
            ImportFormat       importFormat = ImportHelpers.GetImportFormat(importConfig);
            ApiResourceMapping mapping      = importConfig.ImportConfigMapping;

            DataFileReaderSettings settings = new DataFileReaderSettings
            {
                ImportFormat       = importFormat,
                HeadingRowNumber   = mapping.ImportHeadingRow ?? 1,
                FirstDataRowNumber = mapping.ImportDataRow ?? 2,
                LastDataRowNumber  = mapping.ImportLastDataRow, // default is null
                SheetId            = mapping.MappingSourceReference
            };

            return(settings);
        }
Esempio n. 26
0
        public void RecordImporter_Factory( )
        {
            IReaderToEntityAdapter adapter  = new Mock <IReaderToEntityAdapter>( ).Object;
            IImportReporter        reporter = new Mock <IImportReporter>().Object;
            ApiResourceMapping     mapping  = new ApiResourceMapping( );

            RecordImporter.Factory recordImporterFactory = Factory.Current.Resolve <RecordImporter.Factory>( );
            IRecordImporter        recordImporter        = recordImporterFactory(adapter, reporter, mapping, true);

            Assert.That(recordImporter, Is.TypeOf <RecordImporter>( ));

            RecordImporter importer = (RecordImporter)recordImporter;

            Assert.That(importer.ReaderToEntityAdapter, Is.EqualTo(adapter));
            Assert.That(importer.Reporter, Is.EqualTo(reporter));
        }
Esempio n. 27
0
        /// <summary>
        /// Process the request.
        /// </summary>
        /// <remarks>
        /// Assumes that user context has already been set.
        /// </remarks>
        /// <param name="request"></param>
        /// <param name="endpoint"></param>
        /// <returns></returns>
        public ConnectorResponse HandleRequest(ConnectorRequest request, ApiResourceEndpoint endpoint)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            if (endpoint == null)
            {
                throw new ArgumentNullException("endpoint");
            }

            // Get resource mapping object
            ApiResourceMapping mapping = GetResourceMapping(endpoint);

            // Disable triggers if applicable
            bool disableTriggers;

            using (new SecurityBypassContext())
            {
                disableTriggers = mapping.MappingSuppressWorkflows == true;
            }

            using (new WorkflowRunContext {
                DisableTriggers = disableTriggers
            })
            {
                // Handle verbs
                if (request.Verb == ConnectorVerb.Post && SecurityBypassContext.Elevate(() => endpoint.EndpointCanCreate == true))
                {
                    return(HandlePost(request, mapping));
                }

                if (request.Verb == ConnectorVerb.Put && SecurityBypassContext.Elevate(() => endpoint.EndpointCanUpdate == true))
                {
                    return(HandlePut(request, mapping));
                }

                if (request.Verb == ConnectorVerb.Delete && SecurityBypassContext.Elevate(() => endpoint.EndpointCanDelete == true))
                {
                    return(HandleDelete(request, mapping));
                }

                return(new ConnectorResponse(HttpStatusCode.MethodNotAllowed));
            }
        }
Esempio n. 28
0
        public void Test_MandatoryField(string mandatoryDefinedOn, string data)
        {
            // Create JSON
            string jsonMember = "member";
            string jsonData   = data.Replace("'", "\"");
            string json       = "{\"" + jsonMember + "\":" + jsonData + "}";

            if (data == "'unprovided'")
            {
                json = json.Replace(jsonMember, "somethingelse");
            }

            // Create a type mapping
            EntityType         entityTypeResource = new EntityType();
            ApiResourceMapping typeMapping        = new ApiResourceMapping();

            typeMapping.MappedType = entityTypeResource;

            // Create a member mapping
            StringField     fieldResource = new StringField();
            ApiFieldMapping fieldMapping  = new ApiFieldMapping();

            fieldMapping.MappedField = fieldResource.As <Field>();
            fieldMapping.Name        = jsonMember;
            typeMapping.ResourceMemberMappings.Add(fieldMapping.As <ApiMemberMapping>());
            if (mandatoryDefinedOn == "Mapping")
            {
                fieldMapping.ApiMemberIsRequired = true;
            }
            if (mandatoryDefinedOn == "Schema")
            {
                fieldResource.IsRequired = true;
            }
            entityTypeResource.Save( );

            // Fill entity
            if (data == "'provided'")
            {
                IEntity entity = RunTest(json, typeMapping);
            }
            else
            {
                Assert.Throws <ConnectorRequestException>(() => RunTest(json, typeMapping), "E1010 '" + jsonMember + "' value is required.");
            }
        }
Esempio n. 29
0
        public void Test_ResolveResource_WithMapping_NoIdentityField_ByGuid(string alias, string type, string name)
        {
            IEntity entity1  = Entity.Get(new EntityRef(alias));
            string  identity = entity1.UpgradeId.ToString();

            IResourceResolverProvider provider = GetResolverProvider( );
            ApiResourceMapping        mapping  = new ApiResourceMapping( );

            mapping.MappedType = Entity.Get <EntityType>(type);
            mapping.Save( );
            IResourceResolver resolver = provider.GetResolverForResourceMapping(mapping);

            ResourceResolverEntry entry = resolver.ResolveResource(identity);
            IEntity entity = entry.Entity;

            Assert.That(entity, Is.Not.Null);
            Assert.That(entity.As <Resource>( ).Name, Is.EqualTo(name));
        }
Esempio n. 30
0
        private ApiResourceMapping GetResourceMapping(ApiResourceEndpoint endpoint)
        {
            using (new SecurityBypassContext( ))
            {
                ApiResourceMapping mapping = endpoint.EndpointResourceMapping;

                if (mapping == null)
                {
                    throw new ConnectorConfigException(Messages.EndpointHasNoResourceMapping);
                }

                if (mapping.MappedType == null)
                {
                    throw new ConnectorConfigException(Messages.ResourceMappingHasNoType);
                }

                return(mapping);
            }
        }