public void GetAll_ShouldReturnAllGamesFromDb() { //Arrange var someGame = new LotteryGame { Name = Guid.NewGuid().ToString(), NumberOfNumbersInADraw = 6, MaximumNumber = 45 }; var originalAmountOfGames = 0; using (var context = CreateDbContext()) { originalAmountOfGames = context.Set <LotteryGame>().Count(); context.Add(someGame); context.SaveChanges(); } using (var context = CreateDbContext()) { var repo = new LotteryGameRepository(context); //Act var allGames = repo.GetAll(); //Assert Assert.That(allGames, Has.Count.EqualTo(originalAmountOfGames + 1), () => "Not all games in the database are returned."); var expectedGame = allGames.FirstOrDefault(game => game.Name == someGame.Name); Assert.That(expectedGame, Is.Not.Null, () => "Not all games in the database are returned."); } }
private bool AssertIsValidDraw(Draw draw, LotteryGame game, DateTime now) { Assert.That(draw.LotteryGameId, Is.EqualTo(game.Id), () => "The 'LotteryGameId' of the draw is incorrect."); Assert.That(draw.Date, Is.EqualTo(now).Within(10).Seconds, () => "The 'Date' of the draw should be set to the current date."); Assert.That(draw.DrawNumbers, Is.Not.Empty, () => "The 'DrawNumbers' collection of the draw should be set."); Assert.That(draw.DrawNumbers.Count, Is.EqualTo(game.NumberOfNumbersInADraw), () => "An incorrect amount of draw numbers were generated."); var drawNumberList = draw.DrawNumbers.ToList(); var expectedPosition = 1; foreach (var drawNumber in drawNumberList) { Assert.That(drawNumber.Position, Is.EqualTo(expectedPosition), () => "One of the draw numbers has an unexpected position. " + "The position of the draw numbers should start at 1 and increment for each new draw number"); expectedPosition++; } Assert.That(drawNumberList, Has.All.Matches((DrawNumber drawNumber) => drawNumber.Number >= 1), () => "Not all draw numbers are greater than or equal to one."); Assert.That(drawNumberList, Has.All.Matches((DrawNumber drawNumber) => drawNumber.Number <= game.MaximumNumber), () => "Not all draw numbers are less than or equal to the maximum number of the game."); return(true); }
protected IList <LotteryGame> GetAllGames() { var a = new List <LotteryGame>(); using (var b = Cc()) { b.Open(); var c = A(X.A, b); using (var d = C(c)) { int e = B(d, "Id"); int f = B(d, "Name"); int g = B(d, "NumberOfNumbersInADraw"); int h = B(d, "MaximumNumber"); while (d.Read()) { var i = new LotteryGame { Id = d.GetInt32(e), Name = d.GetString(f), NumberOfNumbersInADraw = d.GetInt32(g), MaximumNumber = d.GetInt32(h), }; a.Add(i); } } } return(a); }
public LotteryGameBuilder() { _random = new Random(); _game = new LotteryGame { Name = Guid.NewGuid().ToString(), MaximumNumber = _random.Next(1, 100) }; _game.NumberOfNumbersInADraw = _random.Next(1, _game.MaximumNumber + 1); }
public async Task ExecuteGroupAsync(CommandContext ctx, [RemainingText, Description("Three numbers.")] params int[] numbers) { if (this.Shared.IsEventRunningInChannel(ctx.Channel.Id)) { if (this.Shared.GetEventInChannel(ctx.Channel.Id) is LotteryGame) { await this.JoinAsync(ctx, numbers); } else { throw new CommandFailedException("Another event is already running in the current channel."); } return; } long?balance = await this.Database.GetBankAccountBalanceAsync(ctx.User.Id, ctx.Guild.Id); if (!balance.HasValue || balance < LotteryGame.TicketPrice) { throw new CommandFailedException($"You do not have enough {this.Shared.GetGuildConfig(ctx.Guild.Id).Currency ?? "credits"} to buy a lottery ticket! Use command {Formatter.InlineCode("bank")} to check your account status. The lottery ticket costs {LotteryGame.TicketPrice} {this.Shared.GetGuildConfig(ctx.Guild.Id).Currency ?? "credits"}!"); } var game = new LotteryGame(ctx.Client.GetInteractivity(), ctx.Channel); this.Shared.RegisterEventInChannel(game, ctx.Channel.Id); try { await this.InformAsync(ctx, StaticDiscordEmoji.Clock1, $"The Lottery game will start in 30s or when there are 10 participants. Use command {Formatter.InlineCode("casino lottery")} to join the pool."); await this.JoinAsync(ctx, numbers); await Task.Delay(TimeSpan.FromSeconds(30)); await game.RunAsync(); if (game.Winners.Any()) { await this.InformAsync(ctx, StaticDiscordEmoji.MoneyBag, $"Winnings:\n\n{string.Join(", ", game.Winners.Select(w => $"{w.User.Mention} : {w.WinAmount}"))}"); foreach (var winner in game.Winners) { await this.Database.IncreaseBankAccountBalanceAsync(winner.Id, ctx.Guild.Id, winner.WinAmount); } } else { await this.InformAsync(ctx, StaticDiscordEmoji.MoneyBag, "Better luck next time!"); } } finally { this.Shared.UnregisterEventInChannel(ctx.Channel.Id); } }
private bool AssertIsValidNumbersList(LotteryGame game, IList <int> numbers) { Assert.That(numbers, Is.Not.Null.Or.Empty, "The 'numbers' list should not be null or empty."); Assert.That(numbers.Count, Is.EqualTo(game.NumberOfNumbersInADraw), "An incorrect amount of draw numbers were generated."); Assert.That(numbers, Has.All.Matches((int number) => number >= 1), "Not all numbers are greater than or equal to one."); Assert.That(numbers, Has.All.Matches((int number) => number <= game.MaximumNumber), "Not all draw numbers are less than or equal to the maximum number of the game."); return(true); }
public void TestCheckNumbers() { LotteryGame kenoGame = new LotteryGame("Keno Game"); Draw draw = new Draw(); draw.AddDrawNumber(2); draw.AddDrawNumber(36); draw.AddDrawNumber(45); draw.AddDrawNumber(29); draw.AddDrawNumber(63); draw.AddDrawNumber(78); draw.AddDrawNumber(80); draw.AddDrawNumber(16); draw.AddDrawNumber(56); draw.AddDrawNumber(52); draw.AddDrawNumber(58); draw.AddDrawNumber(8); LotteryTicket ticket = new LotteryTicket(); ticket.AddSelectedNumber(36); ticket.AddSelectedNumber(3); ticket.AddSelectedNumber(28); ticket.AddSelectedNumber(78); ticket.AddSelectedNumber(30); ticket.AddSelectedNumber(10); kenoGame.AddDraw(draw); draw.AddTicket(ticket); var wonNumbers = new List <int> { 36, 78 }; TicketChecker checker = kenoGame.CheckResults(); Assert.AreEqual(TicketChecker.ReturnStatus.Success, checker.Message); CollectionAssert.AreEqual(ticket.WinningNumbers, wonNumbers); }
public void CreateDrawFor(LotteryGame lotteryGame) { Draw newDraw = new Draw() { LotteryGameId = lotteryGame.Id, LotteryGame = lotteryGame, Date = DateTime.Now }; int number; ArrayList checkNumbers = new ArrayList(); IList <DrawNumber> numbers = new List <DrawNumber>(); for (int i = 1; i <= lotteryGame.NumberOfNumbersInADraw; i++) { Random rnd = new Random(); number = rnd.Next(1, lotteryGame.MaximumNumber); if (checkNumbers.Contains(number)) { do { number = rnd.Next(1, lotteryGame.MaximumNumber); } while (checkNumbers.Contains(number)); checkNumbers.Add(number); } else { checkNumbers.Add(number); } var nummer = new DrawNumber() { DrawId = i, Number = number, Position = i }; numbers.Add(nummer); } newDraw.DrawNumbers = numbers; drawRepository.Add(newDraw); }
public void CreateDrawFor(LotteryGame lotteryGame) { }
public void ComputeMostFrequentNumbers() { LotteryGame kenoGame = new LotteryGame("Keno Game"); Draw draw1 = new Draw(); draw1.AddDrawNumber(2); draw1.AddDrawNumber(36); draw1.AddDrawNumber(45); draw1.AddDrawNumber(29); draw1.AddDrawNumber(63); draw1.AddDrawNumber(78); draw1.AddDrawNumber(80); draw1.AddDrawNumber(16); draw1.AddDrawNumber(56); draw1.AddDrawNumber(52); draw1.AddDrawNumber(58); draw1.AddDrawNumber(8); Draw draw2 = new Draw(); draw2.AddDrawNumber(2); draw2.AddDrawNumber(67); draw2.AddDrawNumber(45); draw2.AddDrawNumber(24); draw2.AddDrawNumber(60); draw2.AddDrawNumber(23); draw2.AddDrawNumber(66); draw2.AddDrawNumber(53); draw2.AddDrawNumber(20); draw2.AddDrawNumber(44); draw2.AddDrawNumber(51); draw2.AddDrawNumber(9); Draw draw3 = new Draw(); draw3.AddDrawNumber(2); draw3.AddDrawNumber(67); draw3.AddDrawNumber(43); draw3.AddDrawNumber(25); draw3.AddDrawNumber(61); draw3.AddDrawNumber(22); draw3.AddDrawNumber(33); draw3.AddDrawNumber(55); draw3.AddDrawNumber(19); draw3.AddDrawNumber(57); draw3.AddDrawNumber(3); draw3.AddDrawNumber(6); kenoGame.AddDraw(draw1); kenoGame.AddDraw(draw2); kenoGame.AddDraw(draw3); var countDictionary = new Dictionary <int, int>(); countDictionary.Add(2, 3); countDictionary.Add(45, 2); countDictionary.Add(67, 2); LotteryStatistics result = kenoGame.ComputeStatistics(); CollectionAssert.AreEqual(countDictionary, result.ThreeMostNumbers); }
public void UpdateLotteryGame(LotteryGame lotteryGame) { this.Update <LotteryGame>(lotteryGame); }
public void AddLotteryGame(LotteryGame entity) { this.Add <LotteryGame>(entity); }
public async Task ExecuteGroupAsync(CommandContext ctx, [RemainingText, Description("Three numbers.")] params int[] numbers) { if (this.Shared.IsEventRunningInChannel(ctx.Channel.Id)) { if (this.Shared.GetEventInChannel(ctx.Channel.Id) is LotteryGame) { await this.JoinAsync(ctx, numbers); } else { throw new CommandFailedException("Another event is already running in the current channel."); } return; } var game = new LotteryGame(ctx.Client.GetInteractivity(), ctx.Channel); this.Shared.RegisterEventInChannel(game, ctx.Channel.Id); try { await this.InformAsync(ctx, StaticDiscordEmoji.Clock1, $"The Lottery game will start in 30s or when there are 10 participants. Use command {Formatter.InlineCode("casino lottery")} to join the pool."); await this.JoinAsync(ctx, numbers); await Task.Delay(TimeSpan.FromSeconds(30)); if (game.ParticipantCount > 1) { await game.RunAsync(); if (game.Winners.Any()) { await this.InformAsync(ctx, StaticDiscordEmoji.MoneyBag, $"Winnings:\n\n{string.Join(", ", game.Winners.Select(w => $"{w.User.Mention} : {w.WinAmount}"))}"); using (DatabaseContext db = this.Database.CreateContext()) { foreach (LotteryParticipant winner in game.Winners) { await db.ModifyBankAccountAsync(ctx.User.Id, ctx.Guild.Id, v => v + winner.WinAmount); } await db.SaveChangesAsync(); } } else { await this.InformAsync(ctx, StaticDiscordEmoji.MoneyBag, "Better luck next time!"); } } else { if (game.IsParticipating(ctx.User)) { using (DatabaseContext db = this.Database.CreateContext()) { await db.ModifyBankAccountAsync(ctx.User.Id, ctx.Guild.Id, v => v + LotteryGame.TicketPrice); await db.SaveChangesAsync(); } } await this.InformAsync(ctx, StaticDiscordEmoji.AlarmClock, "Not enough users joined the Blackjack game."); } } finally { this.Shared.UnregisterEventInChannel(ctx.Channel.Id); } }
public ActionResult Subscribe(StudentSubscriptionModel model) { var org = GetMyOrganisation(); var semester = SemesterService.GetSemester(model.SemesterName.Trim()); if (semester == null) { ModelState.AddModelError("SemesterName", "Es existiert kein Semester mit dieser Bezeichnung"); return(View(model)); } var courses = Db.Activities.OfType <Course>().Where(x => x.ShortName.Equals(model.CourseShortName.Trim()) && x.SemesterGroups.Any(g => g.Semester.Id == semester.Id && g.CapacityGroup.CurriculumGroup.Curriculum.Organiser.Id == org.Id)).ToList(); if (!courses.Any()) { ModelState.AddModelError("CourseShortName", "Es existiert keine Lehrveranstaltung mit dieser Bezeichnung"); return(View(model)); } if (courses.Count > 1) { ModelState.AddModelError("CourseShortName", $"Bezeichnung nicht eindeutig. Es existieren {courses.Count} Lehrveranstaltungen mit dieser Bezeichnung"); return(View(model)); } var host = GetCurrentUser(); var course = courses.First(); var subscription = course.Occurrence.Subscriptions.FirstOrDefault(x => x.UserId.Equals(model.User.Id)); if (subscription != null) { ModelState.AddModelError("CourseShortName", "Ist bereits in dieser Lehrveranstaltung eingetragen."); return(View(model)); } subscription = new OccurrenceSubscription(); subscription.TimeStamp = DateTime.Now; subscription.UserId = model.User.Id; subscription.OnWaitingList = false; subscription.Occurrence = course.Occurrence; course.Occurrence.Subscriptions.Add(subscription); // wenn es ein Wahlverfahren gibt, dann als Prio 1 var lottery = Db.Lotteries.FirstOrDefault(x => x.Occurrences.Any(y => y.Id == course.Occurrence.Id)); if (lottery != null) { subscription.Priority = 1; var game = lottery.Games.FirstOrDefault(x => x.UserId.Equals(model.User.Id)); if (game == null) { game = new LotteryGame { Lottery = lottery, UserId = subscription.UserId, AcceptDefault = false, CoursesWanted = lottery.MaxConfirm, Created = DateTime.Now, LastChange = DateTime.Now }; lottery.Games.Add(game); } } Db.SaveChanges(); // Bei Erfolg Mail versenden var mailService = new SubscriptionMailService(); mailService.SendSubscriptionEMail(course, subscription, host); return(RedirectToAction("CoursePlan", new { id = model.User.Id, semId = semester.Id })); }
public async Task ExecuteGroupAsync(CommandContext ctx, [RemainingText, Description("desc-gamble-numbers-3")] params int[] numbers) { if (this.Service.IsEventRunningInChannel(ctx.Channel.Id)) { if (this.Service.GetEventInChannel(ctx.Channel.Id) is LotteryGame) { await this.JoinAsync(ctx); } else { throw new CommandFailedException(ctx, "cmd-err-evt-dup"); } return; } string currency = ctx.Services.GetRequiredService <GuildConfigService>().GetCachedConfig(ctx.Guild.Id).Currency; var game = new LotteryGame(ctx.Client.GetInteractivity(), ctx.Channel); this.Service.RegisterEventInChannel(game, ctx.Channel.Id); try { await ctx.ImpInfoAsync(this.ModuleColor, Emojis.Clock1, "str-casino-lottery-start", LotteryGame.MaxParticipants, LotteryGame.TicketPrice, currency ); await this.JoinAsync(ctx, numbers); await Task.Delay(TimeSpan.FromSeconds(30)); BankAccountService bas = ctx.Services.GetRequiredService <BankAccountService>(); if (game.ParticipantCount > 1) { await game.RunAsync(this.Localization); if (game.Winners.Any()) { await ctx.ImpInfoAsync(this.ModuleColor, Emojis.Cards.Suits[0], "fmt-winnings", game.Winners.Select(w => $"{w.User.Mention}: {w.WinAmount:n0} {currency}").JoinWith() ); foreach (LotteryGame.Participant winner in game.Winners) { await bas.IncreaseBankAccountAsync(ctx.Guild.Id, winner.Id, winner.WinAmount); } } else { await ctx.ImpInfoAsync(this.ModuleColor, Emojis.Cards.Suits[0], "str-casino-lottery-lose"); } } else { if (game.IsParticipating(ctx.User)) { await bas.IncreaseBankAccountAsync(ctx.Guild.Id, ctx.User.Id, LotteryGame.TicketPrice); } await ctx.ImpInfoAsync(this.ModuleColor, Emojis.AlarmClock, "str-casino-lottery-none"); } } finally { this.Service.UnregisterEventInChannel(ctx.Channel.Id); } }
public void InitLotPots() { AddMessage(null, null, "Beginn Initialisierung der Lostöpfe"); AddMessage(null, null, $"Anzahl Lehrveranstaltungen: {Courses.Count}"); var bookingService = new BookingService(db); // Pro Kurs die Lostöpfe anlegen foreach (var course in Courses) { var bookingLists = bookingService.GetBookingLists(course.Occurrence.Id); AddMessage(course, null, $"Anzahl Buchungslisten: {bookingLists.Count}"); foreach (var bookingList in bookingLists) { var lotPot = new DrawingLotPot(); lotPot.BookingList = bookingList; lotPot.Course = course; // Alle Subscriptions durchgehen // Sichern des Status vor der Verlosung! foreach (var booking in bookingList.Bookings) { var subscription = booking.Subscription; var game = Games.FirstOrDefault(x => x.UserId.Equals(subscription.UserId)); if (game == null) { var student = db.Students.Where(x => x.UserId.Equals(subscription.UserId)) .OrderByDescending(x => x.Created).FirstOrDefault(); var lotteryGame = db.LotteryGames.Where(x => x.Lottery.Id == Lottery.Id && x.UserId.Equals(subscription.UserId)) .OrderByDescending(x => x.Created).FirstOrDefault(); // Eintragung wurde außerhalb des Wahlverfahrens gemacht => Standard aufnehmen, damit Studierende an die Wahl dann auch rankommen if (lotteryGame == null) { lotteryGame = new LotteryGame(); lotteryGame.Lottery = Lottery; lotteryGame.UserId = subscription.UserId; lotteryGame.AcceptDefault = false; lotteryGame.CoursesWanted = Lottery.MaxConfirm; lotteryGame.Created = DateTime.Now; lotteryGame.LastChange = DateTime.Now; // bisher nicht angegeben Lottery.Games.Add(lotteryGame); } game = new DrawingGame(); game.UserId = subscription.UserId; game.Student = student; game.LotteryGame = lotteryGame; game.Lottery = Lottery; Games.Add(game); } // Trennung von bereits erhaltenen Plätzen und Losen if (subscription.OnWaitingList == false) { var seat = new DrawingSeat(); seat.Course = course; seat.Subscription = subscription; game.Seats.Add(seat); AddMessage(course, subscription, "Vorhandener Platz"); } else { var drawingLot = new DrawingLot(); drawingLot.IsValid = true; // Am Beginn ist das Ticket gültig drawingLot.IsTouched = false; drawingLot.Course = course; drawingLot.Subscription = subscription; game.Lots.Add(drawingLot); lotPot.Lots.Add(drawingLot); AddMessage(course, subscription, "Ein Los für die Verlosung erhalten"); } } LotPots.Add(lotPot); } } }