Exemplo n.º 1
0
        public async Task <ActionResult> OppdaterRute(Ruter endretRute)
        {
            if (string.IsNullOrEmpty(HttpContext.Session.GetString(_innlogget)))
            {
                return(Unauthorized("Ikke innlogget"));
            }
            if (ModelState.IsValid)
            {
                bool returOK = await _db.OppdaterRute(endretRute);

                if (!returOK)
                {
                    melding = $"Endringen av Ruten med linjekode: {endretRute.Linjekode}, " +
                              $"kunne ikke utføres med verdiene: {endretRute}";
                    _log.LogWarning(melding);
                    return(NotFound(melding));
                }
                melding = $"Endring av Ruten med linjekode: {endretRute.Linjekode}, " +
                          $"ble utfør med verdiene: {endretRute}";
                _log.LogInformation(melding);
                return(Ok(melding));
            }
            _log.LogWarning(ugyldigValidering);
            return(BadRequest(ugyldigValidering));
        }
        public async Task <bool> SlettRute(int id)
        {
            try
            {
                Buss_Rute buss_Rute = await _db.Buss_rute.FindAsync(id);

                Ruter rute = await _db.Ruter.FindAsync(buss_Rute.Rute.RuteId);

                List <Avganger> avganger = await _db.Avganger.Where((a) => a.Rute.RuteId == rute.RuteId).ToListAsync();


                List <Avgangstider> avgangstider = new List <Avgangstider>();
                avganger.ForEach((a) => {
                    a.Tider.ForEach(at => avgangstider.Add(at));
                });

                Busser buss = await _db.Busser.FindAsync(buss_Rute.Buss.BussId);

                _db.Avgangstider.RemoveRange(avgangstider);
                _db.Avganger.RemoveRange(avganger);

                _db.Busser.Remove(buss);
                _db.Ruter.Remove(rute);

                _db.Buss_rute.Remove(buss_Rute);

                await _db.SaveChangesAsync();

                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
        [HttpPost] //Henter ut alle tilgjengelige stasjonertil med samme rute for stasjonerfra
        public async Task <List <Stasjoner> > HentAlleStasjonerTil(int id)
        {
            try
            {
                Avganger stasjonAvgang = await _db.Avganger.FirstOrDefaultAsync(b => b.Stopp.StasjonId == id);

                Ruter rute = await _db.Ruter.FirstOrDefaultAsync(rute => rute.RuteId == stasjonAvgang.Rute.RuteId);

                List <Stasjoner> stasjonerRute = new List <Stasjoner>();

                //finner riktig rute for stasjonerfra
                rute.Avganger.ForEach(Avganger => {
                    if (!(Avganger.Stopp.StasjonId == id))
                    {
                        stasjonerRute.Add(Avganger.Stopp);
                    }
                    ;
                }
                                      );
                return(stasjonerRute);
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 4
0
        // Hjelpemetode som finner neste avgang som passer for brukeren
        public async Task <Avganger> NesteAvgang(Ruter fellesRute, int reisetid,
                                                 bool avreiseEtter, DateTime innTid, int antallBilletter)
        {
            try
            {
                List <Avganger> muligeAvganger = new List <Avganger>();
                // Hvis "Avreise Etter" er valgt av brukeren
                if (avreiseEtter)
                {
                    // Henter alle avganger hvor brukeren kan reiser etter innTid
                    muligeAvganger = await _db.Avganger
                                     .Where(a => a.Rute == fellesRute && a.Avreise >= innTid).ToListAsync();
                }
                // Hvis "Ankomst Før" er valgt av brukeren
                else
                {
                    // Trekker fra reisetid på innTid for å finne ut når bruker må reise for å komme fram i tide
                    DateTime avreise = innTid.AddMinutes(-reisetid);

                    // Henter alle avganger hvor brukeren kan kommer fram før innTid
                    muligeAvganger = await _db.Avganger
                                     .Where(a => a.Rute == fellesRute && a.Avreise <= avreise)
                                     .ToListAsync();
                }
                if (muligeAvganger.Count > 0)                                                          // Hvis listen med mulige avganger ikke er tom
                {
                    Avganger nesteAvgang = muligeAvganger[0];
                    TimeSpan lavesteDiff = innTid.Subtract(muligeAvganger[0].Avreise).Duration();      // Føste avgang i listen sitt avvik fra ønsket tid
                    foreach (Avganger muligAvgang in muligeAvganger)                                   // Looper gjennom alle avgangene
                    {
                        TimeSpan diff = innTid.Subtract(muligAvgang.Avreise).Duration();
                        if (diff < lavesteDiff)                                                         // Hvis differansen fra ønsket tid er mindre enn hittil laveste differanse
                        {
                            if (muligAvgang.SolgteBilletter + antallBilletter <= fellesRute.Kapasitet)  // Hvis det er nok billetter igjen
                            {
                                nesteAvgang = muligAvgang;
                                lavesteDiff = diff;
                            }
                        }
                    }

                    return(nesteAvgang);
                }
                else
                {
                    _log.LogInformation("Finner ingen avganger");
                    return(null);
                }
            }
            catch (ArgumentOutOfRangeException bound)
            {
                _log.LogInformation(bound.Message);
                return(null);
            }
        }
Exemplo n.º 5
0
        public async Task <Ruter> HentEnRute(string linjekode)
        {
            try
            {
                Ruter rute = await _db.Ruter.FindAsync(linjekode);

                return(rute);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(null);
            }
        }
Exemplo n.º 6
0
        // Metode for å legge til en ny rute i DB
        public async Task <bool> NyRute(Ruter rute)
        {
            try
            {
                _db.Ruter.Add(rute);
                await _db.SaveChangesAsync();  // Lagrer endringene

                return(true);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(false);
            }
        }
Exemplo n.º 7
0
        public async Task NyRute_RiktigeVerdier()
        {
            // Arrange
            Ruter enRute = HentRuterListe()[0];

            mockRepo.Setup(br => br.NyRute(enRute)).ReturnsAsync(true);
            MockSession(_innlogget);

            // Act
            var resultat = await ruterController.NyRute(enRute) as OkObjectResult;

            // Assert
            Assert.Equal((int)HttpStatusCode.OK, resultat.StatusCode);
            Assert.Equal($"Ny Rute ble lagres med verdiene: {enRute}", resultat.Value);
        }
Exemplo n.º 8
0
        public async Task NyRute_IkkeTilgang()
        {
            // Arrange
            Ruter enRute = HentRuterListe()[0];

            mockRepo.Setup(br => br.NyRute(enRute)).ReturnsAsync(true);
            MockSession(_ikkeInnlogget);

            // Act
            var resultat = await ruterController.NyRute(enRute) as UnauthorizedObjectResult;

            // Assert
            Assert.Equal((int)HttpStatusCode.Unauthorized, resultat.StatusCode);
            Assert.Equal("Ikke innlogget", resultat.Value);
        }
Exemplo n.º 9
0
        public async Task NyRute_IkkeOK()
        {
            // Arrange
            Ruter enRute = HentRuterListe()[0];

            mockRepo.Setup(br => br.NyRute(enRute)).ReturnsAsync(false);
            MockSession(_innlogget);

            // Act
            var resultat = await ruterController.NyRute(enRute) as BadRequestObjectResult;

            // Assert
            Assert.Equal((int)HttpStatusCode.BadRequest, resultat.StatusCode);
            Assert.Equal($"Ny Rute kunne ikke lagres med verdiene: {enRute}", resultat.Value);
        }
Exemplo n.º 10
0
        public async Task <bool> FjernRute(string linjekode)
        {
            try
            {
                // Heter Ruter-objektet og tilhørende RuteStopp, Ordre og Avganger fra DB
                Ruter rute = await _db.Ruter.FindAsync(linjekode);

                List <RuteStopp> ruteStopp = await _db.RuteStopp.Where(rs => rs.Rute == rute).ToListAsync();

                List <Ordre> ordre = await _db.Ordre.Where(o => o.Rute == rute).ToListAsync();

                List <Avganger> avganger = await _db.Avganger.Where(a => a.Rute == rute).ToListAsync();

                // Fjerner alle tilhørende rutestopp fra DB
                foreach (var rs in ruteStopp)
                {
                    _db.RuteStopp.Remove(rs);
                }

                // Fjerner alle tilhørende ordre og ordrelinjer fra DB
                foreach (var o in ordre)
                {
                    List <Ordrelinjer> ordrelinjer = await _db.Ordrelinjer.Where(ol => ol.Ordre == o).ToListAsync();

                    foreach (Ordrelinjer ol in ordrelinjer)
                    {
                        _db.Ordrelinjer.Remove(ol);
                    }
                    _db.Ordre.Remove(o);
                }

                // Fjerner alle tilhørende avganer fra DB
                foreach (var a in avganger)
                {
                    _db.Avganger.Remove(a);
                }

                // Fjerner ruten, lagrer endringen og returnere true hvis alt gikk fint
                _db.Ruter.Remove(rute);
                _db.SaveChanges();
                return(true);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(false);
            }
        }
Exemplo n.º 11
0
        public async Task OppdaterRute_RiktigeVerdier()
        {
            // Arrange
            Ruter enRute = HentRuterListe()[0];

            mockRepo.Setup(br => br.OppdaterRute(enRute)).ReturnsAsync(true);
            MockSession(_innlogget);

            // Act
            var resultat = await ruterController.OppdaterRute(enRute) as OkObjectResult;

            // Assert
            Assert.Equal((int)HttpStatusCode.OK, resultat.StatusCode);
            Assert.Equal($"Endring av Ruten med linjekode: {enRute.Linjekode}, " +
                         $"ble utfør med verdiene: {enRute}", resultat.Value);
        }
Exemplo n.º 12
0
        public async Task OppdaterRute_IkkeOK()
        {
            // Arrange
            Ruter enRute = HentRuterListe()[0];

            mockRepo.Setup(br => br.OppdaterRute(enRute)).ReturnsAsync(false);
            MockSession(_innlogget);

            // Act
            var resultat = await ruterController.OppdaterRute(enRute) as NotFoundObjectResult;

            // Assert
            Assert.Equal((int)HttpStatusCode.NotFound, resultat.StatusCode);
            Assert.Equal($"Endringen av Ruten med linjekode: {enRute.Linjekode}, " +
                         $"kunne ikke utføres med verdiene: {enRute}", resultat.Value);
        }
Exemplo n.º 13
0
        public async Task NyRute_RegEx()
        {
            // Arrange
            Ruter enRute = HentRuterListe()[0];

            mockRepo.Setup(br => br.NyRute(enRute)).ReturnsAsync(true);
            MockSession(_innlogget);
            ruterController.ModelState.AddModelError("Linjekode", "Feil i inputvalideringen på server");

            // Act
            var resultat = await ruterController.NyRute(enRute) as BadRequestObjectResult;

            // Assert
            Assert.Equal((int)HttpStatusCode.BadRequest, resultat.StatusCode);
            Assert.Equal("Feil i inputvalideringen på server", resultat.Value);
        }
Exemplo n.º 14
0
        public async Task <bool> SlettRute(int id)
        {
            try
            {
                Ruter enDBRute = await _db.Ruter.FindAsync(id);

                _db.Ruter.Remove(enDBRute);
                await _db.SaveChangesAsync();

                return(true);
            }
            catch (Exception e)
            {
                _log.LogError(e.Message);
                return(false);
            }
        }
Exemplo n.º 15
0
        public async Task HentEnRute_RiktigeVerdier()
        {
            // Arrange
            string linjekode = "NW431";
            Ruter  enRute    = HentRuterListe()[0];

            mockRepo.Setup(br => br.HentEnRute(linjekode)).ReturnsAsync(enRute);
            MockSession(_innlogget);

            // Act
            var resultat = await ruterController.HentEnRute(linjekode) as OkObjectResult;

            Ruter forventetRute = (Ruter)resultat.Value;

            // Assert
            Assert.Equal((int)HttpStatusCode.OK, resultat.StatusCode);
            Assert.Equal($"{enRute}", forventetRute.ToString());
        }
Exemplo n.º 16
0
        public async Task <int> BeregnPris(Ruter rute, int antallStopp, List <string> billettyper)
        {
            try
            {
                // Finner den standard billettpris for en reise
                int startpris       = rute.Startpris;
                int tilleggPerStopp = rute.TilleggPerStopp;
                int maxPris         = startpris + (tilleggPerStopp * antallStopp);

                // Henter liste med alle billettyper i DB
                List <Billettyper> billettypeListe = await _db.Billettyper.Select(b => new Billettyper
                {
                    Billettype = b.Billettype,
                    Rabattsats = b.Rabattsats
                }).ToListAsync();

                // Finner rabattsatsen for en billett
                var rabbattsatser = new List <int>();
                foreach (string billettype in billettyper)
                {
                    int i = 0;
                    while (billettypeListe[i].Billettype != billettype)
                    {
                        i++;
                    }
                    rabbattsatser.Add(billettypeListe[i].Rabattsats);
                }

                // Finne totalpris
                double totalpris = 0;
                foreach (int rabbattsats in rabbattsatser)
                {
                    double billettPris = maxPris * (1 - ((double)rabbattsats / 100)); // eks. 1 - 0.25 = 0.75
                    totalpris += billettPris;
                }

                return((int)Math.Round(totalpris));
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(-1);
            }
        }
Exemplo n.º 17
0
        public async Task <bool> LeggTilRute(Rute rute)
        {
            try
            {
                var leggTilRute = new Ruter();
                leggTilRute.Id               = rute.Id;
                leggTilRute.Navn             = rute.Navn;
                leggTilRute.StasjonerPaaRute = rute.StasjonerPaaRute;
                _db.Ruter.Add(leggTilRute);
                await _db.SaveChangesAsync();

                return(true);
            }
            catch (Exception e)
            {
                _log.LogError(e.Message);
                return(false);
            }
        }
Exemplo n.º 18
0
        // Returnerer en List med Ruter-objekter
        private List <Ruter> HentRuterListe()
        {
            var rute1 = new Ruter()
            {
                Linjekode = "NW431", Rutenavn = "Fjordekspressen", Startpris = 79, TilleggPerStopp = 30, Kapasitet = 55
            };
            var rute2 = new Ruter()
            {
                Linjekode = "NW194", Rutenavn = "Grenlandsekspressen", Startpris = 50, TilleggPerStopp = 35, Kapasitet = 45
            };
            var rute3 = new Ruter()
            {
                Linjekode = "NW180", Rutenavn = "Haukeliekspressen", Startpris = 149, TilleggPerStopp = 20, Kapasitet = 65
            };

            return(new List <Ruter> {
                rute1, rute2, rute3
            });
        }
Exemplo n.º 19
0
        // 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);
            }
        }
Exemplo n.º 20
0
        public async Task <Rute> HentEnRute(int id)
        {
            try
            {
                Ruter rute = await _db.Ruter.FindAsync(id);

                var hentetRute = new Rute()
                {
                    Id               = rute.Id,
                    Navn             = rute.Navn,
                    StasjonerPaaRute = rute.StasjonerPaaRute
                };
                return(hentetRute);
            }
            catch (Exception e)
            {
                _log.LogError(e.Message);
                return(null);
            }
        }
Exemplo n.º 21
0
        public async Task <ActionResult> HentEnRute(string linjekode)
        {
            if (string.IsNullOrEmpty(HttpContext.Session.GetString(_innlogget)))
            {
                return(Unauthorized("Ikke innlogget"));
            }
            if (ModelState.IsValid)
            {
                Ruter rute = await _db.HentEnRute(linjekode);

                if (rute == null)
                {
                    melding = "Ruten ble ikke funnet";
                    _log.LogWarning(melding);
                    return(NotFound(melding));
                }
                return(Ok(rute));
            }
            _log.LogWarning(ugyldigValidering);
            return(BadRequest(ugyldigValidering));
        }
Exemplo n.º 22
0
        // Metode for å oppdaterer rutedetaljer
        public async Task <bool> OppdaterRute(Ruter endretRute)
        {
            try
            {
                // Finner ruten som skal oppdateres og oppdaterer verdiene
                Ruter gammelRute = await _db.Ruter.FindAsync(endretRute.Linjekode);

                gammelRute.Rutenavn        = endretRute.Rutenavn;
                gammelRute.Startpris       = endretRute.Startpris;
                gammelRute.TilleggPerStopp = endretRute.TilleggPerStopp;
                gammelRute.Kapasitet       = endretRute.Kapasitet;
                await _db.SaveChangesAsync();

                return(true);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(false);
            }
        }
Exemplo n.º 23
0
        // Hjelpemetode som beregner reisetiden fra startStopp til sluttStopp
        public async Task <int> BeregnReisetid(int startStopp, int sluttStopp, Ruter fellesRute)
        {
            try
            {
                List <int> minTilNesteStoppList = await _db.RuteStopp
                                                  .Where(rs => rs.StoppNummer >= startStopp && rs.StoppNummer < sluttStopp && rs.Rute == fellesRute)
                                                  .Select(rs => rs.MinutterTilNesteStopp)
                                                  .ToListAsync();

                int reisetid = 0;
                foreach (int minutter in minTilNesteStoppList)
                {
                    reisetid += minutter;
                }
                return(reisetid);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(-1);
            }
        }
Exemplo n.º 24
0
        // Hjelpemetode som finner Rutern to lister med Ruter har til felles
        public Ruter FinnFellesRute(List <Ruter> startStoppRuter, List <Ruter> sluttStoppRuter)
        {
            if (startStoppRuter.IsNullOrEmpty() || sluttStoppRuter.IsNullOrEmpty())
            {
                _log.LogInformation(" Ett eller begge oppgitte stopp har ingen rute");
                return(null);
            }
            Ruter fellesRute = new Ruter();

            foreach (Ruter startStoppRute in startStoppRuter)
            {
                foreach (Ruter sluttStoppRute in sluttStoppRuter)
                {
                    if (startStoppRute.Linjekode == sluttStoppRute.Linjekode)
                    {
                        fellesRute = startStoppRute;
                        return(fellesRute);
                    }
                }
            }
            return(fellesRute);
        }
Exemplo n.º 25
0
        public async Task <bool> NyAvgang(NyAvgang nyAvgang)
        {
            try
            {
                Ruter rute = await _db.Ruter.FindAsync(nyAvgang.Linjekode);

                Avganger avgang = new Avganger
                {
                    Avreise         = _hjelp.StringTilDateTime(nyAvgang.Dato, nyAvgang.Tidspunkt),
                    SolgteBilletter = nyAvgang.SolgteBilletter,
                    Rute            = rute
                };
                _db.Avganger.Add(avgang);
                await _db.SaveChangesAsync();

                return(true);
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(false);
            }
        }
Exemplo n.º 26
0
        public async Task <ActionResult> NyRute(Ruter rute)
        {
            if (string.IsNullOrEmpty(HttpContext.Session.GetString(_innlogget)))
            {
                return(Unauthorized("Ikke innlogget"));
            }
            if (ModelState.IsValid)
            {
                bool returOK = await _db.NyRute(rute);

                if (!returOK)
                {
                    melding = $"Ny Rute kunne ikke lagres med verdiene: {rute}";
                    _log.LogWarning(melding);
                    return(BadRequest(melding));
                }
                melding = $"Ny Rute ble lagres med verdiene: {rute}";
                _log.LogInformation(melding);
                return(Ok(melding));
            }
            _log.LogWarning(ugyldigValidering);
            return(BadRequest(ugyldigValidering));
        }
Exemplo n.º 27
0
        // Endrer avreisetiden hvis påstigning ikke er første stopp i ruten
        public async Task <DateTime> BeregnAvreisetid(DateTime avreise, int stoppNummer, Ruter fellesRute)
        {
            // Hvis påstigning er første stopp i ruten endres ikke avreise
            if (stoppNummer == 1)
            {
                return(avreise);
            }
            else
            {
                List <int> minTilNesteStoppList = await _db.RuteStopp
                                                  .Where(rs => rs.StoppNummer < stoppNummer && rs.Rute == fellesRute)
                                                  .Select(rs => rs.MinutterTilNesteStopp)
                                                  .ToListAsync();

                int totalTid = 0;
                foreach (int minutter in minTilNesteStoppList)
                {
                    totalTid += minutter;
                }
                return(avreise.AddMinutes(totalTid));
            }
        }
Exemplo n.º 28
0
        // 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 HentAlleRuterOK()
        {
            var Avgangstider = new Avgangstider {
                TidId = 1, Tid = new TimeSpan(12, 00, 00)
            };



            var Avgangstider1 = new Avgangstider {
                TidId = 2, Tid = new TimeSpan(14, 00, 00)
            };



            var listAvgang = new List <Avgangstider>();



            listAvgang.Add(Avgangstider);
            listAvgang.Add(Avgangstider1);



            var Stasjoner = new Stasjoner {
                StasjonId = 1, StasjonNavn = "Stovner"
            };



            var Buss = new Busser {
                BussId = 1, BussNavn = "Oslo"
            };



            var Rute = new Ruter {
                RuteId = 1, Pris = 10
            };



            var Avgang = new Avganger {
                StoppId = 1, Stopp = Stasjoner, Tider = listAvgang, Rute = Rute
            };



            var Avgang1 = new Avganger {
                StoppId = 2, Stopp = Stasjoner, Tider = listAvgang, Rute = Rute
            };



            var listAvganger = new List <Avganger>();



            listAvganger.Add(Avgang);
            listAvganger.Add(Avgang1);



            var bussrute1 = new Buss_Rute {
                Buss_RuteId = 1, TidFra = new TimeSpan(10, 00, 00), TidTil = new TimeSpan(16, 00, 00), Buss = Buss, Rute = Rute
            };

            var ruteliste = new List <Buss_Rute>();


            mockRep.Setup(k => k.HentAlleRuter()).ReturnsAsync(ruteliste);



            var billettController = new BillettController(mockRep.Object, mockLog.Object);



            mockSession[_loggetInn] = _loggetInn;
            mockHttpContext.Setup(s => s.Session).Returns(mockSession);
            billettController.ControllerContext.HttpContext = mockHttpContext.Object;



            // Act
            var resultat = await billettController.HentAlleRuter() as OkObjectResult;



            // Assert
            Assert.Equal((int)HttpStatusCode.OK, resultat.StatusCode);
            Assert.Equal <List <Buss_Rute> >((List <Buss_Rute>)resultat.Value, ruteliste);
        }
        public async Task <bool> LeggTilRute(Rute rute)
        {
            try
            {
                var Buss = new Busser();
                Buss.BussNavn = rute.BussNavn;
                var BussRetur = new Busser();
                BussRetur.BussNavn = rute.BussNavn + "_Retur";

                string[] avganger     = rute.Avganger.Split(",".ToCharArray());
                string[] avgangstider = rute.Tider.Split(",".ToCharArray());


                // stasjoner fra Oslo_Larvik
                // Stasjonene tar ikke for seg virkeligheten
                var stasjoner = new List <Stasjoner>
                {
                    new Stasjoner {
                        StasjonNavn = avganger[0]
                    },
                    new Stasjoner {
                        StasjonNavn = avganger[1]
                    },
                    new Stasjoner {
                        StasjonNavn = avganger[2]
                    },
                    new Stasjoner {
                        StasjonNavn = avganger[3]
                    },
                    new Stasjoner {
                        StasjonNavn = avganger[4]
                    },
                    new Stasjoner {
                        StasjonNavn = avganger[5]
                    }
                };

                var Last_Inserted_Id = _db.Avganger.OrderByDescending(u => u.StoppId).FirstOrDefault();
                int id = Last_Inserted_Id.StoppId;


                //avgangstider Til Buss Oslo_Larvik
                var avgang = new List <Avganger>
                {
                    new Avganger {
                        StoppId = id + 1, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[0].Split(":")[0]), int.Parse(avgangstider[0].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[0]
                    },
                    new Avganger {
                        StoppId = id + 2, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[1].Split(":")[0]), int.Parse(avgangstider[1].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[1]
                    },
                    new Avganger {
                        StoppId = id + 3, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[2].Split(":")[0]), int.Parse(avgangstider[2].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[2]
                    },
                    new Avganger {
                        StoppId = id + 4, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[3].Split(":")[0]), int.Parse(avgangstider[3].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[3]
                    },
                    new Avganger {
                        StoppId = id + 5, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[4].Split(":")[0]), int.Parse(avgangstider[4].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[4]
                    },
                    new Avganger {
                        StoppId = id + 6, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[5].Split(":")[0]), int.Parse(avgangstider[5].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[5]
                    },
                };

                var Rute = new Ruter
                {
                    Pris     = 100,
                    Avganger = avgang
                };

                var BussRute1 = new Buss_Rute
                {
                    TidFra = new TimeSpan(int.Parse(avgangstider[0].Split(":")[0]), int.Parse(avgangstider[0].Split(":")[1]), 00),
                    TidTil = new TimeSpan(int.Parse(avgangstider[5].Split(":")[0]), int.Parse(avgangstider[0].Split(":")[1]), 00),
                    Buss   = Buss,
                    Rute   = Rute
                };

                _db.Buss_rute.Add(BussRute1);


                var avgangRetur = new List <Avganger>
                {
                    new Avganger {
                        StoppId = id + 7, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[5].Split(":")[0]), int.Parse(avgangstider[5].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[5]
                    },
                    new Avganger {
                        StoppId = id + 8, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[4].Split(":")[0]), int.Parse(avgangstider[4].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[4]
                    },
                    new Avganger {
                        StoppId = id + 9, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[3].Split(":")[0]), int.Parse(avgangstider[3].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[3]
                    },
                    new Avganger {
                        StoppId = id + 10, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[2].Split(":")[0]), int.Parse(avgangstider[2].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[2]
                    },
                    new Avganger {
                        StoppId = id + 11, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[1].Split(":")[0]), int.Parse(avgangstider[1].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[1]
                    },
                    new Avganger {
                        StoppId = id + 12, Tider = new List <Avgangstider> {
                            new Avgangstider {
                                Tid = new TimeSpan(int.Parse(avgangstider[0].Split(":")[0]), int.Parse(avgangstider[0].Split(":")[1]), 00)
                            }
                        }, Stopp = stasjoner[0]
                    },
                };

                var RuteRetur = new Ruter
                {
                    Pris     = 100,
                    Avganger = avgangRetur
                };

                var BussRute1Retur = new Buss_Rute
                {
                    TidFra = new TimeSpan(int.Parse(avgangstider[5].Split(":")[0]), int.Parse(avgangstider[0].Split(":")[1]), 00),
                    TidTil = new TimeSpan(int.Parse(avgangstider[0].Split(":")[0]), int.Parse(avgangstider[0].Split(":")[1]), 00),
                    Buss   = BussRetur,
                    Rute   = RuteRetur
                };


                _db.Buss_rute.Add(BussRute1Retur);

                await _db.SaveChangesAsync();

                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }