コード例 #1
0
        public async Task <SplitwiseInfo?> Invoke(AppSettings appSettings)
        {
            await _splitwiseClient.ConfigureAccessToken(
                appSettings.Splitwise.ConsumerKey,
                appSettings.Splitwise.ConsumerSecret);

            var currentUser = await _splitwiseClient.GetCurrentUser();

            if (currentUser.User == null)
            {
                _logger.LogWarning("Unable to fetch the current Splitwise user");

                return(null);
            }

            var friends = await _splitwiseClient.GetFriends();

            if (friends.Friends == null)
            {
                _logger.LogWarning("Unable to fetch current user's Splitwise friends list");

                return(null);
            }

            var friend = friends.Friends?.FirstOrDefault(x => x.Email == appSettings.Splitwise.FriendEmail);

            if (friend == null)
            {
                _logger.LogWarning("Unable to find the specified Splitwise friend");

                return(null);
            }

            // Get desired Splitwise expenses
            var expenses = await _splitwiseClient.GetExpenses(
                friendId : friend.Id,
                datedAfter : appSettings.Splitwise.TransactionsDatedAfter,
                limit : 0);

            if (expenses.Expenses == null)
            {
                _logger.LogWarning("No Splitwise expenses found for the specified user and date range");

                return(null);
            }

            return(new SplitwiseInfo {
                CurrentUser = currentUser.User, Friend = friend, Expenses = expenses.Expenses
            });
        }
コード例 #2
0
        public async Task InvokeWithValidSettingsReturnsExpected()
        {
            // Arrange
            var appSettings = new AppSettings
            {
                Splitwise = new Splitwise
                {
                    ConsumerKey            = "consumerKey",
                    ConsumerSecret         = "consumerSecret",
                    FriendEmail            = "friendEmail",
                    TransactionsDatedAfter = new DateTimeOffset()
                },
                Ynab = new Ynab
                {
                    PersonalAccessToken  = "personalAccessToken",
                    BudgetName           = "budgetName",
                    SplitwiseAccountName = "splitwiseAccountName"
                }
            };

            var expectedUser = new CurrentUserResponse {
                User = new User {
                    Id = 1, FirstName = "firstName"
                }
            };

            _splitwiseClient.GetCurrentUser().Returns(expectedUser);

            var expectedFriends = new FriendsResponse
            {
                Friends = new List <FriendModel> {
                    new() { Email = "friendEmail", FirstName = "friendName", Id = 2 }
                }
            };

            _splitwiseClient.GetFriends().Returns(expectedFriends);

            var expectedExpenses = new ExpensesResponse {
                Expenses = new List <Expense> {
                    new() { Cost = "123456" }
                }
            };

            _splitwiseClient
            .GetExpenses(friendId: 2, datedAfter: appSettings.Splitwise.TransactionsDatedAfter, limit: 0)
            .Returns(expectedExpenses);

            var expectedResult = new SplitwiseInfo
            {
                CurrentUser = new User {
                    Id = 1, FirstName = "firstName"
                },
                Friend = new FriendModel {
                    Id = 2, FirstName = "friendName", Email = "friendEmail"
                },
                Expenses = new List <Expense> {
                    new() { Cost = "123456" }
                }
            };

            // Act
            _sut = new GetSplitwiseInfoOperation(_logger, _splitwiseClient);
            var result = await _sut.Invoke(appSettings);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(expectedResult.CurrentUser, result.CurrentUser);
            Assert.Equal(expectedResult.Friend, result.Friend);
            Assert.Equal(expectedResult.Expenses, result.Expenses);
        }