public void ProcessMetTweet() { //Arrange TestHelperMethods.SetupTestEvent(repo); var met = new MetTweet{Friends = {"benadderson"}}; var metUser = repo.Users.Where(u => u.Username == "thatismatt").FirstOrDefault(); //Act processor.ProcessTweet(metUser, met); repo.SubmitChanges(); Friendship storedFriendship = repo.Friendships.Where(f => f.Befriender == metUser.Username && f.Befriendee == "benadderson").FirstOrDefault(); //Assert Assert.NotNull(storedFriendship); }
public void CantMeetOutsideAnEvent() { //Arrange var met = new MetTweet {Friends = {"benadderson"}}; var metUser = repo.Users.Where(u => u.Username == "thatismatt").First(); //Act processor.ProcessTweet(metUser, met); repo.SubmitChanges(); Friendship storedFriendship = repo.Friendships.Where(f => f.Befriender == metUser.Username && f.Befriendee == "benadderson").FirstOrDefault(); //Assert Assert.Null(storedFriendship); }
public void ProcessMeetingTweetsForPoints() { //Arrange TestHelperMethods.SetupTestEvent(repo); var met1 = new MetTweet { Friends = { "benadderson" } }; var met2 = new MetTweet { Friends = { "thatismatt" } }; var metUser1 = repo.Users.Where(u => u.Username == "thatismatt").FirstOrDefault(); var metUser2 = repo.Users.Where(u => u.Username == "benadderson").FirstOrDefault(); //Act processor.ProcessTweet(metUser1, met1); processor.ProcessTweet(metUser2, met2); repo.SubmitChanges(); Friendship storedFriendship1 = repo.Friendships.Where(f => f.Befriender == metUser1.Username && f.Befriendee == "benadderson").FirstOrDefault(); Friendship storedFriendship2 = repo.Friendships.Where(f => f.Befriender == metUser2.Username && f.Befriendee == "thatismatt").FirstOrDefault(); Point pointsAwarded1 = repo.Points.Where(p => p.Username == metUser1.Username).FirstOrDefault(); Point pointsAwarded2 = repo.Points.Where(p => p.Username == metUser2.Username).FirstOrDefault(); //Assert Assert.NotNull(storedFriendship1); Assert.NotNull(storedFriendship2); Assert.NotNull(pointsAwarded1); Assert.True(pointsAwarded1.Details == "Mutual meeting"); Assert.True(pointsAwarded1.Amount == 10); Assert.True(pointsAwarded1.Username == "thatismatt"); Assert.NotNull(pointsAwarded2); Assert.True(pointsAwarded2.Details == "Mutual meeting"); Assert.True(pointsAwarded2.Amount == 10); Assert.True(pointsAwarded2.Username == "benadderson"); }
public void ProcessTweet(User user, MetTweet tweet) { List<string> befriendees = user .Befrienders .Select(f => f.Befriendee) .ToList(); foreach (string friend in tweet.Friends) { // Prevent user from meeting themselves if (user.Username == friend) continue; User friendUser = EnsureUser(friend); // Add the friendship if it doesn't already exist if (!befriendees.Contains(friend)) { user.Befrienders.Add(new Friendship { Befriendee = friend }); // If the reverse friendship exists, credit points if (_repo .Friendships .Any(f => f.Befriendee == user.Username && f.Befriender == friend)) { CreditPoints(user, Settings.Points.Met, "Mutual meeting"); CreditPoints(friendUser, Settings.Points.Met, "Mutual meeting"); } } // Submit changes up to this point as we need to be ready to recognise reflexive meetings in the same batch. _repo.SubmitChanges(); } }