public async Task testAnmeldungError() { using (var scope = provider.CreateScope()) { var ac = scope.ServiceProvider.GetRequiredService <AnmeldungController>(); var context = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>(); Utils.CreateTestData(context, DateTime.Now); // check types ActionResult result = ac.Anmeldung(); Assert.IsType <ViewResult>(result); ViewResult vRes = (ViewResult)result; Assert.IsType <AnmeldungViewModel>(vRes.Model); AnmeldungViewModel avm = (AnmeldungViewModel)vRes.Model; // enter data avm.Nachname = "testN"; avm.Vorname = "testV"; avm.Nummer = "123"; // try with invalid status avm.Status = "invalid"; avm.Email = "*****@*****.**"; // submit model back result = await ac.Anmeldung(avm); Assert.IsType <ObjectResult>(result); ObjectResult statusCodeResult = (ObjectResult)result; // check error Assert.Equal(400, statusCodeResult.StatusCode); Assert.Equal("invalid status", statusCodeResult.Value); // fix data, add invalid id avm.Status = "Mitglied"; avm.SchulungsCheckboxen.Add(new SchulungsCheckBox(true, "asdf", "invalid")); // submit model back result = await ac.Anmeldung(avm); Assert.IsType <ObjectResult>(result); statusCodeResult = (ObjectResult)result; // check error Assert.Equal(404, statusCodeResult.StatusCode); Assert.Equal("Schulung existiert nicht", statusCodeResult.Value); } }
public async Task TestAnmeldung() { using (var scope = provider.CreateScope()) { var ac = scope.ServiceProvider.GetRequiredService <AnmeldungController>(); var context = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>(); // save current datetime so it isn't affected by programm execution and can be checked later DateTime now = DateTime.Now; Utils.CreateTestData(context, now); MockEmailSender.sentMessages.Clear(); // check types ActionResult result = ac.Anmeldung(); Assert.IsType <ViewResult>(result); ViewResult vRes = (ViewResult)result; Assert.IsType <AnmeldungViewModel>(vRes.Model); AnmeldungViewModel avm = (AnmeldungViewModel)vRes.Model; // 1 schulung Assert.Single(avm.Schulungen); Assert.Equal("00000000-0000-0000-0000-000000000000", avm.SchulungsCheckboxen.ElementAt(0).Guid); // Für die Schulung anmelden: avm.Nachname = "testN"; avm.Vorname = "testV"; avm.Nummer = "123"; avm.Status = "Mitglied"; avm.Email = "*****@*****.**"; avm.SchulungsCheckboxen.ElementAt(0).Checked = true; result = await ac.Anmeldung(avm); // sleep cause sending the mail is async System.Threading.Thread.Sleep(1000); // assert there was a mail sent: Assert.Single(MockEmailSender.sentMessages); } }
/// <summary> /// Diese Methode wird vom Framework aufgerufen, wenn im Browser die ../Anmeldung/Anmeldung Seite aufgerufen wird. Sie gibt dem Framework die Anmeldung-View und ein AnmeldungViewModel zurück, welches eine Liste von CC-Stati für ein Dropdown-Menü und eine Liste von Checkboxen zur Schulungsauswahl enthält. /// </summary> /// <returns> die View für ../Anmeldung/Anmeldung </returns> public ActionResult Anmeldung() { try { var now = DateTime.Now; // alle Schulungen aus der Datebank abrufen List <Schulung> Schulungen = _schulungRepository.GetForRegSortByDate() // man kann sich nur für Schulungen anmelden, deren Anmeldung läuft .Where(s => s.StartAnmeldefrist < now).ToList(); // neues Viewmodel erstellen AnmeldungViewModel anmeldungViewModel = new AnmeldungViewModel(Schulungen); //die zu verwendende View wird zurückgegeben mit dem gefüllten anmeldungViewModel return(View("Anmeldung", anmeldungViewModel)); } catch (Exception e) { logger.Error(e); string code = "#301"; e = new Exception("Fehler beim Erstellen der View " + code, e); return(View("Error", e)); } }
public async Task TestAnmeldungWithoutNummer() // you can still sign up if you don't supply a mobile number { using (var scope = provider.CreateScope()) { var ac = scope.ServiceProvider.GetRequiredService <AnmeldungController>(); var context = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>(); // save current datetime so it isn't affected by programm execution and can be checked later DateTime now = DateTime.Now; Utils.CreateTestDataForAnmeldung(context, now); MockEmailSender.sentMessages.Clear(); // check types ActionResult result = ac.Anmeldung(); Assert.IsType <ViewResult>(result); ViewResult vRes = (ViewResult)result; Assert.IsType <AnmeldungViewModel>(vRes.Model); AnmeldungViewModel avm = (AnmeldungViewModel)vRes.Model; Assert.Equal(4, avm.Schulungen.Count); Assert.Equal(4, avm.SchulungsCheckboxen.Count); // check titel of checkboxes string schulungTime = now.AddDays(2).ToString("dd.MM.yyyy HH:mm"); Assert.Equal("Test 0 am " + schulungTime + " Uhr", avm.SchulungsCheckboxen.ElementAt(0).Titel); Assert.Equal("Test 1 am " + schulungTime + " Uhr", avm.SchulungsCheckboxen.ElementAt(1).Titel); Assert.Equal("Test 4 am " + schulungTime + " Uhr", avm.SchulungsCheckboxen.ElementAt(2).Titel); Assert.Equal("Test 5 am " + schulungTime + " Uhr", avm.SchulungsCheckboxen.ElementAt(3).Titel); // mark 0,1,4 avm.SchulungsCheckboxen.ElementAt(0).Checked = true; avm.SchulungsCheckboxen.ElementAt(1).Checked = true; avm.SchulungsCheckboxen.ElementAt(2).Checked = true; // enter data avm.Nachname = "testN"; avm.Vorname = "testV"; // specifically don't set this // avm.Nummer = "123"; avm.Status = "Mitglied"; avm.Email = "*****@*****.**"; // submit model back result = await ac.Anmeldung(avm); Assert.IsType <ViewResult>(result); vRes = (ViewResult)result; Assert.IsType <List <Schulung> >(vRes.Model); List <Schulung> schulungListRes = (List <Schulung>)vRes.Model; // 2 invalid are ignored, same as the one we didn't sign up for Assert.Equal(3, schulungListRes.Count); Assert.Equal("Test 0", schulungListRes.ElementAt(0).Titel); Assert.False(schulungListRes.ElementAt(0).Check); // this one is checked cause there already was a signup with this mail Assert.Equal("Test 1", schulungListRes.ElementAt(1).Titel); Assert.True(schulungListRes.ElementAt(1).Check); Assert.Equal("Test 4", schulungListRes.ElementAt(2).Titel); Assert.False(schulungListRes.ElementAt(2).Check); // sleep cause sending the mail is async System.Threading.Thread.Sleep(1000); // only mails for successful signups should have been sent Assert.Equal(2, MockEmailSender.sentMessages.Count); } }
public async Task <ActionResult> Anmeldung(AnmeldungViewModel newAnmeldung) { try { if (ModelState.IsValid) { // failsafe für den Status, wenn absichtlich falsch übergeben if (!AnmeldungViewModel.AllStati.Contains(newAnmeldung.Status)) { return(StatusCode(400, "invalid status")); } DateTime now = DateTime.Now; List <Schulung> angemeldeteSchulungen = new List <Schulung>(); var rootUrl = Util.getRootUrl(Request); var vorstand = Util.getVorstand(_context); foreach (SchulungsCheckBox checkbox in newAnmeldung.SchulungsCheckboxen) { if (checkbox.Checked) { Anmeldung anmeldung = newAnmeldung.ToAnmeldung(); anmeldung.SchulungGuid = checkbox.Guid; Schulung schulung = await _schulungRepository.GetByIdAsync(anmeldung.SchulungGuid); // nur erreicht, wenn absichtlich invalide Id übergeben if (schulung == null) { return(StatusCode(404, "Schulung existiert nicht")); } // Termine aus Datenbank laden if (schulung.Termine.Count == 0) { } // Check ob die Schulung immer noch offen ist, sonst ignorieren if (!schulung.IsAbgesagt && schulung.Anmeldefrist > now && schulung.StartAnmeldefrist < now) { if (await _anmeldungRepository.AnmeldungAlreadyExistAsync(anmeldung)) { schulung.Check = true; angemeldeteSchulungen.Add(schulung); } else { angemeldeteSchulungen.Add(schulung); await _anmeldungRepository.AddAsync(anmeldung); //logger.Info(anmeldung.AccessToken); mailingHelper.GenerateAndSendBestätigungsMailAsync(anmeldung, schulung, vorstand, rootUrl); } } } } return(View("Bestätigung", angemeldeteSchulungen)); //Weiterleitung auf Bestaetigungs-View } AnmeldungViewModel anmeldungViewModel = new AnmeldungViewModel((List <Schulung>)_schulungRepository.GetForRegSortByDate()); newAnmeldung.Schulungen = anmeldungViewModel.Schulungen; newAnmeldung.Stati = anmeldungViewModel.Stati; return(View("Anmeldung", newAnmeldung)); } catch (Exception e) { logger.Error(e); string code = "#302"; e = new Exception("Fehler beim Verarbeiten des Inputs " + code, e); return(View("Error", e)); } }