예제 #1
0
        public void ShouldRequireFields()
        {
            var command = new CreateAddressCommand();

            FluentActions.Invoking(() =>
                                   SendAsync(command)).Should().Throw <ValidationException>();
        }
예제 #2
0
        public Result Handle(CreateAddressCommand command)
        {
            // createAddressResult contains all error messages if address data is invalid
            var createAddressResult = Address.Create(command.Street, command.Number, command.City);

            // Return failed result if address is invalid. Return ASAP
            if (createAddressResult.IsFailed)
            {
                return(createAddressResult.ToResult());
            }

            var customer = _repository.GetById(command.CustomerId);

            var addAddressResult = customer.AddAddress(createAddressResult.Value);

            // Return failed result if adding address is not possible because of business rules. Return ASAP
            if (addAddressResult.IsFailed)
            {
                return(addAddressResult);
            }

            // Manipulations are commited and return success result if nothing failed
            _repository.Commit();
            return(Result.Ok());
        }
        public void CallCompleteOfDataBase_WhenAddressIsCreatedAddress()
        {
            //Arrange
            var streetParam     = "street";
            var postalCodeParam = "1715";
            var townId          = 1;
            var validParameters = new List <string>()
            {
                streetParam, postalCodeParam, townId.ToString()
            };
            var dbMock      = new Mock <IDatabase>();
            var factoryMock = new Mock <IModelsFactory>();

            var addressMock = new Mock <Address>();

            factoryMock.Setup(f => f.CreateAddress(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Town>())).Returns(addressMock.Object);

            var townMock = new Mock <Town>();

            var townRepositoryMock = new Mock <ITownRepository>();

            townRepositoryMock.Setup(s => s.SingleOrDefault(It.IsAny <Expression <Func <Town, bool> > >())).Returns(townMock.Object);
            dbMock.Setup(d => d.Towns).Returns(townRepositoryMock.Object);

            var addressRepositoryMock = new Mock <IAddessRepository>();

            dbMock.Setup(d => d.Addesses).Returns(addressRepositoryMock.Object);
            var sut = new CreateAddressCommand(dbMock.Object, factoryMock.Object);

            //Act
            var result = sut.Execute(validParameters);

            //Assert
            dbMock.Verify(d => d.Complete(), Times.Once);
        }
예제 #4
0
        public async Task <CreateAddressCommand> CreateAddress(string token, CreateAddressCommand command)
        {
            var result = await _requestProvider.PostAsync(GlobalSetting.Instance.AddressEndPoint, command,
                                                          Settings.AccessToken);

            return(result);
        }
예제 #5
0
        public async Task ShouldCreateCreateAddress()
        {
            var userId = await RunAsDefaultUserAsync();

            var employeeId = await SendAsync(new CreateEmployeeCommand
            {
                FirstName = "TestFirstName",
                LastName  = "TestUpdateLastName",
                Email     = "*****@*****.**",
                Pesel     = "12345612"
            });

            var command = new CreateAddressCommand
            {
                EmployeeId = employeeId,
                Street     = "Łąćna",
                City       = "Poznań",
                PostCode   = "66666"
            };

            var addressId = await SendAsync(command);

            var addr = await FindAsync <Address>(addressId);

            addr.Should().NotBeNull();
            addr.EmployeeId.Should().Be(command.EmployeeId);
            addr.Street.Should().Be(command.Street);
            addr.City.Should().Be(command.City);
            addr.PostCode.Should().Be(command.PostCode);
            addr.CreatedBy.Should().Be(userId);
            addr.Created.Should().BeCloseTo(DateTime.Now, 10000);
            addr.LastModifiedBy.Should().BeNull();
            addr.LastModified.Should().BeNull();
        }
        public ActionResult <Company> CreateAddress([FromRoute] int id, [FromBody] CreateAddressCommand command)
        {
            command.CompanyId = id;

            var company = _companyService.CreateAddress(command);

            return(Ok(company));
        }
        public void ShouldNotCreateAddress_When_CommandIsInvalid()
        {
            var command = new CreateAddressCommand("", "", "", "", "", EAddressType.Billing, Guid.NewGuid());
            var handler = new AddressCommandHandler(null);

            var result = handler.Handle(command);

            Assert.False(result.IsValid);
        }
        public void ShouldCreateAddress_When_CommandIsValid()
        {
            var command = new CreateAddressCommand("Street One", "London", "LND", "England", "77777", EAddressType.Billing, Guid.NewGuid());
            var handler = new AddressCommandHandler(null);

            var result = handler.Handle(command);

            Assert.True(result.IsValid);
        }
예제 #9
0
        public void CompleteAddress(CreateAddressCommand createAddress, string personID)
        {
            var address = new Address(createAddress.City, createAddress.ZipCode, createAddress.StreetName, personID, createAddress.StreetNumber, createAddress.HomeNumber);

            var imapper    = AutoMapperConfig.GetMapper(); // mapuje obiekt domenowy na płaski obiekt
            var addressDTO = imapper.Map <Address, AddressDTO>(address);

            addressRepository.Create(addressDTO);
        }
예제 #10
0
        public async Task <IActionResult> Address(CreateAddressCommand command)
        {
            if (command == null)
            {
                throw new BadRequestException("BAD_REQUEST", @"Bad Request");
            }

            return(Ok(await Mediator.Send(command)));
        }
예제 #11
0
        public async Task <IActionResult> Create(int userId, CreateAddressCommand command)
        {
            if (userId != UserId)
            {
                return(Unauthorized());
            }

            var address = await _mediator.Send(command);

            return(CreatedAtRoute(nameof(GetAddress), new { userId, id = address.Id }, address));
        }
예제 #12
0
        public IActionResult Post([FromBody] CreateAddressCommand command)
        {
            var result = _handler.Handle(command);

            if (!result.IsValid)
            {
                return(BadRequest(result));
            }

            return(Ok(result));
        }
예제 #13
0
        public Address Create(CreateAddressCommand command)
        {
            var Address = new Address(command.CEP, command.State, command.City, command.Street, command.Number, command.Type, command.Description);

            Address.Validate();
            _repository.Create(Address);

            if (Commit())
            {
                return(Address);
            }

            return(null);
        }
        public void ReturnNotValidParameters_WhenParametersAreDifferentOfThree(params string[] parameters)
        {
            //Arrange
            var dbMock      = new Mock <IDatabase>();
            var factoryMock = new Mock <IModelsFactory>();

            var sut            = new CreateAddressCommand(dbMock.Object, factoryMock.Object);
            var expectedString = "Not valid number";

            //Act
            var result = sut.Execute(parameters);

            //Assert
            StringAssert.Contains(expectedString, result);
        }
        public void ReturnParametersAreEmpty_WhenSomeOfTheParametersIsEmpty(params string[] parameters)
        {
            //Arrange
            var dbMock      = new Mock <IDatabase>();
            var factoryMock = new Mock <IModelsFactory>();

            var sut            = new CreateAddressCommand(dbMock.Object, factoryMock.Object);
            var expectedString = "parameters are empty";

            //Act
            var result = sut.Execute(parameters);

            //Assert
            StringAssert.Contains(expectedString, result);
        }
        public void ReturnNotValidTownId_WhenThirdParameterCannotBeParsedToInt(params string[] parameters)
        {
            //Arrange
            var dbMock      = new Mock <IDatabase>();
            var factoryMock = new Mock <IModelsFactory>();

            var sut            = new CreateAddressCommand(dbMock.Object, factoryMock.Object);
            var expectedString = "Not Valid Town Id";

            //Act
            var result = sut.Execute(parameters);

            //Assert
            StringAssert.Contains(expectedString, result);
        }
        public async Task CreateAddress_UserAlreadyHasAPrimaryAddress_ShouldSetCurrentPrimaryAddressToFalse()
        {
            var sut                   = new CreateAddressCommandHandler(_context);
            var currentUser           = _context.User.First();
            var addressCountBeforeAct = _context.Address.ToList().Count;
            var oldPrimaryAddress     =
                _context.Address.First(x => x.UserId == currentUser.Id && x.PrimaryAddress);

            var command = new CreateAddressCommand {
                City = "Glasgow", UserId = currentUser.Id, PrimaryAddress = true
            };
            await sut.Handle(command, CancellationToken.None);

            oldPrimaryAddress.PrimaryAddress.ShouldBe(false);
            _context.Address.First(x => x.UserId == currentUser.Id && x.PrimaryAddress).City.ShouldBe("Glasgow");
            _context.Address.Count().ShouldBe(addressCountBeforeAct + 1);
        }
예제 #18
0
        public Company CreateAddress(CreateAddressCommand command)
        {
            var company = GetCompany(command.CompanyId);

            company.Addresses.Add(new CompanyAddresses
            {
                CompanyAddressType = CompanyAddressType.Office,
                Address            = new Address
                {
                    Street   = command.Street,
                    Number   = command.Number,
                    Postcode = command.Postcode
                }
            });

            _contactsContext.SaveChanges();
            return(company);
        }
예제 #19
0
        public ActionResult CompleteAddress(CreateAddressCommand createAddress)
        {
            var personDTO  = personService.Load(User.Identity.GetUserId());
            var addressDTO = personService.LoadAddress(personDTO.PersonID);

            if (addressDTO != null)
            {
                ViewBag.Message = "Już dodałeś adres czy chcesz go zaktualizować ?";
            }

            if (addressDTO == null && ModelState.IsValid)
            {
                personService.CompleteAddress(createAddress, personDTO.PersonID);
                return(RedirectToAction("Index", "Home"));
            }

            return(View());
        }
        public async Task Delete_Address_Should_Return_Status_Code_204()
        {
            var registerCommand = new RegisterCommand()
            {
                FirstName       = "FirstNameTestDelete",
                LastName        = "LastNameTestDelete",
                CompanyName     = "TestCompanyDelete",
                Email           = "*****@*****.**",
                ConfirmEmail    = "*****@*****.**",
                Password        = "******",
                ConfirmPassword = "******"
            };

            UserDetailsDto user = await AuthHelper.SignUp(_httpClient, registerCommand);

            var newAddress = new CreateAddressCommand()
            {
                UserId         = user.Id,
                Alias          = "My home",
                FirstName      = user.FirstName,
                Lastname       = user.LastName,
                Place          = "Warszawa",
                PostCode       = "00-005",
                Street         = "test54",
                BuildingNumber = "12A",
                Phone          = "000-000-000",
                Email          = user.Email
            };

            var createdAddress = await _httpClient.PostAsync <CreateAddressCommand, AddressDetailsDto>
                                     ($"/api/users/{user.Id}/addresses", newAddress);

            var responseDeletedAddress = await _httpClient.DeleteAsync($"/api/users/{user.Id}/addresses/{createdAddress.Id}");

            var deletedAddress = await _httpClient.GetAsync <AddressDetailsDto>($"api/users/{user.Id}/addresses/{createdAddress.Id}");

            Assert.Equal(HttpStatusCode.NoContent, responseDeletedAddress.StatusCode);
            Assert.Null(deletedAddress);
        }
        public void ReturnSuchIdDoesNotExist_WhenTownIsNotInTheRepository()
        {
            //Arrange
            var validParameters = new List <string>()
            {
                "street", "postalcode", "1"
            };
            var dbMock      = new Mock <IDatabase>();
            var factoryMock = new Mock <IModelsFactory>();

            var townRepositoryMock = new Mock <ITownRepository>();

            townRepositoryMock.Setup(s => s.SingleOrDefault(It.IsAny <Expression <Func <Town, bool> > >())).Returns((Town)null);
            dbMock.Setup(d => d.Towns).Returns(townRepositoryMock.Object);

            var sut            = new CreateAddressCommand(dbMock.Object, factoryMock.Object);
            var expectedString = "such id doesn't exist";

            //Act
            var result = sut.Execute(validParameters);

            //Assert
            StringAssert.Contains(expectedString, result);
        }
 public ICommandResult Handle(CreateAddressCommand command)
 {
     throw new NotImplementedException();
 }
예제 #23
0
        public async Task Run()
        {
            var tokenSource = new CancellationTokenSource();

            // Create 2 people at 1 address
            var addAddressCommand1 = new CreateAddressCommand
            {
                Street     = "15 My Street",
                Suburb     = "Springfield",
                State      = "My State",
                Country    = "Safe Country",
                PostalCode = "12345"
            };
            await _processCommands.Execute(addAddressCommand1, tokenSource.Token).ConfigureAwait(false);

            var addCustomerCommand1 = new CreateCustomerCommand
            {
                FirstName    = "Bob",
                LastName     = "Jones",
                EmailAddress = "*****@*****.**",
                AddressId    = addAddressCommand1.CreatedEntity.Id
                               //Commit = false
            };

            var addCustomerCommand2 = new CreateCustomerCommand
            {
                FirstName    = "Herbert",
                LastName     = "Scrackle",
                EmailAddress = "*****@*****.**",
                AddressId    = addAddressCommand1.CreatedEntity.Id
                               //Commit =  false
            };

            await _processCommands.Execute(addCustomerCommand1, tokenSource.Token).ConfigureAwait(false);

            await _processCommands.Execute(addCustomerCommand2, tokenSource.Token).ConfigureAwait(false);

            // Now create 1 person at a second address
            var addAddressCommand2 = new CreateAddressCommand
            {
                Street     = "742 Evergreen Terrace",
                Suburb     = "Springfield",
                State      = "Unknown",
                Country    = "USA",
                PostalCode = "Unknown"
            };
            await _processCommands.Execute(addAddressCommand2, tokenSource.Token).ConfigureAwait(false);

            var addCustomerCommand3 = new CreateCustomerCommand
            {
                FirstName    = "Homer",
                LastName     = "Simpson",
                EmailAddress = "*****@*****.**",
                AddressId    = addAddressCommand2.CreatedEntity.Id
                               //Commit = false
            };
            await _processCommands.Execute(addCustomerCommand3, tokenSource.Token).ConfigureAwait(false);

            Console.WriteLine("Records created: 2 addresses, 3 people");

            // Now test getting data back
            {
                // Query using "Projector" pattern where the mapping is done on Sql Server rather than in this application.
                // This approach is more efficient as only the required data ever comes back to the application
                var customersByQuery = new CustomersBy
                {
                    FirstName = "Bob"
                };

                var results = await _processQueries.Execute(customersByQuery, tokenSource.Token).ConfigureAwait(false);

                var resultsList = results?.ToList();
                Console.WriteLine($"Querying for Customer with First Name of '{customersByQuery.FirstName}' returns {resultsList?.Count ?? 0}");
                if (resultsList != null && resultsList.Count > 0)
                {
                    var json = JsonSerializer.Serialize(resultsList, new JsonSerializerOptions
                    {
                        WriteIndented = true
                    });

                    Console.WriteLine("Query result:");
                    Console.WriteLine(json);
                }

                Console.WriteLine();
            }

            {
                // Query using Include expressions. There may be scenarios where an include is required. EF Core poses restrictions
                // when using AsExpandable() from LinqKit, so this QueryHandler shows how to pass Include expressions to Query<TEntity>(...)
                var customersWithIncludeByQuery = new CustomersWithIncludeBy()
                {
                    FirstName = "Bob"
                };

                var resultsUsingInclude = await _processQueries.Execute(customersWithIncludeByQuery, tokenSource.Token).ConfigureAwait(false);

                var resultsList = resultsUsingInclude?.ToList();

                Console.WriteLine($"Querying for Customer with First Name of '{customersWithIncludeByQuery.FirstName}' returns {resultsList?.Count ?? 0}");

                if (resultsList != null && resultsList.Count > 0)
                {
                    var json = JsonSerializer.Serialize(resultsList, new JsonSerializerOptions
                    {
                        WriteIndented = true
                    });

                    Console.WriteLine("Query result:");
                    Console.WriteLine(json);
                }

                Console.WriteLine();
            }

            {
                // Get a single address
                var addressesByQuery = new AddressesBy
                {
                    Id = addAddressCommand1.CreatedEntity.Id
                };

                var addressResults = await _processQueries.Execute(addressesByQuery, tokenSource.Token).ConfigureAwait(false);

                var addressResultsList = addressResults?.ToList();
                Console.WriteLine($"Querying for Address with id {addAddressCommand1.CreatedEntity.Id} returns {addressResultsList?.Count ?? 0}");

                if (addressResultsList != null && addressResultsList.Count > 0)
                {
                    var json = JsonSerializer.Serialize(addressResultsList, new JsonSerializerOptions
                    {
                        WriteIndented = true
                    });

                    Console.WriteLine("Query result (1 address):");
                    Console.WriteLine(json);
                }

                Console.WriteLine();
            }

            {
                // Get all address
                var addressesByQuery = new AddressesBy
                {
                };

                var addressResults = await _processQueries.Execute(addressesByQuery, tokenSource.Token).ConfigureAwait(false);

                var addressResultsList = addressResults?.ToList();
                Console.WriteLine($"Querying for all Addresses returns {addressResultsList?.Count ?? 0}");

                if (addressResultsList != null && addressResultsList.Count > 0)
                {
                    var json = JsonSerializer.Serialize(addressResultsList, new JsonSerializerOptions
                    {
                        WriteIndented = true
                    });

                    Console.WriteLine("Query result (multiple addresses):");
                    Console.WriteLine(json);
                }

                Console.WriteLine();
            }

            // Create an Employer, and a CustomerEmployerMapping for one of the Customers above
            var addEmployerCommand = new CreateEmployerCommand
            {
                Name = "Springfield Power Plant"
            };
            await _processCommands.Execute(addEmployerCommand, tokenSource.Token);

            var addCustomerEmployerMappingComand = new CreateCustomerEmployerMappingCommand
            {
                CustomerId = addCustomerCommand3.CreatedEntity.Id,
                EmployerId = addEmployerCommand.CreatedEntity.Id
            };
            await _processCommands.Execute(addCustomerEmployerMappingComand, tokenSource.Token);

            {
                // And now show the full details of all CustomerEmployerMappings, includinging drilling down
                var getAllCEMs = new GetCustomerEmployerMappings();
                var cemResults = await _processQueries.Execute(getAllCEMs, tokenSource.Token).ConfigureAwait(false);

                var cemResultsList = cemResults?.ToList();
                Console.WriteLine($"Querying for all CustomerEmployerMappings returns {cemResultsList?.Count ?? 0}");

                if (cemResultsList != null && cemResultsList.Count > 0)
                {
                    var json = JsonSerializer.Serialize(cemResultsList, new JsonSerializerOptions
                    {
                        WriteIndented = true
                    });

                    Console.WriteLine("Query result:");
                    Console.WriteLine(json);
                }

                Console.WriteLine();
            }
        }
        public async Task <ActionResult> Create([FromForm] CreateAddressCommand command)
        {
            await Mediator.Send(command);

            return(NoContent());
        }
예제 #25
0
 public CreateAddressCommandValidatorTests()
 {
     this.createValidator = new CreateAddressCommandValidator();
     this.createCommand   = new CreateAddressCommand();
 }
예제 #26
0
 public async Task <ActionResult <int> > Create(CreateAddressCommand command)
 {
     return(await Mediator.Send(command));
 }
        public async Task Create_Two_Addresses_For_New_User_Should_Return_Two_Addresses()
        {
            var registerCommand = new RegisterCommand()
            {
                FirstName       = "FirstNameTest",
                LastName        = "LastNameTest",
                CompanyName     = "TestCompany",
                Email           = "*****@*****.**",
                ConfirmEmail    = "*****@*****.**",
                Password        = "******",
                ConfirmPassword = "******"
            };

            UserDetailsDto user = await AuthHelper.SignUp(_httpClient, registerCommand);

            var address1 = new CreateAddressCommand()
            {
                UserId          = user.Id,
                Alias           = "Warszawa 100",
                FirstName       = user.FirstName,
                Lastname        = user.LastName,
                Place           = "Warszawa",
                PostCode        = "00-001",
                Street          = "test",
                BuildingNumber  = "100",
                ApartmentNumber = "",
                Phone           = "000-000-000",
                Email           = user.Email,
            };

            var address2 = new CreateAddressCommand()
            {
                UserId          = user.Id,
                Alias           = "Warszawa 12a/4",
                FirstName       = user.FirstName,
                Lastname        = user.LastName,
                Place           = "Warszawa",
                PostCode        = "00-002",
                Street          = "test2",
                BuildingNumber  = "12A",
                ApartmentNumber = "4",
                Phone           = "000-000-000",
                Email           = user.Email
            };

            var createdAddress1 = await _httpClient.PostAsync <CreateAddressCommand, AddressDetailsDto>
                                      ($"api/users/{user.Id}/addresses", address1);

            var createdAddress2 = await _httpClient.PostAsync <CreateAddressCommand, AddressDetailsDto>
                                      ($"api/users/{user.Id}/addresses", address2);

            var addresses = await _httpClient.GetAsync <List <AddressDto> >($"api/users/{user.Id}/addresses");

            Assert.Equal(2, addresses.Count);

            Assert.Equal(address1.Alias, createdAddress1.Alias);
            Assert.Equal(address1.Email, createdAddress1.Email);
            Assert.Equal(address1.Phone, createdAddress1.Phone);
            Assert.Equal(address1.UserId, createdAddress1.UserId);

            Assert.Equal(address2.Alias, createdAddress2.Alias);
            Assert.Equal(address2.Email, createdAddress2.Email);
            Assert.Equal(address2.Phone, createdAddress2.Phone);
            Assert.Equal(address2.UserId, createdAddress2.UserId);
        }
        public async Task Update_Address_Should_Return_Status_Code_204()
        {
            var registerCommand = new RegisterCommand()
            {
                FirstName       = "FirstNameTestAddressUpdate",
                LastName        = "LastNameTestAddressUpdate",
                CompanyName     = "TestCompanyAddressUpdate",
                Email           = "*****@*****.**",
                ConfirmEmail    = "*****@*****.**",
                Password        = "******",
                ConfirmPassword = "******"
            };

            UserDetailsDto user = await AuthHelper.SignUp(_httpClient, registerCommand);

            var newAddress = new CreateAddressCommand()
            {
                UserId         = user.Id,
                Alias          = "My home",
                FirstName      = user.FirstName,
                Lastname       = user.LastName,
                Place          = "Warszawa",
                PostCode       = "00-005",
                Street         = "test54",
                BuildingNumber = "12A",
                Phone          = "000-000-000",
                Email          = user.Email
            };

            var createdAddress = await _httpClient.PostAsync <CreateAddressCommand, AddressDetailsDto>
                                     ($"/api/users/{user.Id}/addresses", newAddress);

            var addressToUpdate = new ChangeAddressCommand()
            {
                Id              = createdAddress.Id,
                Alias           = "updated 999",
                Email           = "*****@*****.**",
                Phone           = "123-123-123",
                BuildingNumber  = "999A",
                ApartmentNumber = "99",
                Place           = "Place updated",
                Street          = "Street updated",
                FirstName       = user.FirstName,
                Lastname        = user.LastName,
                PostCode        = "00-321"
            };

            var messagePut = await _httpClient.PutAsync($"/api/users/{user.Id}/addresses/{createdAddress.Id}", addressToUpdate);

            var updatedAddress = await _httpClient.GetAsync <AddressDetailsDto>($"api/users/{user.Id}/addresses/{addressToUpdate.Id}");

            Assert.Equal(HttpStatusCode.NoContent, messagePut.StatusCode);
            Assert.Equal(addressToUpdate.Id, updatedAddress.Id);
            Assert.Equal(addressToUpdate.Alias, updatedAddress.Alias);
            Assert.Equal(addressToUpdate.Email, updatedAddress.Email);
            Assert.Equal(addressToUpdate.Phone, updatedAddress.Phone);
            Assert.Equal(addressToUpdate.BuildingNumber, updatedAddress.BuildingNumber);
            Assert.Equal(addressToUpdate.ApartmentNumber, updatedAddress.ApartmentNumber);
            Assert.Equal(addressToUpdate.Place, updatedAddress.Place);
            Assert.Equal(addressToUpdate.FirstName, updatedAddress.FirstName);
            Assert.Equal(addressToUpdate.Lastname, updatedAddress.LastName);
            Assert.Equal(addressToUpdate.Street, updatedAddress.Street);
            Assert.Equal(addressToUpdate.PostCode, updatedAddress.PostCode);
        }