public bool UpdateChallenge(Challenge challenge)
        {
            Data.Entities.Challenge cha = Mapper.Map(challenge);
            if (cha == null)
            {
                return(false);
            }

            Data.Entities.Challenge dbcha;
            if ((dbcha = _db.Challenge.Find(cha.Id)) != null)
            {
                _db.Entry(dbcha).State = Microsoft.EntityFrameworkCore.EntityState.Detached;
            }
            foreach (var side in cha.Sides)
            {
                Data.Entities.Sides rmSide;
                if ((rmSide = _db.Sides.Find(side.Id)) != null)
                {
                    _db.Entry(rmSide).State = Microsoft.EntityFrameworkCore.EntityState.Detached;
                }
            }
            _db.Challenge.Update(cha);
            _db.SaveChanges();
            return(true);
        }
        public bool DeleteChallenge(Challenge challenge)
        {
            Data.Entities.Challenge cha = Mapper.Map(challenge);
            if (cha == null)
            {
                return(false);
            }

            List <Data.Entities.Sides> sides = _db.Sides.ToList();

            foreach (var side in sides)
            {
                if (side.Challengeid == cha.Id)
                {
                    _db.Sides.Remove(side);
                }
            }
            _db.SaveChanges();
            Data.Entities.Challenge dbcha;
            if ((dbcha = _db.Challenge.Find(cha.Id)) != null)
            {
                _db.Entry(dbcha).State = Microsoft.EntityFrameworkCore.EntityState.Detached;
            }
            cha.Sides.Clear();
            _db.Challenge.Remove(cha);
            _db.SaveChanges();
            return(true);
        }
        public void DataToDomainTest()
        {
            //Arrange
            Data.Entities.Sides sideA = new Data.Entities.Sides();
            Data.Entities.Team  teamA = new Data.Entities.Team();
            teamA.Teamname  = "Good";
            teamA.Id        = 4;
            sideA.Team      = teamA;
            sideA.Winreport = true;


            Data.Entities.Sides sideB = new Data.Entities.Sides();
            Data.Entities.Team  teamB = new Data.Entities.Team();
            teamB.Teamname = "Bad";
            teamB.Id       = 7;
            sideB.Team     = teamB;

            Data.Entities.Sides sideC = new Data.Entities.Sides();

            Data.Entities.Challenge ch1 = new Data.Entities.Challenge();
            ch1.Sides.Add(sideA);
            ch1.Sides.Add(sideB);
            ch1.GameModeId = 3;

            Data.Entities.Challenge ch2 = new Data.Entities.Challenge();
            ch2.Sides.Add(sideA);
            ch2.Sides.Add(sideB);
            ch2.Id         = 5;
            ch2.GameModeId = 4;

            Data.Entities.Challenge ch3 = new Data.Entities.Challenge();
            ch3.Sides.Add(sideA);
            ch3.Sides.Add(sideB);
            ch3.Sides.Add(sideC);

            Data.Entities.Challenge ch4 = new Data.Entities.Challenge();


            //Act
            Domain.Challenge r1 = Mapper.Map(ch1);
            Domain.Challenge r2 = Mapper.Map(ch2);
            Domain.Challenge r3 = Mapper.Map(ch3);
            Domain.Challenge r4 = Mapper.Map(ch4);

            //Arrange
            Assert.AreEqual(0, r1.id);
            Assert.AreEqual("Good", r1.Team1.teamname);
            Assert.AreEqual("Bad", r1.Team2.teamname);
            Assert.AreEqual(4, r1.Team1.id);
            Assert.AreEqual(7, r1.Team2.id);
            Assert.AreEqual(3, r1.GameModeId);

            Assert.AreEqual(5, r2.id);

            Assert.IsNull(r3);
            Assert.IsNull(r4);
        }
 public Challenge GetChallengeById(int id)
 {
     Data.Entities.Challenge cha = _db.Challenge.Where(c => c.Id == id).Include("Sides.Team").FirstOrDefault();
     if (cha == null)
     {
         return(null);
     }
     Domain.Challenge outCha = Mapper.Map(cha);
     return(outCha);
 }
        public bool AddChallenge(Challenge challenge)
        {
            Data.Entities.Challenge cha = Mapper.Map(challenge);
            if (cha == null)
            {
                return(false);
            }

            if (_db.Challenge.Find(cha.Id) != null)
            {
                return(false);
            }

            _db.Challenge.Add(cha);
            _db.SaveChanges();
            return(true);
        }
        ////Todo Complete
        public static Domain.Challenge Map(Data.Entities.Challenge deChallenge)
        {
            if (deChallenge.Sides.Count != 2)
            {
                return(null);
            }
            List <Domain.Team> teams   = new List <Domain.Team>();
            List <bool?>       results = new List <bool?>();

            foreach (var side in deChallenge.Sides)
            {
                teams.Add(Map(side.Team));
                results.Add(side.Winreport);
            }
            Domain.Challenge dmChallenge = new Domain.Challenge(deChallenge.Id, teams[0], teams[1], (int)deChallenge.GameModeId, results[0], results[1]);
            dmChallenge.sideAId = deChallenge.Sides.ToList()[0].Id;
            dmChallenge.sideBId = deChallenge.Sides.ToList()[1].Id;
            return(dmChallenge);
        }
        public void TestDomainToData()
        {
            //Arrange
            Domain.Team t1 = new Domain.Team();
            Domain.Team t2 = new Domain.Team();
            t1.id = 5;
            t2.id = 1;

            //Create a fresh challenge to add to the database
            Domain.Challenge ch1 = new Domain.Challenge(t1, t2, 1);

            //Update an existing challenge to the database
            Domain.Challenge ch2 = new Domain.Challenge(1, t1, t2, 1, null, null);
            ch2.sideAId = 2;
            ch2.sideBId = 5;
            Domain.Challenge ch3 = new Domain.Challenge(1, t1, t2, 1, true, null);
            Domain.Challenge ch4 = new Domain.Challenge(1, t1, t2, 1, null, true);
            Domain.Challenge ch5 = new Domain.Challenge(1, t1, t2, 1, true, false);


            //Act
            Data.Entities.Challenge r1 = Mapper.Map(ch1);
            Data.Entities.Challenge r2 = Mapper.Map(ch2);
            Data.Entities.Challenge r3 = Mapper.Map(ch3);
            Data.Entities.Challenge r4 = Mapper.Map(ch4);
            Data.Entities.Challenge r5 = Mapper.Map(ch5);

            //Assert
            //ch1
            Assert.AreEqual(0, r1.Id);
            int i = 0;

            foreach (var side in r1.Sides)
            {
                if (i == 0)
                {
                    Assert.AreEqual(t1.id, side.Teamid);
                }
                if (i == 1)
                {
                    Assert.AreEqual(t2.id, side.Teamid);
                }
                i++;
            }
            Assert.AreEqual(1, r1.GameModeId);


            //ch2
            Assert.AreEqual(1, r2.Id);
            i = 0;
            foreach (var side in r2.Sides)
            {
                Assert.IsNull(side.Winreport);
                if (i == 0)
                {
                    Assert.AreEqual(t1.id, side.Teamid);
                }
                if (i == 1)
                {
                    Assert.AreEqual(t2.id, side.Teamid);
                }
                i++;
            }
            Assert.AreEqual(1, r2.GameModeId);

            //ch3
            Assert.AreEqual(1, r3.Id);
            i = 0;
            foreach (var side in r3.Sides)
            {
                if (i == 0)
                {
                    Assert.AreEqual(t1.id, side.Teamid);
                    Assert.IsTrue((bool)side.Winreport);
                }
                if (i == 1)
                {
                    Assert.AreEqual(t2.id, side.Teamid);
                    Assert.IsNull(side.Winreport);
                }
                i++;
            }
            Assert.AreEqual(1, r3.GameModeId);

            //ch4
            Assert.AreEqual(1, r4.Id);
            i = 0;
            foreach (var side in r4.Sides)
            {
                if (i == 0)
                {
                    Assert.AreEqual(t1.id, side.Teamid);
                    Assert.IsNull(side.Winreport);
                }
                if (i == 1)
                {
                    Assert.AreEqual(t2.id, side.Teamid);
                    Assert.IsTrue((bool)side.Winreport);
                }
                i++;
            }
            Assert.AreEqual(1, r4.GameModeId);

            //ch5
            Assert.AreEqual(1, r5.Id);
            i = 0;
            foreach (var side in r5.Sides)
            {
                if (i == 0)
                {
                    Assert.AreEqual(t1.id, side.Teamid);
                    Assert.IsTrue((bool)side.Winreport);
                }
                if (i == 1)
                {
                    Assert.AreEqual(t2.id, side.Teamid);
                    Assert.IsFalse((bool)side.Winreport);
                }
                i++;
            }
            Assert.AreEqual(1, r5.GameModeId);
        }