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);
            }
        }
Exemplo n.º 3
0
        /// <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);
            }
        }
Exemplo n.º 5
0
        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));
            }
        }