public static void Main()
        {
            //Create and initialize the database

            Database.SetInitializer(new MigrateDatabaseToLatestVersion
                <SchoolContext, School.Data.Migrations.Configuration>());

            var context = new SchoolContext();
            using (context)
            {
                var school = new TownSchool { Name = "School", Location = "Town" };
                var firstStudent = new Student { FirstName = "Ivan", LastName = "Ivanov", Age = 9, Grade = 4, TownSchool = school };
                var secondStudent = new Student { FirstName = "Peter", LastName = "Petrov", Age = 15, Grade = 9, TownSchool = school };
                var firstMark = new Mark { Subject = "Math", Value = 5, Student = firstStudent };
                var secondMark = new Mark { Subject = "History", Value = 4, Student = secondStudent };
                var thirdMark = new Mark { Subject = "IT", Value = 6, Student = secondStudent };

                context.Marks.Add(firstMark);
                context.Marks.Add(secondMark);
                context.Marks.Add(thirdMark);
                context.Students.Add(firstStudent);
                context.Students.Add(secondStudent);
                context.TownSchools.Add(school);
                context.SaveChanges();
            }
        }
 public void AddStudentTest()
 {
     var school = new TownSchool { Name = "School" };
     var student = new Student { FirstName = "Sam", LastName = "Chen", TownSchool = school };
     dbContext.Set<TownSchool>().Add(school);
     dbContext.Set<Student>().Add(student);
     dbContext.SaveChanges();
     Assert.IsTrue(student.StudentId > 0);
 }
        public static TownSchoolModel Convert(TownSchool school)
        {
            TownSchoolModel model = new TownSchoolModel
            {
                TownSchoolId = school.TownSchoolId,
                Name = school.Name,
                Location = school.Location,
                StudentsCount = school.Students.Count
            };

            return model;
        }
        public void GetAllStudentsTest()
        {
            var repository = new FakeStudentRepository();
            var school = new TownSchool { Name = "School", Location = "Town" };
            var student = new Student { FirstName = "Ivan", LastName = "Ivanov", Age = 9, Grade = 4, TownSchool = school };
            repository.entities.Add(student);
            var server = new InMemoryHttpServer("http://localhost/");

            var response = server.CreateGetRequest("api/students");

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            Assert.IsNotNull(response.Content);
        }
        public void GetStudentInvalidTest()
        {
            var repository = new FakeStudentRepository();
            var school = new TownSchool { Name = "School", Location = "Town" };
            var firstStudent = new Student { FirstName = "Ivan", LastName = "Ivanov", Age = 9, Grade = 4, TownSchool = school };
            var secondStudent = new Student { FirstName = "Peter", LastName = "Petrov", Age = 15, Grade = 9, TownSchool = school };
            repository.entities.Add(firstStudent);
            repository.entities.Add(secondStudent);
            var server = new InMemoryHttpServer("http://localhost/");

            var response = server.CreateGetRequest("api/students/3");

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
        public void AddStudentInDatabaseTest()
        {
            var school = new TownSchool { Name = "School" };
            var student = new Student { FirstName = "Sam", LastName = "Chen", TownSchool = school };
            dbContext.Set<TownSchool>().Add(school);
            dbContext.SaveChanges();

            var createdStudent = this.studentsRepository.Add(student);
            var foundStudent = this.dbContext.Set<Student>().Find(createdStudent.StudentId);
            Assert.IsNotNull(foundStudent);
            Assert.AreEqual("Sam", foundStudent.FirstName);
            Assert.AreEqual("Chen", foundStudent.LastName);
            Assert.AreEqual(school.TownSchoolId, foundStudent.TownSchoolId);
        }
        public static TownSchoolFullModel Convert(TownSchool school)
        {
            TownSchoolFullModel model = new TownSchoolFullModel
            {
                TownSchoolId = school.TownSchoolId,
                Name = school.Name,
                Location = school.Location,
                StudentsCount = school.Students.Count,
                Students = (
                from student in school.Students
                select StudentModel.Convert(student)).ToList()
            };

            return model;
        }
 public void AddSeveralStudentTest()
 {
     var school = new TownSchool { Name = "School" };
     var studentA = new Student { FirstName = "Sam", LastName = "Chen", TownSchool = school };
     var studentB = new Student { FirstName = "Tom", LastName = "Tom", TownSchool = school };
     var studentC = new Student { FirstName = "Ben", LastName = "Ben", TownSchool = school };
     dbContext.Set<TownSchool>().Add(school);
     dbContext.Set<Student>().Add(studentA);
     dbContext.Set<Student>().Add(studentB);
     dbContext.Set<Student>().Add(studentC);
     dbContext.SaveChanges();
     Assert.IsTrue(studentA.StudentId > 0);
     Assert.IsTrue(studentB.StudentId > 0);
     Assert.IsTrue(studentC.StudentId > 0);
 }
        public void GetAllStudentsControllerTest()
        {
            var repository = new FakeStudentRepository();
            var school = new TownSchool { Name = "School", Location = "Town" };
            var student = new Student { FirstName = "Ivan", LastName = "Ivanov", Age = 9, Grade = 4, TownSchool = school };

            repository.entities.Add(student);
            var controller = new StudentsController(repository);
            var studentsModels = controller.GetAll();

            Assert.IsTrue(studentsModels.Count() == 1);
            Assert.AreEqual(student.FirstName, studentsModels.First().FirstName);
            Assert.AreEqual(student.LastName, studentsModels.First().LastName);
            Assert.AreEqual(student.Age, studentsModels.First().Age);
            Assert.AreEqual(student.Grade, studentsModels.First().Grade);
        }
        public void GetAllSeveralStudentsControllerTest()
        {
            var repository = new FakeStudentRepository();
            var school = new TownSchool { Name = "School", Location = "Town" };
            var firstStudent = new Student { FirstName = "Ivan", LastName = "Ivanov", Age = 9, Grade = 4, TownSchool = school };
            var secondStudent = new Student { FirstName = "Peter", LastName = "Petrov", Age = 15, Grade = 9, TownSchool = school };
            var thirdStudent = new Student { FirstName = "Todor", LastName = "Todorov", Age = 7, Grade = 1, TownSchool = school };

            repository.entities.Add(firstStudent);
            repository.entities.Add(secondStudent);
            repository.entities.Add(thirdStudent);
            var controller = new StudentsController(repository);
            var studentsModels = controller.GetAll();

            Assert.IsTrue(studentsModels.Count() == 3);
        }
        public void DeleteStudentsControllerTest()
        {
            var repository = new FakeStudentRepository();
            var school = new TownSchool { Name = "School", Location = "Town" };
            var firstStudent = new Student { FirstName = "Ivan", LastName = "Ivanov", Age = 9, Grade = 4, TownSchool = school };
            var secondStudent = new Student { FirstName = "Peter", LastName = "Petrov", Age = 15, Grade = 9, TownSchool = school };
            var thirdStudent = new Student { FirstName = "Todor", LastName = "Todorov", Age = 7, Grade = 1, TownSchool = school };

            var controller = new StudentsController(repository);
            var firstStudentModel = controller.Post(firstStudent);
            var secondStudentModel = controller.Post(secondStudent);
            var thirdStudentModel = controller.Post(thirdStudent);
            controller.Delete(3);

            Assert.IsTrue(controller.GetAll().Count() == 2);
            Assert.IsTrue(controller.GetAll().Count(x => x.FirstName == thirdStudent.FirstName) == 0);
        }
        public void GetStudentBySubjectMarkTest()
        {
            var repository = new FakeStudentRepository();
            var school = new TownSchool { Name = "School", Location = "Town" };
            var firstStudent = new Student { FirstName = "Ivan", LastName = "Ivanov", Age = 9, Grade = 4, TownSchool = school };
            var secondStudent = new Student { FirstName = "Peter", LastName = "Petrov", Age = 15, Grade = 9, TownSchool = school };
            firstStudent.Marks.Add(new Mark { Subject = "Math", Value = 5, Student = firstStudent });
            secondStudent.Marks.Add(new Mark { Subject = "History", Value = 4, Student = secondStudent });
            secondStudent.Marks.Add(new Mark { Subject = "IT", Value = 6, Student = secondStudent });
            repository.entities.Add(firstStudent);
            repository.entities.Add(secondStudent);
            var server = new InMemoryHttpServer("http://localhost/");

            var response = server.CreateGetRequest("api/students?subject=Math&value=5");

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            Assert.IsNotNull(response.Content);
        }
        public void GetByIdStudentsControllerTest()
        {
            var repository = new FakeStudentRepository();

            var school = new TownSchool { Name = "School", Location = "Town" };
            var firstStudent = new Student { FirstName = "Ivan", LastName = "Ivanov", Age = 9, Grade = 4, TownSchool = school };
            var secondStudent = new Student { FirstName = "Peter", LastName = "Petrov", Age = 15, Grade = 9, TownSchool = school };
            var thirdStudent = new Student { FirstName = "Todor", LastName = "Todorov", Age = 7, Grade = 1, TownSchool = school };

            repository.entities.Add(firstStudent);
            repository.entities.Add(secondStudent);
            repository.entities.Add(thirdStudent);
            var controller = new StudentsController(repository);
            var studentModel = controller.Get(1);

            Assert.AreEqual(secondStudent.FirstName, studentModel.FirstName);
            Assert.AreEqual(secondStudent.LastName, studentModel.LastName);
            Assert.AreEqual(secondStudent.Age, studentModel.Age);
            Assert.AreEqual(secondStudent.Grade, studentModel.Grade);
        }
        // POST api/artists
        //[HttpPost]
        public HttpResponseMessage Post(TownSchool model)
        {
            if (model.Name == null)
            {
                var errResponse = this.Request.CreateErrorResponse(
                    HttpStatusCode.BadRequest, "TownSchool Name could not be null");
                throw new HttpResponseException(errResponse);
            }

            var entity = this.townSchoolRepository.Add(model);
            var response =
                Request.CreateResponse(HttpStatusCode.Created, entity);
            response.Headers.Location = new Uri(Url.Link("DefaultApi",
                new { id = entity.TownSchoolId }));

            return response;
        }
        // PUT api/artists/5
        //[HttpPut]
        public HttpResponseMessage Put(int id, TownSchool model)
        {
            if (model.Name == null)
            {
                var errResponse = this.Request.CreateErrorResponse(
                    HttpStatusCode.BadRequest, "TownSchool Name could not be null");
                throw new HttpResponseException(errResponse);
            }

            var entity = this.townSchoolRepository.Get(id);

            if (entity == null)
            {
                var errResponse = this.Request.CreateErrorResponse(
                    HttpStatusCode.BadRequest, string.Format("There is no element with id {0}", id));
                throw new HttpResponseException(errResponse);
            }

            entity = this.townSchoolRepository.Update(id, model);
            var response =
                Request.CreateResponse(HttpStatusCode.OK, entity);
            response.Headers.Location = new Uri(Url.Link("DefaultApi",
                new { id = entity.TownSchoolId }));

            return response;
        }
        public void PostStudentInvalidNameTest()
        {
            var repository = new FakeStudentRepository();
            var school = new TownSchool { Name = "School", Location = "Town" };
            var student = new Student { FirstName = null, LastName = "Ivanov", Age = 9, Grade = 4, TownSchool = school };

            var server = new InMemoryHttpServer("http://localhost/");

            var response = server.CreatePostRequest("api/students", student);

            Assert.AreEqual(HttpStatusCode.InternalServerError, response.StatusCode);
        }
        public void PostStudentsControllerTest()
        {
            var repository = new FakeStudentRepository();
            var school = new TownSchool { Name = "School", Location = "Town" };
            var student = new Student { FirstName = "Ivan", LastName = "Ivanov", Age = 9, Grade = 4, TownSchool = school };

            var controller = new StudentsController(repository);
            var studentModel = controller.Post(student).Content.ReadAsStringAsync().Result;
            Student studentDeserialized = JsonConvert.DeserializeObject<Student>(studentModel);

            Assert.IsTrue(controller.GetAll().Count() == 1);
            Assert.IsNotNull(studentDeserialized);
            Assert.AreEqual(student.FirstName, studentDeserialized.FirstName);
            Assert.AreEqual(student.LastName, studentDeserialized.LastName);
            Assert.AreEqual(student.Age, studentDeserialized.Age);
            Assert.AreEqual(student.Grade, studentDeserialized.Grade);
        }
        public void DeleteStudentIdTest()
        {
            var school = new TownSchool { Name = "School" };
            var student = new Student { FirstName = "Sam", LastName = "Chen", TownSchool = school };
            dbContext.Set<TownSchool>().Add(school);
            dbContext.Set<Student>().Add(student);
            dbContext.SaveChanges();

            var count = dbContext.Set<Student>().Count();
            this.studentsRepository.Delete(student.StudentId);
            var foundStudent = this.dbContext.Set<Student>().Find(student.StudentId);
            Assert.IsNull(foundStudent);
            Assert.IsTrue(dbContext.Set<Student>().Count() == count - 1);
        }
        public void GetStudentTest()
        {
            var school = new TownSchool { Name = "School" };
            var student = new Student { FirstName = "Sam", LastName = "Chen", Age = 9, Grade = 4, TownSchool = school };
            dbContext.Set<TownSchool>().Add(school);
            dbContext.Set<Student>().Add(student);
            dbContext.SaveChanges();

            var studentId = student.StudentId;
            var gettedStudent = this.studentsRepository.Get(studentId);
            Assert.IsNotNull(gettedStudent);
            Assert.AreEqual(student.StudentId, gettedStudent.StudentId);
            Assert.AreEqual(9, gettedStudent.Age);
            Assert.AreEqual(4, gettedStudent.Grade);
            Assert.AreEqual("Sam", gettedStudent.FirstName);
            Assert.AreEqual("Chen", gettedStudent.LastName);
            Assert.AreEqual(student.TownSchoolId, gettedStudent.TownSchoolId);
        }
        public void UpdeteStudentMarksTest()
        {
            var school = new TownSchool { Name = "School" };
            var student = new Student { FirstName = "Sam", LastName = "Chen", Age = 9, Grade = 4, TownSchool = school };
            var mark = new Mark { Subject = "Math", Value = 5, Student = student };
            dbContext.Set<TownSchool>().Add(school);
            dbContext.Set<Student>().Add(student);
            dbContext.Set<Mark>().Add(mark);
            dbContext.SaveChanges();

            var studentId = student.StudentId;
            var schoolId = student.TownSchoolId;
            student.Marks.First().Subject = "IT";
            var updatedStudent = this.studentsRepository.Update(studentId, student);
            Assert.IsNotNull(updatedStudent);
            Assert.AreEqual(1, updatedStudent.Marks.Count);
            Assert.AreEqual("IT", updatedStudent.Marks.First().Subject);
            Assert.AreEqual(5, updatedStudent.Marks.First().Value);
        }
        public void UpdateStudentTest()
        {
            var school = new TownSchool { Name = "School" };
            var student = new Student { FirstName = "Sam", LastName = "Chen", TownSchool = school };
            dbContext.Set<TownSchool>().Add(school);
            dbContext.Set<Student>().Add(student);
            dbContext.SaveChanges();

            var studentId = student.StudentId;
            var schoolId = student.TownSchoolId;
            student.FirstName = "Tom";
            var updatedStudent = this.studentsRepository.Update(studentId, student);
            Assert.IsNotNull(updatedStudent);
            Assert.AreEqual(studentId, updatedStudent.StudentId);
            Assert.AreEqual("Tom", updatedStudent.FirstName);
            Assert.AreEqual("Chen", updatedStudent.LastName);
            Assert.AreEqual(schoolId, updatedStudent.TownSchoolId);
        }
        public void UpdateFullStudentTest()
        {
            var school = new TownSchool { Name = "School" };
            var student = new Student { FirstName = "Sam", LastName = "Chen", Age = 9, Grade = 4, TownSchool = school };
            dbContext.Set<TownSchool>().Add(school);
            dbContext.Set<Student>().Add(student);
            dbContext.SaveChanges();

            student.Age = 15;
            var updatedStudent = this.studentsRepository.Update(student.StudentId, student);
            Assert.IsNotNull(updatedStudent);
            Assert.AreEqual(15, updatedStudent.Age);
            Assert.AreEqual(4, updatedStudent.Grade);
        }