public void TestThatHandleExceptionCallsBuildOnExceptionBuilder()
        {
            var fixture = new Fixture();
            var systemDataRepositoryMock  = MockRepository.GenerateMock <ISystemDataRepository>();
            var foodWasteObjectMapperMock = MockRepository.GenerateMock <IFoodWasteObjectMapper>();
            var specificationMock         = MockRepository.GenerateMock <ISpecification>();
            var commonValidationsMock     = MockRepository.GenerateMock <ICommonValidations>();

            var exceptionBuilderMock = MockRepository.GenerateMock <IExceptionBuilder>();

            exceptionBuilderMock.Stub(m => m.Build(Arg <Exception> .Is.Anything, Arg <MethodBase> .Is.NotNull))
            .WhenCalled(e =>
            {
                var methodBase = (MethodBase)e.Arguments.ElementAt(1);
                Assert.That(methodBase, Is.Not.Null);
                Assert.That(methodBase.ReflectedType.Name, Is.EqualTo(typeof(TranslationAddCommandHandler).Name));
            })
            .Return(fixture.Create <Exception>())
            .Repeat.Any();

            var translationAddCommandHandler = new TranslationAddCommandHandler(systemDataRepositoryMock, foodWasteObjectMapperMock, specificationMock, commonValidationsMock, exceptionBuilderMock);

            Assert.That(translationAddCommandHandler, Is.Not.Null);

            var exception = fixture.Create <Exception>();

            Assert.Throws <Exception>(() => translationAddCommandHandler.HandleException(fixture.Create <TranslationAddCommand>(), exception));

            exceptionBuilderMock.AssertWasCalled(m => m.Build(Arg <Exception> .Is.Equal(exception), Arg <MethodBase> .Is.NotNull));
        }
        public void TestThatExecuteCallsInsertOnSystemDataRepository()
        {
            var fixture = new Fixture();
            var commonValidationsMock = MockRepository.GenerateMock <ICommonValidations>();
            var exceptionBuilderMock  = MockRepository.GenerateMock <IExceptionBuilder>();

            var translationInfoMock      = DomainObjectMockBuilder.BuildTranslationInfoMock();
            var translationOfIdentifier  = Guid.NewGuid();
            var translationValue         = fixture.Create <string>();
            var systemDataRepositoryMock = MockRepository.GenerateMock <ISystemDataRepository>();

            systemDataRepositoryMock.Stub(m => m.Get <ITranslationInfo>(Arg <Guid> .Is.Anything))
            .Return(translationInfoMock)
            .Repeat.Any();
            systemDataRepositoryMock.Stub(m => m.Insert(Arg <ITranslation> .Is.NotNull))
            .WhenCalled(e =>
            {
                var translation = (ITranslation)e.Arguments.ElementAt(0);
                Assert.That(translation, Is.Not.Null);
                Assert.That(translation.Identifier.HasValue, Is.False);
                Assert.That(translation.TranslationOfIdentifier, Is.EqualTo(translationOfIdentifier));
                Assert.That(translation.TranslationInfo, Is.Not.Null);
                Assert.That(translation.TranslationInfo, Is.EqualTo(translationInfoMock));
                Assert.That(translation.Value, Is.Not.Null);
                Assert.That(translation.Value, Is.Not.Empty);
                Assert.That(translation.Value, Is.EqualTo(translationValue));
            })
            .Return(DomainObjectMockBuilder.BuildTranslationMock(Guid.NewGuid()))
            .Repeat.Any();

            var specificationMock = MockRepository.GenerateMock <ISpecification>();

            specificationMock.Stub(m => m.IsSatisfiedBy(Arg <Func <bool> > .Is.NotNull, Arg <Exception> .Is.Anything))
            .Return(specificationMock)
            .Repeat.Any();

            var foodWasteObjectMapperMock = MockRepository.GenerateMock <IFoodWasteObjectMapper>();

            foodWasteObjectMapperMock.Stub(m => m.Map <IIdentifiable, ServiceReceiptResponse>(Arg <IIdentifiable> .Is.Anything, Arg <CultureInfo> .Is.Anything))
            .Return(fixture.Create <ServiceReceiptResponse>())
            .Repeat.Any();

            var translationAddCommand = fixture.Build <TranslationAddCommand>()
                                        .With(m => m.TranslationInfoIdentifier, Guid.NewGuid())
                                        .With(m => m.TranslationOfIdentifier, translationOfIdentifier)
                                        .With(m => m.TranslationValue, translationValue)
                                        .Create();

            var translationAddCommandHandler = new TranslationAddCommandHandler(systemDataRepositoryMock, foodWasteObjectMapperMock, specificationMock, commonValidationsMock, exceptionBuilderMock);

            Assert.That(translationAddCommandHandler, Is.Not.Null);

            translationAddCommandHandler.Execute(translationAddCommand);

            systemDataRepositoryMock.AssertWasCalled(m => m.Insert(Arg <ITranslation> .Is.NotNull));
        }
        public void TestThatConstructorInitializeTranslationAddCommandHandler()
        {
            var systemDataRepositoryMock  = MockRepository.GenerateMock <ISystemDataRepository>();
            var foodWasteObjectMapperMock = MockRepository.GenerateMock <IFoodWasteObjectMapper>();
            var specificationMock         = MockRepository.GenerateMock <ISpecification>();
            var commonValidationsMock     = MockRepository.GenerateMock <ICommonValidations>();
            var exceptionBuilderMock      = MockRepository.GenerateMock <IExceptionBuilder>();

            var translationAddCommandHandler = new TranslationAddCommandHandler(systemDataRepositoryMock, foodWasteObjectMapperMock, specificationMock, commonValidationsMock, exceptionBuilderMock);

            Assert.That(translationAddCommandHandler, Is.Not.Null);
        }
        public void TestThatExecuteReturnsServiceReceiptFromMapOnFoodWasteObjectMapper()
        {
            var fixture = new Fixture();
            var commonValidationsMock = MockRepository.GenerateMock <ICommonValidations>();
            var exceptionBuilderMock  = MockRepository.GenerateMock <IExceptionBuilder>();

            var systemDataRepositoryMock = MockRepository.GenerateMock <ISystemDataRepository>();

            systemDataRepositoryMock.Stub(m => m.Get <ITranslationInfo>(Arg <Guid> .Is.Anything))
            .Return(DomainObjectMockBuilder.BuildTranslationInfoMock())
            .Repeat.Any();
            systemDataRepositoryMock.Stub(m => m.Insert(Arg <ITranslation> .Is.NotNull))
            .Return(DomainObjectMockBuilder.BuildTranslationMock(Guid.NewGuid()))
            .Repeat.Any();

            var specificationMock = MockRepository.GenerateMock <ISpecification>();

            specificationMock.Stub(m => m.IsSatisfiedBy(Arg <Func <bool> > .Is.NotNull, Arg <Exception> .Is.Anything))
            .Return(specificationMock)
            .Repeat.Any();

            var serviceReceipt = fixture.Build <ServiceReceiptResponse>()
                                 .With(m => m.Identifier, Guid.NewGuid())
                                 .With(m => m.EventDate, DateTime.Now)
                                 .Create();
            var foodWasteObjectMapperMock = MockRepository.GenerateMock <IFoodWasteObjectMapper>();

            foodWasteObjectMapperMock.Stub(m => m.Map <IIdentifiable, ServiceReceiptResponse>(Arg <IIdentifiable> .Is.Anything, Arg <CultureInfo> .Is.Anything))
            .Return(serviceReceipt)
            .Repeat.Any();

            var translationAddCommand = fixture.Build <TranslationAddCommand>()
                                        .With(m => m.TranslationInfoIdentifier, Guid.NewGuid())
                                        .With(m => m.TranslationOfIdentifier, Guid.NewGuid())
                                        .With(m => m.TranslationValue, fixture.Create <string>())
                                        .Create();

            var translationAddCommandHandler = new TranslationAddCommandHandler(systemDataRepositoryMock, foodWasteObjectMapperMock, specificationMock, commonValidationsMock, exceptionBuilderMock);

            Assert.That(translationAddCommandHandler, Is.Not.Null);

            var result = translationAddCommandHandler.Execute(translationAddCommand);

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.EqualTo(serviceReceipt));
        }
        public void TestThatExecuteThrowsArgumentNullExceptionIfTranslationAddCommandIsNull()
        {
            var systemDataRepositoryMock  = MockRepository.GenerateMock <ISystemDataRepository>();
            var foodWasteObjectMapperMock = MockRepository.GenerateMock <IFoodWasteObjectMapper>();
            var specificationMock         = MockRepository.GenerateMock <ISpecification>();
            var commonValidationsMock     = MockRepository.GenerateMock <ICommonValidations>();
            var exceptionBuilderMock      = MockRepository.GenerateMock <IExceptionBuilder>();

            var translationAddCommandHandler = new TranslationAddCommandHandler(systemDataRepositoryMock, foodWasteObjectMapperMock, specificationMock, commonValidationsMock, exceptionBuilderMock);

            Assert.That(translationAddCommandHandler, Is.Not.Null);

            var exception = Assert.Throws <ArgumentNullException>(() => translationAddCommandHandler.Execute(null));

            Assert.That(exception, Is.Not.Null);
            Assert.That(exception.ParamName, Is.Not.Null);
            Assert.That(exception.ParamName, Is.Not.Empty);
            Assert.That(exception.ParamName, Is.EqualTo("command"));
            Assert.That(exception.InnerException, Is.Null);
        }
        public void TestThatExecuteCallsIsSatisfiedByOnSpecification3Times()
        {
            var fixture = new Fixture();
            var commonValidationsMock = MockRepository.GenerateMock <ICommonValidations>();
            var exceptionBuilderMock  = MockRepository.GenerateMock <IExceptionBuilder>();

            var systemDataRepositoryMock = MockRepository.GenerateMock <ISystemDataRepository>();

            systemDataRepositoryMock.Stub(m => m.Get <ITranslationInfo>(Arg <Guid> .Is.Anything))
            .Return(DomainObjectMockBuilder.BuildTranslationInfoMock())
            .Repeat.Any();
            systemDataRepositoryMock.Stub(m => m.Insert(Arg <ITranslation> .Is.Anything))
            .Return(DomainObjectMockBuilder.BuildTranslationMock(Guid.NewGuid()))
            .Repeat.Any();

            var specificationMock = MockRepository.GenerateMock <ISpecification>();

            specificationMock.Stub(m => m.IsSatisfiedBy(Arg <Func <bool> > .Is.NotNull, Arg <Exception> .Is.Anything))
            .Return(specificationMock)
            .Repeat.Any();

            var foodWasteObjectMapperMock = MockRepository.GenerateMock <IFoodWasteObjectMapper>();

            foodWasteObjectMapperMock.Stub(m => m.Map <IIdentifiable, ServiceReceiptResponse>(Arg <IIdentifiable> .Is.Anything, Arg <CultureInfo> .Is.Anything))
            .Return(fixture.Create <ServiceReceiptResponse>())
            .Repeat.Any();

            var translationAddCommand = fixture.Build <TranslationAddCommand>()
                                        .With(m => m.TranslationInfoIdentifier, Guid.NewGuid())
                                        .With(m => m.TranslationOfIdentifier, Guid.NewGuid())
                                        .With(m => m.TranslationValue, fixture.Create <string>())
                                        .Create();

            var translationAddCommandHandler = new TranslationAddCommandHandler(systemDataRepositoryMock, foodWasteObjectMapperMock, specificationMock, commonValidationsMock, exceptionBuilderMock);

            Assert.That(translationAddCommandHandler, Is.Not.Null);

            translationAddCommandHandler.Execute(translationAddCommand);

            specificationMock.AssertWasCalled(m => m.IsSatisfiedBy(Arg <Func <bool> > .Is.NotNull, Arg <IntranetBusinessException> .Is.TypeOf), opt => opt.Repeat.Times(3));
        }
        public void TestThatHandleExceptionThrowsCreatedExceptionFromExceptionBuilder()
        {
            var fixture = new Fixture();
            var systemDataRepositoryMock  = MockRepository.GenerateMock <ISystemDataRepository>();
            var foodWasteObjectMapperMock = MockRepository.GenerateMock <IFoodWasteObjectMapper>();
            var specificationMock         = MockRepository.GenerateMock <ISpecification>();
            var commonValidationsMock     = MockRepository.GenerateMock <ICommonValidations>();

            var exceptionToThrow     = fixture.Create <Exception>();
            var exceptionBuilderMock = MockRepository.GenerateMock <IExceptionBuilder>();

            exceptionBuilderMock.Stub(m => m.Build(Arg <Exception> .Is.Anything, Arg <MethodBase> .Is.Anything))
            .Return(exceptionToThrow)
            .Repeat.Any();

            var translationAddCommandHandler = new TranslationAddCommandHandler(systemDataRepositoryMock, foodWasteObjectMapperMock, specificationMock, commonValidationsMock, exceptionBuilderMock);

            Assert.That(translationAddCommandHandler, Is.Not.Null);

            var exception = Assert.Throws <Exception>(() => translationAddCommandHandler.HandleException(fixture.Create <TranslationAddCommand>(), fixture.Create <Exception>()));

            Assert.That(exception, Is.Not.Null);
            Assert.That(exception, Is.EqualTo(exceptionToThrow));
        }