Exemplo n.º 1
0
        [Fact] // async Task<UserPaymentDetailsServiceModel> GetPaymentDetailsAsync(string paymentId, string userId)
        public async void GetPaymentDetailsAsync_ForGivenOwnerIdAndPaymentId_ShouldReturnPaymentDetailsModel()
        {
            // Arrange
            var country = CountryCreator.Create();
            var city    = CityCreator.Create(country.Id);
            var manager = UserCreator.Create("Georgi", "Butov", "joro", "*****@*****.**");

            var home1 = HomeCreator.CreateAny(city.Id);                         // rented
            var home2 = HomeCreator.CreateManagedHome(home1.Owner.Id, city.Id); // managed
            var home4 = HomeCreator.CreateAny(city.Id);                         // another owner with tenant

            var tenant1 = UserCreator.Create("Debelin", "Dignibutov", "but4eto", "*****@*****.**");
            var tenant4 = UserCreator.Create("Suzdurma", "Saturov", "satura", "*****@*****.**");

            int id1 = 1;
            int id4 = 4;

            var contract1 = ContractCreator.CreateRentalContract(id1);
            var contract4 = ContractCreator.CreateRentalContract(id4);

            var rental1 = RentalCreator.Create(id1, country, city, tenant1, home1, contract1);
            var rental4 = RentalCreator.Create(id4, country, city, tenant4, home4, contract4);

            var payment1        = PaymentCreator.CreateForTenant(home1.Owner, tenant1.Id, rental1.Id);
            var payment2        = PaymentCreator.CreateForManager(home1.Owner.Id, home2.Manager.Id, home2.Id);
            var paymentAnother5 = PaymentCreator.CreateForTenant(home4.Owner, tenant4.Id, rental4.Id);

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

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

            await this.Context.Homes.AddRangeAsync(home1, home2, home4);

            await this.Context.Users.AddRangeAsync(tenant1, tenant4);

            await this.Context.Rentals.AddRangeAsync(rental1, rental4);

            await this.Context.Payments.AddRangeAsync(payment1, payment2, paymentAnother5);

            await this.Context.Contracts.AddRangeAsync(contract1, contract4);

            await this.Context.SaveChangesAsync();

            var service = new OwnerPaymentService(this.Context);

            // Act
            var rentals = await this.Context.Rentals.ToListAsync();

            var result1 = await service.GetPaymentDetailsAsync(payment1.Id, tenant1.Id);

            var result2 = await service.GetPaymentDetailsAsync(payment2.Id, home1.Owner.Id);

            var result3 = await service.GetPaymentDetailsAsync(paymentAnother5.Id, tenant4.Id);

            var expected1 = await this.Context.Rentals
                            .Where(r => r.TenantId == tenant1.Id)
                            .SelectMany(r => r.Payments)
                            .Where(p => p.Id == payment1.Id)
                            .FirstOrDefaultAsync();

            var expected2 = await this.Context.Payments
                            .Where(p => p.Id == payment2.Id)
                            .FirstOrDefaultAsync();

            var expected3 = await this.Context.Rentals
                            .Where(r => r.TenantId == tenant4.Id)
                            .SelectMany(r => r.Payments)
                            .Where(p => p.Id == paymentAnother5.Id)
                            .FirstOrDefaultAsync();

            // Assert
            result1.Should().BeOfType <UserPaymentDetailsServiceModel>();
            result1.To.Should().Equals(home1.Owner.FirstName + home1.Owner.LastName);
            result1.Address.Should().Equals(expected1.Rental.Home.Address);

            result2.To.Should().Equals(home2.Manager.FirstName + home2.Manager.LastName);
            result2.Address.Should().Equals(expected2.Home.Address);

            result3.To.Should().Equals(home4.Owner.FirstName + home4.Owner.LastName);
            result3.Address.Should().Equals(expected3.Rental.Home.Address);
        }
Exemplo n.º 2
0
        [Fact] // async Task<IEnumerable<OwnerAllPaymentsServiceModel>> AllPayments(string userId)
        public async void AllPayments_ForGivenOwnerId_ShouldReturnAllRelatedPayments()
        {
            // Arrange
            var ownerId        = Guid.NewGuid().ToString();
            var anotherOwnerId = Guid.NewGuid().ToString();
            var country        = CountryCreator.Create();
            var city           = CityCreator.Create(country.Id);

            var home1 = HomeCreator.CreateAny(city.Id);                         // rented
            var home2 = HomeCreator.CreateManagedHome(home1.Owner.Id, city.Id); // managed
            var home3 = HomeCreator.CreateManagedHome(home1.Owner.Id, city.Id); // managed & rented
            var home4 = HomeCreator.CreateAny(city.Id);                         // another owner with tenant

            var tenant1 = UserCreator.Create("Debelin", "Butov", "but4eto", "*****@*****.**");
            var tenant3 = UserCreator.Create("Shunko", "Shpekov", "shpeka", "*****@*****.**");
            var tenant4 = UserCreator.Create("Suzdurma", "Saturov", "satura", "*****@*****.**");

            int id1 = 1;
            int id3 = 3;
            int id4 = 4;

            var contract1 = ContractCreator.CreateRentalContract(id1);
            var contract3 = ContractCreator.CreateRentalContract(id3);
            var contract4 = ContractCreator.CreateRentalContract(id4);

            var rental1 = RentalCreator.Create(id1, country, city, tenant1, home1, contract1);
            var rental3 = RentalCreator.Create(id3, country, city, tenant3, home3, contract3);
            var rental4 = RentalCreator.Create(id4, country, city, tenant4, home4, contract4);

            var payment1        = PaymentCreator.CreateForTenant(home1.Owner, tenant1.Id, rental1.Id);
            var payment2        = PaymentCreator.CreateForManager(home1.Owner.Id, home2.Manager.Id, home2.Id);
            var payment3        = PaymentCreator.CreateForManager(home1.Owner.Id, home3.Manager.Id, home3.Id);
            var payment4        = PaymentCreator.CreateForTenant(home1.Owner, tenant3.Id, rental3.Id);
            var paymentAnother5 = PaymentCreator.CreateForTenant(home4.Owner, tenant4.Id, rental4.Id);

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

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

            await this.Context.Homes.AddRangeAsync(home1, home2, home3, home4);

            await this.Context.Users.AddRangeAsync(tenant1, tenant3, tenant4);

            await this.Context.Rentals.AddRangeAsync(rental1, rental3, rental4);

            await this.Context.Payments.AddRangeAsync(payment1, payment2, payment3, payment4, paymentAnother5);

            await this.Context.Contracts.AddRangeAsync(contract1, contract3, contract4);

            await this.Context.SaveChangesAsync();

            var service = new OwnerPaymentService(this.Context);

            // Act
            var result        = (await service.AllPayments(home1.Owner.Id)).ToList();
            var expectedCount = this.Context.Payments
                                .Where(p => p.Home.OwnerId == home1.Owner.Id || p.Rental.Home.OwnerId == home1.Owner.Id)
                                .Count();

            // Assert
            result.Should().AllBeOfType <OwnerAllPaymentsServiceModel>();
            result.Should().HaveCount(expectedCount);
            result.Should().HaveCount(4, "because there are 3 properties where one has tenant + manager, which makes 4");
        }