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 }); }
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); }