public async Task InitializeAsync()
        {
            var expenseService = new Mock <IExpenseService>();
            var category1      = new Category();
            var category2      = new Category();
            var categories     = new[] { category1, category2 };

            expenseService.Setup(m => m.GetCategoriesAsync()).ReturnsAsync(categories);

            var fileUploadService = new Mock <IFileStorageService>();
            var dateTimeService   = new Mock <IDateTimeService>();

            dateTimeService.Setup(m => m.Today).Returns(DateTime.MaxValue);

            var mediaService = new Mock <IMediaService>();

            var actual = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);

            actual.Date             = DateTime.MaxValue;
            actual.Categories       = new Category[] { };
            actual.SelectedCategory = new Category();


            await actual.InitializeAsync();

            Assert.Equal(0, actual.Amount);
            Assert.Equal(DateTime.MaxValue, actual.Date);
            Assert.Null(actual.Location);
            Assert.Null(actual.Note);
            Assert.Null(actual.Receipt);
            Assert.Equal(categories, actual.Categories);
            Assert.Equal(category1, actual.SelectedCategory);
        }
        public async Task SaveAsyncWhenRegisterWhenNotSelectedCategory()
        {
            var expenseService    = new Mock <IExpenseService>();
            var fileUploadService = new Mock <IFileStorageService>();

            var dateTimeService = new Mock <IDateTimeService>();
            var mediaService    = new Mock <IMediaService>();
            var actual          = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);

            var receipt = new Mock <IMediaFile>().Object;

            actual.Receipt          = receipt;
            actual.SelectedCategory = null;

            var uri = new Uri("https://googole.co.jp");

            fileUploadService.Setup(m => m.UploadMediaFileAsync(receipt)).ReturnsAsync(uri);

            expenseService
            .Setup(m => m.RegisterExpensesAsync(It.IsAny <Expense>(), It.IsAny <IEnumerable <ExpenseReceipt> >()))
            .Returns(Task.CompletedTask)
            .Callback <Expense, IEnumerable <ExpenseReceipt> >((expense, expenseReceipts) =>
            {
                Assert.Null(expense.CategoryId);
            });

            await actual.SaveAsync();
        }
Exemple #3
0
        private async Task PrepareToInputNewExpense(int flowId, bool correcting, string returnPage)
        {
            await PrepareModels(flowId);

            var flow = correcting || flowId == 0 ? null : await _expenseFlowQueries.GetById(flowId);

            Expense = new EditExpense
            {
                Correction = correcting,
                FlowId     = flowId,
                Account    = Accounts.GetDefaultAccount()?.Name,
                FlowName   = flow?.Name,
                DateTime   = _timeService.ClientLocalNow.ToStandardString(),
                Cost       = string.Empty,
                ReturnPage = returnPage,
            };
            if (Categories.Count == 1)
            {
                Expense.Category = Categories.First().Name;
            }

            if (correcting)
            {
                var balanceState = await _inventorizationQueries.GetBalanceState();

                if (balanceState.Balance < 0)
                {
                    Expense.Cost = (-balanceState.Balance).ToStandardString();
                }
            }
        }
        public async Task SaveAsyncWhenUpdate()
        {
            var expenseService = new Mock <IExpenseService>();

            expenseService
            .Setup(m => m.GetExpenseAsync("expenseId"))
            .ReturnsAsync(new Expense
            {
                Amount     = 2,
                Date       = DateTime.MinValue,
                CategoryId = "category2",
                Id         = "expenseId",
                Location   = "Location",
                Note       = "Note"
            });

            var fileUploadService = new Mock <IFileStorageService>();

            var dateTimeService = new Mock <IDateTimeService>();
            var mediaService    = new Mock <IMediaService>();
            var actual          = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);
            await actual.InitializeAsync("expenseId");

            actual.Amount   = 1;
            actual.Date     = DateTime.MaxValue;
            actual.Location = "location";
            actual.Note     = "note";
            var receipt = new Mock <IMediaFile>().Object;

            actual.Receipt = receipt;

            var uri = new Uri("https://www.bing.com/");

            fileUploadService.Setup(m => m.UploadMediaFileAsync(receipt)).ReturnsAsync(uri);

            expenseService
            .Setup(m => m.RegisterExpensesAsync(It.IsAny <Expense>(), It.IsAny <IEnumerable <ExpenseReceipt> >()))
            .Returns(Task.CompletedTask)
            .Callback <Expense, IEnumerable <ExpenseReceipt> >((expense, expenseReceipts) =>
            {
                Assert.NotNull(expense);
                Assert.Equal("expenseId", expense.Id);
                Assert.Equal(1, expense.Amount);
                Assert.Equal(DateTime.MaxValue, expense.Date);
                Assert.Equal("location", expense.Location);
                Assert.Equal("note", expense.Note);

                Assert.NotNull(expenseReceipts);
                Assert.Single(expenseReceipts);
                var expenseReceipt = expenseReceipts.First();
                Assert.Null(expenseReceipt.Id);
                Assert.Null(expenseReceipt.ExpenseId);
                Assert.Equal(uri.ToString(), expenseReceipt.ReceiptUri);
                Assert.Null(expenseReceipt.UserId);
            });

            await actual.SaveAsync();
        }
        public void NoteProperty()
        {
            var expenseService    = new Mock <IExpenseService>();
            var fileUploadService = new Mock <IFileStorageService>();
            var dateTimeService   = new Mock <IDateTimeService>();
            var mediaService      = new Mock <IMediaService>();
            var actual            = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);

            Assert.Null(actual.Note);
            Assert.PropertyChanged(actual, "Note", () => actual.Note = "update");
            Assert.Equal("update", actual.Note);
        }
        public void DateProperty()
        {
            var expenseService    = new Mock <IExpenseService>();
            var fileUploadService = new Mock <IFileStorageService>();
            var dateTimeService   = new Mock <IDateTimeService>();
            var mediaService      = new Mock <IMediaService>();
            var actual            = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);

            Assert.Equal(default(DateTime), actual.Date);
            Assert.PropertyChanged(actual, "Date", () => actual.Date = DateTime.MaxValue);
            Assert.Equal(DateTime.MaxValue, actual.Date);
        }
        public async Task TakePhotoAsync()
        {
            var expenseService    = new Mock <IExpenseService>();
            var fileUploadService = new Mock <IFileStorageService>();
            var dateTimeService   = new Mock <IDateTimeService>();
            var mediaService      = new Mock <IMediaService>();
            var actual            = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);

            await actual.TakePhotoAsync();

            mediaService.Verify(m => m.TakePhotoAsync(), Times.Once);
        }
        public void AmountProperty()
        {
            var expenseService    = new Mock <IExpenseService>();
            var fileUploadService = new Mock <IFileStorageService>();
            var dateTimeService   = new Mock <IDateTimeService>();
            var mediaService      = new Mock <IMediaService>();
            var actual            = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);

            Assert.Equal(0, actual.Amount);
            Assert.PropertyChanged(actual, "Amount", () => actual.Amount = 1);
            Assert.Equal(1, actual.Amount);
        }
        public void CategoriesProperty()
        {
            var expenseService    = new Mock <IExpenseService>();
            var fileUploadService = new Mock <IFileStorageService>();
            var dateTimeService   = new Mock <IDateTimeService>();
            var mediaService      = new Mock <IMediaService>();
            var actual            = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);

            Assert.Null(actual.Categories);
            var categories = new Category[] { };

            Assert.PropertyChanged(actual, "Categories", () => actual.Categories = categories);
            Assert.Equal(categories, actual.Categories);
        }
        public void ReceiptProperty()
        {
            var expenseService    = new Mock <IExpenseService>();
            var fileUploadService = new Mock <IFileStorageService>();
            var dateTimeService   = new Mock <IDateTimeService>();
            var mediaService      = new Mock <IMediaService>();
            var actual            = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);

            Assert.Null(actual.Receipt);
            var mediaFile = new Mock <IMediaFile>();

            Assert.PropertyChanged(actual, "Receipt", () => actual.Receipt = mediaFile.Object);
            Assert.Equal(mediaFile.Object, actual.Receipt);
        }
        public void IsPickPhotoSupported()
        {
            var expenseService    = new Mock <IExpenseService>();
            var fileUploadService = new Mock <IFileStorageService>();
            var dateTimeService   = new Mock <IDateTimeService>();
            var mediaService      = new Mock <IMediaService>();
            var actual            = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);

            mediaService.Setup(m => m.IsPickPhotoSupported).Returns(true);
            Assert.True(actual.IsPickPhotoSupported);

            mediaService.Setup(m => m.IsPickPhotoSupported).Returns(false);
            Assert.False(actual.IsPickPhotoSupported);
        }
        public void SelectedCategoryProperty()
        {
            var expenseService    = new Mock <IExpenseService>();
            var fileUploadService = new Mock <IFileStorageService>();
            var dateTimeService   = new Mock <IDateTimeService>();
            var mediaService      = new Mock <IMediaService>();
            var actual            = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);

            Assert.Null(actual.SelectedCategory);
            var category = new Category();

            Assert.PropertyChanged(actual, "SelectedCategory", () => actual.SelectedCategory = category);
            Assert.Equal(category, actual.SelectedCategory);
        }
        public async Task InitializeAsyncWhenNotExistCategories()
        {
            var expenseService = new Mock <IExpenseService>();
            var categories     = new Category[] { };

            expenseService.Setup(m => m.GetCategoriesAsync()).ReturnsAsync(categories);

            var fileUploadService = new Mock <IFileStorageService>();
            var dateTimeService   = new Mock <IDateTimeService>();

            dateTimeService.Setup(m => m.Today).Returns(DateTime.MaxValue);

            var mediaService = new Mock <IMediaService>();

            var actual = new EditExpense(expenseService.Object, fileUploadService.Object, dateTimeService.Object, mediaService.Object);

            await actual.InitializeAsync();

            Assert.Equal(DateTime.MaxValue, actual.Date);
            Assert.Equal(categories, actual.Categories);
            Assert.Null(actual.SelectedCategory);
        }
        public async Task InitializeAsyncForUpdate()
        {
            var expenseService = new Mock <IExpenseService>();

            expenseService
            .Setup(m => m.GetExpenseAsync("expenseId"))
            .ReturnsAsync(new Expense
            {
                Amount     = 1,
                Date       = DateTime.MaxValue,
                CategoryId = "category2",
                Id         = "expenseId",
                Location   = "location",
                Note       = "note"
            });

            var category1 = new Category {
                Id = "category1"
            };
            var category2 = new Category {
                Id = "category2"
            };
            var categories = new[] { category1, category2 };

            expenseService.Setup(m => m.GetCategoriesAsync()).ReturnsAsync(categories);

            var expenseReceipts =
                new[]
            {
                new ExpenseReceipt
                {
                    ExpenseId  = "expenseId",
                    ReceiptUri = "https://www.bing.com/"
                }
            };

            expenseService
            .Setup(m => m.GetExpenseReceiptsAsync("expenseId"))
            .ReturnsAsync(expenseReceipts.AsEnumerable());

            var fileStorageService = new Mock <IFileStorageService>();
            var mediaFile          = new MediaFile(".jpg", new byte[] {});

            fileStorageService
            .Setup(m => m.DownloadMediaFileAsync(new Uri("https://www.bing.com/")))
            .ReturnsAsync(mediaFile);


            var dateTimeService = new Mock <IDateTimeService>();

            var mediaService = new Mock <IMediaService>();

            var actual = new EditExpense(expenseService.Object, fileStorageService.Object, dateTimeService.Object, mediaService.Object);

            actual.Date             = DateTime.MaxValue;
            actual.Categories       = new Category[] { };
            actual.SelectedCategory = new Category();


            await actual.InitializeAsync("expenseId");

            Assert.Equal(1, actual.Amount);
            Assert.Equal(DateTime.MaxValue, actual.Date);
            Assert.Equal("location", actual.Location);
            Assert.Equal("note", actual.Note);
            Assert.Equal(mediaFile, actual.Receipt);
            Assert.Equal(categories, actual.Categories);
            Assert.Equal(category2, actual.SelectedCategory);
        }