public async void UpdateEmployeeSkill_Put()
        {
            var query = new EmployeeSkillsController(context);

            var newEmployeeSkill = new EmployeeSkills {
                Id = 9, SkillsId = 7, Experience = 1, UserId = "a1"
            };

            var newEmployeeSkillToReturn = new EmployeeSkillsToReturn
            {
                Id         = 9,
                SkillsId   = 7,
                Experience = 1,
                UserId     = "a1",
                Skills     = new Skills {
                    Id = 7, Name = "ASP.NET Core", Type = 2
                },
                UserInfo = new UserInfo {
                    Id = "a1", UserName = "******", FirstName = "Sarah", LastName = "West", Email = "*****@*****.**"
                }
            };

            // https://stackoverflow.com/questions/36856073/the-instance-of-entity-type-cannot-be-tracked-because-another-instance-of-this-t/42475617
            var local = context.EmployeeSkills.Local.Where(t => t.Id == 9).FirstOrDefault();

            if (local != null)
            {
                context.Entry(local).State = EntityState.Detached;           // only needed for xUnit testing
            }
            var result = await query.PutEmployeeSkills(9, newEmployeeSkill); // async

            var added = await query.GetEmployeeSkillById(9);                 // async

            var addedGoodRequest = Assert.IsType <EmployeeSkillsToReturn>(added.Value);

            Assert.Equal(newEmployeeSkill.Id, added.Value.Id);
            Assert.Equal(newEmployeeSkill.SkillsId, added.Value.SkillsId);
            Assert.Equal(newEmployeeSkill.Experience, added.Value.Experience);
            Assert.Equal(newEmployeeSkill.UserId, added.Value.UserId);
            Assert.Equal(Newtonsoft.Json.JsonConvert.SerializeObject(newEmployeeSkillToReturn), Newtonsoft.Json.JsonConvert.SerializeObject(addedGoodRequest));
            //Assert.Equal(newEmployeeSkillToReturn, addedGoodRequest);
            // not sure why the objects aren't considered to be the same
            //Assert.Equal(newEmployeeSkill, result); // No Content returned so can't check it without changing return value
        }
        public async void GetEmployeeSkillById()
        {
            var query = new EmployeeSkillsController(context);

            var result = await query.GetEmployeeSkillById(5);  // async

            var skill5 = new EmployeeSkillsToReturn {
                Id       = 5, SkillsId = 2, Experience = 3, UserId = "a2",
                UserInfo = new UserInfo {
                    Id = "a2", UserName = "******", FirstName = "John", LastName = "Doe", Email = "*****@*****.**", IsManager = null
                },
                Skills = new Skills {
                    Id = 2, Name = "Javascript", Type = 1
                }
            };

            Assert.Equal(2, result.Value.SkillsId);
            Assert.Equal(3, result.Value.Experience);
            Assert.Equal("a2", result.Value.UserId);
            Assert.Equal(Newtonsoft.Json.JsonConvert.SerializeObject(skill5), Newtonsoft.Json.JsonConvert.SerializeObject(result.Value));
            // not sure why the objects aren't considered to be the same
        }
        public async void PostExployeeSkills_Add()
        {
            var query = new EmployeeSkillsController(context);

            var newEmployeeSkill = new EmployeeSkills {
                Id = 10, SkillsId = 2, Experience = 3, UserId = "a3"
            };

            var newEmployeeSkillToReturn = new EmployeeSkillsToReturn
            {
                Id         = 10,
                SkillsId   = 2,
                Experience = 3,
                UserId     = "a3",
                Skills     = new Skills {
                    Id = 2, Name = "Javascript", Type = 1
                },
                UserInfo = new UserInfo {
                    Id = "a3", UserName = "******", FirstName = "Tim", LastName = "Wills", Email = "*****@*****.**", IsManager = null
                }
            };

            var result = await query.PostEmployeeSkills(newEmployeeSkill); // async

            var added = await query.GetEmployeeSkillById(10);              // async

            var resultGoodRequest = Assert.IsType <CreatedAtActionResult>(result.Result);
            var addedGoodRequest  = Assert.IsType <EmployeeSkillsToReturn>(added.Value);

            Assert.Equal(newEmployeeSkill.Id, added.Value.Id);
            Assert.Equal(newEmployeeSkill.SkillsId, added.Value.SkillsId);
            Assert.Equal(newEmployeeSkill.Experience, added.Value.Experience);
            Assert.Equal(newEmployeeSkill.UserId, added.Value.UserId);
            Assert.Equal(newEmployeeSkill, resultGoodRequest.Value);
            Assert.Equal(Newtonsoft.Json.JsonConvert.SerializeObject(newEmployeeSkillToReturn), Newtonsoft.Json.JsonConvert.SerializeObject(addedGoodRequest));
            //Assert.Equal(newEmployeeSkillToReturn, addedGoodRequest);
            // not sure why the objects aren't considered to be the same
        }