예제 #1
0
        public void GetJsonStatement_CustomerIsProperlySerializedAndDeserialized()
        {
            const string customerName = "TestCustomer";
            var customer = new Customer(customerName);
            var movies = new[] { new Movie("Inception"), new Movie("HarryPotter") };
            var rentalList = new List<Rental>
            {
                new RentalForNewReleaseMovie(daysRented: 1) { Movie = movies[0] },
                new RentalForChildrenMovie(daysRented: 4) { Movie = movies[1] }
            };
            customer.Rentals = rentalList;

            var jsonString = customer.GetStatement(new JsonStatement());
            var serializer = new DataContractJsonSerializer(typeof(Customer));
            Customer deserializedCustomer;
            using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
            {
                deserializedCustomer = (Customer)serializer.ReadObject(stream);
            }

            Assert.AreEqual(customerName, deserializedCustomer.Name);
            var firstMovieName = deserializedCustomer.Rentals[0].Movie.Title;
            var secondMovieName = deserializedCustomer.Rentals[1].Movie.Title;
            Assert.AreEqual(movies[0].Title, firstMovieName);
            Assert.AreEqual(movies[1].Title, secondMovieName);
        }
예제 #2
0
        public void GetStatement_StringStatementIsProperlyGenerated_EmptyListOfMovies()
        {
            var result = _statementBuilder.GetStringOfCustomerName("TestCustomer");
            result += _statementBuilder.GetStringOfTotalRental(0);
            result += _statementBuilder.GetStringOfFrequentRenterPoints(0);

            var customer = new Customer("TestCustomer");
            Assert.IsTrue(result.Equals(customer.GetStatement(new StringStatement())));
        }
예제 #3
0
        public void GetStatement_StringStatementIsProperlyGenerated_OneDayRentalOfRegularMovie()
        {
            var result = _statementBuilder.GetStringOfCustomerName("TestCustomer");
            result += _statementBuilder.GetStringOfRentalForCurrentMovie("Inception", 2);
            result += _statementBuilder.GetStringOfTotalRental(2);
            result += _statementBuilder.GetStringOfFrequentRenterPoints(1);

            var movie = new Movie("Inception");
            var customer = new Customer("TestCustomer");
            var rentalList = new List<Rental> { new RentalForRegularMovie(daysRented: 1) { Movie = movie } };
            customer.Rentals = rentalList;
            Assert.IsTrue(result.Equals(customer.GetStatement(new StringStatement())));
        }
예제 #4
0
        public Statement(Customer customer)
        {
            Movies = new Dictionary<string, double>();
            TotalAmount = 0;
            FrequentRenterPoints = 0;
            Name = customer.Name;

            foreach (var rental in customer.Rentals)
            {
                var priceOfMovie = rental.GetPrice();

                FrequentRenterPoints += rental.GetFrequentPoints();
                Movies[rental.Movie.Title] = priceOfMovie;
                TotalAmount += priceOfMovie;
            }
        }