示例#1
0
        /// <summary>
        /// Imports records.
        /// </summary>
        /// <param name="records">The records to import</param>
        public void ImportRecords(IEnumerable <IObjectReader> records)
        {
            if (Reporter == null)
            {
                throw new InvalidOperationException();
            }

            IReadOnlyCollection <ReaderEntityPair> newEntities = ReaderToEntityAdapter.CreateEntities(records, Reporter);

            using (_suppressWorkflows ? new WorkflowRunContext {
                DisableTriggers = true
            } : null)
                using (_mergeRecords ? new ResourceKeyHelper.OverwriteMatchingResources( ) : null)
                {
                    SaveEntities(newEntities);
                }
        }
        public void Test_CreateEntity(bool createEntities)
        {
            Mock <IObjectReader> mockReader;
            IObjectReader        reader;
            Mock <IEntity>       mockEntity;
            IEntity entity;
            ReaderToEntityAdapter  adapter;
            List <MemberProcessor> memberProcessors;
            IImportReporter        reporter = new Mock <IImportReporter>( ).Object;

            // Setup reader
            mockReader = new Mock <IObjectReader>(MockBehavior.Strict);
            mockReader.Setup(x => x.GetString("member1")).Returns("value1").Verifiable("member1 not called");
            mockReader.Setup(x => x.GetString("member2")).Returns("value2").Verifiable("member2 not called");
            reader = mockReader.Object;

            // Setup entity
            mockEntity = new Mock <IEntity>(MockBehavior.Strict);
            mockEntity.Setup(x => x.SetField(1, "value1")).Verifiable("field1 not set");
            mockEntity.Setup(x => x.SetField(2, "value2")).Verifiable("field2 not set");
            entity = mockEntity.Object;

            // Set up adapter
            int called = 0;

            memberProcessors = new List <MemberProcessor>( );
            memberProcessors.Add(new MemberProcessor((r, e, rpt) =>
            {
                string value = r.GetString("member1");
                e.SetField(1, value);
                called++;
            }));
            memberProcessors.Add(new MemberProcessor((r, e, rpt) =>
            {
                string value = r.GetString("member2");
                e.SetField(2, value);
                called++;
            }));
            Func <IEntity> instanceFactory = () => mockEntity.Object;

            adapter = new ReaderToEntityAdapter(memberProcessors, instanceFactory, null);

            // Go!
            IEntity result;

            if (createEntities)
            {
                result = adapter.CreateEntities(reader.ToEnumerable( ), reporter).First( ).Entity;
            }
            else
            {
                result = adapter.CreateEntity(reader, ConnectorRequestExceptionReporter.Instance);
            }

            Assert.That(result, Is.SameAs(mockEntity.Object));

            // Verify everything called
            mockReader.VerifyAll( );
            mockEntity.VerifyAll( );
            Assert.That(called, Is.EqualTo(2), "Processor should be called twice.");

            // Entity.Save should not be called, which gets verified here because of Strict mode.
        }