public static Class Find(int Id)
        {
            SqlConnection conn = DB.Connection();
              conn.Open();
              SqlDataReader rdr;

              SqlCommand cmd = new SqlCommand("SELECT * FROM classes WHERE id = @ClassId;", conn);

              SqlParameter venueIdParameter = new SqlParameter();
              venueIdParameter.ParameterName = "@ClassId";
              venueIdParameter.Value = Id.ToString();

              cmd.Parameters.Add(venueIdParameter);
              rdr = cmd.ExecuteReader();

              Class foundClass = null;

              while(rdr.Read())
              {
            int foundId = rdr.GetInt32(0);
            string foundName = rdr.GetString(1);
            foundClass = new Class(foundName, foundId);
              }

              if (rdr != null)
              {
            rdr.Close();
              }
              if (conn != null)
              {
            conn.Close();
              }
              return foundClass;
        }
        public void Test_Find_FindsClassInDatabase()
        {
            Class testClass = new Class("Knight");
              testClass.Save();

              Class foundClass = Class.Find(testClass.GetId());

              Assert.Equal(testClass, foundClass);
        }
        public void Test_AddClass_AddsClassToItem()
        {
            Class testClass = new Class("Knight");
              testClass.Save();
              Item testItem = new Item("Sword", 0, "briefcase.jpg");
              testItem.Save();

              testItem.AddClass(testClass);

              List<Class> testList = new List<Class>{testClass};
              List<Class> result = testItem.GetClasses();

              Assert.Equal(testList, result);
        }
        public void Test_Delete_DeletesClassFromDatabase()
        {
            Class testClass1 = new Class("Knight");
              testClass1.Save();
              Class testClass2 = new Class("Berserker");
              testClass2.Save();

              Class.Delete(testClass1.GetId());

              List<Class> testList = new List<Class>{testClass2};
              List<Class> resultList = Class.GetAll();

              Assert.Equal(testList, resultList);
        }
        public void Test_AddItem_AddsItemToClass()
        {
            Item testItem = new Item("Sword", 0, "briefcase.jpg");
              testItem.Save();
              Class testClass = new Class("Knight");
              testClass.Save();

              testClass.AddItem(testItem);

              List<Item> testList = new List<Item>{testItem};
              List<Item> result = testClass.GetItems();

              Assert.Equal(testList, result);
        }
        public void Test_GetClasses_ReturnsAllItemsClasses()
        {
            Item testItem = new Item("sword", 0, "briefcase.jpg");
              testItem.Save();
              Class testClass1 = new Class("Knight");
              testClass1.Save();
              Class testClass2 = new Class("Berserker");
              testClass2.Save();

              testItem.AddClass(testClass1);
              testItem.AddClass(testClass2);

              List<Class> testList = new List<Class> {testClass1, testClass2};
              List<Class> result = testItem.GetClasses();

              Assert.Equal(testList, result);
        }
        public void Test_GetItems_ReturnsAllClassItems()
        {
            Class testClass = new Class("Knight");
              testClass.Save();
              Item testItem1 = new Item("Sword", 0, "briefcase.jpg");
              testItem1.Save();
              Item testItem2 = new Item("Shield", 0, "briefcase.jpg");
              testItem2.Save();

              testClass.AddItem(testItem1);
              testClass.AddItem(testItem2);

              List<Item> testList = new List<Item> {testItem1, testItem2};
              List<Item> result = testClass.GetItems();

              Assert.Equal(testList, result);
        }
        public void Test_Save_SavesToDatabase()
        {
            Class testClass = new Class("Knight");

              testClass.Save();
              List<Class> result = Class.GetAll();
              List<Class> testList = new List<Class>{testClass};

              Assert.Equal(testList, result);
        }
        public void Test_Update_UpdatesClassWithNewValues()
        {
            Class testClass = new Class("Knight");
              testClass.Save();

              testClass.SetName("Berserker");
              testClass.Update();

              Class resultClass = Class.Find(testClass.GetId());
              Class test = new Class("Berserker", testClass.GetId());

              Assert.Equal(test, resultClass);
        }
        public static List<Class> GetAll()
        {
            List<Class> AllClasses = new List<Class>{};

              SqlConnection conn = DB.Connection();
              conn.Open();
              SqlDataReader rdr;

              SqlCommand cmd = new SqlCommand("SELECT * FROM classes;", conn);
              rdr = cmd.ExecuteReader();

              while(rdr.Read())
              {
            int classId = rdr.GetInt32(0);
            string className = rdr.GetString(1);
            Class newClass = new Class(className, classId);
            AllClasses.Add(newClass);
              }
              if (rdr != null)
              {
            rdr.Close();
              }
              if (conn != null)
              {
            conn.Close();
              }
              return AllClasses;
        }
        public List<Class> GetClasses()
        {
            SqlConnection conn = DB.Connection();
              conn.Open();
              SqlDataReader rdr;

              SqlCommand cmd = new SqlCommand("SELECT classes.* FROM classes JOIN classes_items ON(classes.id = classes_items.class_id) JOIN items ON(classes_items.item_id = items.id) WHERE items.id = @ItemId;", conn);

              SqlParameter itemIdParameter = new SqlParameter();
              itemIdParameter.ParameterName = "@ItemId";
              itemIdParameter.Value = this.GetId();

              cmd.Parameters.Add(itemIdParameter);
              rdr = cmd.ExecuteReader();

              List<Class> allClasses = new List<Class> {};

              while (rdr.Read())
              {
            int thisClassId = rdr.GetInt32(0);
            string className = rdr.GetString(1);
            Class foundClass = new Class(className, thisClassId);
            allClasses.Add(foundClass);
              }
              if (rdr != null)
              {
            rdr.Close();
              }
              if (conn != null)
              {
            conn.Close();
              }
              return allClasses;
        }
        public void AddClass(Class newClass)
        {
            SqlConnection conn = DB.Connection();
              conn.Open();

              SqlCommand cmd = new SqlCommand("INSERT INTO classes_items (class_id, item_id) VALUES (@ClassId, @ItemId);", conn);

              SqlParameter classIdParameter = new SqlParameter();
              classIdParameter.ParameterName = "@ClassId";
              classIdParameter.Value = newClass.GetId();

              SqlParameter itemIdParameter = new SqlParameter();
              itemIdParameter.ParameterName = "@ItemId";
              itemIdParameter.Value = this.GetId();

              cmd.Parameters.Add(classIdParameter);
              cmd.Parameters.Add(itemIdParameter);

              cmd.ExecuteNonQuery();

              if (conn != null)
              {
            conn.Close();
              }
        }