public async Task can_count_by_user_and_species() { IBadgeRepo badgeRepo = CreateBadgeRepo(); // given await badgeRepo.AddBadge("user", PkmnSpecies.OfId("2"), Badge.BadgeSource.Pinball); await badgeRepo.AddBadge("user", PkmnSpecies.OfId("3"), Badge.BadgeSource.Pinball); await badgeRepo.AddBadge("user", PkmnSpecies.OfId("3"), Badge.BadgeSource.Pinball); await badgeRepo.AddBadge("user", PkmnSpecies.OfId("3"), Badge.BadgeSource.Pinball); await badgeRepo.AddBadge("userOther", PkmnSpecies.OfId("1"), Badge.BadgeSource.Pinball); await badgeRepo.AddBadge("userOther", PkmnSpecies.OfId("2"), Badge.BadgeSource.Pinball); await badgeRepo.AddBadge("userOther", PkmnSpecies.OfId("3"), Badge.BadgeSource.Pinball); // when long countHasNone = await badgeRepo.CountByUserAndSpecies("user", PkmnSpecies.OfId("1")); long countHasOne = await badgeRepo.CountByUserAndSpecies("user", PkmnSpecies.OfId("2")); long countHasThree = await badgeRepo.CountByUserAndSpecies("user", PkmnSpecies.OfId("3")); // then Assert.AreEqual(0, countHasNone); Assert.AreEqual(1, countHasOne); Assert.AreEqual(3, countHasThree); }
public async Task <CommandResult> Badges(CommandContext context) { (Optional <PkmnSpecies> optionalSpecies, Optional <User> optionalUser) = await context.ParseArgs <Optional <PkmnSpecies>, Optional <User> >(); Console.WriteLine($"species present: {optionalSpecies.IsPresent}"); Console.WriteLine($"user present: {optionalUser.IsPresent}"); bool isSelf = !optionalUser.IsPresent; User user = isSelf ? context.Message.User : optionalUser.Value; if (optionalSpecies.IsPresent) { PkmnSpecies species = optionalSpecies.Value; long numBadges = await _badgeRepo.CountByUserAndSpecies(user.Id, species); return(new CommandResult { Response = numBadges == 0 ? isSelf ? $"You have no {species} badges." : $"{user.Name} has no {species} badges." : isSelf ? $"You have {numBadges}x {species} badges." : $"{user.Name} has {numBadges}x {species} badges." }); } else { ImmutableSortedDictionary <PkmnSpecies, int> numBadgesPerSpecies = await _badgeRepo.CountByUserPerSpecies(user.Id); if (!numBadgesPerSpecies.Any()) { return(new CommandResult { Response = isSelf ? "You have no badges." : $"{user.Name} has no badges." }); } IEnumerable <string> badgesFormatted = numBadgesPerSpecies.Select(kvp => $"{kvp.Value}x {kvp.Key}"); return(new CommandResult { Response = isSelf ? $"Your badges: {string.Join(", ", badgesFormatted)}" : $"{user.Name}'s badges: {string.Join(", ", badgesFormatted)}", ResponseTarget = ResponseTarget.WhisperIfLong }); } }