Пример #1
0
        /// <summary>
        /// Invokes the NewSession business operation.
        /// </summary>
        private async Task <NewSessionBusinessResponse> InvokeNewSession(IDatabaseConnection databaseConnection, SessionResource resource)
        {
            try
            {
                // Build the NewSession business request.
                NewSessionBusinessRequest newSessionBusinessRequest = new NewSessionBusinessRequest();

                // Build the Session business request element.
                if (resource.Session != null)
                {
                    NewSessionBusinessRequest.SessionBusinessRequestElement sessionBusinessRequestElement = new NewSessionBusinessRequest.SessionBusinessRequestElement();
                    sessionBusinessRequestElement.Name      = resource.Session.Name;
                    sessionBusinessRequestElement.StartDate = resource.Session.StartDate;
                    newSessionBusinessRequest.Session       = sessionBusinessRequestElement;
                }

                // Invoke the NewSession business operation.
                NewSessionBusinessResponse newSessionBusinessResponse = await this.schedulingBusinessLogicComponent.NewSession(databaseConnection, newSessionBusinessRequest);

                // The business operation succeeded.
                return(newSessionBusinessResponse);
            }
            catch (NewSessionBusinessException newSessionBusinessException)
            {
                // Wrap the NewSession business exception into a service exception.
                ServiceException serviceException = ServiceExceptionBuilder.BuildServiceException(
                    "SchedulingServiceComponent.SessionsController.Post()",
                    newSessionBusinessException,
                    newSessionBusinessException.Errors.Select(error => error.ErrorCode.ToString()).ToArray(),
                    newSessionBusinessException.Errors.Select(error => error.ErroneousValue).ToArray());

                // Throw the service exception.
                throw serviceException;
            }
        }
Пример #2
0
        public void ShouldReturnSessionResponseElement()
        {
            // Build the test harness.
            SchedulingBusinessLogicComponentTestHarness testHarness = new SchedulingBusinessLogicComponentTestHarness();

            // Mock the generation of the unique token.
            testHarness.MockedUniqueTokenGenerator
            .Setup(mock => mock.GenerateUniqueToken())
            .Returns("6dk61ufcuzp3f7vs")
            .Verifiable();

            // Mock the creation of the Session data row.
            testHarness.MockedSessionDataAccessComponent
            .Setup(mock => mock.Create(
                       It.IsAny <IDatabaseConnection>(),
                       It.Is <SessionDataRow>(sessionDataRow =>
                                              (
                                                  sessionDataRow.SessionCode == "6dk61ufcuzp3f7vs" &&
                                                  sessionDataRow.Name == "Session Alpha" &&
                                                  sessionDataRow.StartDate == new DateTime(2001, 1, 1)
                                              ))))
            .Returns(Task.FromResult <object>(null))
            .Callback((IDatabaseConnection databaseConnection, SessionDataRow sessionDataRow) =>
            {
                sessionDataRow.SessionID = 10001;
            })
            .Verifiable();

            // Build the NewSession business request.
            NewSessionBusinessRequest newSessionBusinessRequest = new NewSessionBusinessRequest();

            // Build the Session business request element.
            NewSessionBusinessRequest.SessionBusinessRequestElement sessionBusinessRequestElement = new NewSessionBusinessRequest.SessionBusinessRequestElement();
            sessionBusinessRequestElement.Name      = "Session Alpha";
            sessionBusinessRequestElement.StartDate = new DateTime(2001, 1, 1);
            newSessionBusinessRequest.Session       = sessionBusinessRequestElement;

            // Invoke the NewSession business operation.
            NewSessionBusinessResponse newSessionBusinessResponse = testHarness.SchedulingBusinessLogicComponent.NewSession(testHarness.MockedDatabaseConnection, newSessionBusinessRequest).Result;

            // Verify the mocked components.
            testHarness.VerifyMockedComponents();

            // Validate the Session business response element.
            Assert.IsNotNull(newSessionBusinessResponse);
            Assert.IsNotNull(newSessionBusinessResponse.Session);
            Assert.AreEqual("6dk61ufcuzp3f7vs", newSessionBusinessResponse.Session.SessionCode);
        }
Пример #3
0
        /// <summary>
        /// Should throw the InvalidName error code.
        /// </summary>
        private void ShouldThrowInvalidNameErrorCode(string name)
        {
            // Build the test harness.
            SchedulingBusinessLogicComponentTestHarness testHarness = new SchedulingBusinessLogicComponentTestHarness();

            // Build the NewSession business request.
            NewSessionBusinessRequest newSessionBusinessRequest = new NewSessionBusinessRequest();

            // Build the Session business request element.
            NewSessionBusinessRequest.SessionBusinessRequestElement sessionBusinessRequestElement = new NewSessionBusinessRequest.SessionBusinessRequestElement();
            sessionBusinessRequestElement.Name      = name;
            sessionBusinessRequestElement.StartDate = new DateTime(2001, 1, 1);
            newSessionBusinessRequest.Session       = sessionBusinessRequestElement;

            try
            {
                // Invoke the NewSession business operation.
                testHarness.SchedulingBusinessLogicComponent.NewSession(testHarness.MockedDatabaseConnection, newSessionBusinessRequest).Wait();

                // Validate an exception was thrown.
                Assert.Fail();
            }
            catch (AggregateException ex)
            {
                // Verify the mocked components.
                testHarness.VerifyMockedComponents();

                // Validate a NewSession business exception was thrown.
                NewSessionBusinessException NewSessionBusinessException = ex.InnerExceptions[0] as NewSessionBusinessException;
                Assert.IsNotNull(NewSessionBusinessException);
                Assert.AreEqual("SchedulingBusinessLogicComponent.NewSession() has thrown a NewSession business exception. See the Errors property for details.", NewSessionBusinessException.Message);

                // Validate the NewSession business exception contains the InvalidName error code.
                Assert.IsNotNull(NewSessionBusinessException.Errors);
                Assert.AreEqual(1, NewSessionBusinessException.Errors.Length);
                Assert.AreEqual(NewSessionBusinessException.ErrorCodes.InvalidName, NewSessionBusinessException.Errors[0].ErrorCode);
                Assert.AreEqual(name, NewSessionBusinessException.Errors[0].ErroneousValue);
            }
        }
        /// <summary>
        /// Validates the NewSession business request.
        /// </summary>
        private void ValidateNewSessionRequest(NewSessionBusinessRequest businessRequest)
        {
            // Build the list of errors.
            List <NewSessionBusinessException.ErrorBusinessExceptionElement> errorBusinessExceptionElements = new List <NewSessionBusinessException.ErrorBusinessExceptionElement>();

            // Validate the Session business request element.
            this.ValidateNewSessionRequestProperty(businessRequest, "Session", businessRequest.Session, NewSessionBusinessException.ErrorCodes.InvalidSession, errorBusinessExceptionElements);
            if (businessRequest.Session != null)
            {
                // Validate the Session business request element properties.
                NewSessionBusinessRequest.SessionBusinessRequestElement sessionBusinessRequestElement = businessRequest.Session;
                this.ValidateNewSessionRequestProperty(sessionBusinessRequestElement, "Name", sessionBusinessRequestElement.Name, NewSessionBusinessException.ErrorCodes.InvalidName, errorBusinessExceptionElements);
            }

            // Check if any errors were added to the list.
            if (errorBusinessExceptionElements.Any())
            {
                // Throw a NewSession business exception.
                NewSessionBusinessException businessException = this.BuildNewSessionBusinessException(errorBusinessExceptionElements.ToArray());
                throw businessException;
            }
        }