Esempio n. 1
0
        private Either <IError, CapabilityInfo> GetCapabilityFromServer(string name)
        {
            var message = RequestCreator.Create(_encryptor, MessageType.GetCapability,
                                                JsonConvert.SerializeObject(new CapabilityInfo(name)));

            _requestSocket.SendMultipartMessage(message);

            var response    = _requestSocket.ReceiveMultipartMessage();
            var messageType = (MessageType)response.Pop().ConvertToInt32();

            switch (messageType)
            {
            case MessageType.GrantCapability:
                var infoJson = _encryptor.Decrypt(response.Pop().ToByteArray());
                var info     = JsonConvert.DeserializeObject <CapabilityInfo>(infoJson);
                return(new Right <IError, CapabilityInfo>(info));

            case MessageType.Error:
                var errorContent = response.Pop().ToByteArray();
                return(new Left <IError, CapabilityInfo>(ErrorMessageReceiver.GetError(errorContent)));

            default:
                return(new Left <IError, CapabilityInfo>(new UnexpectedMessageError()));
            }
        }
        private void SendEncryptionKey(RequestSocket requestSocket, string publicKey)
        {
            var encryptionClient  = new AsymetricEncryptor(publicKey);
            var encryptionKeyJson = JsonConvert.SerializeObject(_encryptor.EncryptionKey);
            var request           = RequestCreator.Create(encryptionClient, MessageType.SendEncryptionKey, encryptionKeyJson);

            requestSocket.SendMultipartMessage(request);
        }
Esempio n. 3
0
        [Fact] // async Task<bool> StartHomeManage(string id, byte[] fileContent)
        public async Task StartHomeManage_WithGivenRequestIdAndDocumentFile_ShouldInitiateManagementContract()
        {
            // Arrange
            var country = CountryCreator.Create();
            var city    = CityCreator.Create(country.Id);
            var home    = HomeCreator.CreateAny(city.Id);
            var image   = ImageCreator.CreateForModel();

            await this.Context.Countries.AddAsync(country);

            await this.Context.Cities.AddAsync(city);

            await this.Context.Homes.AddAsync(home);

            await this.Context.CloudImages.AddAsync(image);

            var request = RequestCreator.Create(home);

            await this.Context.Requests.AddAsync(request);

            await this.Context.SaveChangesAsync();

            var approvedRequest = RequestCreator.CreateManageApproved(home, request.User, request.Id);

            var user = request.User;

            this.UserManager
            .Setup(u => u.FindByIdAsync(user.Id))
            .Returns(Task.FromResult(user));
            await this.UserManager.Object
            .AddToRoleAsync(user, "Manager");

            var requestService = new Mock <IOwnerRequestService>();

            requestService.Setup(x => x.ApproveRequestAsync(request.Id))
            .Returns(Task.FromResult(approvedRequest));

            var contractService = new Mock <IOwnerContractService>();

            contractService.Setup(x => x.CreateManageContractAsync(new byte[1024], request.User))
            .Returns(Task.FromResult(true));

            var service = new OwnerListingService(this.Context, this.UserManager.Object, requestService.Object, contractService.Object);

            // Act
            var result = await service.StartHomeManage(request.Id, new byte[1024]);

            var changedHomeInfo = await this.Context.Homes.Where(h => h.Id == home.Id).FirstOrDefaultAsync();

            var changedUser = await this.Context.Users.Where(u => u.Id == user.Id).FirstOrDefaultAsync();

            // Assert
            result.Should().BeTrue();
            changedHomeInfo.ManagerId.Should().Equals(user.Id);
            changedUser.ManagedHomes.Count().Should().Be(1);
        }
Esempio n. 4
0
        public void RequestCreateWithoutPayloadTest()
        {
            var request = RequestCreator.Create(new NoEncryption(), MessageType.Acknowledge);

            Assert.AreEqual(2, request.FrameCount);

            var type = (MessageType)request.Pop().ConvertToInt32();

            Assert.AreEqual(MessageType.Acknowledge, type);

            var payload = request.Pop().ToByteArray();

            Assert.AreEqual(0, payload.Length);
        }
Esempio n. 5
0
        [Fact] // 7. async Task<OwnerRequestDetailsServiceModel> GetRequestDetailsAsync(string requestId)
        public async void GetRequestDetailsAsync_WithGivenRequestId_ShouldReturnServiceModel()
        {
            // Arrange
            var country = CountryCreator.Create();
            var city    = CityCreator.Create(country.Id);
            var owner   = UserCreator.Create("Suzdurma", "Saturov", "satura", "*****@*****.**");
            var home    = HomeCreator.CreateOwnerHome(owner.Id, city.Id);

            var request = RequestCreator.Create(home);

            var doc = new byte[1024];

            request.Document = doc;

            await this.Context.Countries.AddAsync(country);

            await this.Context.Cities.AddAsync(city);

            await this.Context.Users.AddAsync(owner);

            await this.Context.Homes.AddAsync(home);

            await this.Context.Requests.AddAsync(request);

            await this.Context.SaveChangesAsync();

            var model = new OwnerRequestDetailsServiceModel
            {
                Id            = request.Id,
                Date          = request.Date.ToString("dd/MM/yyyy h:mm tt"),
                UserFirstName = request.User.FirstName,
                UserLastName  = request.User.LastName,
                Email         = request.User.Email,
                Phone         = request.User.PhoneNumber,
                RequestType   = request.Type.ToString(),
                Document      = doc,
            };

            var service = new OwnerRequestService(this.Context);

            // Act
            var result = await service.GetRequestDetailsAsync(request.Id);

            var expected = model;

            // Assert
            result.Should().BeOfType <OwnerRequestDetailsServiceModel>();
            result.Should().Equals(expected);
        }
Esempio n. 6
0
        public void RequestCreateWithPayloadTest()
        {
            var payload = JsonConvert.SerializeObject(ErrorCode.InvocationError);
            var request = RequestCreator.Create(new NoEncryption(), MessageType.Error, payload);

            Assert.AreEqual(2, request.FrameCount);

            var type = (MessageType)request.Pop().ConvertToInt32();

            Assert.AreEqual(MessageType.Error, type);

            var errorCode = JsonConvert.DeserializeObject <ErrorCode>(request.Pop().ConvertToString());

            Assert.AreEqual(ErrorCode.InvocationError, errorCode);
        }
        private static Maybe <string> RequestPublicKey(RequestSocket requestSocket)
        {
            var request = RequestCreator.Create(new NoEncryption(), MessageType.RequestPublicKey);

            requestSocket.SendMultipartMessage(request);

            var responseMessage = requestSocket.ReceiveMultipartMessage();

            Maybe <string> response = null;

            ResponseReader.Read <string>(new NoEncryption(), new NoEncryption(), responseMessage)
            .Case((Response <string> publicKay) => response = new Maybe <string>(publicKay.Payload))
            .Fold(_ => response = new Nothing <string>());

            return(response);
        }
Esempio n. 8
0
        [Fact] // 2. async Task<IEnumerable<OwnerAllRequestsServiceModel>> GetAllRequestsWthDetailsAsync(string id)
        public async void GetAllRequestsWthDetailsAsync_WithGivenOwnerId_ShouldReturnCollectionOfRequests()
        {
            // Arrange
            var country      = CountryCreator.Create();
            var city         = CityCreator.Create(country.Id);
            var owner        = UserCreator.Create("Suzdurma", "Saturov", "satura", "*****@*****.**");
            var anotherOwner = UserCreator.Create("Svinevud", "Kulchibutov", "kulkata", "*****@*****.**");
            var home         = HomeCreator.CreateOwnerHome(owner.Id, city.Id);
            var home2        = HomeCreator.CreateOwnerHome(owner.Id, city.Id);
            var homе3        = HomeCreator.CreateOwnerHome(owner.Id, city.Id);
            var homе4        = HomeCreator.CreateOwnerHome(anotherOwner.Id, city.Id);

            var request  = RequestCreator.Create(home);
            var request2 = RequestCreator.Create(home2);
            var request3 = RequestCreator.Create(homе3);
            var request4 = RequestCreator.Create(homе4);

            request2.User.UserName = "******";
            request3.User.UserName = "******";

            await this.Context.Countries.AddAsync(country);

            await this.Context.Cities.AddAsync(city);

            await this.Context.Users.AddRangeAsync(owner, anotherOwner);

            await this.Context.Homes.AddRangeAsync(home, home2, homе3, homе4);

            await this.Context.Requests.AddRangeAsync(request, request2, request3, request4);

            await this.Context.SaveChangesAsync();

            var service = new OwnerRequestService(this.Context);

            // Act
            var result   = (await service.GetAllRequestsWthDetailsAsync(owner.Id)).ToList();
            var expected = await this.Context.Requests.Where(r => r.Home.OwnerId == owner.Id).ToListAsync();

            // Assert
            result.Should().AllBeOfType <OwnerAllRequestsServiceModel>();
            result.Count().Should().Equals(expected.Count());
            result.Should().HaveCount(3, "because there are 3 homes for which the owner received requests individually");
            result[0].Username = request.User.UserName;  // shpeka
            result[1].Username = request2.User.UserName; // fileto
            result[2].Username = request3.User.UserName; // butcheto
        }
Esempio n. 9
0
        [Fact] // 3. async Task<Request> ApproveRequestAsync(string id)
        public async void ApproveRequestAsync_WithGivenId_ShouldApproveRequest_AndReturnTheRequest()
        {
            // Arrange
            var country = CountryCreator.Create();
            var city    = CityCreator.Create(country.Id);
            var owner   = UserCreator.Create("Suzdurma", "Saturov", "satura", "*****@*****.**");
            var home    = HomeCreator.CreateOwnerHome(owner.Id, city.Id);
            var home2   = HomeCreator.CreateOwnerHome(owner.Id, city.Id);

            var request  = RequestCreator.Create(home);
            var request2 = RequestCreator.Create(home2);

            var requestStatusBefore  = request.Status;
            var request2StatusBefore = request2.Status;

            await this.Context.Countries.AddAsync(country);

            await this.Context.Cities.AddAsync(city);

            await this.Context.Users.AddAsync(owner);

            await this.Context.Homes.AddRangeAsync(home, home2);

            await this.Context.Requests.AddRangeAsync(request, request2);

            await this.Context.SaveChangesAsync();

            var service = new OwnerRequestService(this.Context);

            // Act
            var result = await service.ApproveRequestAsync(request.Id);

            var result2 = await service.ApproveRequestAsync(request2.Id);

            var expected  = RequestStatus.Approved;
            var expected2 = RequestStatus.Approved;

            // Assert
            result.Should().BeOfType <Request>();
            result.Status.Should().Equals(expected);
            result2.Status.Should().Equals(expected2);
            result.Status.Should().NotBe(requestStatusBefore);
            result2.Status.Should().NotBe(request2StatusBefore);
        }
Esempio n. 10
0
        [Fact] // 5. async Task<byte[]> GetFileAsync(string requestId)
        public async void GetFileAsync_WithGivenRequestId_ShouldReturnByteArrayOfTheFile()
        {
            // Arrange
            var country      = CountryCreator.Create();
            var city         = CityCreator.Create(country.Id);
            var owner        = UserCreator.Create("Suzdurma", "Saturov", "satura", "*****@*****.**");
            var anotherOwner = UserCreator.Create("Svinevud", "Kulchibutov", "kulkata", "*****@*****.**");
            var home         = HomeCreator.CreateOwnerHome(owner.Id, city.Id);

            var request = RequestCreator.Create(home);

            request.Document = new byte [1024];

            await this.Context.Countries.AddAsync(country);

            await this.Context.Cities.AddAsync(city);

            await this.Context.Users.AddAsync(owner);

            await this.Context.Homes.AddAsync(home);

            await this.Context.Requests.AddAsync(request);

            await this.Context.SaveChangesAsync();

            var service = new OwnerRequestService(this.Context);

            // Act
            var result = await service.GetFileAsync(request.Id);

            var expected = await this.Context.Requests
                           .Where(r => r.Id == request.Id)
                           .Select(r => r.Document)
                           .FirstOrDefaultAsync();

            // Assert
            result.Should().BeOfType <byte[]>();
            result.Should().Equals(expected);
        }
Esempio n. 11
0
        [Fact] // 4. async Task<bool> RejectRequestAsync(string id)
        public async void RejectRequestAsync_WithGivenId_ShouldRejectRequest_AndReturnTrue()
        {
            // Arrange
            var country      = CountryCreator.Create();
            var city         = CityCreator.Create(country.Id);
            var owner        = UserCreator.Create("Suzdurma", "Saturov", "satura", "*****@*****.**");
            var anotherOwner = UserCreator.Create("Svinevud", "Kulchibutov", "kulkata", "*****@*****.**");
            var home         = HomeCreator.CreateOwnerHome(owner.Id, city.Id);
            var home2        = HomeCreator.CreateOwnerHome(owner.Id, city.Id);

            var request  = RequestCreator.Create(home);
            var request2 = RequestCreator.Create(home2);

            var requestStatusBefore  = request.Status;
            var request2StatusBefore = request2.Status;

            await this.Context.Countries.AddAsync(country);

            await this.Context.Cities.AddAsync(city);

            await this.Context.Users.AddAsync(owner);

            await this.Context.Homes.AddRangeAsync(home, home2);

            await this.Context.Requests.AddRangeAsync(request, request2);

            await this.Context.SaveChangesAsync();

            var service = new OwnerRequestService(this.Context);

            // Act
            var result = await service.RejectRequestAsync(request.Id);

            var result2 = await service.RejectRequestAsync(request2.Id);

            // Assert
            result.Should().BeTrue();
            result2.Should().BeTrue();
        }
Esempio n. 12
0
        [Fact] // async Task<string> ChangeHomeStatusAsync(Request request)
        public async Task ChangeHomeStatusAsync_WithGivenRequestObject_ShouldReturnHomeIdWhenSuccessful()
        {
            // Arrange
            var country = CountryCreator.Create();
            var city    = CityCreator.Create(country.Id);
            var home    = HomeCreator.CreateAny(city.Id);
            var image   = ImageCreator.CreateForModel();

            await this.Context.Countries.AddAsync(country);

            await this.Context.Cities.AddAsync(city);

            await this.Context.Homes.AddAsync(home);

            await this.Context.CloudImages.AddAsync(image);

            var request = RequestCreator.Create(home);

            await this.Context.Requests.AddAsync(request);

            await this.Context.SaveChangesAsync();

            var service = new OwnerListingService(this.Context, null, null, null);

            // Act
            var result = await service.ChangeHomeStatusAsync(request);

            var homeFromDb = await this.Context.Homes.Where(h => h.Id == home.Id).FirstOrDefaultAsync();

            // Assert
            result.Should().NotBeNull();
            result.Should().BeOfType <string>();
            result.Should().Match(home.Id);
            result.Should().Match(homeFromDb.Id);
            homeFromDb.Status.Should().NotBe(HomeStatus.ToRent);
            homeFromDb.Status.Should().Be(HomeStatus.Rented);
        }
Esempio n. 13
0
        [Fact] // async Task<bool> StartRent(string id, byte[] fileContent)
        public async void StartRent_ForGivenOwnerId_ShouldSuccessfullyInitiateRentAndReturnTrue()
        {
            // Arrange
            var country = CountryCreator.Create();
            var city    = CityCreator.Create(country.Id);
            var home    = HomeCreator.CreateAny(city.Id);
            var image   = ImageCreator.CreateForModel();

            await this.Context.Countries.AddAsync(country);

            await this.Context.Cities.AddAsync(city);

            await this.Context.Homes.AddAsync(home);

            await this.Context.CloudImages.AddAsync(image);

            var request = RequestCreator.Create(home);

            await this.Context.Requests.AddAsync(request);

            await this.Context.SaveChangesAsync();

            var approvedRequest = RequestCreator.CreateRentApproved(home, request.User, request.Id);

            var user = request.User;

            this.UserManager
            .Setup(u => u.FindByIdAsync(user.Id))
            .Returns(Task.FromResult(user));
            await this.UserManager.Object
            .AddToRoleAsync(user, "Tenant");

            var requestService = new Mock <IOwnerRequestService>();

            requestService
            .Setup(x => x.ApproveRequestAsync(request.Id))
            .Returns(Task.FromResult(approvedRequest));

            var listingService = new Mock <IOwnerListingService>();

            listingService
            .Setup(x => x.ChangeHomeStatusAsync(approvedRequest))
            .Returns(Task.FromResult(approvedRequest.HomeId));

            var rental = new Rental
            {
                Id       = 1,
                RentDate = DateTime.UtcNow,
                HomeId   = home.Id,
                TenantId = user.Id,
            };

            var rentalServiceMock = new Mock <IOwnerRentalService>();

            rentalServiceMock.Setup(y => y.CreateRental(home.Id, user.Id))
            .Returns(Task.FromResult(rental));

            var contractService = new Mock <IOwnerContractService>();

            contractService
            .Setup(x => x.CreateRentalContractAsync(new byte[1024], request.User, rental))
            .Returns(Task.FromResult(true));

            var service = new OwnerRentalService(this.Context, requestService.Object, listingService.Object, contractService.Object, this.UserManager.Object);

            // Act
            var result = await service.StartRent(request.Id, new byte[1024]);

            var rentalInfo = await this.Context.Rentals.Where(r => r.Home.Id == home.Id).FirstOrDefaultAsync();

            var changedUser = await this.Context.Users.Where(u => u.Id == user.Id).FirstOrDefaultAsync();

            // Assert
            result.Should().BeTrue();
            rentalInfo.TenantId.Should().Equals(user.Id);
            changedUser.Rentals.Count().Should().Be(1);
        }