Example #1
0
        public static async Task <EditSession> GetCustomSession(Query q, EditTableMetadata etm)
        {
            // Step 1) Create the Session object
            // Mock metadata factory
            Mock <IEditMetadataFactory> metaFactory = new Mock <IEditMetadataFactory>();

            metaFactory
            .Setup(f => f.GetObjectMetadata(It.IsAny <DbConnection>(), It.IsAny <string[]>(), It.IsAny <string>()))
            .Returns(etm);

            EditSession session = new EditSession(metaFactory.Object);


            // Step 2) Initialize the Session
            // Mock connector that does nothing
            EditSession.Connector connector = () => Task.FromResult <DbConnection>(null);

            // Mock query runner that returns the query we were provided
            EditSession.QueryRunner queryRunner = (s) => Task.FromResult(new EditSession.EditSessionQueryExecutionState(q));

            // Initialize
            session.Initialize(BasicInitializeParameters, connector, queryRunner, () => Task.FromResult(0), (e) => Task.FromResult(0));
            await session.InitializeTask;

            return(session);
        }
Example #2
0
        internal async Task HandleInitializeRequest(EditInitializeParams initParams,
                                                    RequestContext <EditInitializeResult> requestContext)
        {
            Func <Exception, Task> executionFailureHandler = (e) => SendSessionReadyEvent(requestContext, initParams.OwnerUri, false, e.Message);
            Func <Task>            executionSuccessHandler = () => SendSessionReadyEvent(requestContext, initParams.OwnerUri, true, null);

            EditSession.Connector   connector   = () => connectionService.GetOrOpenConnection(initParams.OwnerUri, ConnectionType.Edit, alwaysPersistSecurity: true);
            EditSession.QueryRunner queryRunner = q => SessionInitializeQueryRunner(initParams.OwnerUri, requestContext, q);

            try
            {
                // Make sure we have info to process this request
                Validate.IsNotNullOrWhitespaceString(nameof(initParams.OwnerUri), initParams.OwnerUri);
                Validate.IsNotNullOrWhitespaceString(nameof(initParams.ObjectName), initParams.ObjectName);
                Validate.IsNotNullOrWhitespaceString(nameof(initParams.ObjectType), initParams.ObjectType);

                // Create a session and add it to the session list
                EditSession session = new EditSession(metadataFactory);
                if (!ActiveSessions.TryAdd(initParams.OwnerUri, session))
                {
                    throw new InvalidOperationException(SR.EditDataSessionAlreadyExists);
                }

                // Initialize the session
                session.Initialize(initParams, connector, queryRunner, executionSuccessHandler, executionFailureHandler);

                // Send the result
                await requestContext.SendResult(new EditInitializeResult());
            }
            catch (Exception e)
            {
                await requestContext.SendError(e.Message);
            }
        }
Example #3
0
        public void InitializeNullParams(EditInitializeParams initParams, EditSession.Connector c,
                                         EditSession.QueryRunner qr, Func <Task> sh, Func <Exception, Task> fh)
        {
            // Setup:
            // ... Create a session that hasn't been initialized
            Mock <IEditMetadataFactory> emf = new Mock <IEditMetadataFactory>();
            EditSession s = new EditSession(emf.Object);

            // If: I initialize it with a missing parameter
            // Then: It should throw an exception
            Assert.ThrowsAny <ArgumentException>(() => s.Initialize(initParams, c, qr, sh, fh));
        }