public async Task <List <Stopp> > FinnMuligeSluttStopp(StoppModel sluttStopp) { try { Stopp stopp = await _db.Stopp.FirstOrDefaultAsync(s => s.Navn == sluttStopp.Navn); List <Ruter> ruter = await _hjelp.FinnRuteneTilStopp(stopp); List <Stopp> stoppListe = new List <Stopp>(); foreach (Ruter rute in ruter) { int stoppNummer = await _hjelp.FinnStoppNummer(stopp, rute); List <Stopp> tempListe = await _db.RuteStopp .Where(rs => rs.StoppNummer > stoppNummer && rs.Rute == rute) .Select(rs => rs.Stopp).ToListAsync(); stoppListe.AddRange(tempListe); } return(stoppListe); } catch (Exception e) { _log.LogInformation(e.Message); return(null); } }
public async Task <bool> OppdaterStoppnavn(Stopp innStopp) { if (innStopp == null) { _log.LogInformation("Det er ikke noe stoppobjekt å endre navn på!"); return(false); } Stopp stopp = await _db.Stopp.FindAsync(innStopp.Id); stopp.Navn = innStopp.Navn; await _db.SaveChangesAsync(); return(true); }
/* Hjelpemetode som tar inn et Stopp-objekt og returnerer en * liste med ruter som innholder stoppet */ public async Task <List <Ruter> > FinnRuteneTilStopp(Stopp stopp) { try { return(await _db.RuteStopp .Where(rs => rs.Stopp == stopp) .Select(rs => rs.Rute) .ToListAsync()); } catch (Exception e) { _log.LogInformation(e.Message); return(null); } }
public async Task HentEtStopp_IkkeTilgang() { // Arrange Stopp forventetStopp = new Stopp { Id = 1, Navn = "Oslo" }; mockRepo.Setup(b => b.HentEtStopp(forventetStopp.Id)).ReturnsAsync(forventetStopp); MockSession(_ikkeInnlogget); // Act var resultat = await stoppController.HentEtStopp(forventetStopp.Id) as UnauthorizedObjectResult; // Assert Assert.Equal((int)HttpStatusCode.Unauthorized, resultat.StatusCode); }
public async Task HentEtStopp_Feil() { // Arrange Stopp forventetStopp = new Stopp { Id = 1, Navn = "Oslo" }; mockRepo.Setup(b => b.HentEtStopp(forventetStopp.Id)).ReturnsAsync(() => null); MockSession(_innlogget); // Act var resultat = await stoppController.HentEtStopp(forventetStopp.Id) as NotFoundObjectResult; // Assert Assert.Equal((int)HttpStatusCode.NotFound, resultat.StatusCode); Assert.Equal("Stoppet ble ikke funnet", resultat.Value); }
public async Task OppdaterStoppnavn_IkkeTilgang() { //arrange Stopp stopp = new Stopp { Id = 1, Navn = "Oslo" }; mockRepo.Setup(s => s.OppdaterStoppnavn(stopp)).ReturnsAsync(true); MockSession(_ikkeInnlogget); //act var resultat = await stoppController.OppdaterStoppnavn(stopp) as UnauthorizedObjectResult; //assert Assert.Equal((int)HttpStatusCode.Unauthorized, resultat.StatusCode); }
public async Task OppdaterStoppnavn_Regex() { //arrange Stopp stopp = new Stopp { Id = 1, Navn = "Ox" }; mockRepo.Setup(s => s.OppdaterStoppnavn(stopp)).ReturnsAsync(true); MockSession(_innlogget); stoppController.ModelState.AddModelError("Navn", "Feil i inputvalideringen på server"); //act var resultat = await stoppController.OppdaterStoppnavn(stopp) as BadRequestObjectResult; //assert Assert.Equal((int)HttpStatusCode.BadRequest, resultat.StatusCode); Assert.Equal("Feil i inputvalideringen på server", resultat.Value); }
public async Task OppdaterStoppnavn_Feil() { //arrange Stopp stopp = new Stopp { Id = 1, Navn = "Oslo" }; mockRepo.Setup(s => s.OppdaterStoppnavn(stopp)).ReturnsAsync(false); MockSession(_innlogget); //act var resultat = await stoppController.OppdaterStoppnavn(stopp) as BadRequestObjectResult; //assert Assert.Equal((int)HttpStatusCode.BadRequest, resultat.StatusCode); Assert.Equal($"Endring av Stoppnavn kunne ikke utføres med verdiene: { stopp}", resultat.Value); }
public async Task HentEtStopp_Regex() { // Arrange Stopp forventetStopp = new Stopp { Id = 1, Navn = "34" }; mockRepo.Setup(b => b.HentEtStopp(forventetStopp.Id)).ReturnsAsync(forventetStopp); stoppController.ModelState.AddModelError("Navn", "Feil i inputvalidering på server"); MockSession(_innlogget); // Act var resultat = await stoppController.HentEtStopp(forventetStopp.Id) as BadRequestObjectResult; // Assert Assert.Equal((int)HttpStatusCode.BadRequest, resultat.StatusCode); Assert.Equal("Feil i inputvalidering på server", resultat.Value); }
public async Task HentEtStopp_Riktig() { // Arrange Stopp forventetStopp = new Stopp { Id = 1, Navn = "Oslo" }; mockRepo.Setup(b => b.HentEtStopp(forventetStopp.Id)).ReturnsAsync(forventetStopp); MockSession(_innlogget); // Act var resultat = await stoppController.HentEtStopp(forventetStopp.Id) as OkObjectResult; Stopp faktiskStopp = (Stopp)resultat.Value; // Assert Assert.Equal((int)HttpStatusCode.OK, resultat.StatusCode); Assert.Equal(forventetStopp, faktiskStopp); }
/* * Hjelpemetoder */ // Returnerer en List med Stopp-objekter private List <Stopp> HentStoppListe() { Stopp stopp1 = new Stopp { Id = 1, Navn = "Bergen" }; Stopp stopp2 = new Stopp { Id = 1, Navn = "Oslo" }; Stopp stopp3 = new Stopp { Id = 1, Navn = "Vadheim" }; Stopp stopp4 = new Stopp { Id = 1, Navn = "Trondheim" }; return(new List <Stopp> { stopp1, stopp2, stopp3, stopp4 }); }
public async Task <ActionResult> HentEtStopp(int id) { if (string.IsNullOrEmpty(HttpContext.Session.GetString(_innlogget))) { return(Unauthorized("Ikke innlogget")); } if (ModelState.IsValid) { Stopp stopp = await _db.HentEtStopp(id); if (stopp == null) { _log.LogInformation("Stoppet ble ikke funnet"); return(NotFound("Stoppet ble ikke funnet")); } return(Ok(stopp)); } _log.LogInformation("Feil i inputvalideringen på server"); return(BadRequest("Feil i inputvalidering på server")); }
// Hjelpemetode som finner stoppnummeret til et spesifikt stopp i en spesifikk rute public async Task <int> FinnStoppNummer(Stopp stopp, Ruter fellesRute) { try { RuteStopp ruteStopp = await _db.RuteStopp .FirstOrDefaultAsync(rs => rs.Stopp == stopp && rs.Rute == fellesRute); if (ruteStopp == null) { _log.LogInformation("Stoppet er ikke på ruten"); return(-1); } return(ruteStopp.StoppNummer); } catch (Exception e) { _log.LogInformation(e.Message); return(-1); } }
// TODO: Sjekke at dette stoppnavnet finnes alt public async Task <ActionResult> OppdaterStoppnavn(Stopp innStopp) { if (string.IsNullOrEmpty(HttpContext.Session.GetString(_innlogget))) { return(Unauthorized("Ikke innlogget")); } if (ModelState.IsValid) { bool EndringOK = await _db.OppdaterStoppnavn(innStopp); if (!EndringOK) { melding = $"Endring av Stoppnavn kunne ikke utføres med verdiene: {innStopp}"; _log.LogWarning(melding); return(BadRequest(melding)); } melding = $"Endring av Stoppnavn ble utført med verdiene: {innStopp}"; _log.LogInformation(melding); return(Ok(melding)); } _log.LogWarning(ugyldigValidering); return(BadRequest(ugyldigValidering)); }
public async Task <bool> NyRuteStopp(NyRuteStopp innRuteStopp) { try { // Returnerer false hvis nyttStoppNummer er mindre enn det minste eller større en det største som allerede eksisterer int antallRuteStopp = await _db.RuteStopp.Where(rs => rs.Rute.Linjekode == innRuteStopp.Linjekode).CountAsync(); int nyttStoppNummer = innRuteStopp.StoppNummer; if (nyttStoppNummer > antallRuteStopp + 1 || nyttStoppNummer <= 0) { return(false); } // Henter alle RuteStopp fra samme rute som har likt eller høyre stoppnummer enn det nye stoppet List <RuteStopp> endreStoppNummer = await LiktEllerSenereStoppNummer(innRuteStopp.StoppNummer, innRuteStopp.Linjekode); // Adderer alle med stoppnummer som er større eller lik det nye rutestoppet med 1 foreach (RuteStopp rs in endreStoppNummer) { rs.StoppNummer++; } // Henter ruten til det nye RuteStopp-objektet Ruter rute = await _db.Ruter.FindAsync(innRuteStopp.Linjekode); // Nytt RuteStopp-objekt RuteStopp nyttRuteStopp = new RuteStopp { Id = innRuteStopp.Id, StoppNummer = innRuteStopp.StoppNummer, MinutterTilNesteStopp = innRuteStopp.MinutterTilNesteStopp, Rute = rute }; // Sjekker om det allerede eksisterer et stopp med tilsvarende navn i DB Stopp eksisterendeStopp = await _db.Stopp .Where(s => s.Navn == innRuteStopp.Stoppnavn).SingleOrDefaultAsync(); // Hvis det eksiterer blir dette Stopp-objektet brukt if (eksisterendeStopp != null) { nyttRuteStopp.Stopp = eksisterendeStopp; } // Hvis det ikke eksiterer blir et nytt Stopp-okbjekt lagt til else { Stopp nyttStopp = new Stopp { Navn = innRuteStopp.Stoppnavn }; nyttRuteStopp.Stopp = nyttStopp; } _db.RuteStopp.Add(nyttRuteStopp); await _db.SaveChangesAsync(); return(true); } catch (Exception e) { _log.LogInformation(e.Message); return(false); } }
// Fullfør ordre public async Task <bool> FullforOrdre(NyOrdre ordreModel) { try { // Henter ut ruten som tilhører OrdreModel Ruter rute = await _db.Ruter.FirstOrDefaultAsync(r => r.Linjekode == ordreModel.Linjekode); // Henter Avgangens Id Avganger avgang = await _db.Avganger.FirstOrDefaultAsync(a => a.Id == ordreModel.AvgangId); // Finner startStopp, og finner stoppnummeret i ruten Stopp startStopp = await _db.Stopp.FirstOrDefaultAsync(s => s.Navn == ordreModel.StartStopp); int stoppNummer1 = await _hjelp.FinnStoppNummer(startStopp, rute); // Finner sluttStopp, og finner stoppnummeret i ruten Stopp sluttStopp = await _db.Stopp.FirstOrDefaultAsync(s => s.Navn == ordreModel.SluttStopp); int stoppNummer2 = await _hjelp.FinnStoppNummer(sluttStopp, rute); // Regner ut antall stopp int antallStopp = stoppNummer2 - stoppNummer1; // Finner summen for reisen // antallStopp, rute, liste med billettype int sum = await _hjelp.BeregnPris(rute, antallStopp, ordreModel.Billettyper); // Lager en ordre basert på ordreModel, rute og avgang var ordre = new Ordre { Epost = ordreModel.Epost, StartStopp = startStopp, SluttStopp = sluttStopp, Sum = sum, Rute = rute, Avgang = avgang }; // Legger ordren til i databasen _db.Ordre.Add(ordre); // Raden til spesifisert avgang Avganger dbAvgang = _db.Avganger.Find(avgang.Id); // Går gjennom listen med billettyper foreach (string billettype in ordreModel.Billettyper) { // Henter ut en billettype i listen Billettyper billettypeObjekt = await _db.Billettyper.FirstOrDefaultAsync(a => a.Billettype == billettype); // Lager en ordrelinje var ordrelinje = new Ordrelinjer { Billettype = billettypeObjekt, Ordre = ordre }; // Legger denne ordrelinjen til databasen _db.Ordrelinjer.Add(ordrelinje); // Øker antalll solgte billetter med 1 dbAvgang.SolgteBilletter++; } // Lagrer alt som er blitt lagt til i databasen _db.SaveChanges(); return(true); } catch (Exception e) { _log.LogInformation(e.Message); return(false); } }
public async Task <Reisedetaljer> FinnNesteAvgang(Avgangkriterier input) { try { // Henter avgang- og påstigningsstoppet fra DB Stopp startStopp = await _db.Stopp.FirstOrDefaultAsync(s => s.Navn == input.StartStopp); Stopp sluttStopp = await _db.Stopp.FirstOrDefaultAsync(s => s.Navn == input.SluttStopp); if (startStopp.Equals(sluttStopp)) { _log.LogInformation("Sluttstopp kan ikke være lik startstopp!"); return(null); } // Finner alle Rutene som inkluderer påstigning og som inkluderer avstigning List <Ruter> startStoppRuter = await _hjelp.FinnRuteneTilStopp(startStopp); List <Ruter> sluttStoppRuter = await _hjelp.FinnRuteneTilStopp(sluttStopp); // Finner ruten påstigning og avstigning har til felles Ruter fellesRute = _hjelp.FinnFellesRute(startStoppRuter, sluttStoppRuter); if (fellesRute == null) { return(null); } // Hvis stoppene ikke har noen felles ruter // Finne ut hvilket stoppNummer påstigning og avstigning har i den felles ruten int stoppNummer1 = await _hjelp.FinnStoppNummer(startStopp, fellesRute); int stoppNummer2 = await _hjelp.FinnStoppNummer(sluttStopp, fellesRute); // Hvis første stopp kommer senere i ruten enn siste stopp if (stoppNummer1 > stoppNummer2) { _log.LogInformation("Seneste stopp har ikke lavere stoppnummer enn tidligste stopp!"); return(null); } int reisetid = await _hjelp.BeregnReisetid(stoppNummer1, stoppNummer2, fellesRute); // Beregner reisetiden fra stopp påstigning til avstigning int antallBilletter = input.Billettyper.Count(); // antall billetter brukeren ønsker DateTime innTid = _hjelp.StringTilDateTime(input.Dato, input.Tidspunkt); // Konverterer fra strings til DateTime // Finne neste avgang som passer, basert på brukerens input Avganger nesteAvgang = await _hjelp.NesteAvgang(fellesRute, reisetid, input.AvreiseEtter, innTid, antallBilletter); if (nesteAvgang == null) { return(null); } // Hvis ingen avgang ble funnet // Beregner avreise og ankomst DateTime avreise = await _hjelp.BeregnAvreisetid(nesteAvgang.Avreise, stoppNummer1, fellesRute); DateTime ankomst = avreise.AddMinutes(reisetid); // Konverterer avreise og ankomst fra DateTime til en strings string utAvreise = avreise.ToString("dd-MM-yyyy HH:mm"); string utAnkomst = ankomst.ToString("dd-MM-yyyy HH:mm"); // Beregner prisen basert på startpris og antall stopp int antallStopp = stoppNummer2 - stoppNummer1; int pris = await _hjelp.BeregnPris(fellesRute, antallStopp, input.Billettyper); // Opretter Avgang-objektet som skal sendes til klienten Reisedetaljer utAvgang = new Reisedetaljer { AvgangId = nesteAvgang.Id, Rutenavn = fellesRute.Rutenavn, Linjekode = fellesRute.Linjekode, Pris = pris, Avreise = utAvreise, Ankomst = utAnkomst, Reisetid = reisetid }; return(utAvgang); } catch (Exception e) { _log.LogError(e.Message); return(null); } }