public void InvoiceAddLineItemEventAddsLineItem()
        {
            _mockInvoiceView.GetCustomer += null;
            LastCall.IgnoreArguments();
            _mockInvoiceView.AddInvoiceLine += null;
            var addInvoiceLineEventRaiser = LastCall.IgnoreArguments().GetEventRaiser();
            _mockInvoiceView.CalculateTotals += null;
            LastCall.IgnoreArguments();
            _mockInvoiceView.SaveInvoice += null;
            LastCall.IgnoreArguments();

            const int quantity = 3;
            const decimal amount = 35.00M;
            ITaxesService taxesService = new TaxesService();
            Expect.Call(_mockInvoiceView.Quantity).Return(quantity);
            Expect.Call(_mockInvoiceView.Amount).Return(amount);
            Expect.Call(_mockTaxesRepository.GetTaxesService()).Return(taxesService);
            var invoiceItem = new InvoiceItem(quantity, amount);
            var invoice = new Invoice(taxesService);
            invoice.AddLineItem(invoiceItem);
            _mockInvoiceView.InvoiceLineItems = invoice.InvoiceItems;

            _mockRepository.ReplayAll();

            var invoicePresenter = new InvoicePresenter(_mockCustomerRepository, _mockTaxesRepository, _mockInvoiceRepository, _mockInvoiceView);
            addInvoiceLineEventRaiser.Raise(_mockInvoiceView, EventArgs.Empty);
        }
 public void TaxesServiceRejectsOverlappingTaxesPerTaxType()
 {
     var taxesService = new TaxesService();
     var pstTax1 = new Tax("PST", DateTime.Today, DateTime.Today.AddMonths(6), JurisdictionEnum.City);
     var pstTax2 = new Tax("PST", DateTime.Today.AddMonths(6), DateTime.Today.AddYears(1), JurisdictionEnum.City);
     taxesService.AddTax(pstTax1);
     taxesService.AddTax(pstTax2);
 }
 public void TaxesServiceRejectsDuplicateTaxes()
 {
     var taxesService = new TaxesService();
     var pstTax1 = new Tax("PST", DateTime.Today, DateTime.Today.AddMonths(6), JurisdictionEnum.City);
     var pstTax2 = new Tax("PST", DateTime.Today, DateTime.Today.AddMonths(6), JurisdictionEnum.City);
     taxesService.AddTax(pstTax1);
     taxesService.AddTax(pstTax2);
 }
        public void TaxesServiceCanAccumulateTaxes()
        {
            var taxesService = new TaxesService();
            var pstTax = new Tax("PST", DateTime.Today, DateTime.Today.AddMonths(6), JurisdictionEnum.City);
            taxesService.AddTax(pstTax);

            Assert.IsTrue(taxesService.Taxes.Contains(pstTax));
        }
        public void TaxesServiceDistinguishesCorrectlyEachJurisdiction()
        {
            var taxesService = new TaxesService();

            var city = new City("CityTax", taxesService);
            var cityTax = new Tax("CityTax", DateTime.Today, DateTime.Today.AddMonths(6), JurisdictionEnum.City);
            city.AddTax(cityTax);

            var provinceState = new City("ProvStateTax", taxesService);
            var provStateTax = new Tax("ProvStateTax", DateTime.Today, DateTime.Today.AddMonths(6), JurisdictionEnum.ProvinceState);
            provinceState.AddTax(provStateTax);

            var country = new City("CountryTax", taxesService);
            var countryTax = new Tax("CountryTax", DateTime.Today, DateTime.Today.AddMonths(6), JurisdictionEnum.Country);
            country.AddTax(countryTax);

            Assert.AreEqual(1, city.Taxes.Count);
            Assert.AreEqual(1, provinceState.Taxes.Count);
            Assert.AreEqual(1, country.Taxes.Count);
        }
        public void InvoiceCalculateTotalsEventDisplaysSubTotalTaxesAndTotal()
        {
            _mockInvoiceView.GetCustomer += null;
            LastCall.IgnoreArguments();
            _mockInvoiceView.AddInvoiceLine += null;
            LastCall.IgnoreArguments();
            _mockInvoiceView.CalculateTotals += null;
            var calculateTotalsEventRaiser = LastCall.IgnoreArguments().GetEventRaiser();
            _mockInvoiceView.SaveInvoice += null;
            LastCall.IgnoreArguments();

            ITaxesService taxesService = new TaxesService();
            Expect.Call(_mockTaxesRepository.GetTaxesService()).Return(taxesService);
            var invoice = new Invoice(taxesService);
            _mockInvoiceView.SubTotal = invoice.SubTotal;
            _mockInvoiceView.TaxCalculations = invoice.TaxCalculations;
            _mockInvoiceView.Total = invoice.Total;

            _mockRepository.ReplayAll();

            var invoicePresenter = new InvoicePresenter(_mockCustomerRepository, _mockTaxesRepository, _mockInvoiceRepository, _mockInvoiceView);
            calculateTotalsEventRaiser.Raise(_mockInvoiceView, EventArgs.Empty);
        }
        public void InvoiceSaveInvoiceToRepository()
        {
            _mockInvoiceView.GetCustomer += null;
            LastCall.IgnoreArguments();
            _mockInvoiceView.AddInvoiceLine += null;
            LastCall.IgnoreArguments();
            _mockInvoiceView.CalculateTotals += null;
            LastCall.IgnoreArguments();
            _mockInvoiceView.SaveInvoice += null;
            var saveInvoiceEventRaiser = LastCall.IgnoreArguments().GetEventRaiser();

            ITaxesService taxesService = new TaxesService();
            Expect.Call(_mockTaxesRepository.GetTaxesService()).Return(taxesService);
            var invoice = new Invoice(taxesService);
            _mockInvoiceRepository.SaveInvoice(invoice);

            _mockRepository.ReplayAll();

            var invoicePresenter = new InvoicePresenter(_mockCustomerRepository, _mockTaxesRepository, _mockInvoiceRepository, _mockInvoiceView);
            saveInvoiceEventRaiser.Raise(_mockInvoiceView, EventArgs.Empty);
        }