using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xunit;
using xUnitStudy.Dal;
using xUnitStudy.IDal;
using xUnitStudy.Model;

namespace xUnitStudy.WebApi.Test
{
    public class StudentDalTest
    {
        private IStudentDal dal;

        public StudentDalTest()
        {
            dal = new StudentDal();
        }

        [Fact]
        public void StudentsTest()
        {
            var students = dal.Students;
            Assert.NotNull(students);

            var allStudent = dal.GetAll();
            Assert.Same(students, allStudent);

            var myStudent = new Student() { Id = 5, Name = "55" };
            allStudent.Add(myStudent);

            dal.Students = allStudent;

            Assert.Contains(myStudent, dal.GetAll());
        }

        [Fact]
        public void AddStudentTest()
        {
            //已存在
            var student1 = new Student() {Id=1,Name="",Age=8 };
            var add = dal.AddStudent(student1);
            Assert.False(add.result);

            //不存在
            var student2 = new Student() { Id = 100, Name = "wanggaofeng", Age = 8 };
            var addStudent = dal.AddStudent(student2);
            Assert.True(addStudent.result);
            Assert.Equal(addStudent.student, student2);

            Assert.Equal(4, dal.Students.Count);
        }

        [Fact]
        public void GetAllTest()
        {
            var allStudents = dal.GetAll();

            Assert.Equal(3, allStudents.Count);
        }

        [Fact]
        public void GetStudentByIdTest()
        {
            var student = dal.GetStudentById(1);
            Assert.NotNull(student);
            Assert.Equal(1, student.Id);
            Assert.Equal("王高峰", student.Name);

            student = dal.GetStudentById(-1);
            Assert.Null(student);
        }

        [Fact]
        public void UpdateStudentTest()
        {
            var student = new Student()
            {
                Id = 1,
                Name = "小三",
                lever = 0,
                Age = 20,
            };

            var reslut = dal.UpdateStudent(student);
            Assert.True(reslut.result);

            Assert.True(reslut.student.Id == student.Id && reslut.student.Name == student.Name);

            student = new Student()
            {
                Id = -1,
                Name = "小三",
                lever = 0,
                Age = 20,
            };

            reslut = dal.UpdateStudent(student);
            Assert.False(reslut.result);
        }

        [Fact]
        public void DeleteStudentTest()
        {
            Assert.True(dal.DeleteStudent(1));
            Assert.False(dal.DeleteStudent(-1));

        }
    }
}